123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728317293173031731317323173331734317353173631737317383173931740317413174231743317443174531746317473174831749317503175131752317533175431755317563175731758317593176031761317623176331764317653176631767317683176931770317713177231773317743177531776317773177831779317803178131782317833178431785317863178731788317893179031791317923179331794317953179631797317983179931800318013180231803318043180531806318073180831809318103181131812318133181431815318163181731818318193182031821318223182331824318253182631827318283182931830318313183231833318343183531836318373183831839318403184131842318433184431845318463184731848318493185031851318523185331854318553185631857318583185931860318613186231863318643186531866318673186831869318703187131872318733187431875318763187731878318793188031881318823188331884318853188631887318883188931890318913189231893318943189531896318973189831899319003190131902319033190431905319063190731908319093191031911319123191331914319153191631917319183191931920319213192231923319243192531926319273192831929319303193131932319333193431935319363193731938319393194031941319423194331944319453194631947319483194931950319513195231953319543195531956319573195831959319603196131962319633196431965319663196731968319693197031971319723197331974319753197631977319783197931980319813198231983319843198531986319873198831989319903199131992319933199431995319963199731998319993200032001320023200332004320053200632007320083200932010320113201232013320143201532016320173201832019320203202132022320233202432025320263202732028320293203032031320323203332034320353203632037320383203932040320413204232043320443204532046320473204832049320503205132052320533205432055320563205732058320593206032061320623206332064320653206632067320683206932070320713207232073320743207532076320773207832079320803208132082320833208432085320863208732088320893209032091320923209332094320953209632097320983209932100321013210232103321043210532106321073210832109321103211132112321133211432115321163211732118321193212032121321223212332124321253212632127321283212932130321313213232133321343213532136321373213832139321403214132142321433214432145321463214732148321493215032151321523215332154321553215632157321583215932160321613216232163321643216532166321673216832169321703217132172321733217432175321763217732178321793218032181321823218332184321853218632187321883218932190321913219232193321943219532196321973219832199322003220132202322033220432205322063220732208322093221032211322123221332214322153221632217322183221932220322213222232223322243222532226322273222832229322303223132232322333223432235322363223732238322393224032241322423224332244322453224632247322483224932250322513225232253322543225532256322573225832259322603226132262322633226432265322663226732268322693227032271322723227332274322753227632277322783227932280322813228232283322843228532286322873228832289322903229132292322933229432295322963229732298322993230032301323023230332304323053230632307323083230932310323113231232313323143231532316323173231832319323203232132322323233232432325323263232732328323293233032331323323233332334323353233632337323383233932340323413234232343323443234532346323473234832349323503235132352323533235432355323563235732358323593236032361323623236332364323653236632367323683236932370323713237232373323743237532376323773237832379323803238132382323833238432385323863238732388323893239032391323923239332394323953239632397323983239932400324013240232403324043240532406324073240832409324103241132412324133241432415324163241732418324193242032421324223242332424324253242632427324283242932430324313243232433324343243532436324373243832439324403244132442324433244432445324463244732448324493245032451324523245332454324553245632457324583245932460324613246232463324643246532466324673246832469324703247132472324733247432475324763247732478324793248032481324823248332484324853248632487324883248932490324913249232493324943249532496324973249832499325003250132502325033250432505325063250732508325093251032511325123251332514325153251632517325183251932520325213252232523325243252532526325273252832529325303253132532325333253432535325363253732538325393254032541325423254332544325453254632547325483254932550325513255232553325543255532556325573255832559325603256132562325633256432565325663256732568325693257032571325723257332574325753257632577325783257932580325813258232583325843258532586325873258832589325903259132592325933259432595325963259732598325993260032601326023260332604326053260632607326083260932610326113261232613326143261532616326173261832619326203262132622326233262432625326263262732628326293263032631326323263332634326353263632637326383263932640326413264232643326443264532646326473264832649326503265132652326533265432655326563265732658326593266032661326623266332664326653266632667326683266932670326713267232673326743267532676326773267832679326803268132682326833268432685326863268732688326893269032691326923269332694326953269632697326983269932700327013270232703327043270532706327073270832709327103271132712327133271432715327163271732718327193272032721327223272332724327253272632727327283272932730327313273232733327343273532736327373273832739327403274132742327433274432745327463274732748327493275032751327523275332754327553275632757327583275932760327613276232763327643276532766327673276832769327703277132772327733277432775327763277732778327793278032781327823278332784327853278632787327883278932790327913279232793327943279532796327973279832799328003280132802328033280432805328063280732808328093281032811328123281332814328153281632817328183281932820328213282232823328243282532826328273282832829328303283132832328333283432835328363283732838328393284032841328423284332844328453284632847328483284932850328513285232853328543285532856328573285832859328603286132862328633286432865328663286732868328693287032871328723287332874328753287632877328783287932880328813288232883328843288532886328873288832889328903289132892328933289432895328963289732898328993290032901329023290332904329053290632907329083290932910329113291232913329143291532916329173291832919329203292132922329233292432925329263292732928329293293032931329323293332934329353293632937329383293932940329413294232943329443294532946329473294832949329503295132952329533295432955329563295732958329593296032961329623296332964329653296632967329683296932970329713297232973329743297532976329773297832979329803298132982329833298432985329863298732988329893299032991329923299332994329953299632997329983299933000330013300233003330043300533006330073300833009330103301133012330133301433015330163301733018330193302033021330223302333024330253302633027330283302933030330313303233033330343303533036330373303833039330403304133042330433304433045330463304733048330493305033051330523305333054330553305633057330583305933060330613306233063330643306533066330673306833069330703307133072330733307433075330763307733078330793308033081330823308333084330853308633087330883308933090330913309233093330943309533096330973309833099331003310133102331033310433105331063310733108331093311033111331123311333114331153311633117331183311933120331213312233123331243312533126331273312833129331303313133132331333313433135331363313733138331393314033141331423314333144331453314633147331483314933150331513315233153331543315533156331573315833159331603316133162331633316433165331663316733168331693317033171331723317333174331753317633177331783317933180331813318233183331843318533186331873318833189331903319133192331933319433195331963319733198331993320033201332023320333204332053320633207332083320933210332113321233213332143321533216332173321833219332203322133222332233322433225332263322733228332293323033231332323323333234332353323633237332383323933240332413324233243332443324533246332473324833249332503325133252332533325433255332563325733258332593326033261332623326333264332653326633267332683326933270332713327233273332743327533276332773327833279332803328133282332833328433285332863328733288332893329033291332923329333294332953329633297332983329933300333013330233303333043330533306333073330833309333103331133312333133331433315333163331733318333193332033321333223332333324333253332633327333283332933330333313333233333333343333533336333373333833339333403334133342333433334433345333463334733348333493335033351333523335333354333553335633357333583335933360333613336233363333643336533366333673336833369333703337133372333733337433375333763337733378333793338033381333823338333384333853338633387333883338933390333913339233393333943339533396333973339833399334003340133402334033340433405334063340733408334093341033411334123341333414334153341633417334183341933420334213342233423334243342533426334273342833429334303343133432334333343433435334363343733438334393344033441334423344333444334453344633447334483344933450334513345233453334543345533456334573345833459334603346133462334633346433465334663346733468334693347033471334723347333474334753347633477334783347933480334813348233483334843348533486334873348833489334903349133492334933349433495334963349733498334993350033501335023350333504335053350633507335083350933510335113351233513335143351533516335173351833519335203352133522335233352433525335263352733528335293353033531335323353333534335353353633537335383353933540335413354233543335443354533546335473354833549335503355133552335533355433555335563355733558335593356033561335623356333564335653356633567335683356933570335713357233573335743357533576335773357833579335803358133582335833358433585335863358733588335893359033591335923359333594335953359633597335983359933600336013360233603336043360533606336073360833609336103361133612336133361433615336163361733618336193362033621336223362333624336253362633627336283362933630336313363233633336343363533636336373363833639336403364133642336433364433645336463364733648336493365033651336523365333654336553365633657336583365933660336613366233663336643366533666336673366833669336703367133672336733367433675336763367733678336793368033681336823368333684336853368633687336883368933690336913369233693336943369533696336973369833699337003370133702337033370433705337063370733708337093371033711337123371333714337153371633717337183371933720337213372233723337243372533726337273372833729337303373133732337333373433735337363373733738337393374033741337423374333744337453374633747337483374933750337513375233753337543375533756337573375833759337603376133762337633376433765337663376733768337693377033771337723377333774337753377633777337783377933780337813378233783337843378533786337873378833789337903379133792337933379433795337963379733798337993380033801338023380333804338053380633807338083380933810338113381233813338143381533816338173381833819338203382133822338233382433825338263382733828338293383033831338323383333834338353383633837338383383933840338413384233843338443384533846338473384833849338503385133852338533385433855338563385733858338593386033861338623386333864338653386633867338683386933870338713387233873338743387533876338773387833879338803388133882338833388433885338863388733888338893389033891338923389333894338953389633897338983389933900339013390233903339043390533906339073390833909339103391133912339133391433915339163391733918339193392033921339223392333924339253392633927339283392933930339313393233933339343393533936339373393833939339403394133942339433394433945339463394733948339493395033951339523395333954339553395633957339583395933960339613396233963339643396533966339673396833969339703397133972339733397433975339763397733978339793398033981339823398333984339853398633987339883398933990339913399233993339943399533996339973399833999340003400134002340033400434005340063400734008340093401034011340123401334014340153401634017340183401934020340213402234023340243402534026340273402834029340303403134032340333403434035340363403734038340393404034041340423404334044340453404634047340483404934050340513405234053340543405534056340573405834059340603406134062340633406434065340663406734068340693407034071340723407334074340753407634077340783407934080340813408234083340843408534086340873408834089340903409134092340933409434095340963409734098340993410034101341023410334104341053410634107341083410934110341113411234113341143411534116341173411834119341203412134122341233412434125341263412734128341293413034131341323413334134341353413634137341383413934140341413414234143341443414534146341473414834149341503415134152341533415434155341563415734158341593416034161341623416334164341653416634167341683416934170341713417234173341743417534176341773417834179341803418134182341833418434185341863418734188341893419034191341923419334194341953419634197341983419934200342013420234203342043420534206342073420834209342103421134212342133421434215342163421734218342193422034221342223422334224342253422634227342283422934230342313423234233342343423534236342373423834239342403424134242342433424434245342463424734248342493425034251342523425334254342553425634257342583425934260342613426234263342643426534266342673426834269342703427134272342733427434275342763427734278342793428034281342823428334284342853428634287342883428934290342913429234293342943429534296342973429834299343003430134302343033430434305343063430734308343093431034311343123431334314343153431634317343183431934320343213432234323343243432534326343273432834329343303433134332343333433434335343363433734338343393434034341343423434334344343453434634347343483434934350343513435234353343543435534356343573435834359343603436134362343633436434365343663436734368343693437034371343723437334374343753437634377343783437934380343813438234383343843438534386343873438834389343903439134392343933439434395343963439734398343993440034401344023440334404344053440634407344083440934410344113441234413344143441534416344173441834419344203442134422344233442434425344263442734428344293443034431344323443334434344353443634437344383443934440344413444234443344443444534446344473444834449344503445134452344533445434455344563445734458344593446034461344623446334464344653446634467344683446934470344713447234473344743447534476344773447834479344803448134482344833448434485344863448734488344893449034491344923449334494344953449634497344983449934500345013450234503345043450534506345073450834509345103451134512345133451434515345163451734518345193452034521345223452334524345253452634527345283452934530345313453234533345343453534536345373453834539345403454134542345433454434545345463454734548345493455034551345523455334554345553455634557345583455934560345613456234563345643456534566345673456834569345703457134572345733457434575345763457734578345793458034581345823458334584345853458634587345883458934590345913459234593345943459534596345973459834599346003460134602346033460434605346063460734608346093461034611346123461334614346153461634617346183461934620346213462234623346243462534626346273462834629346303463134632346333463434635346363463734638346393464034641346423464334644346453464634647346483464934650346513465234653346543465534656346573465834659346603466134662346633466434665346663466734668346693467034671346723467334674346753467634677346783467934680346813468234683346843468534686346873468834689346903469134692346933469434695346963469734698346993470034701347023470334704347053470634707347083470934710347113471234713347143471534716347173471834719347203472134722347233472434725347263472734728347293473034731347323473334734347353473634737347383473934740347413474234743347443474534746347473474834749347503475134752347533475434755347563475734758347593476034761347623476334764347653476634767347683476934770347713477234773347743477534776347773477834779347803478134782347833478434785347863478734788347893479034791347923479334794347953479634797347983479934800348013480234803348043480534806348073480834809348103481134812348133481434815348163481734818348193482034821348223482334824348253482634827348283482934830348313483234833348343483534836348373483834839348403484134842348433484434845348463484734848348493485034851348523485334854348553485634857348583485934860348613486234863348643486534866348673486834869348703487134872348733487434875348763487734878348793488034881348823488334884348853488634887348883488934890348913489234893348943489534896348973489834899349003490134902349033490434905349063490734908349093491034911349123491334914349153491634917349183491934920349213492234923349243492534926349273492834929349303493134932349333493434935349363493734938349393494034941349423494334944349453494634947349483494934950349513495234953349543495534956349573495834959349603496134962349633496434965349663496734968349693497034971349723497334974349753497634977349783497934980349813498234983349843498534986349873498834989349903499134992349933499434995349963499734998349993500035001350023500335004350053500635007350083500935010350113501235013350143501535016350173501835019350203502135022350233502435025350263502735028350293503035031350323503335034350353503635037350383503935040350413504235043350443504535046350473504835049350503505135052350533505435055350563505735058350593506035061350623506335064350653506635067350683506935070350713507235073350743507535076350773507835079350803508135082350833508435085350863508735088350893509035091350923509335094350953509635097350983509935100351013510235103351043510535106351073510835109351103511135112351133511435115351163511735118351193512035121351223512335124351253512635127351283512935130351313513235133351343513535136351373513835139351403514135142351433514435145351463514735148351493515035151351523515335154351553515635157351583515935160351613516235163351643516535166351673516835169351703517135172351733517435175351763517735178351793518035181351823518335184351853518635187351883518935190351913519235193351943519535196351973519835199352003520135202352033520435205352063520735208352093521035211352123521335214352153521635217352183521935220352213522235223352243522535226352273522835229352303523135232352333523435235352363523735238352393524035241352423524335244352453524635247352483524935250352513525235253352543525535256352573525835259352603526135262352633526435265352663526735268352693527035271352723527335274352753527635277352783527935280352813528235283352843528535286352873528835289352903529135292352933529435295352963529735298352993530035301353023530335304353053530635307353083530935310353113531235313353143531535316353173531835319353203532135322353233532435325353263532735328353293533035331353323533335334353353533635337353383533935340353413534235343353443534535346353473534835349353503535135352353533535435355353563535735358353593536035361353623536335364353653536635367353683536935370353713537235373353743537535376353773537835379353803538135382353833538435385353863538735388353893539035391353923539335394353953539635397353983539935400354013540235403354043540535406354073540835409354103541135412354133541435415354163541735418354193542035421354223542335424354253542635427354283542935430354313543235433354343543535436354373543835439354403544135442354433544435445354463544735448354493545035451354523545335454354553545635457354583545935460354613546235463354643546535466354673546835469354703547135472354733547435475354763547735478354793548035481354823548335484354853548635487354883548935490354913549235493354943549535496354973549835499355003550135502355033550435505355063550735508355093551035511355123551335514355153551635517355183551935520355213552235523355243552535526355273552835529355303553135532355333553435535355363553735538355393554035541355423554335544355453554635547355483554935550355513555235553355543555535556355573555835559355603556135562355633556435565355663556735568355693557035571355723557335574355753557635577355783557935580355813558235583355843558535586355873558835589355903559135592355933559435595355963559735598355993560035601356023560335604356053560635607356083560935610356113561235613356143561535616356173561835619356203562135622356233562435625356263562735628356293563035631356323563335634356353563635637356383563935640356413564235643356443564535646356473564835649356503565135652356533565435655356563565735658356593566035661356623566335664356653566635667356683566935670356713567235673356743567535676356773567835679356803568135682356833568435685356863568735688356893569035691356923569335694356953569635697356983569935700357013570235703357043570535706357073570835709357103571135712357133571435715357163571735718357193572035721357223572335724357253572635727357283572935730357313573235733357343573535736357373573835739357403574135742357433574435745357463574735748357493575035751357523575335754357553575635757357583575935760357613576235763357643576535766357673576835769357703577135772357733577435775357763577735778357793578035781357823578335784357853578635787357883578935790357913579235793357943579535796357973579835799358003580135802358033580435805358063580735808358093581035811358123581335814358153581635817358183581935820358213582235823358243582535826358273582835829358303583135832358333583435835358363583735838358393584035841358423584335844358453584635847358483584935850358513585235853358543585535856358573585835859358603586135862358633586435865358663586735868358693587035871358723587335874358753587635877358783587935880358813588235883358843588535886358873588835889358903589135892358933589435895358963589735898358993590035901359023590335904359053590635907359083590935910359113591235913359143591535916359173591835919359203592135922359233592435925359263592735928359293593035931359323593335934359353593635937359383593935940359413594235943359443594535946359473594835949359503595135952359533595435955359563595735958359593596035961359623596335964359653596635967359683596935970359713597235973359743597535976359773597835979359803598135982359833598435985359863598735988359893599035991359923599335994359953599635997359983599936000360013600236003360043600536006360073600836009360103601136012360133601436015360163601736018360193602036021360223602336024360253602636027360283602936030360313603236033360343603536036360373603836039360403604136042360433604436045360463604736048360493605036051360523605336054360553605636057360583605936060360613606236063360643606536066360673606836069360703607136072360733607436075360763607736078360793608036081360823608336084360853608636087360883608936090360913609236093360943609536096360973609836099361003610136102361033610436105361063610736108361093611036111361123611336114361153611636117361183611936120361213612236123361243612536126361273612836129361303613136132361333613436135361363613736138361393614036141361423614336144361453614636147361483614936150361513615236153361543615536156361573615836159361603616136162361633616436165361663616736168361693617036171361723617336174361753617636177361783617936180361813618236183361843618536186361873618836189361903619136192361933619436195361963619736198361993620036201362023620336204362053620636207362083620936210362113621236213362143621536216362173621836219362203622136222362233622436225362263622736228362293623036231362323623336234362353623636237362383623936240362413624236243362443624536246362473624836249362503625136252362533625436255362563625736258362593626036261362623626336264362653626636267362683626936270362713627236273362743627536276362773627836279362803628136282362833628436285362863628736288362893629036291362923629336294362953629636297362983629936300363013630236303363043630536306363073630836309363103631136312363133631436315363163631736318363193632036321363223632336324363253632636327363283632936330363313633236333363343633536336363373633836339363403634136342363433634436345363463634736348363493635036351363523635336354363553635636357363583635936360363613636236363363643636536366363673636836369363703637136372363733637436375363763637736378363793638036381363823638336384363853638636387363883638936390363913639236393363943639536396363973639836399364003640136402364033640436405364063640736408364093641036411364123641336414364153641636417364183641936420364213642236423364243642536426364273642836429364303643136432364333643436435364363643736438364393644036441364423644336444364453644636447364483644936450364513645236453364543645536456364573645836459364603646136462364633646436465364663646736468364693647036471364723647336474364753647636477364783647936480364813648236483364843648536486364873648836489364903649136492364933649436495364963649736498364993650036501365023650336504365053650636507365083650936510365113651236513365143651536516365173651836519365203652136522365233652436525365263652736528365293653036531365323653336534365353653636537365383653936540365413654236543365443654536546365473654836549365503655136552365533655436555365563655736558365593656036561365623656336564365653656636567365683656936570365713657236573365743657536576365773657836579365803658136582365833658436585365863658736588365893659036591365923659336594365953659636597365983659936600366013660236603366043660536606366073660836609366103661136612366133661436615366163661736618366193662036621366223662336624366253662636627366283662936630366313663236633366343663536636366373663836639366403664136642366433664436645366463664736648366493665036651366523665336654366553665636657366583665936660366613666236663366643666536666366673666836669366703667136672366733667436675366763667736678366793668036681366823668336684366853668636687366883668936690366913669236693366943669536696366973669836699367003670136702367033670436705367063670736708367093671036711367123671336714367153671636717367183671936720367213672236723367243672536726367273672836729367303673136732367333673436735367363673736738367393674036741367423674336744367453674636747367483674936750367513675236753367543675536756367573675836759367603676136762367633676436765367663676736768367693677036771367723677336774367753677636777367783677936780367813678236783367843678536786367873678836789367903679136792367933679436795367963679736798367993680036801368023680336804368053680636807368083680936810368113681236813368143681536816368173681836819368203682136822368233682436825368263682736828368293683036831368323683336834368353683636837368383683936840368413684236843368443684536846368473684836849368503685136852368533685436855368563685736858368593686036861368623686336864368653686636867368683686936870368713687236873368743687536876368773687836879368803688136882368833688436885368863688736888368893689036891368923689336894368953689636897368983689936900369013690236903369043690536906369073690836909369103691136912369133691436915369163691736918369193692036921369223692336924369253692636927369283692936930369313693236933369343693536936369373693836939369403694136942369433694436945369463694736948369493695036951369523695336954369553695636957369583695936960369613696236963369643696536966369673696836969369703697136972369733697436975369763697736978369793698036981369823698336984369853698636987369883698936990369913699236993369943699536996369973699836999370003700137002370033700437005370063700737008370093701037011370123701337014370153701637017370183701937020370213702237023370243702537026370273702837029370303703137032370333703437035370363703737038370393704037041370423704337044370453704637047370483704937050370513705237053370543705537056370573705837059370603706137062370633706437065370663706737068370693707037071370723707337074370753707637077370783707937080370813708237083370843708537086370873708837089370903709137092370933709437095370963709737098370993710037101371023710337104371053710637107371083710937110371113711237113371143711537116371173711837119371203712137122371233712437125371263712737128371293713037131371323713337134371353713637137371383713937140371413714237143371443714537146371473714837149371503715137152371533715437155371563715737158371593716037161371623716337164371653716637167371683716937170371713717237173371743717537176371773717837179371803718137182371833718437185371863718737188371893719037191371923719337194371953719637197371983719937200372013720237203372043720537206372073720837209372103721137212372133721437215372163721737218372193722037221372223722337224372253722637227372283722937230372313723237233372343723537236372373723837239372403724137242372433724437245372463724737248372493725037251372523725337254372553725637257372583725937260372613726237263372643726537266372673726837269372703727137272372733727437275372763727737278372793728037281372823728337284372853728637287372883728937290372913729237293372943729537296372973729837299373003730137302373033730437305373063730737308373093731037311373123731337314373153731637317373183731937320373213732237323373243732537326373273732837329373303733137332373333733437335373363733737338373393734037341373423734337344373453734637347373483734937350373513735237353373543735537356373573735837359373603736137362373633736437365373663736737368373693737037371373723737337374373753737637377373783737937380373813738237383373843738537386373873738837389373903739137392373933739437395373963739737398373993740037401374023740337404374053740637407374083740937410374113741237413374143741537416374173741837419374203742137422374233742437425374263742737428374293743037431374323743337434374353743637437374383743937440374413744237443374443744537446374473744837449374503745137452374533745437455374563745737458374593746037461374623746337464374653746637467374683746937470374713747237473374743747537476374773747837479374803748137482374833748437485374863748737488374893749037491374923749337494374953749637497374983749937500375013750237503375043750537506375073750837509375103751137512375133751437515375163751737518375193752037521375223752337524375253752637527375283752937530375313753237533375343753537536375373753837539375403754137542375433754437545375463754737548375493755037551375523755337554375553755637557375583755937560375613756237563375643756537566375673756837569375703757137572375733757437575375763757737578375793758037581375823758337584375853758637587375883758937590375913759237593375943759537596375973759837599376003760137602376033760437605376063760737608376093761037611376123761337614376153761637617376183761937620376213762237623376243762537626376273762837629376303763137632376333763437635376363763737638376393764037641376423764337644376453764637647376483764937650376513765237653376543765537656376573765837659376603766137662376633766437665376663766737668376693767037671376723767337674376753767637677376783767937680376813768237683376843768537686376873768837689376903769137692376933769437695376963769737698376993770037701377023770337704377053770637707377083770937710377113771237713377143771537716377173771837719377203772137722377233772437725377263772737728377293773037731377323773337734377353773637737377383773937740377413774237743377443774537746377473774837749377503775137752377533775437755377563775737758377593776037761377623776337764377653776637767377683776937770377713777237773377743777537776377773777837779377803778137782377833778437785377863778737788377893779037791377923779337794377953779637797377983779937800378013780237803378043780537806378073780837809378103781137812378133781437815378163781737818378193782037821378223782337824378253782637827378283782937830378313783237833378343783537836378373783837839378403784137842378433784437845378463784737848378493785037851378523785337854378553785637857378583785937860378613786237863378643786537866378673786837869378703787137872378733787437875378763787737878378793788037881378823788337884378853788637887378883788937890378913789237893378943789537896378973789837899379003790137902379033790437905379063790737908379093791037911379123791337914379153791637917379183791937920379213792237923379243792537926379273792837929379303793137932379333793437935379363793737938379393794037941379423794337944379453794637947379483794937950379513795237953379543795537956379573795837959379603796137962379633796437965379663796737968379693797037971379723797337974379753797637977379783797937980379813798237983379843798537986379873798837989379903799137992379933799437995379963799737998379993800038001380023800338004380053800638007380083800938010380113801238013380143801538016380173801838019380203802138022380233802438025380263802738028380293803038031380323803338034380353803638037380383803938040380413804238043380443804538046380473804838049380503805138052380533805438055380563805738058380593806038061380623806338064380653806638067380683806938070380713807238073380743807538076380773807838079380803808138082380833808438085380863808738088380893809038091380923809338094380953809638097380983809938100381013810238103381043810538106381073810838109381103811138112381133811438115381163811738118381193812038121381223812338124381253812638127381283812938130381313813238133381343813538136381373813838139381403814138142381433814438145381463814738148381493815038151381523815338154381553815638157381583815938160381613816238163381643816538166381673816838169381703817138172381733817438175381763817738178381793818038181381823818338184381853818638187381883818938190381913819238193381943819538196381973819838199382003820138202382033820438205382063820738208382093821038211382123821338214382153821638217382183821938220382213822238223382243822538226382273822838229382303823138232382333823438235382363823738238382393824038241382423824338244382453824638247382483824938250382513825238253382543825538256382573825838259382603826138262382633826438265382663826738268382693827038271382723827338274382753827638277382783827938280382813828238283382843828538286382873828838289382903829138292382933829438295382963829738298382993830038301383023830338304383053830638307383083830938310383113831238313383143831538316383173831838319383203832138322383233832438325383263832738328383293833038331383323833338334383353833638337383383833938340383413834238343383443834538346383473834838349383503835138352383533835438355383563835738358383593836038361383623836338364383653836638367383683836938370383713837238373383743837538376383773837838379383803838138382383833838438385383863838738388383893839038391383923839338394383953839638397383983839938400384013840238403384043840538406384073840838409384103841138412384133841438415384163841738418384193842038421384223842338424384253842638427384283842938430384313843238433384343843538436384373843838439384403844138442384433844438445384463844738448384493845038451384523845338454384553845638457384583845938460384613846238463384643846538466384673846838469384703847138472384733847438475384763847738478384793848038481384823848338484384853848638487384883848938490384913849238493384943849538496384973849838499385003850138502385033850438505385063850738508385093851038511385123851338514385153851638517385183851938520385213852238523385243852538526385273852838529385303853138532385333853438535385363853738538385393854038541385423854338544385453854638547385483854938550385513855238553385543855538556385573855838559385603856138562385633856438565385663856738568385693857038571385723857338574385753857638577385783857938580385813858238583385843858538586385873858838589385903859138592385933859438595385963859738598385993860038601386023860338604386053860638607386083860938610386113861238613386143861538616386173861838619386203862138622386233862438625386263862738628386293863038631386323863338634386353863638637386383863938640386413864238643386443864538646386473864838649386503865138652386533865438655386563865738658386593866038661386623866338664386653866638667386683866938670386713867238673386743867538676386773867838679386803868138682386833868438685386863868738688386893869038691386923869338694386953869638697386983869938700387013870238703387043870538706387073870838709387103871138712387133871438715387163871738718387193872038721387223872338724387253872638727387283872938730387313873238733387343873538736387373873838739387403874138742387433874438745387463874738748387493875038751387523875338754387553875638757387583875938760387613876238763387643876538766387673876838769387703877138772387733877438775387763877738778387793878038781387823878338784387853878638787387883878938790387913879238793387943879538796387973879838799388003880138802388033880438805388063880738808388093881038811388123881338814388153881638817388183881938820388213882238823388243882538826388273882838829388303883138832388333883438835388363883738838388393884038841388423884338844388453884638847388483884938850388513885238853388543885538856388573885838859388603886138862388633886438865388663886738868388693887038871388723887338874388753887638877388783887938880388813888238883388843888538886388873888838889388903889138892388933889438895388963889738898388993890038901389023890338904389053890638907389083890938910389113891238913389143891538916389173891838919389203892138922389233892438925389263892738928389293893038931389323893338934389353893638937389383893938940389413894238943389443894538946389473894838949389503895138952389533895438955389563895738958389593896038961389623896338964389653896638967389683896938970389713897238973389743897538976389773897838979389803898138982389833898438985389863898738988389893899038991389923899338994389953899638997389983899939000390013900239003390043900539006390073900839009390103901139012390133901439015390163901739018390193902039021390223902339024390253902639027390283902939030390313903239033390343903539036390373903839039390403904139042390433904439045390463904739048390493905039051390523905339054390553905639057390583905939060390613906239063390643906539066390673906839069390703907139072390733907439075390763907739078390793908039081390823908339084390853908639087390883908939090390913909239093390943909539096390973909839099391003910139102391033910439105391063910739108391093911039111391123911339114391153911639117391183911939120391213912239123391243912539126391273912839129391303913139132391333913439135391363913739138391393914039141391423914339144391453914639147391483914939150391513915239153391543915539156391573915839159391603916139162391633916439165391663916739168391693917039171391723917339174391753917639177391783917939180391813918239183391843918539186391873918839189391903919139192391933919439195391963919739198391993920039201392023920339204392053920639207392083920939210392113921239213392143921539216392173921839219392203922139222392233922439225392263922739228392293923039231392323923339234392353923639237392383923939240392413924239243392443924539246392473924839249392503925139252392533925439255392563925739258392593926039261392623926339264392653926639267392683926939270392713927239273392743927539276392773927839279392803928139282392833928439285392863928739288392893929039291392923929339294392953929639297392983929939300393013930239303393043930539306393073930839309393103931139312393133931439315393163931739318393193932039321393223932339324393253932639327393283932939330393313933239333393343933539336393373933839339393403934139342393433934439345393463934739348393493935039351393523935339354393553935639357393583935939360393613936239363393643936539366393673936839369393703937139372393733937439375393763937739378393793938039381393823938339384393853938639387393883938939390393913939239393393943939539396393973939839399394003940139402394033940439405394063940739408394093941039411394123941339414394153941639417394183941939420394213942239423394243942539426394273942839429394303943139432394333943439435394363943739438394393944039441394423944339444394453944639447394483944939450394513945239453394543945539456394573945839459394603946139462394633946439465394663946739468394693947039471394723947339474394753947639477394783947939480394813948239483394843948539486394873948839489394903949139492394933949439495394963949739498394993950039501395023950339504395053950639507395083950939510395113951239513395143951539516395173951839519395203952139522395233952439525395263952739528395293953039531395323953339534395353953639537395383953939540395413954239543395443954539546395473954839549395503955139552395533955439555395563955739558395593956039561395623956339564395653956639567395683956939570395713957239573395743957539576395773957839579395803958139582395833958439585395863958739588395893959039591395923959339594395953959639597395983959939600396013960239603396043960539606396073960839609396103961139612396133961439615396163961739618396193962039621396223962339624396253962639627396283962939630396313963239633396343963539636396373963839639396403964139642396433964439645396463964739648396493965039651396523965339654396553965639657396583965939660396613966239663396643966539666396673966839669396703967139672396733967439675396763967739678396793968039681396823968339684396853968639687396883968939690396913969239693396943969539696396973969839699397003970139702397033970439705397063970739708397093971039711397123971339714397153971639717397183971939720397213972239723397243972539726397273972839729397303973139732397333973439735397363973739738397393974039741397423974339744397453974639747397483974939750397513975239753397543975539756397573975839759397603976139762397633976439765397663976739768397693977039771397723977339774397753977639777397783977939780397813978239783397843978539786397873978839789397903979139792397933979439795397963979739798397993980039801398023980339804398053980639807398083980939810398113981239813398143981539816398173981839819398203982139822398233982439825398263982739828398293983039831398323983339834398353983639837398383983939840398413984239843398443984539846398473984839849398503985139852398533985439855398563985739858398593986039861398623986339864398653986639867398683986939870398713987239873398743987539876398773987839879398803988139882398833988439885398863988739888398893989039891398923989339894398953989639897398983989939900399013990239903399043990539906399073990839909399103991139912399133991439915399163991739918399193992039921399223992339924399253992639927399283992939930399313993239933399343993539936399373993839939399403994139942399433994439945399463994739948399493995039951399523995339954399553995639957399583995939960399613996239963399643996539966399673996839969399703997139972399733997439975399763997739978399793998039981399823998339984399853998639987399883998939990399913999239993399943999539996399973999839999400004000140002400034000440005400064000740008400094001040011400124001340014400154001640017400184001940020400214002240023400244002540026400274002840029400304003140032400334003440035400364003740038400394004040041400424004340044400454004640047400484004940050400514005240053400544005540056400574005840059400604006140062400634006440065400664006740068400694007040071400724007340074400754007640077400784007940080400814008240083400844008540086400874008840089400904009140092400934009440095400964009740098400994010040101401024010340104401054010640107401084010940110401114011240113401144011540116401174011840119401204012140122401234012440125401264012740128401294013040131401324013340134401354013640137401384013940140401414014240143401444014540146401474014840149401504015140152401534015440155401564015740158401594016040161401624016340164401654016640167401684016940170401714017240173401744017540176401774017840179401804018140182401834018440185401864018740188401894019040191401924019340194401954019640197401984019940200402014020240203402044020540206402074020840209402104021140212402134021440215402164021740218402194022040221402224022340224402254022640227402284022940230402314023240233402344023540236402374023840239402404024140242402434024440245402464024740248402494025040251402524025340254402554025640257402584025940260402614026240263402644026540266402674026840269402704027140272402734027440275402764027740278402794028040281402824028340284402854028640287402884028940290402914029240293402944029540296402974029840299403004030140302403034030440305403064030740308403094031040311403124031340314403154031640317403184031940320403214032240323403244032540326403274032840329403304033140332403334033440335403364033740338403394034040341403424034340344403454034640347403484034940350403514035240353403544035540356403574035840359403604036140362403634036440365403664036740368403694037040371403724037340374403754037640377403784037940380403814038240383403844038540386403874038840389403904039140392403934039440395403964039740398403994040040401404024040340404404054040640407404084040940410404114041240413404144041540416404174041840419404204042140422404234042440425404264042740428404294043040431404324043340434404354043640437404384043940440404414044240443404444044540446404474044840449404504045140452404534045440455404564045740458404594046040461404624046340464404654046640467404684046940470404714047240473404744047540476404774047840479404804048140482404834048440485404864048740488404894049040491404924049340494404954049640497404984049940500405014050240503405044050540506405074050840509405104051140512405134051440515405164051740518405194052040521405224052340524405254052640527405284052940530405314053240533405344053540536405374053840539405404054140542405434054440545405464054740548405494055040551405524055340554405554055640557405584055940560405614056240563405644056540566405674056840569405704057140572405734057440575405764057740578405794058040581405824058340584405854058640587405884058940590405914059240593405944059540596405974059840599406004060140602406034060440605406064060740608406094061040611406124061340614406154061640617406184061940620406214062240623406244062540626406274062840629406304063140632406334063440635406364063740638406394064040641406424064340644406454064640647406484064940650406514065240653406544065540656406574065840659406604066140662406634066440665406664066740668406694067040671406724067340674406754067640677406784067940680406814068240683406844068540686406874068840689406904069140692406934069440695406964069740698406994070040701407024070340704407054070640707407084070940710407114071240713407144071540716407174071840719407204072140722407234072440725407264072740728407294073040731407324073340734407354073640737407384073940740407414074240743407444074540746407474074840749407504075140752407534075440755407564075740758407594076040761407624076340764407654076640767407684076940770407714077240773407744077540776407774077840779407804078140782407834078440785407864078740788407894079040791407924079340794407954079640797407984079940800408014080240803408044080540806408074080840809408104081140812408134081440815408164081740818408194082040821408224082340824408254082640827408284082940830408314083240833408344083540836408374083840839408404084140842408434084440845408464084740848408494085040851408524085340854408554085640857408584085940860408614086240863408644086540866408674086840869408704087140872408734087440875408764087740878408794088040881408824088340884408854088640887408884088940890408914089240893408944089540896408974089840899409004090140902409034090440905409064090740908409094091040911409124091340914409154091640917409184091940920409214092240923409244092540926409274092840929409304093140932409334093440935409364093740938409394094040941409424094340944409454094640947409484094940950409514095240953409544095540956409574095840959409604096140962409634096440965409664096740968409694097040971409724097340974409754097640977409784097940980409814098240983409844098540986409874098840989409904099140992409934099440995409964099740998409994100041001410024100341004410054100641007410084100941010410114101241013410144101541016410174101841019410204102141022410234102441025410264102741028410294103041031410324103341034410354103641037410384103941040410414104241043410444104541046410474104841049410504105141052410534105441055410564105741058410594106041061410624106341064410654106641067410684106941070410714107241073410744107541076410774107841079410804108141082410834108441085410864108741088410894109041091410924109341094410954109641097410984109941100411014110241103411044110541106411074110841109411104111141112411134111441115411164111741118411194112041121411224112341124411254112641127411284112941130411314113241133411344113541136411374113841139411404114141142411434114441145411464114741148411494115041151411524115341154411554115641157411584115941160411614116241163411644116541166411674116841169411704117141172411734117441175411764117741178411794118041181411824118341184411854118641187411884118941190411914119241193411944119541196411974119841199412004120141202412034120441205412064120741208412094121041211412124121341214412154121641217412184121941220412214122241223412244122541226412274122841229412304123141232412334123441235412364123741238412394124041241412424124341244412454124641247412484124941250412514125241253412544125541256412574125841259412604126141262412634126441265412664126741268412694127041271412724127341274412754127641277412784127941280412814128241283412844128541286412874128841289412904129141292412934129441295412964129741298412994130041301413024130341304413054130641307413084130941310413114131241313413144131541316413174131841319413204132141322413234132441325413264132741328413294133041331413324133341334413354133641337413384133941340413414134241343413444134541346413474134841349413504135141352413534135441355413564135741358413594136041361413624136341364413654136641367413684136941370413714137241373413744137541376413774137841379413804138141382413834138441385413864138741388413894139041391413924139341394413954139641397413984139941400414014140241403414044140541406414074140841409414104141141412414134141441415414164141741418414194142041421414224142341424414254142641427414284142941430414314143241433414344143541436414374143841439414404144141442414434144441445414464144741448414494145041451414524145341454414554145641457414584145941460414614146241463414644146541466414674146841469414704147141472414734147441475414764147741478414794148041481414824148341484414854148641487414884148941490414914149241493414944149541496414974149841499415004150141502415034150441505415064150741508415094151041511415124151341514415154151641517415184151941520415214152241523415244152541526415274152841529415304153141532415334153441535415364153741538415394154041541415424154341544415454154641547415484154941550415514155241553415544155541556415574155841559415604156141562415634156441565415664156741568415694157041571415724157341574415754157641577415784157941580415814158241583415844158541586415874158841589415904159141592415934159441595415964159741598415994160041601416024160341604416054160641607416084160941610416114161241613416144161541616416174161841619416204162141622416234162441625416264162741628416294163041631416324163341634416354163641637416384163941640416414164241643416444164541646416474164841649416504165141652416534165441655416564165741658416594166041661416624166341664416654166641667416684166941670416714167241673416744167541676416774167841679416804168141682416834168441685416864168741688416894169041691416924169341694416954169641697416984169941700417014170241703417044170541706417074170841709417104171141712417134171441715417164171741718417194172041721417224172341724417254172641727417284172941730417314173241733417344173541736417374173841739417404174141742417434174441745417464174741748417494175041751417524175341754417554175641757417584175941760417614176241763417644176541766417674176841769417704177141772417734177441775417764177741778417794178041781417824178341784417854178641787417884178941790417914179241793417944179541796417974179841799418004180141802418034180441805418064180741808418094181041811418124181341814418154181641817418184181941820418214182241823418244182541826418274182841829418304183141832418334183441835418364183741838418394184041841418424184341844418454184641847418484184941850418514185241853418544185541856418574185841859418604186141862418634186441865418664186741868418694187041871418724187341874418754187641877418784187941880418814188241883418844188541886418874188841889418904189141892418934189441895418964189741898418994190041901419024190341904419054190641907419084190941910419114191241913419144191541916419174191841919419204192141922419234192441925419264192741928419294193041931419324193341934419354193641937419384193941940419414194241943419444194541946419474194841949419504195141952419534195441955419564195741958419594196041961419624196341964419654196641967419684196941970419714197241973419744197541976419774197841979419804198141982419834198441985419864198741988419894199041991419924199341994419954199641997419984199942000420014200242003420044200542006420074200842009420104201142012420134201442015420164201742018420194202042021420224202342024420254202642027420284202942030420314203242033420344203542036420374203842039420404204142042420434204442045420464204742048420494205042051420524205342054420554205642057420584205942060420614206242063420644206542066420674206842069420704207142072420734207442075420764207742078420794208042081420824208342084420854208642087420884208942090420914209242093420944209542096420974209842099421004210142102421034210442105421064210742108421094211042111421124211342114421154211642117421184211942120421214212242123421244212542126421274212842129421304213142132421334213442135421364213742138421394214042141421424214342144421454214642147421484214942150421514215242153421544215542156421574215842159421604216142162421634216442165421664216742168421694217042171421724217342174421754217642177421784217942180421814218242183421844218542186421874218842189421904219142192421934219442195421964219742198421994220042201422024220342204422054220642207422084220942210422114221242213422144221542216422174221842219422204222142222422234222442225422264222742228422294223042231422324223342234422354223642237422384223942240422414224242243422444224542246422474224842249422504225142252422534225442255422564225742258422594226042261422624226342264422654226642267422684226942270422714227242273422744227542276422774227842279422804228142282422834228442285422864228742288422894229042291422924229342294422954229642297422984229942300423014230242303423044230542306423074230842309423104231142312423134231442315423164231742318423194232042321423224232342324423254232642327423284232942330423314233242333423344233542336423374233842339423404234142342423434234442345423464234742348423494235042351423524235342354423554235642357423584235942360423614236242363423644236542366423674236842369423704237142372423734237442375423764237742378423794238042381423824238342384423854238642387423884238942390423914239242393423944239542396423974239842399424004240142402424034240442405424064240742408424094241042411424124241342414424154241642417424184241942420424214242242423424244242542426424274242842429424304243142432424334243442435424364243742438424394244042441424424244342444424454244642447424484244942450424514245242453424544245542456424574245842459424604246142462424634246442465424664246742468424694247042471424724247342474424754247642477424784247942480424814248242483424844248542486424874248842489424904249142492424934249442495424964249742498424994250042501425024250342504425054250642507425084250942510425114251242513425144251542516425174251842519425204252142522425234252442525425264252742528425294253042531425324253342534425354253642537425384253942540425414254242543425444254542546425474254842549425504255142552425534255442555425564255742558425594256042561425624256342564425654256642567425684256942570425714257242573425744257542576425774257842579425804258142582425834258442585425864258742588425894259042591425924259342594425954259642597425984259942600426014260242603426044260542606426074260842609426104261142612426134261442615426164261742618426194262042621426224262342624426254262642627426284262942630426314263242633426344263542636426374263842639426404264142642426434264442645426464264742648426494265042651426524265342654426554265642657426584265942660426614266242663426644266542666426674266842669426704267142672426734267442675426764267742678426794268042681426824268342684426854268642687426884268942690426914269242693426944269542696426974269842699427004270142702427034270442705427064270742708427094271042711427124271342714427154271642717427184271942720427214272242723427244272542726427274272842729427304273142732427334273442735427364273742738427394274042741427424274342744427454274642747427484274942750427514275242753427544275542756427574275842759427604276142762427634276442765427664276742768427694277042771427724277342774427754277642777427784277942780427814278242783427844278542786427874278842789427904279142792427934279442795427964279742798427994280042801428024280342804428054280642807428084280942810428114281242813428144281542816428174281842819428204282142822428234282442825428264282742828428294283042831428324283342834428354283642837428384283942840428414284242843428444284542846428474284842849428504285142852428534285442855428564285742858428594286042861428624286342864428654286642867428684286942870428714287242873428744287542876428774287842879428804288142882428834288442885428864288742888428894289042891428924289342894428954289642897428984289942900429014290242903429044290542906429074290842909429104291142912429134291442915429164291742918429194292042921429224292342924429254292642927429284292942930429314293242933429344293542936429374293842939429404294142942429434294442945429464294742948429494295042951429524295342954429554295642957429584295942960429614296242963429644296542966429674296842969429704297142972429734297442975429764297742978429794298042981429824298342984429854298642987429884298942990429914299242993429944299542996429974299842999430004300143002430034300443005430064300743008430094301043011430124301343014430154301643017430184301943020430214302243023430244302543026430274302843029430304303143032430334303443035430364303743038430394304043041430424304343044430454304643047430484304943050430514305243053430544305543056430574305843059430604306143062430634306443065430664306743068430694307043071430724307343074430754307643077430784307943080430814308243083430844308543086430874308843089430904309143092430934309443095430964309743098430994310043101431024310343104431054310643107431084310943110431114311243113431144311543116431174311843119431204312143122431234312443125431264312743128431294313043131431324313343134431354313643137431384313943140431414314243143431444314543146431474314843149431504315143152431534315443155431564315743158431594316043161431624316343164431654316643167431684316943170431714317243173431744317543176431774317843179431804318143182431834318443185431864318743188431894319043191431924319343194431954319643197431984319943200432014320243203432044320543206432074320843209432104321143212432134321443215432164321743218432194322043221432224322343224432254322643227432284322943230432314323243233432344323543236432374323843239432404324143242432434324443245432464324743248432494325043251432524325343254432554325643257432584325943260432614326243263432644326543266432674326843269432704327143272432734327443275432764327743278432794328043281432824328343284432854328643287432884328943290432914329243293432944329543296432974329843299433004330143302433034330443305433064330743308433094331043311433124331343314433154331643317433184331943320433214332243323433244332543326433274332843329433304333143332433334333443335433364333743338433394334043341433424334343344433454334643347433484334943350433514335243353433544335543356433574335843359433604336143362433634336443365433664336743368433694337043371433724337343374433754337643377433784337943380433814338243383433844338543386433874338843389433904339143392433934339443395433964339743398433994340043401434024340343404434054340643407434084340943410434114341243413434144341543416434174341843419434204342143422434234342443425434264342743428434294343043431434324343343434434354343643437434384343943440434414344243443434444344543446434474344843449434504345143452434534345443455434564345743458434594346043461434624346343464434654346643467434684346943470434714347243473434744347543476434774347843479434804348143482434834348443485434864348743488434894349043491434924349343494434954349643497434984349943500435014350243503435044350543506435074350843509435104351143512435134351443515435164351743518435194352043521435224352343524435254352643527435284352943530435314353243533435344353543536435374353843539435404354143542435434354443545435464354743548435494355043551435524355343554435554355643557435584355943560435614356243563435644356543566435674356843569435704357143572435734357443575435764357743578435794358043581435824358343584435854358643587435884358943590435914359243593435944359543596435974359843599436004360143602436034360443605436064360743608436094361043611436124361343614436154361643617436184361943620436214362243623436244362543626436274362843629436304363143632436334363443635436364363743638436394364043641436424364343644436454364643647436484364943650436514365243653436544365543656436574365843659436604366143662436634366443665436664366743668436694367043671436724367343674436754367643677436784367943680436814368243683436844368543686436874368843689436904369143692436934369443695436964369743698436994370043701437024370343704437054370643707437084370943710437114371243713437144371543716437174371843719437204372143722437234372443725437264372743728437294373043731437324373343734437354373643737437384373943740437414374243743437444374543746437474374843749437504375143752437534375443755437564375743758437594376043761437624376343764437654376643767437684376943770437714377243773437744377543776437774377843779437804378143782437834378443785437864378743788437894379043791437924379343794437954379643797437984379943800438014380243803438044380543806438074380843809438104381143812438134381443815438164381743818438194382043821438224382343824438254382643827438284382943830438314383243833438344383543836438374383843839438404384143842438434384443845438464384743848438494385043851438524385343854438554385643857438584385943860438614386243863438644386543866438674386843869438704387143872438734387443875438764387743878438794388043881438824388343884438854388643887438884388943890438914389243893438944389543896438974389843899439004390143902439034390443905439064390743908439094391043911439124391343914439154391643917439184391943920439214392243923439244392543926439274392843929439304393143932439334393443935439364393743938439394394043941439424394343944439454394643947439484394943950439514395243953439544395543956439574395843959439604396143962439634396443965439664396743968439694397043971439724397343974439754397643977439784397943980439814398243983439844398543986439874398843989439904399143992439934399443995439964399743998439994400044001440024400344004440054400644007440084400944010440114401244013440144401544016440174401844019440204402144022440234402444025440264402744028440294403044031440324403344034440354403644037440384403944040440414404244043440444404544046440474404844049440504405144052440534405444055440564405744058440594406044061440624406344064440654406644067440684406944070440714407244073440744407544076440774407844079440804408144082440834408444085440864408744088440894409044091440924409344094440954409644097440984409944100441014410244103441044410544106441074410844109441104411144112441134411444115441164411744118441194412044121441224412344124441254412644127441284412944130441314413244133441344413544136441374413844139441404414144142441434414444145441464414744148441494415044151441524415344154441554415644157441584415944160441614416244163441644416544166441674416844169441704417144172441734417444175441764417744178441794418044181441824418344184441854418644187441884418944190441914419244193441944419544196441974419844199442004420144202442034420444205442064420744208442094421044211442124421344214442154421644217442184421944220442214422244223442244422544226442274422844229442304423144232442334423444235442364423744238442394424044241442424424344244442454424644247442484424944250442514425244253442544425544256442574425844259442604426144262442634426444265442664426744268442694427044271442724427344274442754427644277442784427944280442814428244283442844428544286442874428844289442904429144292442934429444295442964429744298442994430044301443024430344304443054430644307443084430944310443114431244313443144431544316443174431844319443204432144322443234432444325443264432744328443294433044331443324433344334443354433644337443384433944340443414434244343443444434544346443474434844349443504435144352443534435444355443564435744358443594436044361443624436344364443654436644367443684436944370443714437244373443744437544376443774437844379443804438144382443834438444385443864438744388443894439044391443924439344394443954439644397443984439944400444014440244403444044440544406444074440844409444104441144412444134441444415444164441744418444194442044421444224442344424444254442644427444284442944430444314443244433444344443544436444374443844439444404444144442444434444444445444464444744448444494445044451444524445344454444554445644457444584445944460444614446244463444644446544466444674446844469444704447144472444734447444475444764447744478444794448044481444824448344484444854448644487444884448944490444914449244493444944449544496444974449844499445004450144502445034450444505445064450744508445094451044511445124451344514445154451644517445184451944520445214452244523445244452544526445274452844529445304453144532445334453444535445364453744538445394454044541445424454344544445454454644547445484454944550445514455244553445544455544556445574455844559445604456144562445634456444565445664456744568445694457044571445724457344574445754457644577445784457944580445814458244583445844458544586445874458844589445904459144592445934459444595445964459744598445994460044601446024460344604446054460644607446084460944610446114461244613446144461544616446174461844619446204462144622446234462444625446264462744628446294463044631446324463344634446354463644637446384463944640446414464244643446444464544646446474464844649446504465144652446534465444655446564465744658446594466044661446624466344664446654466644667446684466944670446714467244673446744467544676446774467844679446804468144682446834468444685446864468744688446894469044691446924469344694446954469644697446984469944700447014470244703447044470544706447074470844709447104471144712447134471444715447164471744718447194472044721447224472344724447254472644727447284472944730447314473244733447344473544736447374473844739447404474144742447434474444745447464474744748447494475044751447524475344754447554475644757447584475944760447614476244763447644476544766447674476844769447704477144772447734477444775447764477744778447794478044781447824478344784447854478644787447884478944790447914479244793447944479544796447974479844799448004480144802448034480444805448064480744808448094481044811448124481344814448154481644817448184481944820448214482244823448244482544826448274482844829448304483144832448334483444835448364483744838448394484044841448424484344844448454484644847448484484944850448514485244853448544485544856448574485844859448604486144862448634486444865448664486744868448694487044871448724487344874448754487644877448784487944880448814488244883448844488544886448874488844889448904489144892448934489444895448964489744898448994490044901449024490344904449054490644907449084490944910449114491244913449144491544916449174491844919449204492144922449234492444925449264492744928449294493044931449324493344934449354493644937449384493944940449414494244943449444494544946449474494844949449504495144952449534495444955449564495744958449594496044961449624496344964449654496644967449684496944970449714497244973449744497544976449774497844979449804498144982449834498444985449864498744988449894499044991449924499344994449954499644997449984499945000450014500245003450044500545006450074500845009450104501145012450134501445015450164501745018450194502045021450224502345024450254502645027450284502945030450314503245033450344503545036450374503845039450404504145042450434504445045450464504745048450494505045051450524505345054450554505645057450584505945060450614506245063450644506545066450674506845069450704507145072450734507445075450764507745078450794508045081450824508345084450854508645087450884508945090450914509245093450944509545096450974509845099451004510145102451034510445105451064510745108451094511045111451124511345114451154511645117451184511945120451214512245123451244512545126451274512845129451304513145132451334513445135451364513745138451394514045141451424514345144451454514645147451484514945150451514515245153451544515545156451574515845159451604516145162451634516445165451664516745168451694517045171451724517345174451754517645177451784517945180451814518245183451844518545186451874518845189451904519145192451934519445195451964519745198451994520045201452024520345204452054520645207452084520945210452114521245213452144521545216452174521845219452204522145222452234522445225452264522745228452294523045231452324523345234452354523645237452384523945240452414524245243452444524545246452474524845249452504525145252452534525445255452564525745258452594526045261452624526345264452654526645267452684526945270452714527245273452744527545276452774527845279452804528145282452834528445285452864528745288452894529045291452924529345294452954529645297452984529945300453014530245303453044530545306453074530845309453104531145312453134531445315453164531745318453194532045321453224532345324453254532645327453284532945330453314533245333453344533545336453374533845339453404534145342453434534445345453464534745348453494535045351453524535345354453554535645357453584535945360453614536245363453644536545366453674536845369453704537145372453734537445375453764537745378453794538045381453824538345384453854538645387453884538945390453914539245393453944539545396453974539845399454004540145402454034540445405454064540745408454094541045411454124541345414454154541645417454184541945420454214542245423454244542545426454274542845429454304543145432454334543445435454364543745438454394544045441454424544345444454454544645447454484544945450454514545245453454544545545456454574545845459454604546145462454634546445465454664546745468454694547045471454724547345474454754547645477454784547945480454814548245483454844548545486454874548845489454904549145492454934549445495454964549745498454994550045501455024550345504455054550645507455084550945510455114551245513455144551545516455174551845519455204552145522455234552445525455264552745528455294553045531455324553345534455354553645537455384553945540455414554245543455444554545546455474554845549455504555145552455534555445555455564555745558455594556045561455624556345564455654556645567455684556945570455714557245573455744557545576455774557845579455804558145582455834558445585455864558745588455894559045591455924559345594455954559645597455984559945600456014560245603456044560545606456074560845609456104561145612456134561445615456164561745618456194562045621456224562345624456254562645627456284562945630456314563245633456344563545636456374563845639456404564145642456434564445645456464564745648456494565045651456524565345654456554565645657456584565945660456614566245663456644566545666456674566845669456704567145672456734567445675456764567745678456794568045681456824568345684456854568645687456884568945690456914569245693456944569545696456974569845699457004570145702457034570445705457064570745708457094571045711457124571345714457154571645717457184571945720457214572245723457244572545726457274572845729457304573145732457334573445735457364573745738457394574045741457424574345744457454574645747457484574945750457514575245753457544575545756457574575845759457604576145762457634576445765457664576745768457694577045771457724577345774457754577645777457784577945780457814578245783457844578545786457874578845789457904579145792457934579445795457964579745798457994580045801458024580345804458054580645807458084580945810458114581245813458144581545816458174581845819458204582145822458234582445825458264582745828458294583045831458324583345834458354583645837458384583945840458414584245843458444584545846458474584845849458504585145852458534585445855458564585745858458594586045861458624586345864458654586645867458684586945870458714587245873458744587545876458774587845879458804588145882458834588445885458864588745888458894589045891458924589345894458954589645897458984589945900459014590245903459044590545906459074590845909459104591145912459134591445915459164591745918459194592045921459224592345924459254592645927459284592945930459314593245933459344593545936459374593845939459404594145942459434594445945459464594745948459494595045951459524595345954459554595645957459584595945960459614596245963459644596545966459674596845969459704597145972459734597445975459764597745978459794598045981459824598345984459854598645987459884598945990459914599245993459944599545996459974599845999460004600146002460034600446005460064600746008460094601046011460124601346014460154601646017460184601946020460214602246023460244602546026460274602846029460304603146032460334603446035460364603746038460394604046041460424604346044460454604646047460484604946050460514605246053460544605546056460574605846059460604606146062460634606446065460664606746068460694607046071460724607346074460754607646077460784607946080460814608246083460844608546086460874608846089460904609146092460934609446095460964609746098460994610046101461024610346104461054610646107461084610946110461114611246113461144611546116461174611846119461204612146122461234612446125461264612746128461294613046131461324613346134461354613646137461384613946140461414614246143461444614546146461474614846149461504615146152461534615446155461564615746158461594616046161461624616346164461654616646167461684616946170461714617246173461744617546176461774617846179461804618146182461834618446185461864618746188461894619046191461924619346194461954619646197461984619946200462014620246203462044620546206462074620846209462104621146212462134621446215462164621746218462194622046221462224622346224462254622646227462284622946230462314623246233462344623546236462374623846239462404624146242462434624446245462464624746248462494625046251462524625346254462554625646257462584625946260462614626246263462644626546266462674626846269462704627146272462734627446275462764627746278462794628046281462824628346284462854628646287462884628946290462914629246293462944629546296462974629846299463004630146302463034630446305463064630746308463094631046311463124631346314463154631646317463184631946320463214632246323463244632546326463274632846329463304633146332463334633446335463364633746338463394634046341463424634346344463454634646347463484634946350463514635246353463544635546356463574635846359463604636146362463634636446365463664636746368463694637046371463724637346374463754637646377463784637946380463814638246383463844638546386463874638846389463904639146392463934639446395463964639746398463994640046401464024640346404464054640646407464084640946410464114641246413464144641546416464174641846419464204642146422464234642446425464264642746428464294643046431464324643346434464354643646437464384643946440464414644246443464444644546446464474644846449464504645146452464534645446455464564645746458464594646046461464624646346464464654646646467464684646946470464714647246473464744647546476464774647846479464804648146482464834648446485464864648746488464894649046491464924649346494464954649646497464984649946500465014650246503465044650546506465074650846509465104651146512465134651446515465164651746518465194652046521465224652346524465254652646527465284652946530465314653246533465344653546536465374653846539465404654146542465434654446545465464654746548465494655046551465524655346554465554655646557465584655946560465614656246563465644656546566465674656846569465704657146572465734657446575465764657746578465794658046581465824658346584465854658646587465884658946590465914659246593465944659546596465974659846599466004660146602466034660446605466064660746608466094661046611466124661346614466154661646617466184661946620466214662246623466244662546626466274662846629466304663146632466334663446635466364663746638466394664046641466424664346644466454664646647466484664946650466514665246653466544665546656466574665846659466604666146662466634666446665466664666746668466694667046671466724667346674466754667646677466784667946680466814668246683466844668546686466874668846689466904669146692466934669446695466964669746698466994670046701467024670346704467054670646707467084670946710467114671246713467144671546716467174671846719467204672146722467234672446725467264672746728467294673046731467324673346734467354673646737467384673946740467414674246743467444674546746467474674846749467504675146752467534675446755467564675746758467594676046761467624676346764467654676646767467684676946770467714677246773467744677546776467774677846779467804678146782467834678446785467864678746788467894679046791467924679346794467954679646797467984679946800468014680246803468044680546806468074680846809468104681146812468134681446815468164681746818468194682046821468224682346824468254682646827468284682946830468314683246833468344683546836468374683846839468404684146842468434684446845468464684746848468494685046851468524685346854468554685646857468584685946860468614686246863468644686546866468674686846869468704687146872468734687446875468764687746878468794688046881468824688346884468854688646887468884688946890468914689246893468944689546896468974689846899469004690146902469034690446905469064690746908469094691046911469124691346914469154691646917469184691946920469214692246923469244692546926469274692846929469304693146932469334693446935469364693746938469394694046941469424694346944469454694646947469484694946950469514695246953469544695546956469574695846959469604696146962469634696446965469664696746968469694697046971469724697346974469754697646977469784697946980469814698246983469844698546986469874698846989469904699146992469934699446995469964699746998469994700047001470024700347004470054700647007470084700947010470114701247013470144701547016470174701847019470204702147022470234702447025470264702747028470294703047031470324703347034470354703647037470384703947040470414704247043470444704547046470474704847049470504705147052470534705447055470564705747058470594706047061470624706347064470654706647067470684706947070470714707247073470744707547076470774707847079470804708147082470834708447085470864708747088470894709047091470924709347094470954709647097470984709947100471014710247103471044710547106471074710847109471104711147112471134711447115471164711747118471194712047121471224712347124471254712647127471284712947130471314713247133471344713547136471374713847139471404714147142471434714447145471464714747148471494715047151471524715347154471554715647157471584715947160471614716247163471644716547166471674716847169471704717147172471734717447175471764717747178471794718047181471824718347184471854718647187471884718947190471914719247193471944719547196471974719847199472004720147202472034720447205472064720747208472094721047211472124721347214472154721647217472184721947220472214722247223472244722547226472274722847229472304723147232472334723447235472364723747238472394724047241472424724347244472454724647247472484724947250472514725247253472544725547256472574725847259472604726147262472634726447265472664726747268472694727047271472724727347274472754727647277472784727947280472814728247283472844728547286472874728847289472904729147292472934729447295472964729747298472994730047301473024730347304473054730647307473084730947310473114731247313473144731547316473174731847319473204732147322473234732447325473264732747328473294733047331473324733347334473354733647337473384733947340473414734247343473444734547346473474734847349473504735147352473534735447355473564735747358473594736047361473624736347364473654736647367473684736947370473714737247373473744737547376473774737847379473804738147382473834738447385473864738747388473894739047391473924739347394473954739647397473984739947400474014740247403474044740547406474074740847409474104741147412474134741447415474164741747418474194742047421474224742347424474254742647427474284742947430474314743247433474344743547436474374743847439474404744147442474434744447445474464744747448474494745047451474524745347454474554745647457474584745947460474614746247463474644746547466474674746847469474704747147472474734747447475474764747747478474794748047481474824748347484474854748647487474884748947490474914749247493474944749547496474974749847499475004750147502475034750447505475064750747508475094751047511475124751347514475154751647517475184751947520475214752247523475244752547526475274752847529475304753147532475334753447535475364753747538475394754047541475424754347544475454754647547475484754947550475514755247553475544755547556475574755847559475604756147562475634756447565475664756747568475694757047571475724757347574475754757647577475784757947580475814758247583475844758547586475874758847589475904759147592475934759447595475964759747598475994760047601476024760347604476054760647607476084760947610476114761247613476144761547616476174761847619476204762147622476234762447625476264762747628476294763047631476324763347634476354763647637476384763947640476414764247643476444764547646476474764847649476504765147652476534765447655476564765747658476594766047661476624766347664476654766647667476684766947670476714767247673476744767547676476774767847679476804768147682476834768447685476864768747688476894769047691476924769347694476954769647697476984769947700477014770247703477044770547706477074770847709477104771147712477134771447715477164771747718477194772047721477224772347724477254772647727477284772947730477314773247733477344773547736477374773847739477404774147742477434774447745477464774747748477494775047751477524775347754477554775647757477584775947760477614776247763477644776547766477674776847769477704777147772477734777447775477764777747778477794778047781477824778347784477854778647787477884778947790477914779247793477944779547796477974779847799478004780147802478034780447805478064780747808478094781047811478124781347814478154781647817478184781947820478214782247823478244782547826478274782847829478304783147832478334783447835478364783747838478394784047841478424784347844478454784647847478484784947850478514785247853478544785547856478574785847859478604786147862478634786447865478664786747868478694787047871478724787347874478754787647877478784787947880478814788247883478844788547886478874788847889478904789147892478934789447895478964789747898478994790047901479024790347904479054790647907479084790947910479114791247913479144791547916479174791847919479204792147922479234792447925479264792747928479294793047931479324793347934479354793647937479384793947940479414794247943479444794547946479474794847949479504795147952479534795447955479564795747958479594796047961479624796347964479654796647967479684796947970479714797247973479744797547976479774797847979479804798147982479834798447985479864798747988479894799047991479924799347994479954799647997479984799948000480014800248003480044800548006480074800848009480104801148012480134801448015480164801748018480194802048021480224802348024480254802648027480284802948030480314803248033480344803548036480374803848039480404804148042480434804448045480464804748048480494805048051480524805348054480554805648057480584805948060480614806248063480644806548066480674806848069480704807148072480734807448075480764807748078480794808048081480824808348084480854808648087480884808948090480914809248093480944809548096480974809848099481004810148102481034810448105481064810748108481094811048111481124811348114481154811648117481184811948120481214812248123481244812548126481274812848129481304813148132481334813448135481364813748138481394814048141481424814348144481454814648147481484814948150481514815248153481544815548156481574815848159481604816148162481634816448165481664816748168481694817048171481724817348174481754817648177481784817948180481814818248183481844818548186481874818848189481904819148192481934819448195481964819748198481994820048201482024820348204482054820648207482084820948210482114821248213482144821548216482174821848219482204822148222482234822448225482264822748228482294823048231482324823348234482354823648237482384823948240482414824248243482444824548246482474824848249482504825148252482534825448255482564825748258482594826048261482624826348264482654826648267482684826948270482714827248273482744827548276482774827848279482804828148282482834828448285482864828748288482894829048291482924829348294482954829648297482984829948300483014830248303483044830548306483074830848309483104831148312483134831448315483164831748318483194832048321483224832348324483254832648327483284832948330483314833248333483344833548336483374833848339483404834148342483434834448345483464834748348483494835048351483524835348354483554835648357483584835948360483614836248363483644836548366483674836848369483704837148372483734837448375483764837748378483794838048381483824838348384483854838648387483884838948390483914839248393483944839548396483974839848399484004840148402484034840448405484064840748408484094841048411484124841348414484154841648417484184841948420484214842248423484244842548426484274842848429484304843148432484334843448435484364843748438484394844048441484424844348444484454844648447484484844948450484514845248453484544845548456484574845848459484604846148462484634846448465484664846748468484694847048471484724847348474484754847648477484784847948480484814848248483484844848548486484874848848489484904849148492484934849448495484964849748498484994850048501485024850348504485054850648507485084850948510485114851248513485144851548516485174851848519485204852148522485234852448525485264852748528485294853048531485324853348534485354853648537485384853948540485414854248543485444854548546485474854848549485504855148552485534855448555485564855748558485594856048561485624856348564485654856648567485684856948570485714857248573485744857548576485774857848579485804858148582485834858448585485864858748588485894859048591485924859348594485954859648597485984859948600486014860248603486044860548606486074860848609486104861148612486134861448615486164861748618486194862048621486224862348624486254862648627486284862948630486314863248633486344863548636486374863848639486404864148642486434864448645486464864748648486494865048651486524865348654486554865648657486584865948660486614866248663486644866548666486674866848669486704867148672486734867448675486764867748678486794868048681486824868348684486854868648687486884868948690486914869248693486944869548696486974869848699487004870148702487034870448705487064870748708487094871048711487124871348714487154871648717487184871948720487214872248723487244872548726487274872848729487304873148732487334873448735487364873748738487394874048741487424874348744487454874648747487484874948750487514875248753487544875548756487574875848759487604876148762487634876448765487664876748768487694877048771487724877348774487754877648777487784877948780487814878248783487844878548786487874878848789487904879148792487934879448795487964879748798487994880048801488024880348804488054880648807488084880948810488114881248813488144881548816488174881848819488204882148822488234882448825488264882748828488294883048831488324883348834488354883648837488384883948840488414884248843488444884548846488474884848849488504885148852488534885448855488564885748858488594886048861488624886348864488654886648867488684886948870488714887248873488744887548876488774887848879488804888148882488834888448885488864888748888488894889048891488924889348894488954889648897488984889948900489014890248903489044890548906489074890848909489104891148912489134891448915489164891748918489194892048921489224892348924489254892648927489284892948930489314893248933489344893548936489374893848939489404894148942489434894448945489464894748948489494895048951489524895348954489554895648957489584895948960489614896248963489644896548966489674896848969489704897148972489734897448975489764897748978489794898048981489824898348984489854898648987489884898948990489914899248993489944899548996489974899848999490004900149002490034900449005490064900749008490094901049011490124901349014490154901649017490184901949020490214902249023490244902549026490274902849029490304903149032490334903449035490364903749038490394904049041490424904349044490454904649047490484904949050490514905249053490544905549056490574905849059490604906149062490634906449065490664906749068490694907049071490724907349074490754907649077490784907949080490814908249083490844908549086490874908849089490904909149092490934909449095490964909749098490994910049101491024910349104491054910649107491084910949110491114911249113491144911549116491174911849119491204912149122491234912449125491264912749128491294913049131491324913349134491354913649137491384913949140491414914249143491444914549146491474914849149491504915149152491534915449155491564915749158491594916049161491624916349164491654916649167491684916949170491714917249173491744917549176491774917849179491804918149182491834918449185491864918749188491894919049191491924919349194491954919649197491984919949200492014920249203492044920549206492074920849209492104921149212492134921449215492164921749218492194922049221492224922349224492254922649227492284922949230492314923249233492344923549236492374923849239492404924149242492434924449245492464924749248492494925049251492524925349254492554925649257492584925949260492614926249263492644926549266492674926849269492704927149272492734927449275492764927749278492794928049281492824928349284492854928649287492884928949290492914929249293492944929549296492974929849299493004930149302493034930449305493064930749308493094931049311493124931349314493154931649317493184931949320493214932249323493244932549326493274932849329493304933149332493334933449335493364933749338493394934049341493424934349344493454934649347493484934949350493514935249353493544935549356493574935849359493604936149362493634936449365493664936749368493694937049371493724937349374493754937649377493784937949380493814938249383493844938549386493874938849389493904939149392493934939449395493964939749398493994940049401494024940349404494054940649407494084940949410494114941249413494144941549416494174941849419494204942149422494234942449425494264942749428494294943049431494324943349434494354943649437494384943949440494414944249443494444944549446494474944849449494504945149452494534945449455494564945749458494594946049461494624946349464494654946649467494684946949470494714947249473494744947549476494774947849479494804948149482494834948449485494864948749488494894949049491494924949349494494954949649497494984949949500495014950249503495044950549506495074950849509495104951149512495134951449515495164951749518495194952049521495224952349524495254952649527495284952949530495314953249533495344953549536495374953849539495404954149542495434954449545495464954749548495494955049551495524955349554495554955649557495584955949560495614956249563495644956549566495674956849569495704957149572495734957449575495764957749578495794958049581495824958349584495854958649587495884958949590495914959249593495944959549596495974959849599496004960149602496034960449605496064960749608496094961049611496124961349614496154961649617496184961949620496214962249623496244962549626496274962849629496304963149632496334963449635496364963749638496394964049641496424964349644496454964649647496484964949650496514965249653496544965549656496574965849659496604966149662496634966449665496664966749668496694967049671496724967349674496754967649677496784967949680496814968249683496844968549686496874968849689496904969149692496934969449695496964969749698496994970049701497024970349704497054970649707497084970949710497114971249713497144971549716497174971849719497204972149722497234972449725497264972749728497294973049731497324973349734497354973649737497384973949740497414974249743497444974549746497474974849749497504975149752497534975449755497564975749758497594976049761497624976349764497654976649767497684976949770497714977249773497744977549776497774977849779497804978149782497834978449785497864978749788497894979049791497924979349794497954979649797497984979949800498014980249803498044980549806498074980849809498104981149812498134981449815498164981749818498194982049821498224982349824498254982649827498284982949830498314983249833498344983549836498374983849839498404984149842498434984449845498464984749848498494985049851498524985349854498554985649857498584985949860498614986249863498644986549866498674986849869498704987149872498734987449875498764987749878498794988049881498824988349884498854988649887498884988949890498914989249893498944989549896498974989849899499004990149902499034990449905499064990749908499094991049911499124991349914499154991649917499184991949920499214992249923499244992549926499274992849929499304993149932499334993449935499364993749938499394994049941499424994349944499454994649947499484994949950499514995249953499544995549956499574995849959499604996149962499634996449965499664996749968499694997049971499724997349974499754997649977499784997949980499814998249983499844998549986499874998849989499904999149992499934999449995499964999749998499995000050001500025000350004500055000650007500085000950010500115001250013500145001550016500175001850019500205002150022500235002450025500265002750028500295003050031500325003350034500355003650037500385003950040500415004250043500445004550046500475004850049500505005150052500535005450055500565005750058500595006050061500625006350064500655006650067500685006950070500715007250073500745007550076500775007850079500805008150082500835008450085500865008750088500895009050091500925009350094500955009650097500985009950100501015010250103501045010550106501075010850109501105011150112501135011450115501165011750118501195012050121501225012350124501255012650127501285012950130501315013250133501345013550136501375013850139501405014150142501435014450145501465014750148501495015050151501525015350154501555015650157501585015950160501615016250163501645016550166501675016850169501705017150172501735017450175501765017750178501795018050181501825018350184501855018650187501885018950190501915019250193501945019550196501975019850199502005020150202502035020450205502065020750208502095021050211502125021350214502155021650217502185021950220502215022250223502245022550226502275022850229502305023150232502335023450235502365023750238502395024050241502425024350244502455024650247502485024950250502515025250253502545025550256502575025850259502605026150262502635026450265502665026750268502695027050271502725027350274502755027650277502785027950280502815028250283502845028550286502875028850289502905029150292502935029450295502965029750298502995030050301503025030350304503055030650307503085030950310503115031250313503145031550316503175031850319503205032150322503235032450325503265032750328503295033050331503325033350334503355033650337503385033950340503415034250343503445034550346503475034850349503505035150352503535035450355503565035750358503595036050361503625036350364503655036650367503685036950370503715037250373503745037550376503775037850379503805038150382503835038450385503865038750388503895039050391503925039350394503955039650397503985039950400504015040250403504045040550406504075040850409504105041150412504135041450415504165041750418504195042050421504225042350424504255042650427504285042950430504315043250433504345043550436504375043850439504405044150442504435044450445504465044750448504495045050451504525045350454504555045650457504585045950460504615046250463504645046550466504675046850469504705047150472504735047450475504765047750478504795048050481504825048350484504855048650487504885048950490504915049250493504945049550496504975049850499505005050150502505035050450505505065050750508505095051050511505125051350514505155051650517505185051950520505215052250523505245052550526505275052850529505305053150532505335053450535505365053750538505395054050541505425054350544505455054650547505485054950550505515055250553505545055550556505575055850559505605056150562505635056450565505665056750568505695057050571505725057350574505755057650577505785057950580505815058250583505845058550586505875058850589505905059150592505935059450595505965059750598505995060050601506025060350604506055060650607506085060950610506115061250613506145061550616506175061850619506205062150622506235062450625506265062750628506295063050631506325063350634506355063650637506385063950640506415064250643506445064550646506475064850649506505065150652506535065450655506565065750658506595066050661506625066350664506655066650667506685066950670506715067250673506745067550676506775067850679506805068150682506835068450685506865068750688506895069050691506925069350694506955069650697506985069950700507015070250703507045070550706507075070850709507105071150712507135071450715507165071750718507195072050721507225072350724507255072650727507285072950730507315073250733507345073550736507375073850739507405074150742507435074450745507465074750748507495075050751507525075350754507555075650757507585075950760507615076250763507645076550766507675076850769507705077150772507735077450775507765077750778507795078050781507825078350784507855078650787507885078950790507915079250793507945079550796507975079850799508005080150802508035080450805508065080750808508095081050811508125081350814508155081650817508185081950820508215082250823508245082550826508275082850829508305083150832508335083450835508365083750838508395084050841508425084350844508455084650847508485084950850508515085250853508545085550856508575085850859508605086150862508635086450865508665086750868508695087050871508725087350874508755087650877508785087950880508815088250883508845088550886508875088850889508905089150892508935089450895508965089750898508995090050901509025090350904509055090650907509085090950910509115091250913509145091550916509175091850919509205092150922509235092450925509265092750928509295093050931509325093350934509355093650937509385093950940509415094250943509445094550946509475094850949509505095150952509535095450955509565095750958509595096050961509625096350964509655096650967509685096950970509715097250973509745097550976509775097850979509805098150982509835098450985509865098750988509895099050991509925099350994509955099650997509985099951000510015100251003510045100551006510075100851009510105101151012510135101451015510165101751018510195102051021510225102351024510255102651027510285102951030510315103251033510345103551036510375103851039510405104151042510435104451045510465104751048510495105051051510525105351054510555105651057510585105951060510615106251063510645106551066510675106851069510705107151072510735107451075510765107751078510795108051081510825108351084510855108651087510885108951090510915109251093510945109551096510975109851099511005110151102511035110451105511065110751108511095111051111511125111351114511155111651117511185111951120511215112251123511245112551126511275112851129511305113151132511335113451135511365113751138511395114051141511425114351144511455114651147511485114951150511515115251153511545115551156511575115851159511605116151162511635116451165511665116751168511695117051171511725117351174511755117651177511785117951180511815118251183511845118551186511875118851189511905119151192511935119451195511965119751198511995120051201512025120351204512055120651207512085120951210512115121251213512145121551216512175121851219512205122151222512235122451225512265122751228512295123051231512325123351234512355123651237512385123951240512415124251243512445124551246512475124851249512505125151252512535125451255512565125751258512595126051261512625126351264512655126651267512685126951270512715127251273512745127551276512775127851279512805128151282512835128451285512865128751288512895129051291512925129351294512955129651297512985129951300513015130251303513045130551306513075130851309513105131151312513135131451315513165131751318513195132051321513225132351324513255132651327513285132951330513315133251333513345133551336513375133851339513405134151342513435134451345513465134751348513495135051351513525135351354513555135651357513585135951360513615136251363513645136551366513675136851369513705137151372513735137451375513765137751378513795138051381513825138351384513855138651387513885138951390513915139251393513945139551396513975139851399514005140151402514035140451405514065140751408514095141051411514125141351414514155141651417514185141951420514215142251423514245142551426514275142851429514305143151432514335143451435514365143751438514395144051441514425144351444514455144651447514485144951450514515145251453514545145551456514575145851459514605146151462514635146451465514665146751468514695147051471514725147351474514755147651477514785147951480514815148251483514845148551486514875148851489514905149151492514935149451495514965149751498514995150051501515025150351504515055150651507515085150951510515115151251513515145151551516515175151851519515205152151522515235152451525515265152751528515295153051531515325153351534515355153651537515385153951540515415154251543515445154551546515475154851549515505155151552515535155451555515565155751558515595156051561515625156351564515655156651567515685156951570515715157251573515745157551576515775157851579515805158151582515835158451585515865158751588515895159051591515925159351594515955159651597515985159951600516015160251603516045160551606516075160851609516105161151612516135161451615516165161751618516195162051621516225162351624516255162651627516285162951630516315163251633516345163551636516375163851639516405164151642516435164451645516465164751648516495165051651516525165351654516555165651657516585165951660516615166251663516645166551666516675166851669516705167151672516735167451675516765167751678516795168051681516825168351684516855168651687516885168951690516915169251693516945169551696516975169851699517005170151702517035170451705517065170751708517095171051711517125171351714517155171651717517185171951720517215172251723517245172551726517275172851729517305173151732517335173451735517365173751738517395174051741517425174351744517455174651747517485174951750517515175251753517545175551756517575175851759517605176151762517635176451765517665176751768517695177051771517725177351774517755177651777517785177951780517815178251783517845178551786517875178851789517905179151792517935179451795517965179751798517995180051801518025180351804518055180651807518085180951810518115181251813518145181551816518175181851819518205182151822518235182451825518265182751828518295183051831518325183351834518355183651837518385183951840518415184251843518445184551846518475184851849518505185151852518535185451855518565185751858518595186051861518625186351864518655186651867518685186951870518715187251873518745187551876518775187851879518805188151882518835188451885518865188751888518895189051891518925189351894518955189651897518985189951900519015190251903519045190551906519075190851909519105191151912519135191451915519165191751918519195192051921519225192351924519255192651927519285192951930519315193251933519345193551936519375193851939519405194151942519435194451945519465194751948519495195051951519525195351954519555195651957519585195951960519615196251963519645196551966519675196851969519705197151972519735197451975519765197751978519795198051981519825198351984519855198651987519885198951990519915199251993519945199551996519975199851999520005200152002520035200452005520065200752008520095201052011520125201352014520155201652017520185201952020520215202252023520245202552026520275202852029520305203152032520335203452035520365203752038520395204052041520425204352044520455204652047520485204952050520515205252053520545205552056520575205852059520605206152062520635206452065520665206752068520695207052071520725207352074520755207652077520785207952080520815208252083520845208552086520875208852089520905209152092520935209452095520965209752098520995210052101521025210352104521055210652107521085210952110521115211252113521145211552116521175211852119521205212152122521235212452125521265212752128521295213052131521325213352134521355213652137521385213952140521415214252143521445214552146521475214852149521505215152152521535215452155521565215752158521595216052161521625216352164521655216652167521685216952170521715217252173521745217552176521775217852179521805218152182521835218452185521865218752188521895219052191521925219352194521955219652197521985219952200522015220252203522045220552206522075220852209522105221152212522135221452215522165221752218522195222052221522225222352224522255222652227522285222952230522315223252233522345223552236522375223852239522405224152242522435224452245522465224752248522495225052251522525225352254522555225652257522585225952260522615226252263522645226552266522675226852269522705227152272522735227452275522765227752278522795228052281522825228352284522855228652287522885228952290522915229252293522945229552296522975229852299523005230152302523035230452305523065230752308523095231052311523125231352314523155231652317523185231952320523215232252323523245232552326523275232852329523305233152332523335233452335523365233752338523395234052341523425234352344523455234652347523485234952350523515235252353523545235552356523575235852359523605236152362523635236452365523665236752368523695237052371523725237352374523755237652377523785237952380523815238252383523845238552386523875238852389523905239152392523935239452395523965239752398523995240052401524025240352404524055240652407524085240952410524115241252413524145241552416524175241852419524205242152422524235242452425524265242752428524295243052431524325243352434524355243652437524385243952440524415244252443524445244552446524475244852449524505245152452524535245452455524565245752458524595246052461524625246352464524655246652467524685246952470524715247252473524745247552476524775247852479524805248152482524835248452485524865248752488524895249052491524925249352494524955249652497524985249952500525015250252503525045250552506525075250852509525105251152512525135251452515525165251752518525195252052521525225252352524525255252652527525285252952530525315253252533525345253552536525375253852539525405254152542525435254452545525465254752548525495255052551525525255352554525555255652557525585255952560525615256252563525645256552566525675256852569525705257152572525735257452575525765257752578525795258052581525825258352584525855258652587525885258952590525915259252593525945259552596525975259852599526005260152602526035260452605526065260752608526095261052611526125261352614526155261652617526185261952620526215262252623526245262552626526275262852629526305263152632526335263452635526365263752638526395264052641526425264352644526455264652647526485264952650526515265252653526545265552656526575265852659526605266152662526635266452665526665266752668526695267052671526725267352674526755267652677526785267952680526815268252683526845268552686526875268852689526905269152692526935269452695526965269752698526995270052701527025270352704527055270652707527085270952710527115271252713527145271552716527175271852719527205272152722527235272452725527265272752728527295273052731527325273352734527355273652737527385273952740527415274252743527445274552746527475274852749527505275152752527535275452755527565275752758527595276052761527625276352764527655276652767527685276952770527715277252773527745277552776527775277852779527805278152782527835278452785527865278752788527895279052791527925279352794527955279652797527985279952800528015280252803528045280552806528075280852809528105281152812528135281452815528165281752818528195282052821528225282352824528255282652827528285282952830528315283252833528345283552836528375283852839528405284152842528435284452845528465284752848528495285052851528525285352854528555285652857528585285952860528615286252863528645286552866528675286852869528705287152872528735287452875528765287752878528795288052881528825288352884528855288652887528885288952890528915289252893528945289552896528975289852899529005290152902529035290452905529065290752908529095291052911529125291352914529155291652917529185291952920529215292252923529245292552926529275292852929529305293152932529335293452935529365293752938529395294052941529425294352944529455294652947529485294952950529515295252953529545295552956529575295852959529605296152962529635296452965529665296752968529695297052971529725297352974529755297652977529785297952980529815298252983529845298552986529875298852989529905299152992529935299452995529965299752998529995300053001530025300353004530055300653007530085300953010530115301253013530145301553016530175301853019530205302153022530235302453025530265302753028530295303053031530325303353034530355303653037530385303953040530415304253043530445304553046530475304853049530505305153052530535305453055530565305753058530595306053061530625306353064530655306653067530685306953070530715307253073530745307553076530775307853079530805308153082530835308453085530865308753088530895309053091530925309353094530955309653097530985309953100531015310253103531045310553106531075310853109531105311153112531135311453115531165311753118531195312053121531225312353124531255312653127531285312953130531315313253133531345313553136531375313853139531405314153142531435314453145531465314753148531495315053151531525315353154531555315653157531585315953160531615316253163531645316553166531675316853169531705317153172531735317453175531765317753178531795318053181531825318353184531855318653187531885318953190531915319253193531945319553196531975319853199532005320153202532035320453205532065320753208532095321053211532125321353214532155321653217532185321953220532215322253223532245322553226532275322853229532305323153232532335323453235532365323753238532395324053241532425324353244532455324653247532485324953250532515325253253532545325553256532575325853259532605326153262532635326453265532665326753268532695327053271532725327353274532755327653277532785327953280532815328253283532845328553286532875328853289532905329153292532935329453295532965329753298532995330053301533025330353304533055330653307533085330953310533115331253313533145331553316533175331853319533205332153322533235332453325533265332753328533295333053331533325333353334533355333653337533385333953340533415334253343533445334553346533475334853349533505335153352533535335453355533565335753358533595336053361533625336353364533655336653367533685336953370533715337253373533745337553376533775337853379533805338153382533835338453385533865338753388533895339053391533925339353394533955339653397533985339953400534015340253403534045340553406534075340853409534105341153412534135341453415534165341753418534195342053421534225342353424534255342653427534285342953430534315343253433534345343553436534375343853439534405344153442534435344453445534465344753448534495345053451534525345353454534555345653457534585345953460534615346253463534645346553466534675346853469534705347153472534735347453475534765347753478534795348053481534825348353484534855348653487534885348953490534915349253493534945349553496534975349853499535005350153502535035350453505535065350753508535095351053511535125351353514535155351653517535185351953520535215352253523535245352553526535275352853529535305353153532535335353453535535365353753538535395354053541535425354353544535455354653547535485354953550535515355253553535545355553556535575355853559535605356153562535635356453565535665356753568535695357053571535725357353574535755357653577535785357953580535815358253583535845358553586535875358853589535905359153592535935359453595535965359753598535995360053601536025360353604536055360653607536085360953610536115361253613536145361553616536175361853619536205362153622536235362453625536265362753628536295363053631536325363353634536355363653637536385363953640536415364253643536445364553646536475364853649536505365153652536535365453655536565365753658536595366053661536625366353664536655366653667536685366953670536715367253673536745367553676536775367853679536805368153682536835368453685536865368753688536895369053691536925369353694536955369653697536985369953700537015370253703537045370553706537075370853709537105371153712537135371453715537165371753718537195372053721537225372353724537255372653727537285372953730537315373253733537345373553736537375373853739537405374153742537435374453745537465374753748537495375053751537525375353754537555375653757537585375953760537615376253763537645376553766537675376853769537705377153772537735377453775537765377753778537795378053781537825378353784537855378653787537885378953790537915379253793537945379553796537975379853799538005380153802538035380453805538065380753808538095381053811538125381353814538155381653817538185381953820538215382253823538245382553826538275382853829538305383153832538335383453835538365383753838538395384053841538425384353844538455384653847538485384953850538515385253853538545385553856538575385853859538605386153862538635386453865538665386753868538695387053871538725387353874538755387653877538785387953880538815388253883538845388553886538875388853889538905389153892538935389453895538965389753898538995390053901539025390353904539055390653907539085390953910539115391253913539145391553916539175391853919539205392153922539235392453925539265392753928539295393053931539325393353934539355393653937539385393953940539415394253943539445394553946539475394853949539505395153952539535395453955539565395753958539595396053961539625396353964539655396653967539685396953970539715397253973539745397553976539775397853979539805398153982539835398453985539865398753988539895399053991539925399353994539955399653997539985399954000540015400254003540045400554006540075400854009540105401154012540135401454015540165401754018540195402054021540225402354024540255402654027540285402954030540315403254033540345403554036540375403854039540405404154042540435404454045540465404754048540495405054051540525405354054540555405654057540585405954060540615406254063540645406554066540675406854069540705407154072540735407454075540765407754078540795408054081540825408354084540855408654087540885408954090540915409254093540945409554096540975409854099541005410154102541035410454105541065410754108541095411054111541125411354114541155411654117541185411954120541215412254123541245412554126541275412854129541305413154132541335413454135541365413754138541395414054141541425414354144541455414654147541485414954150541515415254153541545415554156541575415854159541605416154162541635416454165541665416754168541695417054171541725417354174541755417654177541785417954180541815418254183541845418554186541875418854189541905419154192541935419454195541965419754198541995420054201542025420354204542055420654207542085420954210542115421254213542145421554216542175421854219542205422154222542235422454225542265422754228542295423054231542325423354234542355423654237542385423954240542415424254243542445424554246542475424854249542505425154252542535425454255542565425754258542595426054261542625426354264542655426654267542685426954270542715427254273542745427554276542775427854279542805428154282542835428454285542865428754288542895429054291542925429354294542955429654297542985429954300543015430254303543045430554306543075430854309543105431154312543135431454315543165431754318543195432054321543225432354324543255432654327543285432954330543315433254333543345433554336543375433854339543405434154342543435434454345543465434754348543495435054351543525435354354543555435654357543585435954360543615436254363543645436554366543675436854369543705437154372543735437454375543765437754378543795438054381543825438354384543855438654387543885438954390543915439254393543945439554396543975439854399544005440154402544035440454405544065440754408544095441054411544125441354414544155441654417544185441954420544215442254423544245442554426544275442854429544305443154432544335443454435544365443754438544395444054441544425444354444544455444654447544485444954450544515445254453544545445554456544575445854459544605446154462544635446454465544665446754468544695447054471544725447354474544755447654477544785447954480544815448254483544845448554486544875448854489544905449154492544935449454495544965449754498544995450054501545025450354504545055450654507545085450954510545115451254513545145451554516545175451854519545205452154522545235452454525545265452754528545295453054531545325453354534545355453654537545385453954540545415454254543545445454554546545475454854549545505455154552545535455454555545565455754558545595456054561545625456354564545655456654567545685456954570545715457254573545745457554576545775457854579545805458154582545835458454585545865458754588545895459054591545925459354594545955459654597545985459954600546015460254603546045460554606546075460854609546105461154612546135461454615546165461754618546195462054621546225462354624546255462654627546285462954630546315463254633546345463554636546375463854639546405464154642546435464454645546465464754648546495465054651546525465354654546555465654657546585465954660546615466254663546645466554666546675466854669546705467154672546735467454675546765467754678546795468054681546825468354684546855468654687546885468954690546915469254693546945469554696546975469854699547005470154702547035470454705547065470754708547095471054711547125471354714547155471654717547185471954720547215472254723547245472554726547275472854729547305473154732547335473454735547365473754738547395474054741547425474354744547455474654747547485474954750547515475254753547545475554756547575475854759547605476154762547635476454765547665476754768547695477054771547725477354774547755477654777547785477954780547815478254783547845478554786547875478854789547905479154792547935479454795547965479754798547995480054801548025480354804548055480654807548085480954810548115481254813548145481554816548175481854819548205482154822548235482454825548265482754828548295483054831548325483354834548355483654837548385483954840548415484254843548445484554846548475484854849548505485154852548535485454855548565485754858548595486054861548625486354864548655486654867548685486954870548715487254873548745487554876548775487854879548805488154882548835488454885548865488754888548895489054891548925489354894548955489654897548985489954900549015490254903549045490554906549075490854909549105491154912549135491454915549165491754918549195492054921549225492354924549255492654927549285492954930549315493254933549345493554936549375493854939549405494154942549435494454945549465494754948549495495054951549525495354954549555495654957549585495954960549615496254963549645496554966549675496854969549705497154972549735497454975549765497754978549795498054981549825498354984549855498654987549885498954990549915499254993549945499554996549975499854999550005500155002550035500455005550065500755008550095501055011550125501355014550155501655017550185501955020550215502255023550245502555026550275502855029550305503155032550335503455035550365503755038550395504055041550425504355044550455504655047550485504955050550515505255053550545505555056550575505855059550605506155062550635506455065550665506755068550695507055071550725507355074550755507655077550785507955080550815508255083550845508555086550875508855089550905509155092550935509455095550965509755098550995510055101551025510355104551055510655107551085510955110551115511255113551145511555116551175511855119551205512155122551235512455125551265512755128551295513055131551325513355134551355513655137551385513955140551415514255143551445514555146551475514855149551505515155152551535515455155551565515755158551595516055161551625516355164551655516655167551685516955170551715517255173551745517555176551775517855179551805518155182551835518455185551865518755188551895519055191551925519355194551955519655197551985519955200552015520255203552045520555206552075520855209552105521155212552135521455215552165521755218552195522055221552225522355224552255522655227552285522955230552315523255233552345523555236552375523855239552405524155242552435524455245552465524755248552495525055251552525525355254552555525655257552585525955260552615526255263552645526555266552675526855269552705527155272552735527455275552765527755278552795528055281552825528355284552855528655287552885528955290552915529255293552945529555296552975529855299553005530155302553035530455305553065530755308553095531055311553125531355314553155531655317553185531955320553215532255323553245532555326553275532855329553305533155332553335533455335553365533755338553395534055341553425534355344553455534655347553485534955350553515535255353553545535555356553575535855359553605536155362553635536455365553665536755368553695537055371553725537355374553755537655377553785537955380553815538255383553845538555386553875538855389553905539155392553935539455395553965539755398553995540055401554025540355404554055540655407554085540955410554115541255413554145541555416554175541855419554205542155422554235542455425554265542755428554295543055431554325543355434554355543655437554385543955440554415544255443554445544555446554475544855449554505545155452554535545455455554565545755458554595546055461554625546355464554655546655467554685546955470554715547255473554745547555476554775547855479554805548155482554835548455485554865548755488554895549055491554925549355494554955549655497554985549955500555015550255503555045550555506555075550855509555105551155512555135551455515555165551755518555195552055521555225552355524555255552655527555285552955530555315553255533555345553555536555375553855539555405554155542555435554455545555465554755548555495555055551555525555355554555555555655557555585555955560555615556255563555645556555566555675556855569555705557155572555735557455575555765557755578555795558055581555825558355584555855558655587555885558955590555915559255593555945559555596555975559855599556005560155602556035560455605556065560755608556095561055611556125561355614556155561655617556185561955620556215562255623556245562555626556275562855629556305563155632556335563455635556365563755638556395564055641556425564355644556455564655647556485564955650556515565255653556545565555656556575565855659556605566155662556635566455665556665566755668556695567055671556725567355674556755567655677556785567955680556815568255683556845568555686556875568855689556905569155692556935569455695556965569755698556995570055701557025570355704557055570655707557085570955710557115571255713557145571555716557175571855719557205572155722557235572455725557265572755728557295573055731557325573355734557355573655737557385573955740557415574255743557445574555746557475574855749557505575155752557535575455755557565575755758557595576055761557625576355764557655576655767557685576955770557715577255773557745577555776557775577855779557805578155782557835578455785557865578755788557895579055791557925579355794557955579655797557985579955800558015580255803558045580555806558075580855809558105581155812558135581455815558165581755818558195582055821558225582355824558255582655827558285582955830558315583255833558345583555836558375583855839558405584155842558435584455845558465584755848558495585055851558525585355854558555585655857558585585955860558615586255863558645586555866558675586855869558705587155872558735587455875558765587755878558795588055881558825588355884558855588655887558885588955890558915589255893558945589555896558975589855899559005590155902559035590455905559065590755908559095591055911559125591355914559155591655917559185591955920559215592255923559245592555926559275592855929559305593155932559335593455935559365593755938559395594055941559425594355944559455594655947559485594955950559515595255953559545595555956559575595855959559605596155962559635596455965559665596755968559695597055971559725597355974559755597655977559785597955980559815598255983559845598555986559875598855989559905599155992559935599455995559965599755998559995600056001560025600356004560055600656007560085600956010560115601256013560145601556016560175601856019560205602156022560235602456025560265602756028560295603056031560325603356034560355603656037560385603956040560415604256043560445604556046560475604856049560505605156052560535605456055560565605756058560595606056061560625606356064560655606656067560685606956070560715607256073560745607556076560775607856079560805608156082560835608456085560865608756088560895609056091560925609356094560955609656097560985609956100561015610256103561045610556106561075610856109561105611156112561135611456115561165611756118561195612056121561225612356124561255612656127561285612956130561315613256133561345613556136561375613856139561405614156142561435614456145561465614756148561495615056151561525615356154561555615656157561585615956160561615616256163561645616556166561675616856169561705617156172561735617456175561765617756178561795618056181561825618356184561855618656187561885618956190561915619256193561945619556196561975619856199562005620156202562035620456205562065620756208562095621056211562125621356214562155621656217562185621956220562215622256223562245622556226562275622856229562305623156232562335623456235562365623756238562395624056241562425624356244562455624656247562485624956250562515625256253562545625556256562575625856259562605626156262562635626456265562665626756268562695627056271562725627356274562755627656277562785627956280562815628256283562845628556286562875628856289562905629156292562935629456295562965629756298562995630056301563025630356304563055630656307563085630956310563115631256313563145631556316563175631856319563205632156322563235632456325563265632756328563295633056331563325633356334563355633656337563385633956340563415634256343563445634556346563475634856349563505635156352563535635456355563565635756358563595636056361563625636356364563655636656367563685636956370563715637256373563745637556376563775637856379563805638156382563835638456385563865638756388563895639056391563925639356394563955639656397563985639956400564015640256403564045640556406564075640856409564105641156412564135641456415564165641756418564195642056421564225642356424564255642656427564285642956430564315643256433564345643556436564375643856439564405644156442564435644456445564465644756448564495645056451564525645356454564555645656457564585645956460564615646256463564645646556466564675646856469564705647156472564735647456475564765647756478564795648056481564825648356484564855648656487564885648956490564915649256493564945649556496564975649856499565005650156502565035650456505565065650756508565095651056511565125651356514565155651656517565185651956520565215652256523565245652556526565275652856529565305653156532565335653456535565365653756538565395654056541565425654356544565455654656547565485654956550565515655256553565545655556556565575655856559565605656156562565635656456565565665656756568565695657056571565725657356574565755657656577565785657956580565815658256583565845658556586565875658856589565905659156592565935659456595565965659756598565995660056601566025660356604566055660656607566085660956610566115661256613566145661556616566175661856619566205662156622566235662456625566265662756628566295663056631566325663356634566355663656637566385663956640566415664256643566445664556646566475664856649566505665156652566535665456655566565665756658566595666056661566625666356664566655666656667566685666956670566715667256673566745667556676566775667856679566805668156682566835668456685566865668756688566895669056691566925669356694566955669656697566985669956700567015670256703567045670556706567075670856709567105671156712567135671456715567165671756718567195672056721567225672356724567255672656727567285672956730567315673256733567345673556736567375673856739567405674156742567435674456745567465674756748567495675056751567525675356754567555675656757567585675956760567615676256763567645676556766567675676856769567705677156772567735677456775567765677756778567795678056781567825678356784567855678656787567885678956790567915679256793567945679556796567975679856799568005680156802568035680456805568065680756808568095681056811568125681356814568155681656817568185681956820568215682256823568245682556826568275682856829568305683156832568335683456835568365683756838568395684056841568425684356844568455684656847568485684956850568515685256853568545685556856568575685856859568605686156862568635686456865568665686756868568695687056871568725687356874568755687656877568785687956880568815688256883568845688556886568875688856889568905689156892568935689456895568965689756898568995690056901569025690356904569055690656907569085690956910569115691256913569145691556916569175691856919569205692156922569235692456925569265692756928569295693056931569325693356934569355693656937569385693956940569415694256943569445694556946569475694856949569505695156952569535695456955569565695756958569595696056961569625696356964569655696656967569685696956970569715697256973569745697556976569775697856979569805698156982569835698456985569865698756988569895699056991569925699356994569955699656997569985699957000570015700257003570045700557006570075700857009570105701157012570135701457015570165701757018570195702057021570225702357024570255702657027570285702957030570315703257033570345703557036570375703857039570405704157042570435704457045570465704757048570495705057051570525705357054570555705657057570585705957060570615706257063570645706557066570675706857069570705707157072570735707457075570765707757078570795708057081570825708357084570855708657087570885708957090570915709257093570945709557096570975709857099571005710157102571035710457105571065710757108571095711057111571125711357114571155711657117571185711957120571215712257123571245712557126571275712857129571305713157132571335713457135571365713757138571395714057141571425714357144571455714657147571485714957150571515715257153571545715557156571575715857159571605716157162571635716457165571665716757168571695717057171571725717357174571755717657177571785717957180571815718257183571845718557186571875718857189571905719157192571935719457195571965719757198571995720057201572025720357204572055720657207572085720957210572115721257213572145721557216572175721857219572205722157222572235722457225572265722757228572295723057231572325723357234572355723657237572385723957240572415724257243572445724557246572475724857249572505725157252572535725457255572565725757258572595726057261572625726357264572655726657267572685726957270572715727257273572745727557276572775727857279572805728157282572835728457285572865728757288572895729057291572925729357294572955729657297572985729957300573015730257303573045730557306573075730857309573105731157312573135731457315573165731757318573195732057321573225732357324573255732657327573285732957330573315733257333573345733557336573375733857339573405734157342573435734457345573465734757348573495735057351573525735357354573555735657357573585735957360573615736257363573645736557366573675736857369573705737157372573735737457375573765737757378573795738057381573825738357384573855738657387573885738957390573915739257393573945739557396573975739857399574005740157402574035740457405574065740757408574095741057411574125741357414574155741657417574185741957420574215742257423574245742557426574275742857429574305743157432574335743457435574365743757438574395744057441574425744357444574455744657447574485744957450574515745257453574545745557456574575745857459574605746157462574635746457465574665746757468574695747057471574725747357474574755747657477574785747957480574815748257483574845748557486574875748857489574905749157492574935749457495574965749757498574995750057501575025750357504575055750657507575085750957510575115751257513575145751557516575175751857519575205752157522575235752457525575265752757528575295753057531575325753357534575355753657537575385753957540575415754257543575445754557546575475754857549575505755157552575535755457555575565755757558575595756057561575625756357564575655756657567575685756957570575715757257573575745757557576575775757857579575805758157582575835758457585575865758757588575895759057591575925759357594575955759657597575985759957600576015760257603576045760557606576075760857609576105761157612576135761457615576165761757618576195762057621576225762357624576255762657627576285762957630576315763257633576345763557636576375763857639576405764157642576435764457645576465764757648576495765057651576525765357654576555765657657576585765957660576615766257663576645766557666576675766857669576705767157672576735767457675576765767757678576795768057681576825768357684576855768657687576885768957690576915769257693576945769557696576975769857699577005770157702577035770457705577065770757708577095771057711577125771357714577155771657717577185771957720577215772257723577245772557726577275772857729577305773157732577335773457735577365773757738577395774057741577425774357744577455774657747577485774957750577515775257753577545775557756577575775857759577605776157762577635776457765577665776757768577695777057771577725777357774577755777657777577785777957780577815778257783577845778557786577875778857789577905779157792577935779457795577965779757798577995780057801578025780357804578055780657807578085780957810578115781257813578145781557816578175781857819578205782157822578235782457825578265782757828578295783057831578325783357834578355783657837578385783957840578415784257843578445784557846578475784857849578505785157852578535785457855578565785757858578595786057861578625786357864578655786657867578685786957870578715787257873578745787557876578775787857879578805788157882578835788457885578865788757888578895789057891578925789357894578955789657897578985789957900579015790257903579045790557906579075790857909579105791157912579135791457915579165791757918579195792057921579225792357924579255792657927579285792957930579315793257933579345793557936579375793857939579405794157942579435794457945579465794757948579495795057951579525795357954579555795657957579585795957960579615796257963579645796557966579675796857969579705797157972579735797457975579765797757978579795798057981579825798357984579855798657987579885798957990579915799257993579945799557996579975799857999580005800158002580035800458005580065800758008580095801058011580125801358014580155801658017580185801958020580215802258023580245802558026580275802858029580305803158032580335803458035580365803758038580395804058041580425804358044580455804658047580485804958050580515805258053580545805558056580575805858059580605806158062580635806458065580665806758068580695807058071580725807358074580755807658077580785807958080580815808258083580845808558086580875808858089580905809158092580935809458095580965809758098580995810058101581025810358104581055810658107581085810958110581115811258113581145811558116581175811858119581205812158122581235812458125581265812758128581295813058131581325813358134581355813658137581385813958140581415814258143581445814558146581475814858149581505815158152581535815458155581565815758158581595816058161581625816358164581655816658167581685816958170581715817258173581745817558176581775817858179581805818158182581835818458185581865818758188581895819058191581925819358194581955819658197581985819958200582015820258203582045820558206582075820858209582105821158212582135821458215582165821758218582195822058221582225822358224582255822658227582285822958230582315823258233582345823558236582375823858239582405824158242582435824458245582465824758248582495825058251582525825358254582555825658257582585825958260582615826258263582645826558266582675826858269582705827158272582735827458275582765827758278582795828058281582825828358284582855828658287582885828958290582915829258293582945829558296582975829858299583005830158302583035830458305583065830758308583095831058311583125831358314583155831658317583185831958320583215832258323583245832558326583275832858329583305833158332583335833458335583365833758338583395834058341583425834358344583455834658347583485834958350583515835258353583545835558356583575835858359583605836158362583635836458365583665836758368583695837058371583725837358374583755837658377583785837958380583815838258383583845838558386583875838858389583905839158392583935839458395583965839758398583995840058401584025840358404584055840658407584085840958410584115841258413584145841558416584175841858419584205842158422584235842458425584265842758428584295843058431584325843358434584355843658437584385843958440584415844258443584445844558446584475844858449584505845158452584535845458455584565845758458584595846058461584625846358464584655846658467584685846958470584715847258473584745847558476584775847858479584805848158482584835848458485584865848758488584895849058491584925849358494584955849658497584985849958500585015850258503585045850558506585075850858509585105851158512585135851458515585165851758518585195852058521585225852358524585255852658527585285852958530585315853258533585345853558536585375853858539585405854158542585435854458545585465854758548585495855058551585525855358554585555855658557585585855958560585615856258563585645856558566585675856858569585705857158572585735857458575585765857758578585795858058581585825858358584585855858658587585885858958590585915859258593585945859558596585975859858599586005860158602586035860458605586065860758608586095861058611586125861358614586155861658617586185861958620586215862258623586245862558626586275862858629586305863158632586335863458635586365863758638586395864058641586425864358644586455864658647586485864958650586515865258653586545865558656586575865858659586605866158662586635866458665586665866758668586695867058671586725867358674586755867658677586785867958680586815868258683586845868558686586875868858689586905869158692586935869458695586965869758698586995870058701587025870358704587055870658707587085870958710587115871258713587145871558716587175871858719587205872158722587235872458725587265872758728587295873058731587325873358734587355873658737587385873958740587415874258743587445874558746587475874858749587505875158752587535875458755587565875758758587595876058761587625876358764587655876658767587685876958770587715877258773587745877558776587775877858779587805878158782587835878458785587865878758788587895879058791587925879358794587955879658797587985879958800588015880258803588045880558806588075880858809588105881158812588135881458815588165881758818588195882058821588225882358824588255882658827588285882958830588315883258833588345883558836588375883858839588405884158842588435884458845588465884758848588495885058851588525885358854588555885658857588585885958860588615886258863588645886558866588675886858869588705887158872588735887458875588765887758878588795888058881588825888358884588855888658887588885888958890588915889258893588945889558896588975889858899589005890158902589035890458905589065890758908589095891058911589125891358914589155891658917589185891958920589215892258923589245892558926589275892858929589305893158932589335893458935589365893758938589395894058941589425894358944589455894658947589485894958950589515895258953589545895558956589575895858959589605896158962589635896458965589665896758968589695897058971589725897358974589755897658977589785897958980589815898258983589845898558986589875898858989589905899158992589935899458995589965899758998589995900059001590025900359004590055900659007590085900959010590115901259013590145901559016590175901859019590205902159022590235902459025590265902759028590295903059031590325903359034590355903659037590385903959040590415904259043590445904559046590475904859049590505905159052590535905459055590565905759058590595906059061590625906359064590655906659067590685906959070590715907259073590745907559076590775907859079590805908159082590835908459085590865908759088590895909059091590925909359094590955909659097590985909959100591015910259103591045910559106591075910859109591105911159112591135911459115591165911759118591195912059121591225912359124591255912659127591285912959130591315913259133591345913559136591375913859139591405914159142591435914459145591465914759148591495915059151591525915359154591555915659157591585915959160591615916259163591645916559166591675916859169591705917159172591735917459175591765917759178591795918059181591825918359184591855918659187591885918959190591915919259193591945919559196591975919859199592005920159202592035920459205592065920759208592095921059211592125921359214592155921659217592185921959220592215922259223592245922559226592275922859229592305923159232592335923459235592365923759238592395924059241592425924359244592455924659247592485924959250592515925259253592545925559256592575925859259592605926159262592635926459265592665926759268592695927059271592725927359274592755927659277592785927959280592815928259283592845928559286592875928859289592905929159292592935929459295592965929759298592995930059301593025930359304593055930659307593085930959310593115931259313593145931559316593175931859319593205932159322593235932459325593265932759328593295933059331593325933359334593355933659337593385933959340593415934259343593445934559346593475934859349593505935159352593535935459355593565935759358593595936059361593625936359364593655936659367593685936959370593715937259373593745937559376593775937859379593805938159382593835938459385593865938759388593895939059391593925939359394593955939659397593985939959400594015940259403594045940559406594075940859409594105941159412594135941459415594165941759418594195942059421594225942359424594255942659427594285942959430594315943259433594345943559436594375943859439594405944159442594435944459445594465944759448594495945059451594525945359454594555945659457594585945959460594615946259463594645946559466594675946859469594705947159472594735947459475594765947759478594795948059481594825948359484594855948659487594885948959490594915949259493594945949559496594975949859499595005950159502595035950459505595065950759508595095951059511595125951359514595155951659517595185951959520595215952259523595245952559526595275952859529595305953159532595335953459535595365953759538595395954059541595425954359544595455954659547595485954959550595515955259553595545955559556595575955859559595605956159562595635956459565595665956759568595695957059571595725957359574595755957659577595785957959580595815958259583595845958559586595875958859589595905959159592595935959459595595965959759598595995960059601596025960359604596055960659607596085960959610596115961259613596145961559616596175961859619596205962159622596235962459625596265962759628596295963059631596325963359634596355963659637596385963959640596415964259643596445964559646596475964859649596505965159652596535965459655596565965759658596595966059661596625966359664596655966659667596685966959670596715967259673596745967559676596775967859679596805968159682596835968459685596865968759688596895969059691596925969359694596955969659697596985969959700597015970259703597045970559706597075970859709597105971159712597135971459715597165971759718597195972059721597225972359724597255972659727597285972959730597315973259733597345973559736597375973859739597405974159742597435974459745597465974759748597495975059751597525975359754597555975659757597585975959760597615976259763597645976559766597675976859769597705977159772597735977459775597765977759778597795978059781597825978359784597855978659787597885978959790597915979259793597945979559796597975979859799598005980159802598035980459805598065980759808598095981059811598125981359814598155981659817598185981959820598215982259823598245982559826598275982859829598305983159832598335983459835598365983759838598395984059841598425984359844598455984659847598485984959850598515985259853598545985559856598575985859859598605986159862598635986459865598665986759868598695987059871598725987359874598755987659877598785987959880598815988259883598845988559886598875988859889598905989159892598935989459895598965989759898598995990059901599025990359904599055990659907599085990959910599115991259913599145991559916599175991859919599205992159922599235992459925599265992759928599295993059931599325993359934599355993659937599385993959940599415994259943599445994559946599475994859949599505995159952599535995459955599565995759958599595996059961599625996359964599655996659967599685996959970599715997259973599745997559976599775997859979599805998159982599835998459985599865998759988599895999059991599925999359994599955999659997599985999960000600016000260003600046000560006600076000860009600106001160012600136001460015600166001760018600196002060021600226002360024600256002660027600286002960030600316003260033600346003560036600376003860039600406004160042600436004460045600466004760048600496005060051600526005360054600556005660057600586005960060600616006260063600646006560066600676006860069600706007160072600736007460075600766007760078600796008060081600826008360084600856008660087600886008960090600916009260093600946009560096600976009860099601006010160102601036010460105601066010760108601096011060111601126011360114601156011660117601186011960120601216012260123601246012560126601276012860129601306013160132601336013460135601366013760138601396014060141601426014360144601456014660147601486014960150601516015260153601546015560156601576015860159601606016160162601636016460165601666016760168601696017060171601726017360174601756017660177601786017960180601816018260183601846018560186601876018860189601906019160192601936019460195601966019760198601996020060201602026020360204602056020660207602086020960210602116021260213602146021560216602176021860219602206022160222602236022460225602266022760228602296023060231602326023360234602356023660237602386023960240602416024260243602446024560246602476024860249602506025160252602536025460255602566025760258602596026060261602626026360264602656026660267602686026960270602716027260273602746027560276602776027860279602806028160282602836028460285602866028760288602896029060291602926029360294602956029660297602986029960300603016030260303603046030560306603076030860309603106031160312603136031460315603166031760318603196032060321603226032360324603256032660327603286032960330603316033260333603346033560336603376033860339603406034160342603436034460345603466034760348603496035060351603526035360354603556035660357603586035960360603616036260363603646036560366603676036860369603706037160372603736037460375603766037760378603796038060381603826038360384603856038660387603886038960390603916039260393603946039560396603976039860399604006040160402604036040460405604066040760408604096041060411604126041360414604156041660417604186041960420604216042260423604246042560426604276042860429604306043160432604336043460435604366043760438604396044060441604426044360444604456044660447604486044960450604516045260453604546045560456604576045860459604606046160462604636046460465604666046760468604696047060471604726047360474604756047660477604786047960480604816048260483604846048560486604876048860489604906049160492604936049460495604966049760498604996050060501605026050360504605056050660507605086050960510605116051260513605146051560516605176051860519605206052160522605236052460525605266052760528605296053060531605326053360534605356053660537605386053960540605416054260543605446054560546605476054860549605506055160552605536055460555605566055760558605596056060561605626056360564605656056660567605686056960570605716057260573605746057560576605776057860579605806058160582605836058460585605866058760588605896059060591605926059360594605956059660597605986059960600606016060260603606046060560606606076060860609606106061160612606136061460615606166061760618606196062060621606226062360624606256062660627606286062960630606316063260633606346063560636606376063860639606406064160642606436064460645606466064760648606496065060651606526065360654606556065660657606586065960660606616066260663606646066560666606676066860669606706067160672606736067460675606766067760678606796068060681606826068360684606856068660687606886068960690606916069260693606946069560696606976069860699607006070160702607036070460705607066070760708607096071060711607126071360714607156071660717607186071960720607216072260723607246072560726607276072860729607306073160732607336073460735607366073760738607396074060741607426074360744607456074660747607486074960750607516075260753607546075560756607576075860759607606076160762607636076460765607666076760768607696077060771607726077360774607756077660777607786077960780607816078260783607846078560786607876078860789607906079160792607936079460795607966079760798607996080060801608026080360804608056080660807608086080960810608116081260813608146081560816608176081860819608206082160822608236082460825608266082760828608296083060831608326083360834608356083660837608386083960840608416084260843608446084560846608476084860849608506085160852608536085460855608566085760858608596086060861608626086360864608656086660867608686086960870608716087260873608746087560876608776087860879608806088160882608836088460885608866088760888608896089060891608926089360894608956089660897608986089960900609016090260903609046090560906609076090860909609106091160912609136091460915609166091760918609196092060921609226092360924609256092660927609286092960930609316093260933609346093560936609376093860939609406094160942609436094460945609466094760948609496095060951609526095360954609556095660957609586095960960609616096260963609646096560966609676096860969609706097160972609736097460975609766097760978609796098060981609826098360984609856098660987609886098960990609916099260993609946099560996609976099860999610006100161002610036100461005610066100761008610096101061011610126101361014610156101661017610186101961020610216102261023610246102561026610276102861029610306103161032610336103461035610366103761038610396104061041610426104361044610456104661047610486104961050610516105261053610546105561056610576105861059610606106161062610636106461065610666106761068610696107061071610726107361074610756107661077610786107961080610816108261083610846108561086610876108861089610906109161092610936109461095610966109761098610996110061101611026110361104611056110661107611086110961110611116111261113611146111561116611176111861119611206112161122611236112461125611266112761128611296113061131611326113361134611356113661137611386113961140611416114261143611446114561146611476114861149611506115161152611536115461155611566115761158611596116061161611626116361164611656116661167611686116961170611716117261173611746117561176611776117861179611806118161182611836118461185611866118761188611896119061191611926119361194611956119661197611986119961200612016120261203612046120561206612076120861209612106121161212612136121461215612166121761218612196122061221612226122361224612256122661227612286122961230612316123261233612346123561236612376123861239612406124161242612436124461245612466124761248612496125061251612526125361254612556125661257612586125961260612616126261263612646126561266612676126861269612706127161272612736127461275612766127761278612796128061281612826128361284612856128661287612886128961290612916129261293612946129561296612976129861299613006130161302613036130461305613066130761308613096131061311613126131361314613156131661317613186131961320613216132261323613246132561326613276132861329613306133161332613336133461335613366133761338613396134061341613426134361344613456134661347613486134961350613516135261353613546135561356613576135861359613606136161362613636136461365613666136761368613696137061371613726137361374613756137661377613786137961380613816138261383613846138561386613876138861389613906139161392613936139461395613966139761398613996140061401614026140361404614056140661407614086140961410614116141261413614146141561416614176141861419614206142161422614236142461425614266142761428614296143061431614326143361434614356143661437614386143961440614416144261443614446144561446614476144861449614506145161452614536145461455614566145761458614596146061461614626146361464614656146661467614686146961470614716147261473614746147561476614776147861479614806148161482614836148461485614866148761488614896149061491614926149361494614956149661497614986149961500615016150261503615046150561506615076150861509615106151161512615136151461515615166151761518615196152061521615226152361524615256152661527615286152961530615316153261533615346153561536615376153861539615406154161542615436154461545615466154761548615496155061551615526155361554615556155661557615586155961560615616156261563615646156561566615676156861569615706157161572615736157461575615766157761578615796158061581615826158361584615856158661587615886158961590615916159261593615946159561596615976159861599616006160161602616036160461605616066160761608616096161061611616126161361614616156161661617616186161961620616216162261623616246162561626616276162861629616306163161632616336163461635616366163761638616396164061641616426164361644616456164661647616486164961650616516165261653616546165561656616576165861659616606166161662616636166461665616666166761668616696167061671616726167361674616756167661677616786167961680616816168261683616846168561686616876168861689616906169161692616936169461695616966169761698616996170061701617026170361704617056170661707617086170961710617116171261713617146171561716617176171861719617206172161722617236172461725617266172761728617296173061731617326173361734617356173661737617386173961740617416174261743617446174561746617476174861749617506175161752617536175461755617566175761758617596176061761617626176361764617656176661767617686176961770617716177261773617746177561776617776177861779617806178161782617836178461785617866178761788617896179061791617926179361794617956179661797617986179961800618016180261803618046180561806618076180861809618106181161812618136181461815618166181761818618196182061821618226182361824618256182661827618286182961830618316183261833618346183561836618376183861839618406184161842618436184461845618466184761848618496185061851618526185361854618556185661857618586185961860618616186261863618646186561866618676186861869618706187161872618736187461875618766187761878618796188061881618826188361884618856188661887618886188961890618916189261893618946189561896618976189861899619006190161902619036190461905619066190761908619096191061911619126191361914619156191661917619186191961920619216192261923619246192561926619276192861929619306193161932619336193461935619366193761938619396194061941619426194361944619456194661947619486194961950619516195261953619546195561956619576195861959619606196161962619636196461965619666196761968619696197061971619726197361974619756197661977619786197961980619816198261983619846198561986619876198861989619906199161992619936199461995619966199761998619996200062001620026200362004620056200662007620086200962010620116201262013620146201562016620176201862019620206202162022620236202462025620266202762028620296203062031620326203362034620356203662037620386203962040620416204262043620446204562046620476204862049620506205162052620536205462055620566205762058620596206062061620626206362064620656206662067620686206962070620716207262073620746207562076620776207862079620806208162082620836208462085620866208762088620896209062091620926209362094620956209662097620986209962100621016210262103621046210562106621076210862109621106211162112621136211462115621166211762118621196212062121621226212362124621256212662127621286212962130621316213262133621346213562136621376213862139621406214162142621436214462145621466214762148621496215062151621526215362154621556215662157621586215962160621616216262163621646216562166621676216862169621706217162172621736217462175621766217762178621796218062181621826218362184621856218662187621886218962190621916219262193621946219562196621976219862199622006220162202622036220462205622066220762208622096221062211622126221362214622156221662217622186221962220622216222262223622246222562226622276222862229622306223162232622336223462235622366223762238622396224062241622426224362244622456224662247622486224962250622516225262253622546225562256622576225862259622606226162262622636226462265622666226762268622696227062271622726227362274622756227662277622786227962280622816228262283622846228562286622876228862289622906229162292622936229462295622966229762298622996230062301623026230362304623056230662307623086230962310623116231262313623146231562316623176231862319623206232162322623236232462325623266232762328623296233062331623326233362334623356233662337623386233962340623416234262343623446234562346623476234862349623506235162352623536235462355623566235762358623596236062361623626236362364623656236662367623686236962370623716237262373623746237562376623776237862379623806238162382623836238462385623866238762388623896239062391623926239362394623956239662397623986239962400624016240262403624046240562406624076240862409624106241162412624136241462415624166241762418624196242062421624226242362424624256242662427624286242962430624316243262433624346243562436624376243862439624406244162442624436244462445624466244762448624496245062451624526245362454624556245662457624586245962460624616246262463624646246562466624676246862469624706247162472624736247462475624766247762478624796248062481624826248362484624856248662487624886248962490624916249262493624946249562496624976249862499625006250162502625036250462505625066250762508625096251062511625126251362514625156251662517625186251962520625216252262523625246252562526625276252862529625306253162532625336253462535625366253762538625396254062541625426254362544625456254662547625486254962550625516255262553625546255562556625576255862559625606256162562625636256462565625666256762568625696257062571625726257362574625756257662577625786257962580625816258262583625846258562586625876258862589625906259162592625936259462595625966259762598625996260062601626026260362604626056260662607626086260962610626116261262613626146261562616626176261862619626206262162622626236262462625626266262762628626296263062631626326263362634626356263662637626386263962640626416264262643626446264562646626476264862649626506265162652626536265462655626566265762658626596266062661626626266362664626656266662667626686266962670626716267262673626746267562676626776267862679626806268162682626836268462685626866268762688626896269062691626926269362694626956269662697626986269962700627016270262703627046270562706627076270862709627106271162712627136271462715627166271762718627196272062721627226272362724627256272662727627286272962730627316273262733627346273562736627376273862739627406274162742627436274462745627466274762748627496275062751627526275362754627556275662757627586275962760627616276262763627646276562766627676276862769627706277162772627736277462775627766277762778627796278062781627826278362784627856278662787627886278962790627916279262793627946279562796627976279862799628006280162802628036280462805628066280762808628096281062811628126281362814628156281662817628186281962820628216282262823628246282562826628276282862829628306283162832628336283462835628366283762838628396284062841628426284362844628456284662847628486284962850628516285262853628546285562856628576285862859628606286162862628636286462865628666286762868628696287062871628726287362874628756287662877628786287962880628816288262883628846288562886628876288862889628906289162892628936289462895628966289762898628996290062901629026290362904629056290662907629086290962910629116291262913629146291562916629176291862919629206292162922629236292462925629266292762928629296293062931629326293362934629356293662937629386293962940629416294262943629446294562946629476294862949629506295162952629536295462955629566295762958629596296062961629626296362964629656296662967629686296962970629716297262973629746297562976629776297862979629806298162982629836298462985629866298762988629896299062991629926299362994629956299662997629986299963000630016300263003630046300563006630076300863009630106301163012630136301463015630166301763018630196302063021630226302363024630256302663027630286302963030630316303263033630346303563036630376303863039630406304163042630436304463045630466304763048630496305063051630526305363054630556305663057630586305963060630616306263063630646306563066630676306863069630706307163072630736307463075630766307763078630796308063081630826308363084630856308663087630886308963090630916309263093630946309563096630976309863099631006310163102631036310463105631066310763108631096311063111631126311363114631156311663117631186311963120631216312263123631246312563126631276312863129631306313163132631336313463135631366313763138631396314063141631426314363144631456314663147631486314963150631516315263153631546315563156631576315863159631606316163162631636316463165631666316763168631696317063171631726317363174631756317663177631786317963180631816318263183631846318563186631876318863189631906319163192631936319463195631966319763198631996320063201632026320363204632056320663207632086320963210632116321263213632146321563216632176321863219632206322163222632236322463225632266322763228632296323063231632326323363234632356323663237632386323963240632416324263243632446324563246632476324863249632506325163252632536325463255632566325763258632596326063261632626326363264632656326663267632686326963270632716327263273632746327563276632776327863279632806328163282632836328463285632866328763288632896329063291632926329363294632956329663297632986329963300633016330263303633046330563306633076330863309633106331163312633136331463315633166331763318633196332063321633226332363324633256332663327633286332963330633316333263333633346333563336633376333863339633406334163342633436334463345633466334763348633496335063351633526335363354633556335663357633586335963360633616336263363633646336563366633676336863369633706337163372633736337463375633766337763378633796338063381633826338363384633856338663387633886338963390633916339263393633946339563396633976339863399634006340163402634036340463405634066340763408634096341063411634126341363414634156341663417634186341963420634216342263423634246342563426634276342863429634306343163432634336343463435634366343763438634396344063441634426344363444634456344663447634486344963450634516345263453634546345563456634576345863459634606346163462634636346463465634666346763468634696347063471634726347363474634756347663477634786347963480634816348263483634846348563486634876348863489634906349163492634936349463495634966349763498634996350063501635026350363504635056350663507635086350963510635116351263513635146351563516635176351863519635206352163522635236352463525635266352763528635296353063531635326353363534635356353663537635386353963540635416354263543635446354563546635476354863549635506355163552635536355463555635566355763558635596356063561635626356363564635656356663567635686356963570635716357263573635746357563576635776357863579635806358163582635836358463585635866358763588635896359063591635926359363594635956359663597635986359963600636016360263603636046360563606636076360863609636106361163612636136361463615636166361763618636196362063621636226362363624636256362663627636286362963630636316363263633636346363563636636376363863639636406364163642636436364463645636466364763648636496365063651636526365363654636556365663657636586365963660636616366263663636646366563666636676366863669636706367163672636736367463675636766367763678636796368063681636826368363684636856368663687636886368963690636916369263693636946369563696636976369863699637006370163702637036370463705637066370763708637096371063711637126371363714637156371663717637186371963720637216372263723637246372563726637276372863729637306373163732637336373463735637366373763738637396374063741637426374363744637456374663747637486374963750637516375263753637546375563756637576375863759637606376163762637636376463765637666376763768637696377063771637726377363774637756377663777637786377963780637816378263783637846378563786637876378863789637906379163792637936379463795637966379763798637996380063801638026380363804638056380663807638086380963810638116381263813638146381563816638176381863819638206382163822638236382463825638266382763828638296383063831638326383363834638356383663837638386383963840638416384263843638446384563846638476384863849638506385163852638536385463855638566385763858638596386063861638626386363864638656386663867638686386963870638716387263873638746387563876638776387863879638806388163882638836388463885638866388763888638896389063891638926389363894638956389663897638986389963900639016390263903639046390563906639076390863909639106391163912639136391463915639166391763918639196392063921639226392363924639256392663927639286392963930639316393263933639346393563936639376393863939639406394163942639436394463945639466394763948639496395063951639526395363954639556395663957639586395963960639616396263963639646396563966639676396863969639706397163972639736397463975639766397763978639796398063981639826398363984639856398663987639886398963990639916399263993639946399563996639976399863999640006400164002640036400464005640066400764008640096401064011640126401364014640156401664017640186401964020640216402264023640246402564026640276402864029640306403164032640336403464035640366403764038640396404064041640426404364044640456404664047640486404964050640516405264053640546405564056640576405864059640606406164062640636406464065640666406764068640696407064071640726407364074640756407664077640786407964080640816408264083640846408564086640876408864089640906409164092640936409464095640966409764098640996410064101641026410364104641056410664107641086410964110641116411264113641146411564116641176411864119641206412164122641236412464125641266412764128641296413064131641326413364134641356413664137641386413964140641416414264143641446414564146641476414864149641506415164152641536415464155641566415764158641596416064161641626416364164641656416664167641686416964170641716417264173641746417564176641776417864179641806418164182641836418464185641866418764188641896419064191641926419364194641956419664197641986419964200642016420264203642046420564206642076420864209642106421164212642136421464215642166421764218642196422064221642226422364224642256422664227642286422964230642316423264233642346423564236642376423864239642406424164242642436424464245642466424764248642496425064251642526425364254642556425664257642586425964260642616426264263642646426564266642676426864269642706427164272642736427464275642766427764278642796428064281642826428364284642856428664287642886428964290642916429264293642946429564296642976429864299643006430164302643036430464305643066430764308643096431064311643126431364314643156431664317643186431964320643216432264323643246432564326643276432864329643306433164332643336433464335643366433764338643396434064341643426434364344643456434664347643486434964350643516435264353643546435564356643576435864359643606436164362643636436464365643666436764368643696437064371643726437364374643756437664377643786437964380643816438264383643846438564386643876438864389643906439164392643936439464395643966439764398643996440064401644026440364404644056440664407644086440964410644116441264413644146441564416644176441864419644206442164422644236442464425644266442764428644296443064431644326443364434644356443664437644386443964440644416444264443644446444564446644476444864449644506445164452644536445464455644566445764458644596446064461644626446364464644656446664467644686446964470644716447264473644746447564476644776447864479644806448164482644836448464485644866448764488644896449064491644926449364494644956449664497644986449964500645016450264503645046450564506645076450864509645106451164512645136451464515645166451764518645196452064521645226452364524645256452664527645286452964530645316453264533645346453564536645376453864539645406454164542645436454464545645466454764548645496455064551645526455364554645556455664557645586455964560645616456264563645646456564566645676456864569645706457164572645736457464575645766457764578645796458064581645826458364584645856458664587645886458964590645916459264593645946459564596645976459864599646006460164602646036460464605646066460764608646096461064611646126461364614646156461664617646186461964620646216462264623646246462564626646276462864629646306463164632646336463464635646366463764638646396464064641646426464364644646456464664647646486464964650646516465264653646546465564656646576465864659646606466164662646636466464665646666466764668646696467064671646726467364674646756467664677646786467964680646816468264683646846468564686646876468864689646906469164692646936469464695646966469764698646996470064701647026470364704647056470664707647086470964710647116471264713647146471564716647176471864719647206472164722647236472464725647266472764728647296473064731647326473364734647356473664737647386473964740647416474264743647446474564746647476474864749647506475164752647536475464755647566475764758647596476064761647626476364764647656476664767647686476964770647716477264773647746477564776647776477864779647806478164782647836478464785647866478764788647896479064791647926479364794647956479664797647986479964800648016480264803648046480564806648076480864809648106481164812648136481464815648166481764818648196482064821648226482364824648256482664827648286482964830648316483264833648346483564836648376483864839648406484164842648436484464845648466484764848648496485064851648526485364854648556485664857648586485964860648616486264863648646486564866648676486864869648706487164872648736487464875648766487764878648796488064881648826488364884648856488664887648886488964890648916489264893648946489564896648976489864899649006490164902649036490464905649066490764908649096491064911649126491364914649156491664917649186491964920649216492264923649246492564926649276492864929649306493164932649336493464935649366493764938649396494064941649426494364944649456494664947649486494964950649516495264953649546495564956649576495864959649606496164962649636496464965649666496764968649696497064971649726497364974649756497664977649786497964980649816498264983649846498564986649876498864989649906499164992649936499464995649966499764998649996500065001650026500365004650056500665007650086500965010650116501265013650146501565016650176501865019650206502165022650236502465025650266502765028650296503065031650326503365034650356503665037650386503965040650416504265043650446504565046650476504865049650506505165052650536505465055650566505765058650596506065061650626506365064650656506665067650686506965070650716507265073650746507565076650776507865079650806508165082650836508465085650866508765088650896509065091650926509365094650956509665097650986509965100651016510265103651046510565106651076510865109651106511165112651136511465115651166511765118651196512065121651226512365124651256512665127651286512965130651316513265133651346513565136651376513865139651406514165142651436514465145651466514765148651496515065151651526515365154651556515665157651586515965160651616516265163651646516565166651676516865169651706517165172651736517465175651766517765178651796518065181651826518365184651856518665187651886518965190651916519265193651946519565196651976519865199652006520165202652036520465205652066520765208652096521065211652126521365214652156521665217652186521965220652216522265223652246522565226652276522865229652306523165232652336523465235652366523765238652396524065241652426524365244652456524665247652486524965250652516525265253652546525565256652576525865259652606526165262652636526465265652666526765268652696527065271652726527365274652756527665277652786527965280652816528265283652846528565286652876528865289652906529165292652936529465295652966529765298652996530065301653026530365304653056530665307653086530965310653116531265313653146531565316653176531865319653206532165322653236532465325653266532765328653296533065331653326533365334653356533665337653386533965340653416534265343653446534565346653476534865349653506535165352653536535465355653566535765358653596536065361653626536365364653656536665367653686536965370653716537265373653746537565376653776537865379653806538165382653836538465385653866538765388653896539065391653926539365394653956539665397653986539965400654016540265403654046540565406654076540865409654106541165412654136541465415654166541765418654196542065421654226542365424654256542665427654286542965430654316543265433654346543565436654376543865439654406544165442654436544465445654466544765448654496545065451654526545365454654556545665457654586545965460654616546265463654646546565466654676546865469654706547165472654736547465475654766547765478654796548065481654826548365484654856548665487654886548965490654916549265493654946549565496654976549865499655006550165502655036550465505655066550765508655096551065511655126551365514655156551665517655186551965520655216552265523655246552565526655276552865529655306553165532655336553465535655366553765538655396554065541655426554365544655456554665547655486554965550655516555265553655546555565556655576555865559655606556165562655636556465565655666556765568655696557065571655726557365574655756557665577655786557965580655816558265583655846558565586655876558865589655906559165592655936559465595655966559765598655996560065601656026560365604656056560665607656086560965610656116561265613656146561565616656176561865619656206562165622656236562465625656266562765628656296563065631656326563365634656356563665637656386563965640656416564265643656446564565646656476564865649656506565165652656536565465655656566565765658656596566065661656626566365664656656566665667656686566965670656716567265673656746567565676656776567865679656806568165682656836568465685656866568765688656896569065691656926569365694656956569665697656986569965700657016570265703657046570565706657076570865709657106571165712657136571465715657166571765718657196572065721657226572365724657256572665727657286572965730657316573265733657346573565736657376573865739657406574165742657436574465745657466574765748657496575065751657526575365754657556575665757657586575965760657616576265763657646576565766657676576865769657706577165772657736577465775657766577765778657796578065781657826578365784657856578665787657886578965790657916579265793657946579565796657976579865799658006580165802658036580465805658066580765808658096581065811658126581365814658156581665817658186581965820658216582265823658246582565826658276582865829658306583165832658336583465835658366583765838658396584065841658426584365844658456584665847658486584965850658516585265853658546585565856658576585865859658606586165862658636586465865658666586765868658696587065871658726587365874658756587665877658786587965880658816588265883658846588565886658876588865889658906589165892658936589465895658966589765898658996590065901659026590365904659056590665907659086590965910659116591265913659146591565916659176591865919659206592165922659236592465925659266592765928659296593065931659326593365934659356593665937659386593965940659416594265943659446594565946659476594865949659506595165952659536595465955659566595765958659596596065961659626596365964659656596665967659686596965970659716597265973659746597565976659776597865979659806598165982659836598465985659866598765988659896599065991659926599365994659956599665997659986599966000660016600266003660046600566006660076600866009660106601166012660136601466015660166601766018660196602066021660226602366024660256602666027660286602966030660316603266033660346603566036660376603866039660406604166042660436604466045660466604766048660496605066051660526605366054660556605666057660586605966060660616606266063660646606566066660676606866069660706607166072660736607466075660766607766078660796608066081660826608366084660856608666087660886608966090660916609266093660946609566096660976609866099661006610166102661036610466105661066610766108661096611066111661126611366114661156611666117661186611966120661216612266123661246612566126661276612866129661306613166132661336613466135661366613766138661396614066141661426614366144661456614666147661486614966150661516615266153661546615566156661576615866159661606616166162661636616466165661666616766168661696617066171661726617366174661756617666177661786617966180661816618266183661846618566186661876618866189661906619166192661936619466195661966619766198661996620066201662026620366204662056620666207662086620966210662116621266213662146621566216662176621866219662206622166222662236622466225662266622766228662296623066231662326623366234662356623666237662386623966240662416624266243662446624566246662476624866249662506625166252662536625466255662566625766258662596626066261662626626366264662656626666267662686626966270662716627266273662746627566276662776627866279662806628166282662836628466285662866628766288662896629066291662926629366294662956629666297662986629966300663016630266303663046630566306663076630866309663106631166312663136631466315663166631766318663196632066321663226632366324663256632666327663286632966330663316633266333663346633566336663376633866339663406634166342663436634466345663466634766348663496635066351663526635366354663556635666357663586635966360663616636266363663646636566366663676636866369663706637166372663736637466375663766637766378663796638066381663826638366384663856638666387663886638966390663916639266393663946639566396663976639866399664006640166402664036640466405664066640766408664096641066411664126641366414664156641666417664186641966420664216642266423664246642566426664276642866429664306643166432664336643466435664366643766438664396644066441664426644366444664456644666447664486644966450664516645266453664546645566456664576645866459664606646166462664636646466465664666646766468664696647066471664726647366474664756647666477664786647966480664816648266483664846648566486664876648866489664906649166492664936649466495664966649766498664996650066501665026650366504665056650666507665086650966510665116651266513665146651566516665176651866519665206652166522665236652466525665266652766528665296653066531665326653366534665356653666537665386653966540665416654266543665446654566546665476654866549665506655166552665536655466555665566655766558665596656066561665626656366564665656656666567665686656966570665716657266573665746657566576665776657866579665806658166582665836658466585665866658766588665896659066591665926659366594665956659666597665986659966600666016660266603666046660566606666076660866609666106661166612666136661466615666166661766618666196662066621666226662366624666256662666627666286662966630666316663266633666346663566636666376663866639666406664166642666436664466645666466664766648666496665066651666526665366654666556665666657666586665966660666616666266663666646666566666666676666866669666706667166672666736667466675666766667766678666796668066681666826668366684666856668666687666886668966690666916669266693666946669566696666976669866699667006670166702667036670466705667066670766708667096671066711667126671366714667156671666717667186671966720667216672266723667246672566726667276672866729667306673166732667336673466735667366673766738667396674066741667426674366744667456674666747667486674966750667516675266753667546675566756667576675866759667606676166762667636676466765667666676766768667696677066771667726677366774667756677666777667786677966780667816678266783667846678566786667876678866789667906679166792667936679466795667966679766798667996680066801668026680366804668056680666807668086680966810668116681266813668146681566816668176681866819668206682166822668236682466825668266682766828668296683066831668326683366834668356683666837668386683966840668416684266843668446684566846668476684866849668506685166852668536685466855668566685766858668596686066861668626686366864668656686666867668686686966870668716687266873668746687566876668776687866879668806688166882668836688466885668866688766888668896689066891668926689366894668956689666897668986689966900669016690266903669046690566906669076690866909669106691166912669136691466915669166691766918669196692066921669226692366924669256692666927669286692966930669316693266933669346693566936669376693866939669406694166942669436694466945669466694766948669496695066951669526695366954669556695666957669586695966960669616696266963669646696566966669676696866969669706697166972669736697466975669766697766978669796698066981669826698366984669856698666987669886698966990669916699266993669946699566996669976699866999670006700167002670036700467005670066700767008670096701067011670126701367014670156701667017670186701967020670216702267023670246702567026670276702867029670306703167032670336703467035670366703767038670396704067041670426704367044670456704667047670486704967050670516705267053670546705567056670576705867059670606706167062670636706467065670666706767068670696707067071670726707367074670756707667077670786707967080670816708267083670846708567086670876708867089670906709167092670936709467095670966709767098670996710067101671026710367104671056710667107671086710967110671116711267113671146711567116671176711867119671206712167122671236712467125671266712767128671296713067131671326713367134671356713667137671386713967140671416714267143671446714567146671476714867149671506715167152671536715467155671566715767158671596716067161671626716367164671656716667167671686716967170671716717267173671746717567176671776717867179671806718167182671836718467185671866718767188671896719067191671926719367194671956719667197671986719967200672016720267203672046720567206672076720867209672106721167212672136721467215672166721767218672196722067221672226722367224672256722667227672286722967230672316723267233672346723567236672376723867239672406724167242672436724467245672466724767248672496725067251672526725367254672556725667257672586725967260672616726267263672646726567266672676726867269672706727167272672736727467275672766727767278672796728067281672826728367284672856728667287672886728967290672916729267293672946729567296672976729867299673006730167302673036730467305673066730767308673096731067311673126731367314673156731667317673186731967320673216732267323673246732567326673276732867329673306733167332673336733467335673366733767338673396734067341673426734367344673456734667347673486734967350673516735267353673546735567356673576735867359673606736167362673636736467365673666736767368673696737067371673726737367374673756737667377673786737967380673816738267383673846738567386673876738867389673906739167392673936739467395673966739767398673996740067401674026740367404674056740667407674086740967410674116741267413674146741567416674176741867419674206742167422674236742467425674266742767428674296743067431674326743367434674356743667437674386743967440674416744267443674446744567446674476744867449674506745167452674536745467455674566745767458674596746067461674626746367464674656746667467674686746967470674716747267473674746747567476674776747867479674806748167482674836748467485674866748767488674896749067491674926749367494674956749667497674986749967500675016750267503675046750567506675076750867509675106751167512675136751467515675166751767518675196752067521675226752367524675256752667527675286752967530675316753267533675346753567536675376753867539675406754167542675436754467545675466754767548675496755067551675526755367554675556755667557675586755967560675616756267563675646756567566675676756867569675706757167572675736757467575675766757767578675796758067581675826758367584675856758667587675886758967590675916759267593675946759567596675976759867599676006760167602676036760467605676066760767608676096761067611676126761367614676156761667617676186761967620676216762267623676246762567626676276762867629676306763167632676336763467635676366763767638676396764067641676426764367644676456764667647676486764967650676516765267653676546765567656676576765867659676606766167662676636766467665676666766767668676696767067671676726767367674676756767667677676786767967680676816768267683676846768567686676876768867689676906769167692676936769467695676966769767698676996770067701677026770367704677056770667707677086770967710677116771267713677146771567716677176771867719677206772167722677236772467725677266772767728677296773067731677326773367734677356773667737677386773967740677416774267743677446774567746677476774867749677506775167752677536775467755677566775767758677596776067761677626776367764677656776667767677686776967770677716777267773677746777567776677776777867779677806778167782677836778467785677866778767788677896779067791677926779367794677956779667797677986779967800678016780267803678046780567806678076780867809678106781167812678136781467815678166781767818678196782067821678226782367824678256782667827678286782967830678316783267833678346783567836678376783867839678406784167842678436784467845678466784767848678496785067851678526785367854678556785667857678586785967860678616786267863678646786567866678676786867869678706787167872678736787467875678766787767878678796788067881678826788367884678856788667887678886788967890678916789267893678946789567896678976789867899679006790167902679036790467905679066790767908679096791067911679126791367914679156791667917679186791967920679216792267923679246792567926679276792867929679306793167932679336793467935679366793767938679396794067941679426794367944679456794667947679486794967950679516795267953679546795567956679576795867959679606796167962679636796467965679666796767968679696797067971679726797367974679756797667977679786797967980679816798267983679846798567986679876798867989679906799167992679936799467995679966799767998679996800068001680026800368004680056800668007680086800968010680116801268013680146801568016680176801868019680206802168022680236802468025680266802768028680296803068031680326803368034680356803668037680386803968040680416804268043680446804568046680476804868049680506805168052680536805468055680566805768058680596806068061680626806368064680656806668067680686806968070680716807268073680746807568076680776807868079680806808168082680836808468085680866808768088680896809068091680926809368094680956809668097680986809968100681016810268103681046810568106681076810868109681106811168112681136811468115681166811768118681196812068121681226812368124681256812668127681286812968130681316813268133681346813568136681376813868139681406814168142681436814468145681466814768148681496815068151681526815368154681556815668157681586815968160681616816268163681646816568166681676816868169681706817168172681736817468175681766817768178681796818068181681826818368184681856818668187681886818968190681916819268193681946819568196681976819868199682006820168202682036820468205682066820768208682096821068211682126821368214682156821668217682186821968220682216822268223682246822568226682276822868229682306823168232682336823468235682366823768238682396824068241682426824368244682456824668247682486824968250682516825268253682546825568256682576825868259682606826168262682636826468265682666826768268682696827068271682726827368274682756827668277682786827968280682816828268283682846828568286682876828868289682906829168292682936829468295682966829768298682996830068301683026830368304683056830668307683086830968310683116831268313683146831568316683176831868319683206832168322683236832468325683266832768328683296833068331683326833368334683356833668337683386833968340683416834268343683446834568346683476834868349683506835168352683536835468355683566835768358683596836068361683626836368364683656836668367683686836968370683716837268373683746837568376683776837868379683806838168382683836838468385683866838768388683896839068391683926839368394683956839668397683986839968400684016840268403684046840568406684076840868409684106841168412684136841468415684166841768418684196842068421684226842368424684256842668427684286842968430684316843268433684346843568436684376843868439684406844168442684436844468445684466844768448684496845068451684526845368454684556845668457684586845968460684616846268463684646846568466684676846868469684706847168472684736847468475684766847768478684796848068481684826848368484684856848668487684886848968490684916849268493684946849568496684976849868499685006850168502685036850468505685066850768508685096851068511685126851368514685156851668517685186851968520685216852268523685246852568526685276852868529685306853168532685336853468535685366853768538685396854068541685426854368544685456854668547685486854968550685516855268553685546855568556685576855868559685606856168562685636856468565685666856768568685696857068571685726857368574685756857668577685786857968580685816858268583685846858568586685876858868589685906859168592685936859468595685966859768598685996860068601686026860368604686056860668607686086860968610686116861268613686146861568616686176861868619686206862168622686236862468625686266862768628686296863068631686326863368634686356863668637686386863968640686416864268643686446864568646686476864868649686506865168652686536865468655686566865768658686596866068661686626866368664686656866668667686686866968670686716867268673686746867568676686776867868679686806868168682686836868468685686866868768688686896869068691686926869368694686956869668697686986869968700687016870268703687046870568706687076870868709687106871168712687136871468715687166871768718687196872068721687226872368724687256872668727687286872968730687316873268733687346873568736687376873868739687406874168742687436874468745687466874768748687496875068751687526875368754687556875668757687586875968760687616876268763687646876568766687676876868769687706877168772687736877468775687766877768778687796878068781687826878368784687856878668787687886878968790687916879268793687946879568796687976879868799688006880168802688036880468805688066880768808688096881068811688126881368814688156881668817688186881968820688216882268823688246882568826688276882868829688306883168832688336883468835688366883768838688396884068841688426884368844688456884668847688486884968850688516885268853688546885568856688576885868859688606886168862688636886468865688666886768868688696887068871688726887368874688756887668877688786887968880688816888268883688846888568886688876888868889688906889168892688936889468895688966889768898688996890068901689026890368904689056890668907689086890968910689116891268913689146891568916689176891868919689206892168922689236892468925689266892768928689296893068931689326893368934689356893668937689386893968940689416894268943689446894568946689476894868949689506895168952689536895468955689566895768958689596896068961689626896368964689656896668967689686896968970689716897268973689746897568976689776897868979689806898168982689836898468985689866898768988689896899068991689926899368994689956899668997689986899969000690016900269003690046900569006690076900869009690106901169012690136901469015690166901769018690196902069021690226902369024690256902669027690286902969030690316903269033690346903569036690376903869039690406904169042690436904469045690466904769048690496905069051690526905369054690556905669057690586905969060690616906269063690646906569066690676906869069690706907169072690736907469075690766907769078690796908069081690826908369084690856908669087690886908969090690916909269093690946909569096690976909869099691006910169102691036910469105691066910769108691096911069111691126911369114691156911669117691186911969120691216912269123691246912569126691276912869129691306913169132691336913469135691366913769138691396914069141691426914369144691456914669147691486914969150691516915269153691546915569156691576915869159691606916169162691636916469165691666916769168691696917069171691726917369174691756917669177691786917969180691816918269183691846918569186691876918869189691906919169192691936919469195691966919769198691996920069201692026920369204692056920669207692086920969210692116921269213692146921569216692176921869219692206922169222692236922469225692266922769228692296923069231692326923369234692356923669237692386923969240692416924269243692446924569246692476924869249692506925169252692536925469255692566925769258692596926069261692626926369264692656926669267692686926969270692716927269273692746927569276692776927869279692806928169282692836928469285692866928769288692896929069291692926929369294692956929669297692986929969300693016930269303693046930569306693076930869309693106931169312693136931469315693166931769318693196932069321693226932369324693256932669327693286932969330693316933269333693346933569336693376933869339693406934169342693436934469345693466934769348693496935069351693526935369354693556935669357693586935969360693616936269363693646936569366693676936869369693706937169372693736937469375693766937769378693796938069381693826938369384693856938669387693886938969390693916939269393693946939569396693976939869399694006940169402694036940469405694066940769408694096941069411694126941369414694156941669417694186941969420694216942269423694246942569426694276942869429694306943169432694336943469435694366943769438694396944069441694426944369444694456944669447694486944969450694516945269453694546945569456694576945869459694606946169462694636946469465694666946769468694696947069471694726947369474694756947669477694786947969480694816948269483694846948569486694876948869489694906949169492694936949469495694966949769498694996950069501695026950369504695056950669507695086950969510695116951269513695146951569516695176951869519695206952169522695236952469525695266952769528695296953069531695326953369534695356953669537695386953969540695416954269543695446954569546695476954869549695506955169552695536955469555695566955769558695596956069561695626956369564695656956669567695686956969570695716957269573695746957569576695776957869579695806958169582695836958469585695866958769588695896959069591695926959369594695956959669597695986959969600696016960269603696046960569606696076960869609696106961169612696136961469615696166961769618696196962069621696226962369624696256962669627696286962969630696316963269633696346963569636696376963869639696406964169642696436964469645696466964769648696496965069651696526965369654696556965669657696586965969660696616966269663696646966569666696676966869669696706967169672696736967469675696766967769678696796968069681696826968369684696856968669687696886968969690696916969269693696946969569696696976969869699697006970169702697036970469705697066970769708697096971069711697126971369714697156971669717697186971969720697216972269723697246972569726697276972869729697306973169732697336973469735697366973769738697396974069741697426974369744697456974669747697486974969750697516975269753697546975569756697576975869759697606976169762697636976469765697666976769768697696977069771697726977369774697756977669777697786977969780697816978269783697846978569786697876978869789697906979169792697936979469795697966979769798697996980069801698026980369804698056980669807698086980969810698116981269813698146981569816698176981869819698206982169822698236982469825698266982769828698296983069831698326983369834698356983669837698386983969840698416984269843698446984569846698476984869849698506985169852698536985469855698566985769858698596986069861698626986369864698656986669867698686986969870698716987269873698746987569876698776987869879698806988169882698836988469885698866988769888698896989069891698926989369894698956989669897698986989969900699016990269903699046990569906699076990869909699106991169912699136991469915699166991769918699196992069921699226992369924699256992669927699286992969930699316993269933699346993569936699376993869939699406994169942699436994469945699466994769948699496995069951699526995369954699556995669957699586995969960699616996269963699646996569966699676996869969699706997169972699736997469975699766997769978699796998069981699826998369984699856998669987699886998969990699916999269993699946999569996699976999869999700007000170002700037000470005700067000770008700097001070011700127001370014700157001670017700187001970020700217002270023700247002570026700277002870029700307003170032700337003470035700367003770038700397004070041700427004370044700457004670047700487004970050700517005270053700547005570056700577005870059700607006170062700637006470065700667006770068700697007070071700727007370074700757007670077700787007970080700817008270083700847008570086700877008870089700907009170092700937009470095700967009770098700997010070101701027010370104701057010670107701087010970110701117011270113701147011570116701177011870119701207012170122701237012470125701267012770128701297013070131701327013370134701357013670137701387013970140701417014270143701447014570146701477014870149701507015170152701537015470155701567015770158701597016070161701627016370164701657016670167701687016970170701717017270173701747017570176701777017870179701807018170182701837018470185701867018770188701897019070191701927019370194701957019670197701987019970200702017020270203702047020570206702077020870209702107021170212702137021470215702167021770218702197022070221702227022370224702257022670227702287022970230702317023270233702347023570236702377023870239702407024170242702437024470245702467024770248702497025070251702527025370254702557025670257702587025970260702617026270263702647026570266702677026870269702707027170272702737027470275702767027770278702797028070281702827028370284702857028670287702887028970290702917029270293702947029570296702977029870299703007030170302703037030470305703067030770308703097031070311703127031370314703157031670317703187031970320703217032270323703247032570326703277032870329703307033170332703337033470335703367033770338703397034070341703427034370344703457034670347703487034970350703517035270353703547035570356703577035870359703607036170362703637036470365703667036770368703697037070371703727037370374703757037670377703787037970380703817038270383703847038570386703877038870389703907039170392703937039470395703967039770398703997040070401704027040370404704057040670407704087040970410704117041270413704147041570416704177041870419704207042170422704237042470425704267042770428704297043070431704327043370434704357043670437704387043970440704417044270443704447044570446704477044870449704507045170452704537045470455704567045770458704597046070461704627046370464704657046670467704687046970470704717047270473704747047570476704777047870479704807048170482704837048470485704867048770488704897049070491704927049370494704957049670497704987049970500705017050270503705047050570506705077050870509705107051170512705137051470515705167051770518705197052070521705227052370524705257052670527705287052970530705317053270533705347053570536705377053870539705407054170542705437054470545705467054770548705497055070551705527055370554705557055670557705587055970560705617056270563705647056570566705677056870569705707057170572705737057470575705767057770578705797058070581705827058370584705857058670587705887058970590705917059270593705947059570596705977059870599706007060170602706037060470605706067060770608706097061070611706127061370614706157061670617706187061970620706217062270623706247062570626706277062870629706307063170632706337063470635706367063770638706397064070641706427064370644706457064670647706487064970650706517065270653706547065570656706577065870659706607066170662706637066470665706667066770668706697067070671706727067370674706757067670677706787067970680706817068270683706847068570686706877068870689706907069170692706937069470695706967069770698706997070070701707027070370704707057070670707707087070970710707117071270713707147071570716707177071870719707207072170722707237072470725707267072770728707297073070731707327073370734707357073670737707387073970740707417074270743707447074570746707477074870749707507075170752707537075470755707567075770758707597076070761707627076370764707657076670767707687076970770707717077270773707747077570776707777077870779707807078170782707837078470785707867078770788707897079070791707927079370794707957079670797707987079970800708017080270803708047080570806708077080870809708107081170812708137081470815708167081770818708197082070821708227082370824708257082670827708287082970830708317083270833708347083570836708377083870839708407084170842708437084470845708467084770848708497085070851708527085370854708557085670857708587085970860708617086270863708647086570866708677086870869708707087170872708737087470875708767087770878708797088070881708827088370884708857088670887708887088970890708917089270893708947089570896708977089870899709007090170902709037090470905709067090770908709097091070911709127091370914709157091670917709187091970920709217092270923709247092570926709277092870929709307093170932709337093470935709367093770938709397094070941709427094370944709457094670947709487094970950709517095270953709547095570956709577095870959709607096170962709637096470965709667096770968709697097070971709727097370974709757097670977709787097970980709817098270983709847098570986709877098870989709907099170992709937099470995709967099770998709997100071001710027100371004710057100671007710087100971010710117101271013710147101571016710177101871019710207102171022710237102471025710267102771028710297103071031710327103371034710357103671037710387103971040710417104271043710447104571046710477104871049710507105171052710537105471055710567105771058710597106071061710627106371064710657106671067710687106971070710717107271073710747107571076710777107871079710807108171082710837108471085710867108771088710897109071091710927109371094710957109671097710987109971100711017110271103711047110571106711077110871109711107111171112711137111471115711167111771118711197112071121711227112371124711257112671127711287112971130711317113271133711347113571136711377113871139711407114171142711437114471145711467114771148711497115071151711527115371154711557115671157711587115971160711617116271163711647116571166711677116871169711707117171172711737117471175711767117771178711797118071181711827118371184711857118671187711887118971190711917119271193711947119571196711977119871199712007120171202712037120471205712067120771208712097121071211712127121371214712157121671217712187121971220712217122271223712247122571226712277122871229712307123171232712337123471235712367123771238712397124071241712427124371244712457124671247712487124971250712517125271253712547125571256712577125871259712607126171262712637126471265712667126771268712697127071271712727127371274712757127671277712787127971280712817128271283712847128571286712877128871289712907129171292712937129471295712967129771298712997130071301713027130371304713057130671307713087130971310713117131271313713147131571316713177131871319713207132171322713237132471325713267132771328713297133071331713327133371334713357133671337713387133971340713417134271343713447134571346713477134871349713507135171352713537135471355713567135771358713597136071361713627136371364713657136671367713687136971370713717137271373713747137571376713777137871379713807138171382713837138471385713867138771388713897139071391713927139371394713957139671397713987139971400714017140271403714047140571406714077140871409714107141171412714137141471415714167141771418714197142071421714227142371424714257142671427714287142971430714317143271433714347143571436714377143871439714407144171442714437144471445714467144771448714497145071451714527145371454714557145671457714587145971460714617146271463714647146571466714677146871469714707147171472714737147471475714767147771478714797148071481714827148371484714857148671487714887148971490714917149271493714947149571496714977149871499715007150171502715037150471505715067150771508715097151071511715127151371514715157151671517715187151971520715217152271523715247152571526715277152871529715307153171532715337153471535715367153771538715397154071541715427154371544715457154671547715487154971550715517155271553715547155571556715577155871559715607156171562715637156471565715667156771568715697157071571715727157371574715757157671577715787157971580715817158271583715847158571586715877158871589715907159171592715937159471595715967159771598715997160071601716027160371604716057160671607716087160971610716117161271613716147161571616716177161871619716207162171622716237162471625716267162771628716297163071631716327163371634716357163671637716387163971640716417164271643716447164571646716477164871649716507165171652716537165471655716567165771658716597166071661716627166371664716657166671667716687166971670716717167271673716747167571676716777167871679716807168171682716837168471685716867168771688716897169071691716927169371694716957169671697716987169971700717017170271703717047170571706717077170871709717107171171712717137171471715717167171771718717197172071721717227172371724717257172671727717287172971730717317173271733717347173571736717377173871739717407174171742717437174471745717467174771748717497175071751717527175371754717557175671757717587175971760717617176271763717647176571766717677176871769717707177171772717737177471775717767177771778717797178071781717827178371784717857178671787717887178971790717917179271793717947179571796717977179871799718007180171802718037180471805718067180771808718097181071811718127181371814718157181671817718187181971820718217182271823718247182571826718277182871829718307183171832718337183471835718367183771838718397184071841718427184371844718457184671847718487184971850718517185271853718547185571856718577185871859718607186171862718637186471865718667186771868718697187071871718727187371874718757187671877718787187971880718817188271883718847188571886718877188871889718907189171892718937189471895718967189771898718997190071901719027190371904719057190671907719087190971910719117191271913719147191571916719177191871919719207192171922719237192471925719267192771928719297193071931719327193371934719357193671937719387193971940719417194271943719447194571946719477194871949719507195171952719537195471955719567195771958719597196071961719627196371964719657196671967719687196971970719717197271973719747197571976719777197871979719807198171982719837198471985719867198771988719897199071991719927199371994719957199671997719987199972000720017200272003720047200572006720077200872009720107201172012720137201472015720167201772018720197202072021720227202372024720257202672027720287202972030720317203272033720347203572036720377203872039720407204172042720437204472045720467204772048720497205072051720527205372054720557205672057720587205972060720617206272063720647206572066720677206872069720707207172072720737207472075720767207772078720797208072081720827208372084720857208672087720887208972090720917209272093720947209572096720977209872099721007210172102721037210472105721067210772108721097211072111721127211372114721157211672117721187211972120721217212272123721247212572126721277212872129721307213172132721337213472135721367213772138721397214072141721427214372144721457214672147721487214972150721517215272153721547215572156721577215872159721607216172162721637216472165721667216772168721697217072171721727217372174721757217672177721787217972180721817218272183721847218572186721877218872189721907219172192721937219472195721967219772198721997220072201722027220372204722057220672207722087220972210722117221272213722147221572216722177221872219722207222172222722237222472225722267222772228722297223072231722327223372234722357223672237722387223972240722417224272243722447224572246722477224872249722507225172252722537225472255722567225772258722597226072261722627226372264722657226672267722687226972270722717227272273722747227572276722777227872279722807228172282722837228472285722867228772288722897229072291722927229372294722957229672297722987229972300723017230272303723047230572306723077230872309723107231172312723137231472315723167231772318723197232072321723227232372324723257232672327723287232972330723317233272333723347233572336723377233872339723407234172342723437234472345723467234772348723497235072351723527235372354723557235672357723587235972360723617236272363723647236572366723677236872369723707237172372723737237472375723767237772378723797238072381723827238372384723857238672387723887238972390723917239272393723947239572396723977239872399724007240172402724037240472405724067240772408724097241072411724127241372414724157241672417724187241972420724217242272423724247242572426724277242872429724307243172432724337243472435724367243772438724397244072441724427244372444724457244672447724487244972450724517245272453724547245572456724577245872459724607246172462724637246472465724667246772468724697247072471724727247372474724757247672477724787247972480724817248272483724847248572486724877248872489724907249172492724937249472495724967249772498724997250072501725027250372504725057250672507725087250972510725117251272513725147251572516725177251872519725207252172522725237252472525725267252772528725297253072531725327253372534725357253672537725387253972540725417254272543725447254572546725477254872549725507255172552725537255472555725567255772558725597256072561725627256372564725657256672567725687256972570725717257272573725747257572576725777257872579725807258172582725837258472585725867258772588725897259072591725927259372594725957259672597725987259972600726017260272603726047260572606726077260872609726107261172612726137261472615726167261772618726197262072621726227262372624726257262672627726287262972630726317263272633726347263572636726377263872639726407264172642726437264472645726467264772648726497265072651726527265372654726557265672657726587265972660726617266272663726647266572666726677266872669726707267172672726737267472675726767267772678726797268072681726827268372684726857268672687726887268972690726917269272693726947269572696726977269872699727007270172702727037270472705727067270772708727097271072711727127271372714727157271672717727187271972720727217272272723727247272572726727277272872729727307273172732727337273472735727367273772738727397274072741727427274372744727457274672747727487274972750727517275272753727547275572756727577275872759727607276172762727637276472765727667276772768727697277072771727727277372774727757277672777727787277972780727817278272783727847278572786727877278872789727907279172792727937279472795727967279772798727997280072801728027280372804728057280672807728087280972810728117281272813728147281572816728177281872819728207282172822728237282472825728267282772828728297283072831728327283372834728357283672837728387283972840728417284272843728447284572846728477284872849728507285172852728537285472855728567285772858728597286072861728627286372864728657286672867728687286972870728717287272873728747287572876728777287872879728807288172882728837288472885728867288772888728897289072891728927289372894728957289672897728987289972900729017290272903729047290572906729077290872909729107291172912729137291472915729167291772918729197292072921729227292372924729257292672927729287292972930729317293272933729347293572936729377293872939729407294172942729437294472945729467294772948729497295072951729527295372954729557295672957729587295972960729617296272963729647296572966729677296872969729707297172972729737297472975729767297772978729797298072981729827298372984729857298672987729887298972990729917299272993729947299572996729977299872999730007300173002730037300473005730067300773008730097301073011730127301373014730157301673017730187301973020730217302273023730247302573026730277302873029730307303173032730337303473035730367303773038730397304073041730427304373044730457304673047730487304973050730517305273053730547305573056730577305873059730607306173062730637306473065730667306773068730697307073071730727307373074730757307673077730787307973080730817308273083730847308573086730877308873089730907309173092730937309473095730967309773098730997310073101731027310373104731057310673107731087310973110731117311273113731147311573116731177311873119731207312173122731237312473125731267312773128731297313073131731327313373134731357313673137731387313973140731417314273143731447314573146731477314873149731507315173152731537315473155731567315773158731597316073161731627316373164731657316673167731687316973170731717317273173731747317573176731777317873179731807318173182731837318473185731867318773188731897319073191731927319373194731957319673197731987319973200732017320273203732047320573206732077320873209732107321173212732137321473215732167321773218732197322073221732227322373224732257322673227732287322973230732317323273233732347323573236732377323873239732407324173242732437324473245732467324773248732497325073251732527325373254732557325673257732587325973260732617326273263732647326573266732677326873269732707327173272732737327473275732767327773278732797328073281732827328373284732857328673287732887328973290732917329273293732947329573296732977329873299733007330173302733037330473305733067330773308733097331073311733127331373314733157331673317733187331973320733217332273323733247332573326733277332873329733307333173332733337333473335733367333773338733397334073341733427334373344733457334673347733487334973350733517335273353733547335573356733577335873359733607336173362733637336473365733667336773368733697337073371733727337373374733757337673377733787337973380733817338273383733847338573386733877338873389733907339173392733937339473395733967339773398733997340073401734027340373404734057340673407734087340973410734117341273413734147341573416734177341873419734207342173422734237342473425734267342773428734297343073431734327343373434734357343673437734387343973440734417344273443734447344573446734477344873449734507345173452734537345473455734567345773458734597346073461734627346373464734657346673467734687346973470734717347273473734747347573476734777347873479734807348173482734837348473485734867348773488734897349073491734927349373494734957349673497734987349973500735017350273503735047350573506735077350873509735107351173512735137351473515735167351773518735197352073521735227352373524735257352673527735287352973530735317353273533735347353573536735377353873539735407354173542735437354473545735467354773548735497355073551735527355373554735557355673557735587355973560735617356273563735647356573566735677356873569735707357173572735737357473575735767357773578735797358073581735827358373584735857358673587735887358973590735917359273593735947359573596735977359873599736007360173602736037360473605736067360773608736097361073611736127361373614736157361673617736187361973620736217362273623736247362573626736277362873629736307363173632736337363473635736367363773638736397364073641736427364373644736457364673647736487364973650736517365273653736547365573656736577365873659736607366173662736637366473665736667366773668736697367073671736727367373674736757367673677736787367973680736817368273683736847368573686736877368873689736907369173692736937369473695736967369773698736997370073701737027370373704737057370673707737087370973710737117371273713737147371573716737177371873719737207372173722737237372473725737267372773728737297373073731737327373373734737357373673737737387373973740737417374273743737447374573746737477374873749737507375173752737537375473755737567375773758737597376073761737627376373764737657376673767737687376973770737717377273773737747377573776737777377873779737807378173782737837378473785737867378773788737897379073791737927379373794737957379673797737987379973800738017380273803738047380573806738077380873809738107381173812738137381473815738167381773818738197382073821738227382373824738257382673827738287382973830738317383273833738347383573836738377383873839738407384173842738437384473845738467384773848738497385073851738527385373854738557385673857738587385973860738617386273863738647386573866738677386873869738707387173872738737387473875738767387773878738797388073881738827388373884738857388673887738887388973890738917389273893738947389573896738977389873899739007390173902739037390473905739067390773908739097391073911739127391373914739157391673917739187391973920739217392273923739247392573926739277392873929739307393173932739337393473935739367393773938739397394073941739427394373944739457394673947739487394973950739517395273953739547395573956739577395873959739607396173962739637396473965739667396773968739697397073971739727397373974739757397673977739787397973980739817398273983739847398573986739877398873989739907399173992739937399473995739967399773998739997400074001740027400374004740057400674007740087400974010740117401274013740147401574016740177401874019740207402174022740237402474025740267402774028740297403074031740327403374034740357403674037740387403974040740417404274043740447404574046740477404874049740507405174052740537405474055740567405774058740597406074061740627406374064740657406674067740687406974070740717407274073740747407574076740777407874079740807408174082740837408474085740867408774088740897409074091740927409374094740957409674097740987409974100741017410274103741047410574106741077410874109741107411174112741137411474115741167411774118741197412074121741227412374124741257412674127741287412974130741317413274133741347413574136741377413874139741407414174142741437414474145741467414774148741497415074151741527415374154741557415674157741587415974160741617416274163741647416574166741677416874169741707417174172741737417474175741767417774178741797418074181741827418374184741857418674187741887418974190741917419274193741947419574196741977419874199742007420174202742037420474205742067420774208742097421074211742127421374214742157421674217742187421974220742217422274223742247422574226742277422874229742307423174232742337423474235742367423774238742397424074241742427424374244742457424674247742487424974250742517425274253742547425574256742577425874259742607426174262742637426474265742667426774268742697427074271742727427374274742757427674277742787427974280742817428274283742847428574286742877428874289742907429174292742937429474295742967429774298742997430074301743027430374304743057430674307743087430974310743117431274313743147431574316743177431874319743207432174322743237432474325743267432774328743297433074331743327433374334743357433674337743387433974340743417434274343743447434574346743477434874349743507435174352743537435474355743567435774358743597436074361743627436374364743657436674367743687436974370743717437274373743747437574376743777437874379743807438174382743837438474385743867438774388743897439074391743927439374394743957439674397743987439974400744017440274403744047440574406744077440874409744107441174412744137441474415744167441774418744197442074421744227442374424744257442674427744287442974430744317443274433744347443574436744377443874439744407444174442744437444474445744467444774448744497445074451744527445374454744557445674457744587445974460744617446274463744647446574466744677446874469744707447174472744737447474475744767447774478744797448074481744827448374484744857448674487744887448974490744917449274493744947449574496744977449874499745007450174502745037450474505745067450774508745097451074511745127451374514745157451674517745187451974520745217452274523745247452574526745277452874529745307453174532745337453474535745367453774538745397454074541745427454374544745457454674547745487454974550745517455274553745547455574556745577455874559745607456174562745637456474565745667456774568745697457074571745727457374574745757457674577745787457974580745817458274583745847458574586745877458874589745907459174592745937459474595745967459774598745997460074601746027460374604746057460674607746087460974610746117461274613746147461574616746177461874619746207462174622746237462474625746267462774628746297463074631746327463374634746357463674637746387463974640746417464274643746447464574646746477464874649746507465174652746537465474655746567465774658746597466074661746627466374664746657466674667746687466974670746717467274673746747467574676746777467874679746807468174682746837468474685746867468774688746897469074691746927469374694746957469674697746987469974700747017470274703747047470574706747077470874709747107471174712747137471474715747167471774718747197472074721747227472374724747257472674727747287472974730747317473274733747347473574736747377473874739747407474174742747437474474745747467474774748747497475074751747527475374754747557475674757747587475974760747617476274763747647476574766747677476874769747707477174772747737477474775747767477774778747797478074781747827478374784747857478674787747887478974790747917479274793747947479574796747977479874799748007480174802748037480474805748067480774808748097481074811748127481374814748157481674817748187481974820748217482274823748247482574826748277482874829748307483174832748337483474835748367483774838748397484074841748427484374844748457484674847748487484974850748517485274853748547485574856748577485874859748607486174862748637486474865748667486774868748697487074871748727487374874748757487674877748787487974880748817488274883748847488574886748877488874889748907489174892748937489474895748967489774898748997490074901749027490374904749057490674907749087490974910749117491274913749147491574916749177491874919749207492174922749237492474925749267492774928749297493074931749327493374934749357493674937749387493974940749417494274943749447494574946749477494874949749507495174952749537495474955749567495774958749597496074961749627496374964749657496674967749687496974970749717497274973749747497574976749777497874979749807498174982749837498474985749867498774988749897499074991749927499374994749957499674997749987499975000750017500275003750047500575006750077500875009750107501175012750137501475015750167501775018750197502075021750227502375024750257502675027750287502975030750317503275033750347503575036750377503875039750407504175042750437504475045750467504775048750497505075051750527505375054750557505675057750587505975060750617506275063750647506575066750677506875069750707507175072750737507475075750767507775078750797508075081750827508375084750857508675087750887508975090750917509275093750947509575096750977509875099751007510175102751037510475105751067510775108751097511075111751127511375114751157511675117751187511975120751217512275123751247512575126751277512875129751307513175132751337513475135751367513775138751397514075141751427514375144751457514675147751487514975150751517515275153751547515575156751577515875159751607516175162751637516475165751667516775168751697517075171751727517375174751757517675177751787517975180751817518275183751847518575186751877518875189751907519175192751937519475195751967519775198751997520075201752027520375204752057520675207752087520975210752117521275213752147521575216752177521875219752207522175222752237522475225752267522775228752297523075231752327523375234752357523675237752387523975240752417524275243752447524575246752477524875249752507525175252752537525475255752567525775258752597526075261752627526375264752657526675267752687526975270752717527275273752747527575276752777527875279752807528175282752837528475285752867528775288752897529075291752927529375294752957529675297752987529975300753017530275303753047530575306753077530875309753107531175312753137531475315753167531775318753197532075321753227532375324753257532675327753287532975330753317533275333753347533575336753377533875339753407534175342753437534475345753467534775348753497535075351753527535375354753557535675357753587535975360753617536275363753647536575366753677536875369753707537175372753737537475375753767537775378753797538075381753827538375384753857538675387753887538975390753917539275393753947539575396753977539875399754007540175402754037540475405754067540775408754097541075411754127541375414754157541675417754187541975420754217542275423754247542575426754277542875429754307543175432754337543475435754367543775438754397544075441754427544375444754457544675447754487544975450754517545275453754547545575456754577545875459754607546175462754637546475465754667546775468754697547075471754727547375474754757547675477754787547975480754817548275483754847548575486754877548875489754907549175492754937549475495754967549775498754997550075501755027550375504755057550675507755087550975510755117551275513755147551575516755177551875519755207552175522755237552475525755267552775528755297553075531755327553375534755357553675537755387553975540755417554275543755447554575546755477554875549755507555175552755537555475555755567555775558755597556075561755627556375564755657556675567755687556975570755717557275573755747557575576755777557875579755807558175582755837558475585755867558775588755897559075591755927559375594755957559675597755987559975600756017560275603756047560575606756077560875609756107561175612756137561475615756167561775618756197562075621756227562375624756257562675627756287562975630756317563275633756347563575636756377563875639756407564175642756437564475645756467564775648756497565075651756527565375654756557565675657756587565975660756617566275663756647566575666756677566875669756707567175672756737567475675756767567775678756797568075681756827568375684756857568675687756887568975690756917569275693756947569575696756977569875699757007570175702757037570475705757067570775708757097571075711757127571375714757157571675717757187571975720757217572275723757247572575726757277572875729757307573175732757337573475735757367573775738757397574075741757427574375744757457574675747757487574975750757517575275753757547575575756757577575875759757607576175762757637576475765757667576775768757697577075771757727577375774757757577675777757787577975780757817578275783757847578575786757877578875789757907579175792757937579475795757967579775798757997580075801758027580375804758057580675807758087580975810758117581275813758147581575816758177581875819758207582175822758237582475825758267582775828758297583075831758327583375834758357583675837758387583975840758417584275843758447584575846758477584875849758507585175852758537585475855758567585775858758597586075861758627586375864758657586675867758687586975870758717587275873758747587575876758777587875879758807588175882758837588475885758867588775888758897589075891758927589375894758957589675897758987589975900759017590275903759047590575906759077590875909759107591175912759137591475915759167591775918759197592075921759227592375924759257592675927759287592975930759317593275933759347593575936759377593875939759407594175942759437594475945759467594775948759497595075951759527595375954759557595675957759587595975960759617596275963759647596575966759677596875969759707597175972759737597475975759767597775978759797598075981759827598375984759857598675987759887598975990759917599275993759947599575996759977599875999760007600176002760037600476005760067600776008760097601076011760127601376014760157601676017760187601976020760217602276023760247602576026760277602876029760307603176032760337603476035760367603776038760397604076041760427604376044760457604676047760487604976050760517605276053760547605576056760577605876059760607606176062760637606476065760667606776068760697607076071760727607376074760757607676077760787607976080760817608276083760847608576086760877608876089760907609176092760937609476095760967609776098760997610076101761027610376104761057610676107761087610976110761117611276113761147611576116761177611876119761207612176122761237612476125761267612776128761297613076131761327613376134761357613676137761387613976140761417614276143761447614576146761477614876149761507615176152761537615476155761567615776158761597616076161761627616376164761657616676167761687616976170761717617276173761747617576176761777617876179761807618176182761837618476185761867618776188761897619076191761927619376194761957619676197761987619976200762017620276203762047620576206762077620876209762107621176212762137621476215762167621776218762197622076221762227622376224762257622676227762287622976230762317623276233762347623576236762377623876239762407624176242762437624476245762467624776248762497625076251762527625376254762557625676257762587625976260762617626276263762647626576266762677626876269762707627176272762737627476275762767627776278762797628076281762827628376284762857628676287762887628976290762917629276293762947629576296762977629876299763007630176302763037630476305763067630776308763097631076311763127631376314763157631676317763187631976320763217632276323763247632576326763277632876329763307633176332763337633476335763367633776338763397634076341763427634376344763457634676347763487634976350763517635276353763547635576356763577635876359763607636176362763637636476365763667636776368763697637076371763727637376374763757637676377763787637976380763817638276383763847638576386763877638876389763907639176392763937639476395763967639776398763997640076401764027640376404764057640676407764087640976410764117641276413764147641576416764177641876419764207642176422764237642476425764267642776428764297643076431764327643376434764357643676437764387643976440764417644276443764447644576446764477644876449764507645176452764537645476455764567645776458764597646076461764627646376464764657646676467764687646976470764717647276473764747647576476764777647876479764807648176482764837648476485764867648776488764897649076491764927649376494764957649676497764987649976500765017650276503765047650576506765077650876509765107651176512765137651476515765167651776518765197652076521765227652376524765257652676527765287652976530765317653276533765347653576536765377653876539765407654176542765437654476545765467654776548765497655076551765527655376554765557655676557765587655976560765617656276563765647656576566765677656876569765707657176572765737657476575765767657776578765797658076581765827658376584765857658676587765887658976590765917659276593765947659576596765977659876599766007660176602766037660476605766067660776608766097661076611766127661376614766157661676617766187661976620766217662276623766247662576626766277662876629766307663176632766337663476635766367663776638766397664076641766427664376644766457664676647766487664976650766517665276653766547665576656766577665876659766607666176662766637666476665766667666776668766697667076671766727667376674766757667676677766787667976680766817668276683766847668576686766877668876689766907669176692766937669476695766967669776698766997670076701767027670376704767057670676707767087670976710767117671276713767147671576716767177671876719767207672176722767237672476725767267672776728767297673076731767327673376734767357673676737767387673976740767417674276743767447674576746767477674876749767507675176752767537675476755767567675776758767597676076761767627676376764767657676676767767687676976770767717677276773767747677576776767777677876779767807678176782767837678476785767867678776788767897679076791767927679376794767957679676797767987679976800768017680276803768047680576806768077680876809768107681176812768137681476815768167681776818768197682076821768227682376824768257682676827768287682976830768317683276833768347683576836768377683876839768407684176842768437684476845768467684776848768497685076851768527685376854768557685676857768587685976860768617686276863768647686576866768677686876869768707687176872768737687476875768767687776878768797688076881768827688376884768857688676887768887688976890768917689276893768947689576896768977689876899769007690176902769037690476905769067690776908769097691076911769127691376914769157691676917769187691976920769217692276923769247692576926769277692876929769307693176932769337693476935769367693776938769397694076941769427694376944769457694676947769487694976950769517695276953769547695576956769577695876959769607696176962769637696476965769667696776968769697697076971769727697376974769757697676977769787697976980769817698276983769847698576986769877698876989769907699176992769937699476995769967699776998769997700077001770027700377004770057700677007770087700977010770117701277013770147701577016770177701877019770207702177022770237702477025770267702777028770297703077031770327703377034770357703677037770387703977040770417704277043770447704577046770477704877049770507705177052770537705477055770567705777058770597706077061770627706377064770657706677067770687706977070770717707277073770747707577076770777707877079770807708177082770837708477085770867708777088770897709077091770927709377094770957709677097770987709977100771017710277103771047710577106771077710877109771107711177112771137711477115771167711777118771197712077121771227712377124771257712677127771287712977130771317713277133771347713577136771377713877139771407714177142771437714477145771467714777148771497715077151771527715377154771557715677157771587715977160771617716277163771647716577166771677716877169771707717177172771737717477175771767717777178771797718077181771827718377184771857718677187771887718977190771917719277193771947719577196771977719877199772007720177202772037720477205772067720777208772097721077211772127721377214772157721677217772187721977220772217722277223772247722577226772277722877229772307723177232772337723477235772367723777238772397724077241772427724377244772457724677247772487724977250772517725277253772547725577256772577725877259772607726177262772637726477265772667726777268772697727077271772727727377274772757727677277772787727977280772817728277283772847728577286772877728877289772907729177292772937729477295772967729777298772997730077301773027730377304773057730677307773087730977310773117731277313773147731577316773177731877319773207732177322773237732477325773267732777328773297733077331773327733377334773357733677337773387733977340773417734277343773447734577346773477734877349773507735177352773537735477355773567735777358773597736077361773627736377364773657736677367773687736977370773717737277373773747737577376773777737877379773807738177382773837738477385773867738777388773897739077391773927739377394773957739677397773987739977400774017740277403774047740577406774077740877409774107741177412774137741477415774167741777418774197742077421774227742377424774257742677427774287742977430774317743277433774347743577436774377743877439774407744177442774437744477445774467744777448774497745077451774527745377454774557745677457774587745977460774617746277463774647746577466774677746877469774707747177472774737747477475774767747777478774797748077481774827748377484774857748677487774887748977490774917749277493774947749577496774977749877499775007750177502775037750477505775067750777508775097751077511775127751377514775157751677517775187751977520775217752277523775247752577526775277752877529775307753177532775337753477535775367753777538775397754077541775427754377544775457754677547775487754977550775517755277553775547755577556775577755877559775607756177562775637756477565775667756777568775697757077571775727757377574775757757677577775787757977580775817758277583775847758577586775877758877589775907759177592775937759477595775967759777598775997760077601776027760377604776057760677607776087760977610776117761277613776147761577616776177761877619776207762177622776237762477625776267762777628776297763077631776327763377634776357763677637776387763977640776417764277643776447764577646776477764877649776507765177652776537765477655776567765777658776597766077661776627766377664776657766677667776687766977670776717767277673776747767577676776777767877679776807768177682776837768477685776867768777688776897769077691776927769377694776957769677697776987769977700777017770277703777047770577706777077770877709777107771177712777137771477715777167771777718777197772077721777227772377724777257772677727777287772977730777317773277733777347773577736777377773877739777407774177742777437774477745777467774777748777497775077751777527775377754777557775677757777587775977760777617776277763777647776577766777677776877769777707777177772777737777477775777767777777778777797778077781777827778377784777857778677787777887778977790777917779277793777947779577796777977779877799778007780177802778037780477805778067780777808778097781077811778127781377814778157781677817778187781977820778217782277823778247782577826778277782877829778307783177832778337783477835778367783777838778397784077841778427784377844778457784677847778487784977850778517785277853778547785577856778577785877859778607786177862778637786477865778667786777868778697787077871778727787377874778757787677877778787787977880778817788277883778847788577886778877788877889778907789177892778937789477895778967789777898778997790077901779027790377904779057790677907779087790977910779117791277913779147791577916779177791877919779207792177922779237792477925779267792777928779297793077931779327793377934779357793677937779387793977940779417794277943779447794577946779477794877949779507795177952779537795477955779567795777958779597796077961779627796377964779657796677967779687796977970779717797277973779747797577976779777797877979779807798177982779837798477985779867798777988779897799077991779927799377994779957799677997779987799978000780017800278003780047800578006780077800878009780107801178012780137801478015780167801778018780197802078021780227802378024780257802678027780287802978030780317803278033780347803578036780377803878039780407804178042780437804478045780467804778048780497805078051780527805378054780557805678057780587805978060780617806278063780647806578066780677806878069780707807178072780737807478075780767807778078780797808078081780827808378084780857808678087780887808978090780917809278093780947809578096780977809878099781007810178102781037810478105781067810778108781097811078111781127811378114781157811678117781187811978120781217812278123781247812578126781277812878129781307813178132781337813478135781367813778138781397814078141781427814378144781457814678147781487814978150781517815278153781547815578156781577815878159781607816178162781637816478165781667816778168781697817078171781727817378174781757817678177781787817978180781817818278183781847818578186781877818878189781907819178192781937819478195781967819778198781997820078201782027820378204782057820678207782087820978210782117821278213782147821578216782177821878219782207822178222782237822478225782267822778228782297823078231782327823378234782357823678237782387823978240782417824278243782447824578246782477824878249782507825178252782537825478255782567825778258782597826078261782627826378264782657826678267782687826978270782717827278273782747827578276782777827878279782807828178282782837828478285782867828778288782897829078291782927829378294782957829678297782987829978300783017830278303783047830578306783077830878309783107831178312783137831478315783167831778318783197832078321783227832378324783257832678327783287832978330783317833278333783347833578336783377833878339783407834178342783437834478345783467834778348783497835078351783527835378354783557835678357783587835978360783617836278363783647836578366783677836878369783707837178372783737837478375783767837778378783797838078381783827838378384783857838678387783887838978390783917839278393783947839578396783977839878399784007840178402784037840478405784067840778408784097841078411784127841378414784157841678417784187841978420784217842278423784247842578426784277842878429784307843178432784337843478435784367843778438784397844078441784427844378444784457844678447784487844978450784517845278453784547845578456784577845878459784607846178462784637846478465784667846778468784697847078471784727847378474784757847678477784787847978480784817848278483784847848578486784877848878489784907849178492784937849478495784967849778498784997850078501785027850378504785057850678507785087850978510785117851278513785147851578516785177851878519785207852178522785237852478525785267852778528785297853078531785327853378534785357853678537785387853978540785417854278543785447854578546785477854878549785507855178552785537855478555785567855778558785597856078561785627856378564785657856678567785687856978570785717857278573785747857578576785777857878579785807858178582785837858478585785867858778588785897859078591785927859378594785957859678597785987859978600786017860278603786047860578606786077860878609786107861178612786137861478615786167861778618786197862078621786227862378624786257862678627786287862978630786317863278633786347863578636786377863878639786407864178642786437864478645786467864778648786497865078651786527865378654786557865678657786587865978660786617866278663786647866578666786677866878669786707867178672786737867478675786767867778678786797868078681786827868378684786857868678687786887868978690786917869278693786947869578696786977869878699787007870178702787037870478705787067870778708787097871078711787127871378714787157871678717787187871978720787217872278723787247872578726787277872878729787307873178732787337873478735787367873778738787397874078741787427874378744787457874678747787487874978750787517875278753787547875578756787577875878759787607876178762787637876478765787667876778768787697877078771787727877378774787757877678777787787877978780787817878278783787847878578786787877878878789787907879178792787937879478795787967879778798787997880078801788027880378804788057880678807788087880978810788117881278813788147881578816788177881878819788207882178822788237882478825788267882778828788297883078831788327883378834788357883678837788387883978840788417884278843788447884578846788477884878849788507885178852788537885478855788567885778858788597886078861788627886378864788657886678867788687886978870788717887278873788747887578876788777887878879788807888178882788837888478885788867888778888788897889078891788927889378894788957889678897788987889978900789017890278903789047890578906789077890878909789107891178912789137891478915789167891778918789197892078921789227892378924789257892678927789287892978930789317893278933789347893578936789377893878939789407894178942789437894478945789467894778948789497895078951789527895378954789557895678957789587895978960789617896278963789647896578966789677896878969789707897178972789737897478975789767897778978789797898078981789827898378984789857898678987789887898978990789917899278993789947899578996789977899878999790007900179002790037900479005790067900779008790097901079011790127901379014790157901679017790187901979020790217902279023790247902579026790277902879029790307903179032790337903479035790367903779038790397904079041790427904379044790457904679047790487904979050790517905279053790547905579056790577905879059790607906179062790637906479065790667906779068790697907079071790727907379074790757907679077790787907979080790817908279083790847908579086790877908879089790907909179092790937909479095790967909779098790997910079101791027910379104791057910679107791087910979110791117911279113791147911579116791177911879119791207912179122791237912479125791267912779128791297913079131791327913379134791357913679137791387913979140791417914279143791447914579146791477914879149791507915179152791537915479155791567915779158791597916079161791627916379164791657916679167791687916979170791717917279173791747917579176791777917879179791807918179182791837918479185791867918779188791897919079191791927919379194791957919679197791987919979200792017920279203792047920579206792077920879209792107921179212792137921479215792167921779218792197922079221792227922379224792257922679227792287922979230792317923279233792347923579236792377923879239792407924179242792437924479245792467924779248792497925079251792527925379254792557925679257792587925979260792617926279263792647926579266792677926879269792707927179272792737927479275792767927779278792797928079281792827928379284792857928679287792887928979290792917929279293792947929579296792977929879299793007930179302793037930479305793067930779308793097931079311793127931379314793157931679317793187931979320793217932279323793247932579326793277932879329793307933179332793337933479335793367933779338793397934079341793427934379344793457934679347793487934979350793517935279353793547935579356793577935879359793607936179362793637936479365793667936779368793697937079371793727937379374793757937679377793787937979380793817938279383793847938579386793877938879389793907939179392793937939479395793967939779398793997940079401794027940379404794057940679407794087940979410794117941279413794147941579416794177941879419794207942179422794237942479425794267942779428794297943079431794327943379434794357943679437794387943979440794417944279443794447944579446794477944879449794507945179452794537945479455794567945779458794597946079461794627946379464794657946679467794687946979470794717947279473794747947579476794777947879479794807948179482794837948479485794867948779488794897949079491794927949379494794957949679497794987949979500795017950279503795047950579506795077950879509795107951179512795137951479515795167951779518795197952079521795227952379524795257952679527795287952979530795317953279533795347953579536795377953879539795407954179542795437954479545795467954779548795497955079551795527955379554795557955679557795587955979560795617956279563795647956579566795677956879569795707957179572795737957479575795767957779578795797958079581795827958379584795857958679587795887958979590795917959279593795947959579596795977959879599796007960179602796037960479605796067960779608796097961079611796127961379614796157961679617796187961979620796217962279623796247962579626796277962879629796307963179632796337963479635796367963779638796397964079641796427964379644796457964679647796487964979650796517965279653796547965579656796577965879659796607966179662796637966479665796667966779668796697967079671796727967379674796757967679677796787967979680796817968279683796847968579686796877968879689796907969179692796937969479695796967969779698796997970079701797027970379704797057970679707797087970979710797117971279713797147971579716797177971879719797207972179722797237972479725797267972779728797297973079731797327973379734797357973679737797387973979740797417974279743797447974579746797477974879749797507975179752797537975479755797567975779758797597976079761797627976379764797657976679767797687976979770797717977279773797747977579776797777977879779797807978179782797837978479785797867978779788797897979079791797927979379794797957979679797797987979979800798017980279803798047980579806798077980879809798107981179812798137981479815798167981779818798197982079821798227982379824798257982679827798287982979830798317983279833798347983579836798377983879839798407984179842798437984479845798467984779848798497985079851798527985379854798557985679857798587985979860798617986279863798647986579866798677986879869798707987179872798737987479875798767987779878798797988079881798827988379884798857988679887798887988979890798917989279893798947989579896798977989879899799007990179902799037990479905799067990779908799097991079911799127991379914799157991679917799187991979920799217992279923799247992579926799277992879929799307993179932799337993479935799367993779938799397994079941799427994379944799457994679947799487994979950799517995279953799547995579956799577995879959799607996179962799637996479965799667996779968799697997079971799727997379974799757997679977799787997979980799817998279983799847998579986799877998879989799907999179992799937999479995799967999779998799998000080001800028000380004800058000680007800088000980010800118001280013800148001580016800178001880019800208002180022800238002480025800268002780028800298003080031800328003380034800358003680037800388003980040800418004280043800448004580046800478004880049800508005180052800538005480055800568005780058800598006080061800628006380064800658006680067800688006980070800718007280073800748007580076800778007880079800808008180082800838008480085800868008780088800898009080091800928009380094800958009680097800988009980100801018010280103801048010580106801078010880109801108011180112801138011480115801168011780118801198012080121801228012380124801258012680127801288012980130801318013280133801348013580136801378013880139801408014180142801438014480145801468014780148801498015080151801528015380154801558015680157801588015980160801618016280163801648016580166801678016880169801708017180172801738017480175801768017780178801798018080181801828018380184801858018680187801888018980190801918019280193801948019580196801978019880199802008020180202802038020480205802068020780208802098021080211802128021380214802158021680217802188021980220802218022280223802248022580226802278022880229802308023180232802338023480235802368023780238802398024080241802428024380244802458024680247802488024980250802518025280253802548025580256802578025880259802608026180262802638026480265802668026780268802698027080271802728027380274802758027680277802788027980280802818028280283802848028580286802878028880289802908029180292802938029480295802968029780298802998030080301803028030380304803058030680307803088030980310803118031280313803148031580316803178031880319803208032180322803238032480325803268032780328803298033080331803328033380334803358033680337803388033980340803418034280343803448034580346803478034880349803508035180352803538035480355803568035780358803598036080361803628036380364803658036680367803688036980370803718037280373803748037580376803778037880379803808038180382803838038480385803868038780388803898039080391803928039380394803958039680397803988039980400804018040280403804048040580406804078040880409804108041180412804138041480415804168041780418804198042080421804228042380424804258042680427804288042980430804318043280433804348043580436804378043880439804408044180442804438044480445804468044780448804498045080451804528045380454804558045680457804588045980460804618046280463804648046580466804678046880469804708047180472804738047480475804768047780478804798048080481804828048380484804858048680487804888048980490804918049280493804948049580496804978049880499805008050180502805038050480505805068050780508805098051080511805128051380514805158051680517805188051980520805218052280523805248052580526805278052880529805308053180532805338053480535805368053780538805398054080541805428054380544805458054680547805488054980550805518055280553805548055580556805578055880559805608056180562805638056480565805668056780568805698057080571805728057380574805758057680577805788057980580805818058280583805848058580586805878058880589805908059180592805938059480595805968059780598805998060080601806028060380604806058060680607806088060980610806118061280613806148061580616806178061880619806208062180622806238062480625806268062780628806298063080631806328063380634806358063680637806388063980640806418064280643806448064580646806478064880649806508065180652806538065480655806568065780658806598066080661806628066380664806658066680667806688066980670806718067280673806748067580676806778067880679806808068180682806838068480685806868068780688806898069080691806928069380694806958069680697806988069980700807018070280703807048070580706807078070880709807108071180712807138071480715807168071780718807198072080721807228072380724807258072680727807288072980730807318073280733807348073580736807378073880739807408074180742807438074480745807468074780748807498075080751807528075380754807558075680757807588075980760807618076280763807648076580766807678076880769807708077180772807738077480775807768077780778807798078080781807828078380784807858078680787807888078980790807918079280793807948079580796807978079880799808008080180802808038080480805808068080780808808098081080811808128081380814808158081680817808188081980820808218082280823808248082580826808278082880829808308083180832808338083480835808368083780838808398084080841808428084380844808458084680847808488084980850808518085280853808548085580856808578085880859808608086180862808638086480865808668086780868808698087080871808728087380874808758087680877808788087980880808818088280883808848088580886808878088880889808908089180892808938089480895808968089780898808998090080901809028090380904809058090680907809088090980910809118091280913809148091580916809178091880919809208092180922809238092480925809268092780928809298093080931809328093380934809358093680937809388093980940809418094280943809448094580946809478094880949809508095180952809538095480955809568095780958809598096080961809628096380964809658096680967809688096980970809718097280973809748097580976809778097880979809808098180982809838098480985809868098780988809898099080991809928099380994809958099680997809988099981000810018100281003810048100581006810078100881009810108101181012810138101481015810168101781018810198102081021810228102381024810258102681027810288102981030810318103281033810348103581036810378103881039810408104181042810438104481045810468104781048810498105081051810528105381054810558105681057810588105981060810618106281063810648106581066810678106881069810708107181072810738107481075810768107781078810798108081081810828108381084810858108681087810888108981090810918109281093810948109581096810978109881099811008110181102811038110481105811068110781108811098111081111811128111381114811158111681117811188111981120811218112281123811248112581126811278112881129811308113181132811338113481135811368113781138811398114081141811428114381144811458114681147811488114981150811518115281153811548115581156811578115881159811608116181162811638116481165811668116781168811698117081171811728117381174811758117681177811788117981180811818118281183811848118581186811878118881189811908119181192811938119481195811968119781198811998120081201812028120381204812058120681207812088120981210812118121281213812148121581216812178121881219812208122181222812238122481225812268122781228812298123081231812328123381234812358123681237812388123981240812418124281243812448124581246812478124881249812508125181252812538125481255812568125781258812598126081261812628126381264812658126681267812688126981270812718127281273812748127581276812778127881279812808128181282812838128481285812868128781288812898129081291812928129381294812958129681297812988129981300813018130281303813048130581306813078130881309813108131181312813138131481315813168131781318813198132081321813228132381324813258132681327813288132981330813318133281333813348133581336813378133881339813408134181342813438134481345813468134781348813498135081351813528135381354813558135681357813588135981360813618136281363813648136581366813678136881369813708137181372813738137481375813768137781378813798138081381813828138381384813858138681387813888138981390813918139281393813948139581396813978139881399814008140181402814038140481405814068140781408814098141081411814128141381414814158141681417814188141981420814218142281423814248142581426814278142881429814308143181432814338143481435814368143781438814398144081441814428144381444814458144681447814488144981450814518145281453814548145581456814578145881459814608146181462814638146481465814668146781468814698147081471814728147381474814758147681477814788147981480814818148281483814848148581486814878148881489814908149181492814938149481495814968149781498814998150081501815028150381504815058150681507815088150981510815118151281513815148151581516815178151881519815208152181522815238152481525815268152781528815298153081531815328153381534815358153681537815388153981540815418154281543815448154581546815478154881549815508155181552815538155481555815568155781558815598156081561815628156381564815658156681567815688156981570815718157281573815748157581576815778157881579815808158181582815838158481585815868158781588815898159081591815928159381594815958159681597815988159981600816018160281603816048160581606816078160881609816108161181612816138161481615816168161781618816198162081621816228162381624816258162681627816288162981630816318163281633816348163581636816378163881639816408164181642816438164481645816468164781648816498165081651816528165381654816558165681657816588165981660816618166281663816648166581666816678166881669816708167181672816738167481675816768167781678816798168081681816828168381684816858168681687816888168981690816918169281693816948169581696816978169881699817008170181702817038170481705817068170781708817098171081711817128171381714817158171681717817188171981720817218172281723817248172581726817278172881729817308173181732817338173481735817368173781738817398174081741817428174381744817458174681747817488174981750817518175281753817548175581756817578175881759817608176181762817638176481765817668176781768817698177081771817728177381774817758177681777817788177981780817818178281783817848178581786817878178881789817908179181792817938179481795817968179781798817998180081801818028180381804818058180681807818088180981810818118181281813818148181581816818178181881819818208182181822818238182481825818268182781828818298183081831818328183381834818358183681837818388183981840818418184281843818448184581846818478184881849818508185181852818538185481855818568185781858818598186081861818628186381864818658186681867818688186981870818718187281873818748187581876818778187881879818808188181882818838188481885818868188781888818898189081891818928189381894818958189681897818988189981900819018190281903819048190581906819078190881909819108191181912819138191481915819168191781918819198192081921819228192381924819258192681927819288192981930819318193281933819348193581936819378193881939819408194181942819438194481945819468194781948819498195081951819528195381954819558195681957819588195981960819618196281963819648196581966819678196881969819708197181972819738197481975819768197781978819798198081981819828198381984819858198681987819888198981990819918199281993819948199581996819978199881999820008200182002820038200482005820068200782008820098201082011820128201382014820158201682017820188201982020820218202282023820248202582026820278202882029820308203182032820338203482035820368203782038820398204082041820428204382044820458204682047820488204982050820518205282053820548205582056820578205882059820608206182062820638206482065820668206782068820698207082071820728207382074820758207682077820788207982080820818208282083820848208582086820878208882089820908209182092820938209482095820968209782098820998210082101821028210382104821058210682107821088210982110821118211282113821148211582116821178211882119821208212182122821238212482125821268212782128821298213082131821328213382134821358213682137821388213982140821418214282143821448214582146821478214882149821508215182152821538215482155821568215782158821598216082161821628216382164821658216682167821688216982170821718217282173821748217582176821778217882179821808218182182821838218482185821868218782188821898219082191821928219382194821958219682197821988219982200822018220282203822048220582206822078220882209822108221182212822138221482215822168221782218822198222082221822228222382224822258222682227822288222982230822318223282233822348223582236822378223882239822408224182242822438224482245822468224782248822498225082251822528225382254822558225682257822588225982260822618226282263822648226582266822678226882269822708227182272822738227482275822768227782278822798228082281822828228382284822858228682287822888228982290822918229282293822948229582296822978229882299823008230182302823038230482305823068230782308823098231082311823128231382314823158231682317823188231982320823218232282323823248232582326823278232882329823308233182332823338233482335823368233782338823398234082341823428234382344823458234682347823488234982350823518235282353823548235582356823578235882359823608236182362823638236482365823668236782368823698237082371823728237382374823758237682377823788237982380823818238282383823848238582386823878238882389823908239182392823938239482395823968239782398823998240082401824028240382404824058240682407824088240982410824118241282413824148241582416824178241882419824208242182422824238242482425824268242782428824298243082431824328243382434824358243682437824388243982440824418244282443824448244582446824478244882449824508245182452824538245482455824568245782458824598246082461824628246382464824658246682467824688246982470824718247282473824748247582476824778247882479824808248182482824838248482485824868248782488824898249082491824928249382494824958249682497824988249982500825018250282503825048250582506825078250882509825108251182512825138251482515825168251782518825198252082521825228252382524825258252682527825288252982530825318253282533825348253582536825378253882539825408254182542825438254482545825468254782548825498255082551825528255382554825558255682557825588255982560825618256282563825648256582566825678256882569825708257182572825738257482575825768257782578825798258082581825828258382584825858258682587825888258982590825918259282593825948259582596825978259882599826008260182602826038260482605826068260782608826098261082611826128261382614826158261682617826188261982620826218262282623826248262582626826278262882629826308263182632826338263482635826368263782638826398264082641826428264382644826458264682647826488264982650826518265282653826548265582656826578265882659826608266182662826638266482665826668266782668826698267082671826728267382674826758267682677826788267982680826818268282683826848268582686826878268882689826908269182692826938269482695826968269782698826998270082701827028270382704827058270682707827088270982710827118271282713827148271582716827178271882719827208272182722827238272482725827268272782728827298273082731827328273382734827358273682737827388273982740827418274282743827448274582746827478274882749827508275182752827538275482755827568275782758827598276082761827628276382764827658276682767827688276982770827718277282773827748277582776827778277882779827808278182782827838278482785827868278782788827898279082791827928279382794827958279682797827988279982800828018280282803828048280582806828078280882809828108281182812828138281482815828168281782818828198282082821828228282382824828258282682827828288282982830828318283282833828348283582836828378283882839828408284182842828438284482845828468284782848828498285082851828528285382854828558285682857828588285982860828618286282863828648286582866828678286882869828708287182872828738287482875828768287782878828798288082881828828288382884828858288682887828888288982890828918289282893828948289582896828978289882899829008290182902829038290482905829068290782908829098291082911829128291382914829158291682917829188291982920829218292282923829248292582926829278292882929829308293182932829338293482935829368293782938829398294082941829428294382944829458294682947829488294982950829518295282953829548295582956829578295882959829608296182962829638296482965829668296782968829698297082971829728297382974829758297682977829788297982980829818298282983829848298582986829878298882989829908299182992829938299482995829968299782998829998300083001830028300383004830058300683007830088300983010830118301283013830148301583016830178301883019830208302183022830238302483025830268302783028830298303083031830328303383034830358303683037830388303983040830418304283043830448304583046830478304883049830508305183052830538305483055830568305783058830598306083061830628306383064830658306683067830688306983070830718307283073830748307583076830778307883079830808308183082830838308483085830868308783088830898309083091830928309383094830958309683097830988309983100831018310283103831048310583106831078310883109831108311183112831138311483115831168311783118831198312083121831228312383124831258312683127831288312983130831318313283133831348313583136831378313883139831408314183142831438314483145831468314783148831498315083151831528315383154831558315683157831588315983160831618316283163831648316583166831678316883169831708317183172831738317483175831768317783178831798318083181831828318383184831858318683187831888318983190831918319283193831948319583196831978319883199832008320183202832038320483205832068320783208832098321083211832128321383214832158321683217832188321983220832218322283223832248322583226832278322883229832308323183232832338323483235832368323783238832398324083241832428324383244832458324683247832488324983250832518325283253832548325583256832578325883259832608326183262832638326483265832668326783268832698327083271832728327383274832758327683277832788327983280832818328283283832848328583286832878328883289832908329183292832938329483295832968329783298832998330083301833028330383304833058330683307833088330983310833118331283313833148331583316833178331883319833208332183322833238332483325833268332783328833298333083331833328333383334833358333683337833388333983340833418334283343833448334583346833478334883349833508335183352833538335483355833568335783358833598336083361833628336383364833658336683367833688336983370833718337283373833748337583376833778337883379833808338183382833838338483385833868338783388833898339083391833928339383394833958339683397833988339983400834018340283403834048340583406834078340883409834108341183412834138341483415834168341783418834198342083421834228342383424834258342683427834288342983430834318343283433834348343583436834378343883439834408344183442834438344483445834468344783448834498345083451834528345383454834558345683457834588345983460834618346283463834648346583466834678346883469834708347183472834738347483475834768347783478834798348083481834828348383484834858348683487834888348983490834918349283493834948349583496834978349883499835008350183502835038350483505835068350783508835098351083511835128351383514835158351683517835188351983520835218352283523835248352583526835278352883529835308353183532835338353483535835368353783538835398354083541835428354383544835458354683547835488354983550835518355283553835548355583556835578355883559835608356183562835638356483565835668356783568835698357083571835728357383574835758357683577835788357983580835818358283583835848358583586835878358883589835908359183592835938359483595835968359783598835998360083601836028360383604836058360683607836088360983610836118361283613836148361583616836178361883619836208362183622836238362483625836268362783628836298363083631836328363383634836358363683637836388363983640836418364283643836448364583646836478364883649836508365183652836538365483655836568365783658836598366083661836628366383664836658366683667836688366983670836718367283673836748367583676836778367883679836808368183682836838368483685836868368783688836898369083691836928369383694836958369683697836988369983700837018370283703837048370583706837078370883709837108371183712837138371483715837168371783718837198372083721837228372383724837258372683727837288372983730837318373283733837348373583736837378373883739837408374183742837438374483745837468374783748837498375083751837528375383754837558375683757837588375983760837618376283763837648376583766837678376883769837708377183772837738377483775837768377783778837798378083781837828378383784837858378683787837888378983790837918379283793837948379583796837978379883799838008380183802838038380483805838068380783808838098381083811838128381383814838158381683817838188381983820838218382283823838248382583826838278382883829838308383183832838338383483835838368383783838838398384083841838428384383844838458384683847838488384983850838518385283853838548385583856838578385883859838608386183862838638386483865838668386783868838698387083871838728387383874838758387683877838788387983880838818388283883838848388583886838878388883889838908389183892838938389483895838968389783898838998390083901839028390383904839058390683907839088390983910839118391283913839148391583916839178391883919839208392183922839238392483925839268392783928839298393083931839328393383934839358393683937839388393983940839418394283943839448394583946839478394883949839508395183952839538395483955839568395783958839598396083961839628396383964839658396683967839688396983970839718397283973839748397583976839778397883979839808398183982839838398483985839868398783988839898399083991839928399383994839958399683997839988399984000840018400284003840048400584006840078400884009840108401184012840138401484015840168401784018840198402084021840228402384024840258402684027840288402984030840318403284033840348403584036840378403884039840408404184042840438404484045840468404784048840498405084051840528405384054840558405684057840588405984060840618406284063840648406584066840678406884069840708407184072840738407484075840768407784078840798408084081840828408384084840858408684087840888408984090840918409284093840948409584096840978409884099841008410184102841038410484105841068410784108841098411084111841128411384114841158411684117841188411984120841218412284123841248412584126841278412884129841308413184132841338413484135841368413784138841398414084141841428414384144841458414684147841488414984150841518415284153841548415584156841578415884159841608416184162841638416484165841668416784168841698417084171841728417384174841758417684177841788417984180841818418284183841848418584186841878418884189841908419184192841938419484195841968419784198841998420084201842028420384204842058420684207842088420984210842118421284213842148421584216842178421884219842208422184222842238422484225842268422784228842298423084231842328423384234842358423684237842388423984240842418424284243842448424584246842478424884249842508425184252842538425484255842568425784258842598426084261842628426384264842658426684267842688426984270842718427284273842748427584276842778427884279842808428184282842838428484285842868428784288842898429084291842928429384294842958429684297842988429984300843018430284303843048430584306843078430884309843108431184312843138431484315843168431784318843198432084321843228432384324843258432684327843288432984330843318433284333843348433584336843378433884339843408434184342843438434484345843468434784348843498435084351843528435384354843558435684357843588435984360843618436284363843648436584366843678436884369843708437184372843738437484375843768437784378843798438084381843828438384384843858438684387843888438984390843918439284393843948439584396843978439884399844008440184402844038440484405844068440784408844098441084411844128441384414844158441684417844188441984420844218442284423844248442584426844278442884429844308443184432844338443484435844368443784438844398444084441844428444384444844458444684447844488444984450844518445284453844548445584456844578445884459844608446184462844638446484465844668446784468844698447084471844728447384474844758447684477844788447984480844818448284483844848448584486844878448884489844908449184492844938449484495844968449784498844998450084501845028450384504845058450684507845088450984510845118451284513845148451584516845178451884519845208452184522845238452484525845268452784528845298453084531845328453384534845358453684537845388453984540845418454284543845448454584546845478454884549845508455184552845538455484555845568455784558845598456084561845628456384564845658456684567845688456984570845718457284573845748457584576845778457884579845808458184582845838458484585845868458784588845898459084591845928459384594845958459684597845988459984600846018460284603846048460584606846078460884609846108461184612846138461484615846168461784618846198462084621846228462384624846258462684627846288462984630846318463284633846348463584636846378463884639846408464184642846438464484645846468464784648846498465084651846528465384654846558465684657846588465984660846618466284663846648466584666846678466884669846708467184672846738467484675846768467784678846798468084681846828468384684846858468684687846888468984690846918469284693846948469584696846978469884699847008470184702847038470484705847068470784708847098471084711847128471384714847158471684717847188471984720847218472284723847248472584726847278472884729847308473184732847338473484735847368473784738847398474084741847428474384744847458474684747847488474984750847518475284753847548475584756847578475884759847608476184762847638476484765847668476784768847698477084771847728477384774847758477684777847788477984780847818478284783847848478584786847878478884789847908479184792847938479484795847968479784798847998480084801848028480384804848058480684807848088480984810848118481284813848148481584816848178481884819848208482184822848238482484825848268482784828848298483084831848328483384834848358483684837848388483984840848418484284843848448484584846848478484884849848508485184852848538485484855848568485784858848598486084861848628486384864848658486684867848688486984870848718487284873848748487584876848778487884879848808488184882848838488484885848868488784888848898489084891848928489384894848958489684897848988489984900849018490284903849048490584906849078490884909849108491184912849138491484915849168491784918849198492084921849228492384924849258492684927849288492984930849318493284933849348493584936849378493884939849408494184942849438494484945849468494784948849498495084951849528495384954849558495684957849588495984960849618496284963849648496584966849678496884969849708497184972849738497484975849768497784978849798498084981849828498384984849858498684987849888498984990849918499284993849948499584996849978499884999850008500185002850038500485005850068500785008850098501085011850128501385014850158501685017850188501985020850218502285023850248502585026850278502885029850308503185032850338503485035850368503785038850398504085041850428504385044850458504685047850488504985050850518505285053850548505585056850578505885059850608506185062850638506485065850668506785068850698507085071850728507385074850758507685077850788507985080850818508285083850848508585086850878508885089850908509185092850938509485095850968509785098850998510085101851028510385104851058510685107851088510985110851118511285113851148511585116851178511885119851208512185122851238512485125851268512785128851298513085131851328513385134851358513685137851388513985140851418514285143851448514585146851478514885149851508515185152851538515485155851568515785158851598516085161851628516385164851658516685167851688516985170851718517285173851748517585176851778517885179851808518185182851838518485185851868518785188851898519085191851928519385194851958519685197851988519985200852018520285203852048520585206852078520885209852108521185212852138521485215852168521785218852198522085221852228522385224852258522685227852288522985230852318523285233852348523585236852378523885239852408524185242852438524485245852468524785248852498525085251852528525385254852558525685257852588525985260852618526285263852648526585266852678526885269852708527185272852738527485275852768527785278852798528085281852828528385284852858528685287852888528985290852918529285293852948529585296852978529885299853008530185302853038530485305853068530785308853098531085311853128531385314853158531685317853188531985320853218532285323853248532585326853278532885329853308533185332853338533485335853368533785338853398534085341853428534385344853458534685347853488534985350853518535285353853548535585356853578535885359853608536185362853638536485365853668536785368853698537085371853728537385374853758537685377853788537985380853818538285383853848538585386853878538885389853908539185392853938539485395853968539785398853998540085401854028540385404854058540685407854088540985410854118541285413854148541585416854178541885419854208542185422854238542485425854268542785428854298543085431854328543385434854358543685437854388543985440854418544285443854448544585446854478544885449854508545185452854538545485455854568545785458854598546085461854628546385464854658546685467854688546985470854718547285473854748547585476854778547885479854808548185482854838548485485854868548785488854898549085491854928549385494854958549685497854988549985500855018550285503855048550585506855078550885509855108551185512855138551485515855168551785518855198552085521855228552385524855258552685527855288552985530855318553285533855348553585536855378553885539855408554185542855438554485545855468554785548855498555085551855528555385554855558555685557855588555985560855618556285563855648556585566855678556885569855708557185572855738557485575855768557785578855798558085581855828558385584855858558685587855888558985590855918559285593855948559585596855978559885599856008560185602856038560485605856068560785608856098561085611856128561385614856158561685617856188561985620856218562285623856248562585626856278562885629856308563185632856338563485635856368563785638856398564085641856428564385644856458564685647856488564985650856518565285653856548565585656856578565885659856608566185662856638566485665856668566785668856698567085671856728567385674856758567685677856788567985680856818568285683856848568585686856878568885689856908569185692856938569485695856968569785698856998570085701857028570385704857058570685707857088570985710857118571285713857148571585716857178571885719857208572185722857238572485725857268572785728857298573085731857328573385734857358573685737857388573985740857418574285743857448574585746857478574885749857508575185752857538575485755857568575785758857598576085761857628576385764857658576685767857688576985770857718577285773857748577585776857778577885779857808578185782857838578485785857868578785788857898579085791857928579385794857958579685797857988579985800858018580285803858048580585806858078580885809858108581185812858138581485815858168581785818858198582085821858228582385824858258582685827858288582985830858318583285833858348583585836858378583885839858408584185842858438584485845858468584785848858498585085851858528585385854858558585685857858588585985860858618586285863858648586585866858678586885869858708587185872858738587485875858768587785878858798588085881858828588385884858858588685887858888588985890858918589285893858948589585896858978589885899859008590185902859038590485905859068590785908859098591085911859128591385914859158591685917859188591985920859218592285923859248592585926859278592885929859308593185932859338593485935859368593785938859398594085941859428594385944859458594685947859488594985950859518595285953859548595585956859578595885959859608596185962859638596485965859668596785968859698597085971859728597385974859758597685977859788597985980859818598285983859848598585986859878598885989859908599185992859938599485995859968599785998859998600086001860028600386004860058600686007860088600986010860118601286013860148601586016860178601886019860208602186022860238602486025860268602786028860298603086031860328603386034860358603686037860388603986040860418604286043860448604586046860478604886049860508605186052860538605486055860568605786058860598606086061860628606386064860658606686067860688606986070860718607286073860748607586076860778607886079860808608186082860838608486085860868608786088860898609086091860928609386094860958609686097860988609986100861018610286103861048610586106861078610886109861108611186112861138611486115861168611786118861198612086121861228612386124861258612686127861288612986130861318613286133861348613586136861378613886139861408614186142861438614486145861468614786148861498615086151861528615386154861558615686157861588615986160861618616286163861648616586166861678616886169861708617186172861738617486175861768617786178861798618086181861828618386184861858618686187861888618986190861918619286193861948619586196861978619886199862008620186202862038620486205862068620786208862098621086211862128621386214862158621686217862188621986220862218622286223862248622586226862278622886229862308623186232862338623486235862368623786238862398624086241862428624386244862458624686247862488624986250862518625286253862548625586256862578625886259862608626186262862638626486265862668626786268862698627086271862728627386274862758627686277862788627986280862818628286283862848628586286862878628886289862908629186292862938629486295862968629786298862998630086301863028630386304863058630686307863088630986310863118631286313863148631586316863178631886319863208632186322863238632486325863268632786328863298633086331863328633386334863358633686337863388633986340863418634286343863448634586346863478634886349863508635186352863538635486355863568635786358863598636086361863628636386364863658636686367863688636986370863718637286373863748637586376863778637886379863808638186382863838638486385863868638786388863898639086391863928639386394863958639686397863988639986400864018640286403864048640586406864078640886409864108641186412864138641486415864168641786418864198642086421864228642386424864258642686427864288642986430864318643286433864348643586436864378643886439864408644186442864438644486445864468644786448864498645086451864528645386454864558645686457864588645986460864618646286463864648646586466864678646886469864708647186472864738647486475864768647786478864798648086481864828648386484864858648686487864888648986490864918649286493864948649586496864978649886499865008650186502865038650486505865068650786508865098651086511865128651386514865158651686517865188651986520865218652286523865248652586526865278652886529865308653186532865338653486535865368653786538865398654086541865428654386544865458654686547865488654986550865518655286553865548655586556865578655886559865608656186562865638656486565865668656786568865698657086571865728657386574865758657686577865788657986580865818658286583865848658586586865878658886589865908659186592865938659486595865968659786598865998660086601866028660386604866058660686607866088660986610866118661286613866148661586616866178661886619866208662186622866238662486625866268662786628866298663086631866328663386634866358663686637866388663986640866418664286643866448664586646866478664886649866508665186652866538665486655866568665786658866598666086661866628666386664866658666686667866688666986670866718667286673866748667586676866778667886679866808668186682866838668486685866868668786688866898669086691866928669386694866958669686697866988669986700867018670286703867048670586706867078670886709867108671186712867138671486715867168671786718867198672086721867228672386724867258672686727867288672986730867318673286733867348673586736867378673886739867408674186742867438674486745867468674786748867498675086751867528675386754867558675686757867588675986760867618676286763867648676586766867678676886769867708677186772867738677486775867768677786778867798678086781867828678386784867858678686787867888678986790867918679286793867948679586796867978679886799868008680186802868038680486805868068680786808868098681086811868128681386814868158681686817868188681986820868218682286823868248682586826868278682886829868308683186832868338683486835868368683786838868398684086841868428684386844868458684686847868488684986850868518685286853868548685586856868578685886859868608686186862868638686486865868668686786868868698687086871868728687386874868758687686877868788687986880868818688286883868848688586886868878688886889868908689186892868938689486895868968689786898868998690086901869028690386904869058690686907869088690986910869118691286913869148691586916869178691886919869208692186922869238692486925869268692786928869298693086931869328693386934869358693686937869388693986940869418694286943869448694586946869478694886949869508695186952869538695486955869568695786958869598696086961869628696386964869658696686967869688696986970869718697286973869748697586976869778697886979869808698186982869838698486985869868698786988869898699086991869928699386994869958699686997869988699987000870018700287003870048700587006870078700887009870108701187012870138701487015870168701787018870198702087021870228702387024870258702687027870288702987030870318703287033870348703587036870378703887039870408704187042870438704487045870468704787048870498705087051870528705387054870558705687057870588705987060870618706287063870648706587066870678706887069870708707187072870738707487075870768707787078870798708087081870828708387084870858708687087870888708987090870918709287093870948709587096870978709887099871008710187102871038710487105871068710787108871098711087111871128711387114871158711687117871188711987120871218712287123871248712587126871278712887129871308713187132871338713487135871368713787138871398714087141871428714387144871458714687147871488714987150871518715287153871548715587156871578715887159871608716187162871638716487165871668716787168871698717087171871728717387174871758717687177871788717987180871818718287183871848718587186871878718887189871908719187192871938719487195871968719787198871998720087201872028720387204872058720687207872088720987210872118721287213872148721587216872178721887219872208722187222872238722487225872268722787228872298723087231872328723387234872358723687237872388723987240872418724287243872448724587246872478724887249872508725187252872538725487255872568725787258872598726087261872628726387264872658726687267872688726987270872718727287273872748727587276872778727887279872808728187282872838728487285872868728787288872898729087291872928729387294872958729687297872988729987300873018730287303873048730587306873078730887309873108731187312873138731487315873168731787318873198732087321873228732387324873258732687327873288732987330873318733287333873348733587336873378733887339873408734187342873438734487345873468734787348873498735087351873528735387354873558735687357873588735987360873618736287363873648736587366873678736887369873708737187372873738737487375873768737787378873798738087381873828738387384873858738687387873888738987390873918739287393873948739587396873978739887399874008740187402874038740487405874068740787408874098741087411874128741387414874158741687417874188741987420874218742287423874248742587426874278742887429874308743187432874338743487435874368743787438874398744087441874428744387444874458744687447874488744987450874518745287453874548745587456874578745887459874608746187462874638746487465874668746787468874698747087471874728747387474874758747687477874788747987480874818748287483874848748587486874878748887489874908749187492874938749487495874968749787498874998750087501875028750387504875058750687507875088750987510875118751287513875148751587516875178751887519875208752187522875238752487525875268752787528875298753087531875328753387534875358753687537875388753987540875418754287543875448754587546875478754887549875508755187552875538755487555875568755787558875598756087561875628756387564875658756687567875688756987570875718757287573875748757587576875778757887579875808758187582875838758487585875868758787588875898759087591875928759387594875958759687597875988759987600876018760287603876048760587606876078760887609876108761187612876138761487615876168761787618876198762087621876228762387624876258762687627876288762987630876318763287633876348763587636876378763887639876408764187642876438764487645876468764787648876498765087651876528765387654876558765687657876588765987660876618766287663876648766587666876678766887669876708767187672876738767487675876768767787678876798768087681876828768387684876858768687687876888768987690876918769287693876948769587696876978769887699877008770187702877038770487705877068770787708877098771087711877128771387714877158771687717877188771987720877218772287723877248772587726877278772887729877308773187732877338773487735877368773787738877398774087741877428774387744877458774687747877488774987750877518775287753877548775587756877578775887759877608776187762877638776487765877668776787768877698777087771877728777387774877758777687777877788777987780877818778287783877848778587786877878778887789877908779187792877938779487795877968779787798877998780087801878028780387804878058780687807878088780987810878118781287813878148781587816878178781887819878208782187822878238782487825878268782787828878298783087831878328783387834878358783687837878388783987840878418784287843878448784587846878478784887849878508785187852878538785487855878568785787858878598786087861878628786387864878658786687867878688786987870878718787287873878748787587876878778787887879878808788187882878838788487885878868788787888878898789087891878928789387894878958789687897878988789987900879018790287903879048790587906879078790887909879108791187912879138791487915879168791787918879198792087921879228792387924879258792687927879288792987930879318793287933879348793587936879378793887939879408794187942879438794487945879468794787948879498795087951879528795387954879558795687957879588795987960879618796287963879648796587966879678796887969879708797187972879738797487975879768797787978879798798087981879828798387984879858798687987879888798987990879918799287993879948799587996879978799887999880008800188002880038800488005880068800788008880098801088011880128801388014880158801688017880188801988020880218802288023880248802588026880278802888029880308803188032880338803488035880368803788038880398804088041880428804388044880458804688047880488804988050880518805288053880548805588056880578805888059880608806188062880638806488065880668806788068880698807088071880728807388074880758807688077880788807988080880818808288083880848808588086880878808888089880908809188092880938809488095880968809788098880998810088101881028810388104881058810688107881088810988110881118811288113881148811588116881178811888119881208812188122881238812488125881268812788128881298813088131881328813388134881358813688137881388813988140881418814288143881448814588146881478814888149881508815188152881538815488155881568815788158881598816088161881628816388164881658816688167881688816988170881718817288173881748817588176881778817888179881808818188182881838818488185881868818788188881898819088191881928819388194881958819688197881988819988200882018820288203882048820588206882078820888209882108821188212882138821488215882168821788218882198822088221882228822388224882258822688227882288822988230882318823288233882348823588236882378823888239882408824188242882438824488245882468824788248882498825088251882528825388254882558825688257882588825988260882618826288263882648826588266882678826888269882708827188272882738827488275882768827788278882798828088281882828828388284882858828688287882888828988290882918829288293882948829588296882978829888299883008830188302883038830488305883068830788308883098831088311883128831388314883158831688317883188831988320883218832288323883248832588326883278832888329883308833188332883338833488335883368833788338883398834088341883428834388344883458834688347883488834988350883518835288353883548835588356883578835888359883608836188362883638836488365883668836788368883698837088371883728837388374883758837688377883788837988380883818838288383883848838588386883878838888389883908839188392883938839488395883968839788398883998840088401884028840388404884058840688407884088840988410884118841288413884148841588416884178841888419884208842188422884238842488425884268842788428884298843088431884328843388434884358843688437884388843988440884418844288443884448844588446884478844888449884508845188452884538845488455884568845788458884598846088461884628846388464884658846688467884688846988470884718847288473884748847588476884778847888479884808848188482884838848488485884868848788488884898849088491884928849388494884958849688497884988849988500885018850288503885048850588506885078850888509885108851188512885138851488515885168851788518885198852088521885228852388524885258852688527885288852988530885318853288533885348853588536885378853888539885408854188542885438854488545885468854788548885498855088551885528855388554885558855688557885588855988560885618856288563885648856588566885678856888569885708857188572885738857488575885768857788578885798858088581885828858388584885858858688587885888858988590885918859288593885948859588596885978859888599886008860188602886038860488605886068860788608886098861088611886128861388614886158861688617886188861988620886218862288623886248862588626886278862888629886308863188632886338863488635886368863788638886398864088641886428864388644886458864688647886488864988650886518865288653886548865588656886578865888659886608866188662886638866488665886668866788668886698867088671886728867388674886758867688677886788867988680886818868288683886848868588686886878868888689886908869188692886938869488695886968869788698886998870088701887028870388704887058870688707887088870988710887118871288713887148871588716887178871888719887208872188722887238872488725887268872788728887298873088731887328873388734887358873688737887388873988740887418874288743887448874588746887478874888749887508875188752887538875488755887568875788758887598876088761887628876388764887658876688767887688876988770887718877288773887748877588776887778877888779887808878188782887838878488785887868878788788887898879088791887928879388794887958879688797887988879988800888018880288803888048880588806888078880888809888108881188812888138881488815888168881788818888198882088821888228882388824888258882688827888288882988830888318883288833888348883588836888378883888839888408884188842888438884488845888468884788848888498885088851888528885388854888558885688857888588885988860888618886288863888648886588866888678886888869888708887188872888738887488875888768887788878888798888088881888828888388884888858888688887888888888988890888918889288893888948889588896888978889888899889008890188902889038890488905889068890788908889098891088911889128891388914889158891688917889188891988920889218892288923889248892588926889278892888929889308893188932889338893488935889368893788938889398894088941889428894388944889458894688947889488894988950889518895288953889548895588956889578895888959889608896188962889638896488965889668896788968889698897088971889728897388974889758897688977889788897988980889818898288983889848898588986889878898888989889908899188992889938899488995889968899788998889998900089001890028900389004890058900689007890088900989010890118901289013890148901589016890178901889019890208902189022890238902489025890268902789028890298903089031890328903389034890358903689037890388903989040890418904289043890448904589046890478904889049890508905189052890538905489055890568905789058890598906089061890628906389064890658906689067890688906989070890718907289073890748907589076890778907889079890808908189082890838908489085890868908789088890898909089091890928909389094890958909689097890988909989100891018910289103891048910589106891078910889109891108911189112891138911489115891168911789118891198912089121891228912389124891258912689127891288912989130891318913289133891348913589136891378913889139891408914189142891438914489145891468914789148891498915089151891528915389154891558915689157891588915989160891618916289163891648916589166891678916889169891708917189172891738917489175891768917789178891798918089181891828918389184891858918689187891888918989190891918919289193891948919589196891978919889199892008920189202892038920489205892068920789208892098921089211892128921389214892158921689217892188921989220892218922289223892248922589226892278922889229892308923189232892338923489235892368923789238892398924089241892428924389244892458924689247892488924989250892518925289253892548925589256892578925889259892608926189262892638926489265892668926789268892698927089271892728927389274892758927689277892788927989280892818928289283892848928589286892878928889289892908929189292892938929489295892968929789298892998930089301893028930389304893058930689307893088930989310893118931289313893148931589316893178931889319893208932189322893238932489325893268932789328893298933089331893328933389334893358933689337893388933989340893418934289343893448934589346893478934889349893508935189352893538935489355893568935789358893598936089361893628936389364893658936689367893688936989370893718937289373893748937589376893778937889379893808938189382893838938489385893868938789388893898939089391893928939389394893958939689397893988939989400894018940289403894048940589406894078940889409894108941189412894138941489415894168941789418894198942089421894228942389424894258942689427894288942989430894318943289433894348943589436894378943889439894408944189442894438944489445894468944789448894498945089451894528945389454894558945689457894588945989460894618946289463894648946589466894678946889469894708947189472894738947489475894768947789478894798948089481894828948389484894858948689487894888948989490894918949289493894948949589496894978949889499895008950189502895038950489505895068950789508895098951089511895128951389514895158951689517895188951989520895218952289523895248952589526895278952889529895308953189532895338953489535895368953789538895398954089541895428954389544895458954689547895488954989550895518955289553895548955589556895578955889559895608956189562895638956489565895668956789568895698957089571895728957389574895758957689577895788957989580895818958289583895848958589586895878958889589895908959189592895938959489595895968959789598895998960089601896028960389604896058960689607896088960989610896118961289613896148961589616896178961889619896208962189622896238962489625896268962789628896298963089631896328963389634896358963689637896388963989640896418964289643896448964589646896478964889649896508965189652896538965489655896568965789658896598966089661896628966389664896658966689667896688966989670896718967289673896748967589676896778967889679896808968189682896838968489685896868968789688896898969089691896928969389694896958969689697896988969989700897018970289703897048970589706897078970889709897108971189712897138971489715897168971789718897198972089721897228972389724897258972689727897288972989730897318973289733897348973589736897378973889739897408974189742897438974489745897468974789748897498975089751897528975389754897558975689757897588975989760897618976289763897648976589766897678976889769897708977189772897738977489775897768977789778897798978089781897828978389784897858978689787897888978989790897918979289793897948979589796897978979889799898008980189802898038980489805898068980789808898098981089811898128981389814898158981689817898188981989820898218982289823898248982589826898278982889829898308983189832898338983489835898368983789838898398984089841898428984389844898458984689847898488984989850898518985289853898548985589856898578985889859898608986189862898638986489865898668986789868898698987089871898728987389874898758987689877898788987989880898818988289883898848988589886898878988889889898908989189892898938989489895898968989789898898998990089901899028990389904899058990689907899088990989910899118991289913899148991589916899178991889919899208992189922899238992489925899268992789928899298993089931899328993389934899358993689937899388993989940899418994289943899448994589946899478994889949899508995189952899538995489955899568995789958899598996089961899628996389964899658996689967899688996989970899718997289973899748997589976899778997889979899808998189982899838998489985899868998789988899898999089991899928999389994899958999689997899988999990000900019000290003900049000590006900079000890009900109001190012900139001490015900169001790018900199002090021900229002390024900259002690027900289002990030900319003290033900349003590036900379003890039900409004190042900439004490045900469004790048900499005090051900529005390054900559005690057900589005990060900619006290063900649006590066900679006890069900709007190072900739007490075900769007790078900799008090081900829008390084900859008690087900889008990090900919009290093900949009590096900979009890099901009010190102901039010490105901069010790108901099011090111901129011390114901159011690117901189011990120901219012290123901249012590126901279012890129901309013190132901339013490135901369013790138901399014090141901429014390144901459014690147901489014990150901519015290153901549015590156901579015890159901609016190162901639016490165901669016790168901699017090171901729017390174901759017690177901789017990180901819018290183901849018590186901879018890189901909019190192901939019490195901969019790198901999020090201902029020390204902059020690207902089020990210902119021290213902149021590216902179021890219902209022190222902239022490225902269022790228902299023090231902329023390234902359023690237902389023990240902419024290243902449024590246902479024890249902509025190252902539025490255902569025790258902599026090261902629026390264902659026690267902689026990270902719027290273902749027590276902779027890279902809028190282902839028490285902869028790288902899029090291902929029390294902959029690297902989029990300903019030290303903049030590306903079030890309903109031190312903139031490315903169031790318903199032090321903229032390324903259032690327903289032990330903319033290333903349033590336903379033890339903409034190342903439034490345903469034790348903499035090351903529035390354903559035690357903589035990360903619036290363903649036590366903679036890369903709037190372903739037490375903769037790378903799038090381903829038390384903859038690387903889038990390903919039290393903949039590396903979039890399904009040190402904039040490405904069040790408904099041090411904129041390414904159041690417904189041990420904219042290423904249042590426904279042890429904309043190432904339043490435904369043790438904399044090441904429044390444904459044690447904489044990450904519045290453904549045590456904579045890459904609046190462904639046490465904669046790468904699047090471904729047390474904759047690477904789047990480904819048290483904849048590486904879048890489904909049190492904939049490495904969049790498904999050090501905029050390504905059050690507905089050990510905119051290513905149051590516905179051890519905209052190522905239052490525905269052790528905299053090531905329053390534905359053690537905389053990540905419054290543905449054590546905479054890549905509055190552905539055490555905569055790558905599056090561905629056390564905659056690567905689056990570905719057290573905749057590576905779057890579905809058190582905839058490585905869058790588905899059090591905929059390594905959059690597905989059990600906019060290603906049060590606906079060890609906109061190612906139061490615906169061790618906199062090621906229062390624906259062690627906289062990630906319063290633906349063590636906379063890639906409064190642906439064490645906469064790648906499065090651906529065390654906559065690657906589065990660906619066290663906649066590666906679066890669906709067190672906739067490675906769067790678906799068090681906829068390684906859068690687906889068990690906919069290693906949069590696906979069890699907009070190702907039070490705907069070790708907099071090711907129071390714907159071690717907189071990720907219072290723907249072590726907279072890729907309073190732907339073490735907369073790738907399074090741907429074390744907459074690747907489074990750907519075290753907549075590756907579075890759907609076190762907639076490765907669076790768907699077090771907729077390774907759077690777907789077990780907819078290783907849078590786907879078890789907909079190792907939079490795907969079790798907999080090801908029080390804908059080690807908089080990810908119081290813908149081590816908179081890819908209082190822908239082490825908269082790828908299083090831908329083390834908359083690837908389083990840908419084290843908449084590846908479084890849908509085190852908539085490855908569085790858908599086090861908629086390864908659086690867908689086990870908719087290873908749087590876908779087890879908809088190882908839088490885908869088790888908899089090891908929089390894908959089690897908989089990900909019090290903909049090590906909079090890909909109091190912909139091490915909169091790918909199092090921909229092390924909259092690927909289092990930909319093290933909349093590936909379093890939909409094190942909439094490945909469094790948909499095090951909529095390954909559095690957909589095990960909619096290963909649096590966909679096890969909709097190972909739097490975909769097790978909799098090981909829098390984909859098690987909889098990990909919099290993909949099590996909979099890999910009100191002910039100491005910069100791008910099101091011910129101391014910159101691017910189101991020910219102291023910249102591026910279102891029910309103191032910339103491035910369103791038910399104091041910429104391044910459104691047910489104991050910519105291053910549105591056910579105891059910609106191062910639106491065910669106791068910699107091071910729107391074910759107691077910789107991080910819108291083910849108591086910879108891089910909109191092910939109491095910969109791098910999110091101911029110391104911059110691107911089110991110911119111291113911149111591116911179111891119911209112191122911239112491125911269112791128911299113091131911329113391134911359113691137911389113991140911419114291143911449114591146911479114891149911509115191152911539115491155911569115791158911599116091161911629116391164911659116691167911689116991170911719117291173911749117591176911779117891179911809118191182911839118491185911869118791188911899119091191911929119391194911959119691197911989119991200912019120291203912049120591206912079120891209912109121191212912139121491215912169121791218912199122091221912229122391224912259122691227912289122991230912319123291233912349123591236912379123891239912409124191242912439124491245912469124791248912499125091251912529125391254912559125691257912589125991260912619126291263912649126591266912679126891269912709127191272912739127491275912769127791278912799128091281912829128391284912859128691287912889128991290912919129291293912949129591296912979129891299913009130191302913039130491305913069130791308913099131091311913129131391314913159131691317913189131991320913219132291323913249132591326913279132891329913309133191332913339133491335913369133791338913399134091341913429134391344913459134691347913489134991350913519135291353913549135591356913579135891359913609136191362913639136491365913669136791368913699137091371913729137391374913759137691377913789137991380913819138291383913849138591386913879138891389913909139191392913939139491395913969139791398913999140091401914029140391404914059140691407914089140991410914119141291413914149141591416914179141891419914209142191422914239142491425914269142791428914299143091431914329143391434914359143691437914389143991440914419144291443914449144591446914479144891449914509145191452914539145491455914569145791458914599146091461914629146391464914659146691467914689146991470914719147291473914749147591476914779147891479914809148191482914839148491485914869148791488914899149091491914929149391494914959149691497914989149991500915019150291503915049150591506915079150891509915109151191512915139151491515915169151791518915199152091521915229152391524915259152691527915289152991530915319153291533915349153591536915379153891539915409154191542915439154491545915469154791548915499155091551915529155391554915559155691557915589155991560915619156291563915649156591566915679156891569915709157191572915739157491575915769157791578915799158091581915829158391584915859158691587915889158991590915919159291593915949159591596915979159891599916009160191602916039160491605916069160791608916099161091611916129161391614916159161691617916189161991620916219162291623916249162591626916279162891629916309163191632916339163491635916369163791638916399164091641916429164391644916459164691647916489164991650916519165291653916549165591656916579165891659916609166191662916639166491665916669166791668916699167091671916729167391674916759167691677916789167991680916819168291683916849168591686916879168891689916909169191692916939169491695916969169791698916999170091701917029170391704917059170691707917089170991710917119171291713917149171591716917179171891719917209172191722917239172491725917269172791728917299173091731917329173391734917359173691737917389173991740917419174291743917449174591746917479174891749917509175191752917539175491755917569175791758917599176091761917629176391764917659176691767917689176991770917719177291773917749177591776917779177891779917809178191782917839178491785917869178791788917899179091791917929179391794917959179691797917989179991800918019180291803918049180591806918079180891809918109181191812918139181491815918169181791818918199182091821918229182391824918259182691827918289182991830918319183291833918349183591836918379183891839918409184191842918439184491845918469184791848918499185091851918529185391854918559185691857918589185991860918619186291863918649186591866918679186891869918709187191872918739187491875918769187791878918799188091881918829188391884918859188691887918889188991890918919189291893918949189591896918979189891899919009190191902919039190491905919069190791908919099191091911919129191391914919159191691917919189191991920919219192291923919249192591926919279192891929919309193191932919339193491935919369193791938919399194091941919429194391944919459194691947919489194991950919519195291953919549195591956919579195891959919609196191962919639196491965919669196791968919699197091971919729197391974919759197691977919789197991980919819198291983919849198591986919879198891989919909199191992919939199491995919969199791998919999200092001920029200392004920059200692007920089200992010920119201292013920149201592016920179201892019920209202192022920239202492025920269202792028920299203092031920329203392034920359203692037920389203992040920419204292043920449204592046920479204892049920509205192052920539205492055920569205792058920599206092061920629206392064920659206692067920689206992070920719207292073920749207592076920779207892079920809208192082920839208492085920869208792088920899209092091920929209392094920959209692097920989209992100921019210292103921049210592106921079210892109921109211192112921139211492115921169211792118921199212092121921229212392124921259212692127921289212992130921319213292133921349213592136921379213892139921409214192142921439214492145921469214792148921499215092151921529215392154921559215692157921589215992160921619216292163921649216592166921679216892169921709217192172921739217492175921769217792178921799218092181921829218392184921859218692187921889218992190921919219292193921949219592196921979219892199922009220192202922039220492205922069220792208922099221092211922129221392214922159221692217922189221992220922219222292223922249222592226922279222892229922309223192232922339223492235922369223792238922399224092241922429224392244922459224692247922489224992250922519225292253922549225592256922579225892259922609226192262922639226492265922669226792268922699227092271922729227392274922759227692277922789227992280922819228292283922849228592286922879228892289922909229192292922939229492295922969229792298922999230092301923029230392304923059230692307923089230992310923119231292313923149231592316923179231892319923209232192322923239232492325923269232792328923299233092331923329233392334923359233692337923389233992340923419234292343923449234592346923479234892349923509235192352923539235492355923569235792358923599236092361923629236392364923659236692367923689236992370923719237292373923749237592376923779237892379923809238192382923839238492385923869238792388923899239092391923929239392394923959239692397923989239992400924019240292403924049240592406924079240892409924109241192412924139241492415924169241792418924199242092421924229242392424924259242692427924289242992430924319243292433924349243592436924379243892439924409244192442924439244492445924469244792448924499245092451924529245392454924559245692457924589245992460924619246292463924649246592466924679246892469924709247192472924739247492475924769247792478924799248092481924829248392484924859248692487924889248992490924919249292493924949249592496924979249892499925009250192502925039250492505925069250792508925099251092511925129251392514925159251692517925189251992520925219252292523925249252592526925279252892529925309253192532925339253492535925369253792538925399254092541925429254392544925459254692547925489254992550925519255292553925549255592556925579255892559925609256192562925639256492565925669256792568925699257092571925729257392574925759257692577925789257992580925819258292583925849258592586925879258892589925909259192592925939259492595925969259792598925999260092601926029260392604926059260692607926089260992610926119261292613926149261592616926179261892619926209262192622926239262492625926269262792628926299263092631926329263392634926359263692637926389263992640926419264292643926449264592646926479264892649926509265192652926539265492655926569265792658926599266092661926629266392664926659266692667926689266992670926719267292673926749267592676926779267892679926809268192682926839268492685926869268792688926899269092691926929269392694926959269692697926989269992700927019270292703927049270592706927079270892709927109271192712927139271492715927169271792718927199272092721927229272392724927259272692727927289272992730927319273292733927349273592736927379273892739927409274192742927439274492745927469274792748927499275092751927529275392754927559275692757927589275992760927619276292763927649276592766927679276892769927709277192772927739277492775927769277792778927799278092781927829278392784927859278692787927889278992790927919279292793927949279592796927979279892799928009280192802928039280492805928069280792808928099281092811928129281392814928159281692817928189281992820928219282292823928249282592826928279282892829928309283192832928339283492835928369283792838928399284092841928429284392844928459284692847928489284992850928519285292853928549285592856928579285892859928609286192862928639286492865928669286792868928699287092871928729287392874928759287692877928789287992880928819288292883928849288592886928879288892889928909289192892928939289492895928969289792898928999290092901929029290392904929059290692907929089290992910929119291292913929149291592916929179291892919929209292192922929239292492925929269292792928929299293092931929329293392934929359293692937929389293992940929419294292943929449294592946929479294892949929509295192952929539295492955929569295792958929599296092961929629296392964929659296692967929689296992970929719297292973929749297592976929779297892979929809298192982929839298492985929869298792988929899299092991929929299392994929959299692997929989299993000930019300293003930049300593006930079300893009930109301193012930139301493015930169301793018930199302093021930229302393024930259302693027930289302993030930319303293033930349303593036930379303893039930409304193042930439304493045930469304793048930499305093051930529305393054930559305693057930589305993060930619306293063930649306593066930679306893069930709307193072930739307493075930769307793078930799308093081930829308393084930859308693087930889308993090930919309293093930949309593096930979309893099931009310193102931039310493105931069310793108931099311093111931129311393114931159311693117931189311993120931219312293123931249312593126931279312893129931309313193132931339313493135931369313793138931399314093141931429314393144931459314693147931489314993150931519315293153931549315593156931579315893159931609316193162931639316493165931669316793168931699317093171931729317393174931759317693177931789317993180931819318293183931849318593186931879318893189931909319193192931939319493195931969319793198931999320093201932029320393204932059320693207932089320993210932119321293213932149321593216932179321893219932209322193222932239322493225932269322793228932299323093231932329323393234932359323693237932389323993240932419324293243932449324593246932479324893249932509325193252932539325493255932569325793258932599326093261932629326393264932659326693267932689326993270932719327293273932749327593276932779327893279932809328193282932839328493285932869328793288932899329093291932929329393294932959329693297932989329993300933019330293303933049330593306933079330893309933109331193312933139331493315933169331793318933199332093321933229332393324933259332693327933289332993330933319333293333933349333593336933379333893339933409334193342933439334493345933469334793348933499335093351933529335393354933559335693357933589335993360933619336293363933649336593366933679336893369933709337193372933739337493375933769337793378933799338093381933829338393384933859338693387933889338993390933919339293393933949339593396933979339893399934009340193402934039340493405934069340793408934099341093411934129341393414934159341693417934189341993420934219342293423934249342593426934279342893429934309343193432934339343493435934369343793438934399344093441934429344393444934459344693447934489344993450934519345293453934549345593456934579345893459934609346193462934639346493465934669346793468934699347093471934729347393474934759347693477934789347993480934819348293483934849348593486934879348893489934909349193492934939349493495934969349793498934999350093501935029350393504935059350693507935089350993510935119351293513935149351593516935179351893519935209352193522935239352493525935269352793528935299353093531935329353393534935359353693537935389353993540935419354293543935449354593546935479354893549935509355193552935539355493555935569355793558935599356093561935629356393564935659356693567935689356993570935719357293573935749357593576935779357893579935809358193582935839358493585935869358793588935899359093591935929359393594935959359693597935989359993600936019360293603936049360593606936079360893609936109361193612936139361493615936169361793618936199362093621936229362393624936259362693627936289362993630936319363293633936349363593636936379363893639936409364193642936439364493645936469364793648936499365093651936529365393654936559365693657936589365993660936619366293663936649366593666936679366893669936709367193672936739367493675936769367793678936799368093681936829368393684936859368693687936889368993690936919369293693936949369593696936979369893699937009370193702937039370493705937069370793708937099371093711937129371393714937159371693717937189371993720937219372293723937249372593726937279372893729937309373193732937339373493735937369373793738937399374093741937429374393744937459374693747937489374993750937519375293753937549375593756937579375893759937609376193762937639376493765937669376793768937699377093771937729377393774937759377693777937789377993780937819378293783937849378593786937879378893789937909379193792937939379493795937969379793798937999380093801938029380393804938059380693807938089380993810938119381293813938149381593816938179381893819938209382193822938239382493825938269382793828938299383093831938329383393834938359383693837938389383993840938419384293843938449384593846938479384893849938509385193852938539385493855938569385793858938599386093861938629386393864938659386693867938689386993870938719387293873938749387593876938779387893879938809388193882938839388493885938869388793888938899389093891938929389393894938959389693897938989389993900939019390293903939049390593906939079390893909939109391193912939139391493915939169391793918939199392093921939229392393924939259392693927939289392993930939319393293933939349393593936939379393893939939409394193942939439394493945939469394793948939499395093951939529395393954939559395693957939589395993960939619396293963939649396593966939679396893969939709397193972939739397493975939769397793978939799398093981939829398393984939859398693987939889398993990939919399293993939949399593996939979399893999940009400194002940039400494005940069400794008940099401094011940129401394014940159401694017940189401994020940219402294023940249402594026940279402894029940309403194032940339403494035940369403794038940399404094041940429404394044940459404694047940489404994050940519405294053940549405594056940579405894059940609406194062940639406494065940669406794068940699407094071940729407394074940759407694077940789407994080940819408294083940849408594086940879408894089940909409194092940939409494095940969409794098940999410094101941029410394104941059410694107941089410994110941119411294113941149411594116941179411894119941209412194122941239412494125941269412794128941299413094131941329413394134941359413694137941389413994140941419414294143941449414594146941479414894149941509415194152941539415494155941569415794158941599416094161941629416394164941659416694167941689416994170941719417294173941749417594176941779417894179941809418194182941839418494185941869418794188941899419094191941929419394194941959419694197941989419994200942019420294203942049420594206942079420894209942109421194212942139421494215942169421794218942199422094221942229422394224942259422694227942289422994230942319423294233942349423594236942379423894239942409424194242942439424494245942469424794248942499425094251942529425394254942559425694257942589425994260942619426294263942649426594266942679426894269942709427194272942739427494275942769427794278942799428094281942829428394284942859428694287942889428994290942919429294293942949429594296942979429894299943009430194302943039430494305943069430794308943099431094311943129431394314943159431694317943189431994320943219432294323943249432594326943279432894329943309433194332943339433494335943369433794338943399434094341943429434394344943459434694347943489434994350943519435294353943549435594356943579435894359943609436194362943639436494365943669436794368943699437094371943729437394374943759437694377943789437994380943819438294383943849438594386943879438894389943909439194392943939439494395943969439794398943999440094401944029440394404944059440694407944089440994410944119441294413944149441594416944179441894419944209442194422944239442494425944269442794428944299443094431944329443394434944359443694437944389443994440944419444294443944449444594446944479444894449944509445194452944539445494455944569445794458944599446094461944629446394464944659446694467944689446994470944719447294473944749447594476944779447894479944809448194482944839448494485944869448794488944899449094491944929449394494944959449694497944989449994500945019450294503945049450594506945079450894509945109451194512945139451494515945169451794518945199452094521945229452394524945259452694527945289452994530945319453294533945349453594536945379453894539945409454194542945439454494545945469454794548945499455094551945529455394554945559455694557945589455994560945619456294563945649456594566945679456894569945709457194572945739457494575945769457794578945799458094581945829458394584945859458694587945889458994590945919459294593945949459594596945979459894599946009460194602946039460494605946069460794608946099461094611946129461394614946159461694617946189461994620946219462294623946249462594626946279462894629946309463194632946339463494635946369463794638946399464094641946429464394644946459464694647946489464994650946519465294653946549465594656946579465894659946609466194662946639466494665946669466794668946699467094671946729467394674946759467694677946789467994680946819468294683946849468594686946879468894689946909469194692946939469494695946969469794698946999470094701947029470394704947059470694707947089470994710947119471294713947149471594716947179471894719947209472194722947239472494725947269472794728947299473094731947329473394734947359473694737947389473994740947419474294743947449474594746947479474894749947509475194752947539475494755947569475794758947599476094761947629476394764947659476694767947689476994770947719477294773947749477594776947779477894779947809478194782947839478494785947869478794788947899479094791947929479394794947959479694797947989479994800948019480294803948049480594806948079480894809948109481194812948139481494815948169481794818948199482094821948229482394824948259482694827948289482994830948319483294833948349483594836948379483894839948409484194842948439484494845948469484794848948499485094851948529485394854948559485694857948589485994860948619486294863948649486594866948679486894869948709487194872948739487494875948769487794878948799488094881948829488394884948859488694887948889488994890948919489294893948949489594896948979489894899949009490194902949039490494905949069490794908949099491094911949129491394914949159491694917949189491994920949219492294923949249492594926949279492894929949309493194932949339493494935949369493794938949399494094941949429494394944949459494694947949489494994950949519495294953949549495594956949579495894959949609496194962949639496494965949669496794968949699497094971949729497394974949759497694977949789497994980949819498294983949849498594986949879498894989949909499194992949939499494995949969499794998949999500095001950029500395004950059500695007950089500995010950119501295013950149501595016950179501895019950209502195022950239502495025950269502795028950299503095031950329503395034950359503695037950389503995040950419504295043950449504595046950479504895049950509505195052950539505495055950569505795058950599506095061950629506395064950659506695067950689506995070950719507295073950749507595076950779507895079950809508195082950839508495085950869508795088950899509095091950929509395094950959509695097950989509995100951019510295103951049510595106951079510895109951109511195112951139511495115951169511795118951199512095121951229512395124951259512695127951289512995130951319513295133951349513595136951379513895139951409514195142951439514495145951469514795148951499515095151951529515395154951559515695157951589515995160951619516295163951649516595166951679516895169951709517195172951739517495175951769517795178951799518095181951829518395184951859518695187951889518995190951919519295193951949519595196951979519895199952009520195202952039520495205952069520795208952099521095211952129521395214952159521695217952189521995220952219522295223952249522595226952279522895229952309523195232952339523495235952369523795238952399524095241952429524395244952459524695247952489524995250952519525295253952549525595256952579525895259952609526195262952639526495265952669526795268952699527095271952729527395274952759527695277952789527995280952819528295283952849528595286952879528895289952909529195292952939529495295952969529795298952999530095301953029530395304953059530695307953089530995310953119531295313953149531595316953179531895319953209532195322953239532495325953269532795328953299533095331953329533395334953359533695337953389533995340953419534295343953449534595346953479534895349953509535195352953539535495355953569535795358953599536095361953629536395364953659536695367953689536995370953719537295373953749537595376953779537895379953809538195382953839538495385953869538795388953899539095391953929539395394953959539695397953989539995400954019540295403954049540595406954079540895409954109541195412954139541495415954169541795418954199542095421954229542395424954259542695427954289542995430954319543295433954349543595436954379543895439954409544195442954439544495445954469544795448954499545095451954529545395454954559545695457954589545995460954619546295463954649546595466954679546895469954709547195472954739547495475954769547795478954799548095481954829548395484954859548695487954889548995490954919549295493954949549595496954979549895499955009550195502955039550495505955069550795508955099551095511955129551395514955159551695517955189551995520955219552295523955249552595526955279552895529955309553195532955339553495535955369553795538955399554095541955429554395544955459554695547955489554995550955519555295553955549555595556955579555895559955609556195562955639556495565955669556795568955699557095571955729557395574955759557695577955789557995580955819558295583955849558595586955879558895589955909559195592955939559495595955969559795598955999560095601956029560395604956059560695607956089560995610956119561295613956149561595616956179561895619956209562195622956239562495625956269562795628956299563095631956329563395634956359563695637956389563995640956419564295643956449564595646956479564895649956509565195652956539565495655956569565795658956599566095661956629566395664956659566695667956689566995670956719567295673956749567595676956779567895679956809568195682956839568495685956869568795688956899569095691956929569395694956959569695697956989569995700957019570295703957049570595706957079570895709957109571195712957139571495715957169571795718957199572095721957229572395724957259572695727957289572995730957319573295733957349573595736957379573895739957409574195742957439574495745957469574795748957499575095751957529575395754957559575695757957589575995760957619576295763957649576595766957679576895769957709577195772957739577495775957769577795778957799578095781957829578395784957859578695787957889578995790957919579295793957949579595796957979579895799958009580195802958039580495805958069580795808958099581095811958129581395814958159581695817958189581995820958219582295823958249582595826958279582895829958309583195832958339583495835958369583795838958399584095841958429584395844958459584695847958489584995850958519585295853958549585595856958579585895859958609586195862958639586495865958669586795868958699587095871958729587395874958759587695877958789587995880958819588295883958849588595886958879588895889958909589195892958939589495895958969589795898958999590095901959029590395904959059590695907959089590995910959119591295913959149591595916959179591895919959209592195922959239592495925959269592795928959299593095931959329593395934959359593695937959389593995940959419594295943959449594595946959479594895949959509595195952959539595495955959569595795958959599596095961959629596395964959659596695967959689596995970959719597295973959749597595976959779597895979959809598195982959839598495985959869598795988959899599095991959929599395994959959599695997959989599996000960019600296003960049600596006960079600896009960109601196012960139601496015960169601796018960199602096021960229602396024960259602696027960289602996030960319603296033960349603596036960379603896039960409604196042960439604496045960469604796048960499605096051960529605396054960559605696057960589605996060960619606296063960649606596066960679606896069960709607196072960739607496075960769607796078960799608096081960829608396084960859608696087960889608996090960919609296093960949609596096960979609896099961009610196102961039610496105961069610796108961099611096111961129611396114961159611696117961189611996120961219612296123961249612596126961279612896129961309613196132961339613496135961369613796138961399614096141961429614396144961459614696147961489614996150961519615296153961549615596156961579615896159961609616196162961639616496165961669616796168961699617096171961729617396174961759617696177961789617996180961819618296183961849618596186961879618896189961909619196192961939619496195961969619796198961999620096201962029620396204962059620696207962089620996210962119621296213962149621596216962179621896219962209622196222962239622496225962269622796228962299623096231962329623396234962359623696237962389623996240962419624296243962449624596246962479624896249962509625196252962539625496255962569625796258962599626096261962629626396264962659626696267962689626996270962719627296273962749627596276962779627896279962809628196282962839628496285962869628796288962899629096291962929629396294962959629696297962989629996300963019630296303963049630596306963079630896309963109631196312963139631496315963169631796318963199632096321963229632396324963259632696327963289632996330963319633296333963349633596336963379633896339963409634196342963439634496345963469634796348963499635096351963529635396354963559635696357963589635996360963619636296363963649636596366963679636896369963709637196372963739637496375963769637796378963799638096381963829638396384963859638696387963889638996390963919639296393963949639596396963979639896399964009640196402964039640496405964069640796408964099641096411964129641396414964159641696417964189641996420964219642296423964249642596426964279642896429964309643196432964339643496435964369643796438964399644096441964429644396444964459644696447964489644996450964519645296453964549645596456964579645896459964609646196462964639646496465964669646796468964699647096471964729647396474964759647696477964789647996480964819648296483964849648596486964879648896489964909649196492964939649496495964969649796498964999650096501965029650396504965059650696507965089650996510965119651296513965149651596516965179651896519965209652196522965239652496525965269652796528965299653096531965329653396534965359653696537965389653996540965419654296543965449654596546965479654896549965509655196552965539655496555965569655796558965599656096561965629656396564965659656696567965689656996570965719657296573965749657596576965779657896579965809658196582965839658496585965869658796588965899659096591965929659396594965959659696597965989659996600966019660296603966049660596606966079660896609966109661196612966139661496615966169661796618966199662096621966229662396624966259662696627966289662996630966319663296633966349663596636966379663896639966409664196642966439664496645966469664796648966499665096651966529665396654966559665696657966589665996660966619666296663966649666596666966679666896669966709667196672966739667496675966769667796678966799668096681966829668396684966859668696687966889668996690966919669296693966949669596696966979669896699967009670196702967039670496705967069670796708967099671096711967129671396714967159671696717967189671996720967219672296723967249672596726967279672896729967309673196732967339673496735967369673796738967399674096741967429674396744967459674696747967489674996750967519675296753967549675596756967579675896759967609676196762967639676496765967669676796768967699677096771967729677396774967759677696777967789677996780967819678296783967849678596786967879678896789967909679196792967939679496795967969679796798967999680096801968029680396804968059680696807968089680996810968119681296813968149681596816968179681896819968209682196822968239682496825968269682796828968299683096831968329683396834968359683696837968389683996840968419684296843968449684596846968479684896849968509685196852968539685496855968569685796858968599686096861968629686396864968659686696867968689686996870968719687296873968749687596876968779687896879968809688196882968839688496885968869688796888968899689096891968929689396894968959689696897968989689996900969019690296903969049690596906969079690896909969109691196912969139691496915969169691796918969199692096921969229692396924969259692696927969289692996930969319693296933969349693596936969379693896939969409694196942969439694496945969469694796948969499695096951969529695396954969559695696957969589695996960969619696296963969649696596966969679696896969969709697196972969739697496975969769697796978969799698096981969829698396984969859698696987969889698996990969919699296993969949699596996969979699896999970009700197002970039700497005970069700797008970099701097011970129701397014970159701697017970189701997020970219702297023970249702597026970279702897029970309703197032970339703497035970369703797038970399704097041970429704397044970459704697047970489704997050970519705297053970549705597056970579705897059970609706197062970639706497065970669706797068970699707097071970729707397074970759707697077970789707997080970819708297083970849708597086970879708897089970909709197092970939709497095970969709797098970999710097101971029710397104971059710697107971089710997110971119711297113971149711597116971179711897119971209712197122971239712497125971269712797128971299713097131971329713397134971359713697137971389713997140971419714297143971449714597146971479714897149971509715197152971539715497155971569715797158971599716097161971629716397164971659716697167971689716997170971719717297173971749717597176971779717897179971809718197182971839718497185971869718797188971899719097191971929719397194971959719697197971989719997200972019720297203972049720597206972079720897209972109721197212972139721497215972169721797218972199722097221972229722397224972259722697227972289722997230972319723297233972349723597236972379723897239972409724197242972439724497245972469724797248972499725097251972529725397254972559725697257972589725997260972619726297263972649726597266972679726897269972709727197272972739727497275972769727797278972799728097281972829728397284972859728697287972889728997290972919729297293972949729597296972979729897299973009730197302973039730497305973069730797308973099731097311973129731397314973159731697317973189731997320973219732297323973249732597326973279732897329973309733197332973339733497335973369733797338973399734097341973429734397344973459734697347973489734997350973519735297353973549735597356973579735897359973609736197362973639736497365973669736797368973699737097371973729737397374973759737697377973789737997380973819738297383973849738597386973879738897389973909739197392973939739497395973969739797398973999740097401974029740397404974059740697407974089740997410974119741297413974149741597416974179741897419974209742197422974239742497425974269742797428974299743097431974329743397434974359743697437974389743997440974419744297443974449744597446974479744897449974509745197452974539745497455974569745797458974599746097461974629746397464974659746697467974689746997470974719747297473974749747597476974779747897479974809748197482974839748497485974869748797488974899749097491974929749397494974959749697497974989749997500975019750297503975049750597506975079750897509975109751197512975139751497515975169751797518975199752097521975229752397524975259752697527975289752997530975319753297533975349753597536975379753897539975409754197542975439754497545975469754797548975499755097551975529755397554975559755697557975589755997560975619756297563975649756597566975679756897569975709757197572975739757497575975769757797578975799758097581975829758397584975859758697587975889758997590975919759297593975949759597596975979759897599976009760197602976039760497605976069760797608976099761097611976129761397614976159761697617976189761997620976219762297623976249762597626976279762897629976309763197632976339763497635976369763797638976399764097641976429764397644976459764697647976489764997650976519765297653976549765597656976579765897659976609766197662976639766497665976669766797668976699767097671976729767397674976759767697677976789767997680976819768297683976849768597686976879768897689976909769197692976939769497695976969769797698976999770097701977029770397704977059770697707977089770997710977119771297713977149771597716977179771897719977209772197722977239772497725977269772797728977299773097731977329773397734977359773697737977389773997740977419774297743977449774597746977479774897749977509775197752977539775497755977569775797758977599776097761977629776397764977659776697767977689776997770977719777297773977749777597776977779777897779977809778197782977839778497785977869778797788977899779097791977929779397794977959779697797977989779997800978019780297803978049780597806978079780897809978109781197812978139781497815978169781797818978199782097821978229782397824978259782697827978289782997830978319783297833978349783597836978379783897839978409784197842978439784497845978469784797848978499785097851978529785397854978559785697857978589785997860978619786297863978649786597866978679786897869978709787197872978739787497875978769787797878978799788097881978829788397884978859788697887978889788997890978919789297893978949789597896978979789897899979009790197902979039790497905979069790797908979099791097911979129791397914979159791697917979189791997920979219792297923979249792597926979279792897929979309793197932979339793497935979369793797938979399794097941979429794397944979459794697947979489794997950979519795297953979549795597956979579795897959979609796197962979639796497965979669796797968979699797097971979729797397974979759797697977979789797997980979819798297983979849798597986979879798897989979909799197992979939799497995979969799797998979999800098001980029800398004980059800698007980089800998010980119801298013980149801598016980179801898019980209802198022980239802498025980269802798028980299803098031980329803398034980359803698037980389803998040980419804298043980449804598046980479804898049980509805198052980539805498055980569805798058980599806098061980629806398064980659806698067980689806998070980719807298073980749807598076980779807898079980809808198082980839808498085980869808798088980899809098091980929809398094980959809698097980989809998100981019810298103981049810598106981079810898109981109811198112981139811498115981169811798118981199812098121981229812398124981259812698127981289812998130981319813298133981349813598136981379813898139981409814198142981439814498145981469814798148981499815098151981529815398154981559815698157981589815998160981619816298163981649816598166981679816898169981709817198172981739817498175981769817798178981799818098181981829818398184981859818698187981889818998190981919819298193981949819598196981979819898199982009820198202982039820498205982069820798208982099821098211982129821398214982159821698217982189821998220982219822298223982249822598226982279822898229982309823198232982339823498235982369823798238982399824098241982429824398244982459824698247982489824998250982519825298253982549825598256982579825898259982609826198262982639826498265982669826798268982699827098271982729827398274982759827698277982789827998280982819828298283982849828598286982879828898289982909829198292982939829498295982969829798298982999830098301983029830398304983059830698307983089830998310983119831298313983149831598316983179831898319983209832198322983239832498325983269832798328983299833098331983329833398334983359833698337983389833998340983419834298343983449834598346983479834898349983509835198352983539835498355983569835798358983599836098361983629836398364983659836698367983689836998370983719837298373983749837598376983779837898379983809838198382983839838498385983869838798388983899839098391983929839398394983959839698397983989839998400984019840298403984049840598406984079840898409984109841198412984139841498415984169841798418984199842098421984229842398424984259842698427984289842998430984319843298433984349843598436984379843898439984409844198442984439844498445984469844798448984499845098451984529845398454984559845698457984589845998460984619846298463984649846598466984679846898469984709847198472984739847498475984769847798478984799848098481984829848398484984859848698487984889848998490984919849298493984949849598496984979849898499985009850198502985039850498505985069850798508985099851098511985129851398514985159851698517985189851998520985219852298523985249852598526985279852898529985309853198532985339853498535985369853798538985399854098541985429854398544985459854698547985489854998550985519855298553985549855598556985579855898559985609856198562985639856498565985669856798568985699857098571985729857398574985759857698577985789857998580985819858298583985849858598586985879858898589985909859198592985939859498595985969859798598985999860098601986029860398604986059860698607986089860998610986119861298613986149861598616986179861898619986209862198622986239862498625986269862798628986299863098631986329863398634986359863698637986389863998640986419864298643986449864598646986479864898649986509865198652986539865498655986569865798658986599866098661986629866398664986659866698667986689866998670986719867298673986749867598676986779867898679986809868198682986839868498685986869868798688986899869098691986929869398694986959869698697986989869998700987019870298703987049870598706987079870898709987109871198712987139871498715987169871798718987199872098721987229872398724987259872698727987289872998730987319873298733987349873598736987379873898739987409874198742987439874498745987469874798748987499875098751987529875398754987559875698757987589875998760987619876298763987649876598766987679876898769987709877198772987739877498775987769877798778987799878098781987829878398784987859878698787987889878998790987919879298793987949879598796987979879898799988009880198802988039880498805988069880798808988099881098811988129881398814988159881698817988189881998820988219882298823988249882598826988279882898829988309883198832988339883498835988369883798838988399884098841988429884398844988459884698847988489884998850988519885298853988549885598856988579885898859988609886198862988639886498865988669886798868988699887098871988729887398874988759887698877988789887998880988819888298883988849888598886988879888898889988909889198892988939889498895988969889798898988999890098901989029890398904989059890698907989089890998910989119891298913989149891598916989179891898919989209892198922989239892498925989269892798928989299893098931989329893398934989359893698937989389893998940989419894298943989449894598946989479894898949989509895198952989539895498955989569895798958989599896098961989629896398964989659896698967989689896998970989719897298973989749897598976989779897898979989809898198982989839898498985989869898798988989899899098991989929899398994989959899698997989989899999000990019900299003990049900599006990079900899009990109901199012990139901499015990169901799018990199902099021990229902399024990259902699027990289902999030990319903299033990349903599036990379903899039990409904199042990439904499045990469904799048990499905099051990529905399054990559905699057990589905999060990619906299063990649906599066990679906899069990709907199072990739907499075990769907799078990799908099081990829908399084990859908699087990889908999090990919909299093990949909599096990979909899099991009910199102991039910499105991069910799108991099911099111991129911399114991159911699117991189911999120991219912299123991249912599126991279912899129991309913199132991339913499135991369913799138991399914099141991429914399144991459914699147991489914999150991519915299153991549915599156991579915899159991609916199162991639916499165991669916799168991699917099171991729917399174991759917699177991789917999180991819918299183991849918599186991879918899189991909919199192991939919499195991969919799198991999920099201992029920399204992059920699207992089920999210992119921299213992149921599216992179921899219992209922199222992239922499225992269922799228992299923099231992329923399234992359923699237992389923999240992419924299243992449924599246992479924899249992509925199252992539925499255992569925799258992599926099261992629926399264992659926699267992689926999270992719927299273992749927599276992779927899279992809928199282992839928499285992869928799288992899929099291992929929399294992959929699297992989929999300993019930299303993049930599306993079930899309993109931199312993139931499315993169931799318993199932099321993229932399324993259932699327993289932999330993319933299333993349933599336993379933899339993409934199342993439934499345993469934799348993499935099351993529935399354993559935699357993589935999360993619936299363993649936599366993679936899369993709937199372993739937499375993769937799378993799938099381993829938399384993859938699387993889938999390993919939299393993949939599396993979939899399994009940199402994039940499405994069940799408994099941099411994129941399414994159941699417994189941999420994219942299423994249942599426994279942899429994309943199432994339943499435994369943799438994399944099441994429944399444994459944699447994489944999450994519945299453994549945599456994579945899459994609946199462994639946499465994669946799468994699947099471994729947399474994759947699477994789947999480994819948299483994849948599486994879948899489994909949199492994939949499495994969949799498994999950099501995029950399504995059950699507995089950999510995119951299513995149951599516995179951899519995209952199522995239952499525995269952799528995299953099531995329953399534995359953699537995389953999540995419954299543995449954599546995479954899549995509955199552995539955499555995569955799558995599956099561995629956399564995659956699567995689956999570995719957299573995749957599576995779957899579995809958199582995839958499585995869958799588995899959099591995929959399594995959959699597995989959999600996019960299603996049960599606996079960899609996109961199612996139961499615996169961799618996199962099621996229962399624996259962699627996289962999630996319963299633996349963599636996379963899639996409964199642996439964499645996469964799648996499965099651996529965399654996559965699657996589965999660996619966299663996649966599666996679966899669996709967199672996739967499675996769967799678996799968099681996829968399684996859968699687996889968999690996919969299693996949969599696996979969899699997009970199702997039970499705997069970799708997099971099711997129971399714997159971699717997189971999720997219972299723997249972599726997279972899729997309973199732997339973499735997369973799738997399974099741997429974399744997459974699747997489974999750997519975299753997549975599756997579975899759997609976199762997639976499765997669976799768997699977099771997729977399774997759977699777997789977999780997819978299783997849978599786997879978899789997909979199792997939979499795997969979799798997999980099801998029980399804998059980699807998089980999810998119981299813998149981599816998179981899819998209982199822998239982499825998269982799828998299983099831998329983399834998359983699837998389983999840998419984299843998449984599846998479984899849998509985199852998539985499855998569985799858998599986099861998629986399864998659986699867998689986999870998719987299873998749987599876998779987899879998809988199882998839988499885998869988799888998899989099891998929989399894998959989699897998989989999900999019990299903999049990599906999079990899909999109991199912999139991499915999169991799918999199992099921999229992399924999259992699927999289992999930999319993299933999349993599936999379993899939999409994199942999439994499945999469994799948999499995099951999529995399954999559995699957999589995999960999619996299963999649996599966999679996899969999709997199972999739997499975999769997799978999799998099981999829998399984999859998699987999889998999990999919999299993999949999599996999979999899999100000100001100002100003100004100005100006100007100008100009100010100011100012100013100014100015100016100017100018100019100020100021100022100023100024100025100026100027100028100029100030100031100032100033100034100035100036100037100038100039100040100041100042100043100044100045100046100047100048100049100050100051100052100053100054100055100056100057100058100059100060100061100062100063100064100065100066100067100068100069100070100071100072100073100074100075100076100077100078100079100080100081100082100083100084100085100086100087100088100089100090100091100092100093100094100095100096100097100098100099100100100101100102100103100104100105100106100107100108100109100110100111100112100113100114100115100116100117100118100119100120100121100122100123100124100125100126100127100128100129100130100131100132100133100134100135100136100137100138100139100140100141100142100143100144100145100146100147100148100149100150100151100152100153100154100155100156100157100158100159100160100161100162100163100164100165100166100167100168100169100170100171100172100173100174100175100176100177100178100179100180100181100182100183100184100185100186100187100188100189100190100191100192100193100194100195100196100197100198100199100200100201100202100203100204100205100206100207100208100209100210100211100212100213100214100215100216100217100218100219100220100221100222100223100224100225100226100227100228100229100230100231100232100233100234100235100236100237100238100239100240100241100242100243100244100245100246100247100248100249100250100251100252100253100254100255100256100257100258100259100260100261100262100263100264100265100266100267100268100269100270100271100272100273100274100275100276100277100278100279100280100281100282100283100284100285100286100287100288100289100290100291100292100293100294100295100296100297100298100299100300100301100302100303100304100305100306100307100308100309100310100311100312100313100314100315100316100317100318100319100320100321100322100323100324100325100326100327100328100329100330100331100332100333100334100335100336100337100338100339100340100341100342100343100344100345100346100347100348100349100350100351100352100353100354100355100356100357100358100359100360100361100362100363100364100365100366100367100368100369100370100371100372100373100374100375100376100377100378100379100380100381100382100383100384100385100386100387100388100389100390100391100392100393100394100395100396100397100398100399100400100401100402100403100404100405100406100407100408100409100410100411100412100413100414100415100416100417100418100419100420100421100422100423100424100425100426100427100428100429100430100431100432100433100434100435100436100437100438100439100440100441100442100443100444100445100446100447100448100449100450100451100452100453100454100455100456100457100458100459100460100461100462100463100464100465100466100467100468100469100470100471100472100473100474100475100476100477100478100479100480100481100482100483100484100485100486100487100488100489100490100491100492100493100494100495100496100497100498100499100500100501100502100503100504100505100506100507100508100509100510100511100512100513100514100515100516100517100518100519100520100521100522100523100524100525100526100527100528100529100530100531100532100533100534100535100536100537100538100539100540100541100542100543100544100545100546100547100548100549100550100551100552100553100554100555100556100557100558100559100560100561100562100563100564100565100566100567100568100569100570100571100572100573100574100575100576100577100578100579100580100581100582100583100584100585100586100587100588100589100590100591100592100593100594100595100596100597100598100599100600100601100602100603100604100605100606100607100608100609100610100611100612100613100614100615100616100617100618100619100620100621100622100623100624100625100626100627100628100629100630100631100632100633100634100635100636100637100638100639100640100641100642100643100644100645100646100647100648100649100650100651100652100653100654100655100656100657100658100659100660100661100662100663100664100665100666100667100668100669100670100671100672100673100674100675100676100677100678100679100680100681100682100683100684100685100686100687100688100689100690100691100692100693100694100695100696100697100698100699100700100701100702100703100704100705100706100707100708100709100710100711100712100713100714100715100716100717100718100719100720100721100722100723100724100725100726100727100728100729100730100731100732100733100734100735100736100737100738100739100740100741100742100743100744100745100746100747100748100749100750100751100752100753100754100755100756100757100758100759100760100761100762100763100764100765100766100767100768100769100770100771100772100773100774100775100776100777100778100779100780100781100782100783100784100785100786100787100788100789100790100791100792100793100794100795100796100797100798100799100800100801100802100803100804100805100806100807100808100809100810100811100812100813100814100815100816100817100818100819100820100821100822100823100824100825100826100827100828100829100830100831100832100833100834100835100836100837100838100839100840100841100842100843100844100845100846100847100848100849100850100851100852100853100854100855100856100857100858100859100860100861100862100863100864100865100866100867100868100869100870100871100872100873100874100875100876100877100878100879100880100881100882100883100884100885100886100887100888100889100890100891100892100893100894100895100896100897100898100899100900100901100902100903100904100905100906100907100908100909100910100911100912100913100914100915100916100917100918100919100920100921100922100923100924100925100926100927100928100929100930100931100932100933100934100935100936100937100938100939100940100941100942100943100944100945100946100947100948100949100950100951100952100953100954100955100956100957100958100959100960100961100962100963100964100965100966100967100968100969100970100971100972100973100974100975100976100977100978100979100980100981100982100983100984100985100986100987100988100989100990100991100992100993100994100995100996100997100998100999101000101001101002101003101004101005101006101007101008101009101010101011101012101013101014101015101016101017101018101019101020101021101022101023101024101025101026101027101028101029101030101031101032101033101034101035101036101037101038101039101040101041101042101043101044101045101046101047101048101049101050101051101052101053101054101055101056101057101058101059101060101061101062101063101064101065101066101067101068101069101070101071101072101073101074101075101076101077101078101079101080101081101082101083101084101085101086101087101088101089101090101091101092101093101094101095101096101097101098101099101100101101101102101103101104101105101106101107101108101109101110101111101112101113101114101115101116101117101118101119101120101121101122101123101124101125101126101127101128101129101130101131101132101133101134101135101136101137101138101139101140101141101142101143101144101145101146101147101148101149101150101151101152101153101154101155101156101157101158101159101160101161101162101163101164101165101166101167101168101169101170101171101172101173101174101175101176101177101178101179101180101181101182101183101184101185101186101187101188101189101190101191101192101193101194101195101196101197101198101199101200101201101202101203101204101205101206101207101208101209101210101211101212101213101214101215101216101217101218101219101220101221101222101223101224101225101226101227101228101229101230101231101232101233101234101235101236101237101238101239101240101241101242101243101244101245101246101247101248101249101250101251101252101253101254101255101256101257101258101259101260101261101262101263101264101265101266101267101268101269101270101271101272101273101274101275101276101277101278101279101280101281101282101283101284101285101286101287101288101289101290101291101292101293101294101295101296101297101298101299101300101301101302101303101304101305101306101307101308101309101310101311101312101313101314101315101316101317101318101319101320101321101322101323101324101325101326101327101328101329101330101331101332101333101334101335101336101337101338101339101340101341101342101343101344101345101346101347101348101349101350101351101352101353101354101355101356101357101358101359101360101361101362101363101364101365101366101367101368101369101370101371101372101373101374101375101376101377101378101379101380101381101382101383101384101385101386101387101388101389101390101391101392101393101394101395101396101397101398101399101400101401101402101403101404101405101406101407101408101409101410101411101412101413101414101415101416101417101418101419101420101421101422101423101424101425101426101427101428101429101430101431101432101433101434101435101436101437101438101439101440101441101442101443101444101445101446101447101448101449101450101451101452101453101454101455101456101457101458101459101460101461101462101463101464101465101466101467101468101469101470101471101472101473101474101475101476101477101478101479101480101481101482101483101484101485101486101487101488101489101490101491101492101493101494101495101496101497101498101499101500101501101502101503101504101505101506101507101508101509101510101511101512101513101514101515101516101517101518101519101520101521101522101523101524101525101526101527101528101529101530101531101532101533101534101535101536101537101538101539101540101541101542101543101544101545101546101547101548101549101550101551101552101553101554101555101556101557101558101559101560101561101562101563101564101565101566101567101568101569101570101571101572101573101574101575101576101577101578101579101580101581101582101583101584101585101586101587101588101589101590101591101592101593101594101595101596101597101598101599101600101601101602101603101604101605101606101607101608101609101610101611101612101613101614101615101616101617101618101619101620101621101622101623101624101625101626101627101628101629101630101631101632101633101634101635101636101637101638101639101640101641101642101643101644101645101646101647101648101649101650101651101652101653101654101655101656101657101658101659101660101661101662101663101664101665101666101667101668101669101670101671101672101673101674101675101676101677101678101679101680101681101682101683101684101685101686101687101688101689101690101691101692101693101694101695101696101697101698101699101700101701101702101703101704101705101706101707101708101709101710101711101712101713101714101715101716101717101718101719101720101721101722101723101724101725101726101727101728101729101730101731101732101733101734101735101736101737101738101739101740101741101742101743101744101745101746101747101748101749101750101751101752101753101754101755101756101757101758101759101760101761101762101763101764101765101766101767101768101769101770101771101772101773101774101775101776101777101778101779101780101781101782101783101784101785101786101787101788101789101790101791101792101793101794101795101796101797101798101799101800101801101802101803101804101805101806101807101808101809101810101811101812101813101814101815101816101817101818101819101820101821101822101823101824101825101826101827101828101829101830101831101832101833101834101835101836101837101838101839101840101841101842101843101844101845101846101847101848101849101850101851101852101853101854101855101856101857101858101859101860101861101862101863101864101865101866101867101868101869101870101871101872101873101874101875101876101877101878101879101880101881101882101883101884101885101886101887101888101889101890101891101892101893101894101895101896101897101898101899101900101901101902101903101904101905101906101907101908101909101910101911101912101913101914101915101916101917101918101919101920101921101922101923101924101925101926101927101928101929101930101931101932101933101934101935101936101937101938101939101940101941101942101943101944101945101946101947101948101949101950101951101952101953101954101955101956101957101958101959101960101961101962101963101964101965101966101967101968101969101970101971101972101973101974101975101976101977101978101979101980101981101982101983101984101985101986101987101988101989101990101991101992101993101994101995101996101997101998101999102000102001102002102003102004102005102006102007102008102009102010102011102012102013102014102015102016102017102018102019102020102021102022102023102024102025102026102027102028102029102030102031102032102033102034102035102036102037102038102039102040102041102042102043102044102045102046102047102048102049102050102051102052102053102054102055102056102057102058102059102060102061102062102063102064102065102066102067102068102069102070102071102072102073102074102075102076102077102078102079102080102081102082102083102084102085102086102087102088102089102090102091102092102093102094102095102096102097102098102099102100102101102102102103102104102105102106102107102108102109102110102111102112102113102114102115102116102117102118102119102120102121102122102123102124102125102126102127102128102129102130102131102132102133102134102135102136102137102138102139102140102141102142102143102144102145102146102147102148102149102150102151102152102153102154102155102156102157102158102159102160102161102162102163102164102165102166102167102168102169102170102171102172102173102174102175102176102177102178102179102180102181102182102183102184102185102186102187102188102189102190102191102192102193102194102195102196102197102198102199102200102201102202102203102204102205102206102207102208102209102210102211102212102213102214102215102216102217102218102219102220102221102222102223102224102225102226102227102228102229102230102231102232102233102234102235102236102237102238102239102240102241102242102243102244102245102246102247102248102249102250102251102252102253102254102255102256102257102258102259102260102261102262102263102264102265102266102267102268102269102270102271102272102273102274102275102276102277102278102279102280102281102282102283102284102285102286102287102288102289102290102291102292102293102294102295102296102297102298102299102300102301102302102303102304102305102306102307102308102309102310102311102312102313102314102315102316102317102318102319102320102321102322102323102324102325102326102327102328102329102330102331102332102333102334102335102336102337102338102339102340102341102342102343102344102345102346102347102348102349102350102351102352102353102354102355102356102357102358102359102360102361102362102363102364102365102366102367102368102369102370102371102372102373102374102375102376102377102378102379102380102381102382102383102384102385102386102387102388102389102390102391102392102393102394102395102396102397102398102399102400102401102402102403102404102405102406102407102408102409102410102411102412102413102414102415102416102417102418102419102420102421102422102423102424102425102426102427102428102429102430102431102432102433102434102435102436102437102438102439102440102441102442102443102444102445102446102447102448102449102450102451102452102453102454102455102456102457102458102459102460102461102462102463102464102465102466102467102468102469102470102471102472102473102474102475102476102477102478102479102480102481102482102483102484102485102486102487102488102489102490102491102492102493102494102495102496102497102498102499102500102501102502102503102504102505102506102507102508102509102510102511102512102513102514102515102516102517102518102519102520102521102522102523102524102525102526102527102528102529102530102531102532102533102534102535102536102537102538102539102540102541102542102543102544102545102546102547102548102549102550102551102552102553102554102555102556102557102558102559102560102561102562102563102564102565102566102567102568102569102570102571102572102573102574102575102576102577102578102579102580102581102582102583102584102585102586102587102588102589102590102591102592102593102594102595102596102597102598102599102600102601102602102603102604102605102606102607102608102609102610102611102612102613102614102615102616102617102618102619102620102621102622102623102624102625102626102627102628102629102630102631102632102633102634102635102636102637102638102639102640102641102642102643102644102645102646102647102648102649102650102651102652102653102654102655102656102657102658102659102660102661102662102663102664102665102666102667102668102669102670102671102672102673102674102675102676102677102678102679102680102681102682102683102684102685102686102687102688102689102690102691102692102693102694102695102696102697102698102699102700102701102702102703102704102705102706102707102708102709102710102711102712102713102714102715102716102717102718102719102720102721102722102723102724102725102726102727102728102729102730102731102732102733102734102735102736102737102738102739102740102741102742102743102744102745102746102747102748102749102750102751102752102753102754102755102756102757102758102759102760102761102762102763102764102765102766102767102768102769102770102771102772102773102774102775102776102777102778102779102780102781102782102783102784102785102786102787102788102789102790102791102792102793102794102795102796102797102798102799102800102801102802102803102804102805102806102807102808102809102810102811102812102813102814102815102816102817102818102819102820102821102822102823102824102825102826102827102828102829102830102831102832102833102834102835102836102837102838102839102840102841102842102843102844102845102846102847102848102849102850102851102852102853102854102855102856102857102858102859102860102861102862102863102864102865102866102867102868102869102870102871102872102873102874102875102876102877102878102879102880102881102882102883102884102885102886102887102888102889102890102891102892102893102894102895102896102897102898102899102900102901102902102903102904102905102906102907102908102909102910102911102912102913102914102915102916102917102918102919102920102921102922102923102924102925102926102927102928102929102930102931102932102933102934102935102936102937102938102939102940102941102942102943102944102945102946102947102948102949102950102951102952102953102954102955102956102957102958102959102960102961102962102963102964102965102966102967102968102969102970102971102972102973102974102975102976102977102978102979102980102981102982102983102984102985102986102987102988102989102990102991102992102993102994102995102996102997102998102999103000103001103002103003103004103005103006103007103008103009103010103011103012103013103014103015103016103017103018103019103020103021103022103023103024103025103026103027103028103029103030103031103032103033103034103035103036103037103038103039103040103041103042103043103044103045103046103047103048103049103050103051103052103053103054103055103056103057103058103059103060103061103062103063103064103065103066103067103068103069103070103071103072103073103074103075103076103077103078103079103080103081103082103083103084103085103086103087103088103089103090103091103092103093103094103095103096103097103098103099103100103101103102103103103104103105103106103107103108103109103110103111103112103113103114103115103116103117103118103119103120103121103122103123103124103125103126103127103128103129103130103131103132103133103134103135103136103137103138103139103140103141103142103143103144103145103146103147103148103149103150103151103152103153103154103155103156103157103158103159103160103161103162103163103164103165103166103167103168103169103170103171103172103173103174103175103176103177103178103179103180103181103182103183103184103185103186103187103188103189103190103191103192103193103194103195103196103197103198103199103200103201103202103203103204103205103206103207103208103209103210103211103212103213103214103215103216103217103218103219103220103221103222103223103224103225103226103227103228103229103230103231103232103233103234103235103236103237103238103239103240103241103242103243103244103245103246103247103248103249103250103251103252103253103254103255103256103257103258103259103260103261103262103263103264103265103266103267103268103269103270103271103272103273103274103275103276103277103278103279103280103281103282103283103284103285103286103287103288103289103290103291103292103293103294103295103296103297103298103299103300103301103302103303103304103305103306103307103308103309103310103311103312103313103314103315103316103317103318103319103320103321103322103323103324103325103326103327103328103329103330103331103332103333103334103335103336103337103338103339103340103341103342103343103344103345103346103347103348103349103350103351103352103353103354103355103356103357103358103359103360103361103362103363103364103365103366103367103368103369103370103371103372103373103374103375103376103377103378103379103380103381103382103383103384103385103386103387103388103389103390103391103392103393103394103395103396103397103398103399103400103401103402103403103404103405103406103407103408103409103410103411103412103413103414103415103416103417103418103419103420103421103422103423103424103425103426103427103428103429103430103431103432103433103434103435103436103437103438103439103440103441103442103443103444103445103446103447103448103449103450103451103452103453103454103455103456103457103458103459103460103461103462103463103464103465103466103467103468103469103470103471103472103473103474103475103476103477103478103479103480103481103482103483103484103485103486103487103488103489103490103491103492103493103494103495103496103497103498103499103500103501103502103503103504103505103506103507103508103509103510103511103512103513103514103515103516103517103518103519103520103521103522103523103524103525103526103527103528103529103530103531103532103533103534103535103536103537103538103539103540103541103542103543103544103545103546103547103548103549103550103551103552103553103554103555103556103557103558103559103560103561103562103563103564103565103566103567103568103569103570103571103572103573103574103575103576103577103578103579103580103581103582103583103584103585103586103587103588103589103590103591103592103593103594103595103596103597103598103599103600103601103602103603103604103605103606103607103608103609103610103611103612103613103614103615103616103617103618103619103620103621103622103623103624103625103626103627103628103629103630103631103632103633103634103635103636103637103638103639103640103641103642103643103644103645103646103647103648103649103650103651103652103653103654103655103656103657103658103659103660103661103662103663103664103665103666103667103668103669103670103671103672103673103674103675103676103677103678103679103680103681103682103683103684103685103686103687103688103689103690103691103692103693103694103695103696103697103698103699103700103701103702103703103704103705103706103707103708103709103710103711103712103713103714103715103716103717103718103719103720103721103722103723103724103725103726103727103728103729103730103731103732103733103734103735103736103737103738103739103740103741103742103743103744103745103746103747103748103749103750103751103752103753103754103755103756103757103758103759103760103761103762103763103764103765103766103767103768103769103770103771103772103773103774103775103776103777103778103779103780103781103782103783103784103785103786103787103788103789103790103791103792103793103794103795103796103797103798103799103800103801103802103803103804103805103806103807103808103809103810103811103812103813103814103815103816103817103818103819103820103821103822103823103824103825103826103827103828103829103830103831103832103833103834103835103836103837103838103839103840103841103842103843103844103845103846103847103848103849103850103851103852103853103854103855103856103857103858103859103860103861103862103863103864103865103866103867103868103869103870103871103872103873103874103875103876103877103878103879103880103881103882103883103884103885103886103887103888103889103890103891103892103893103894103895103896103897103898103899103900103901103902103903103904103905103906103907103908103909103910103911103912103913103914103915103916103917103918103919103920103921103922103923103924103925103926103927103928103929103930103931103932103933103934103935103936103937103938103939103940103941103942103943103944103945103946103947103948103949103950103951103952103953103954103955103956103957103958103959103960103961103962103963103964103965103966103967103968103969103970103971103972103973103974103975103976103977103978103979103980103981103982103983103984103985103986103987103988103989103990103991103992103993103994103995103996103997103998103999104000104001104002104003104004104005104006104007104008104009104010104011104012104013104014104015104016104017104018104019104020104021104022104023104024104025104026104027104028104029104030104031104032104033104034104035104036104037104038104039104040104041104042104043104044104045104046104047104048104049104050104051104052104053104054104055104056104057104058104059104060104061104062104063104064104065104066104067104068104069104070104071104072104073104074104075104076104077104078104079104080104081104082104083104084104085104086104087104088104089104090104091104092104093104094104095104096104097104098104099104100104101104102104103104104104105104106104107104108104109104110104111104112104113104114104115104116104117104118104119104120104121104122104123104124104125104126104127104128104129104130104131104132104133104134104135104136104137104138104139104140104141104142104143104144104145104146104147104148104149104150104151104152104153104154104155104156104157104158104159104160104161104162104163104164104165104166104167104168104169104170104171104172104173104174104175104176104177104178104179104180104181104182104183104184104185104186104187104188104189104190104191104192104193104194104195104196104197104198104199104200104201104202104203104204104205104206104207104208104209104210104211104212104213104214104215104216104217104218104219104220104221104222104223104224104225104226104227104228104229104230104231104232104233104234104235104236104237104238104239104240104241104242104243104244104245104246104247104248104249104250104251104252104253104254104255104256104257104258104259104260104261104262104263104264104265104266104267104268104269104270104271104272104273104274104275104276104277104278104279104280104281104282104283104284104285104286104287104288104289104290104291104292104293104294104295104296104297104298104299104300104301104302104303104304104305104306104307104308104309104310104311104312104313104314104315104316104317104318104319104320104321104322104323104324104325104326104327104328104329104330104331104332104333104334104335104336104337104338104339104340104341104342104343104344104345104346104347104348104349104350104351104352104353104354104355104356104357104358104359104360104361104362104363104364104365104366104367104368104369104370104371104372104373104374104375104376104377104378104379104380104381104382104383104384104385104386104387104388104389104390104391104392104393104394104395104396104397104398104399104400104401104402104403104404104405104406104407104408104409104410104411104412104413104414104415104416104417104418104419104420104421104422104423104424104425104426104427104428104429104430104431104432104433104434104435104436104437104438104439104440104441104442104443104444104445104446104447104448104449104450104451104452104453104454104455104456104457104458104459104460104461104462104463104464104465104466104467104468104469104470104471104472104473104474104475104476104477104478104479104480104481104482104483104484104485104486104487104488104489104490104491104492104493104494104495104496104497104498104499104500104501104502104503104504104505104506104507104508104509104510104511104512104513104514104515104516104517104518104519104520104521104522104523104524104525104526104527104528104529104530104531104532104533104534104535104536104537104538104539104540104541104542104543104544104545104546104547104548104549104550104551104552104553104554104555104556104557104558104559104560104561104562104563104564104565104566104567104568104569104570104571104572104573104574104575104576104577104578104579104580104581104582104583104584104585104586104587104588104589104590104591104592104593104594104595104596104597104598104599104600104601104602104603104604104605104606104607104608104609104610104611104612104613104614104615104616104617104618104619104620104621104622104623104624104625104626104627104628104629104630104631104632104633104634104635104636104637104638104639104640104641104642104643104644104645104646104647104648104649104650104651104652104653104654104655104656104657104658104659104660104661104662104663104664104665104666104667104668104669104670104671104672104673104674104675104676104677104678104679104680104681104682104683104684104685104686104687104688104689104690104691104692104693104694104695104696104697104698104699104700104701104702104703104704104705104706104707104708104709104710104711104712104713104714104715104716104717104718104719104720104721104722104723104724104725104726104727104728104729104730104731104732104733104734104735104736104737104738104739104740104741104742104743104744104745104746104747104748104749104750104751104752104753104754104755104756104757104758104759104760104761104762104763104764104765104766104767104768104769104770104771104772104773104774104775104776104777104778104779104780104781104782104783104784104785104786104787104788104789104790104791104792104793104794104795104796104797104798104799104800104801104802104803104804104805104806104807104808104809104810104811104812104813104814104815104816104817104818104819104820104821104822104823104824104825104826104827104828104829104830104831104832104833104834104835104836104837104838104839104840104841104842104843104844104845104846104847104848104849104850104851104852104853104854104855104856104857104858104859104860104861104862104863104864104865104866104867104868104869104870104871104872104873104874104875104876104877104878104879104880104881104882104883104884104885104886104887104888104889104890104891104892104893104894104895104896104897104898104899104900104901104902104903104904104905104906104907104908104909104910104911104912104913104914104915104916104917104918104919104920104921104922104923104924104925104926104927104928104929104930104931104932104933104934104935104936104937104938104939104940104941104942104943104944104945104946104947104948104949104950104951104952104953104954104955104956104957104958104959104960104961104962104963104964104965104966104967104968104969104970104971104972104973104974104975104976104977104978104979104980104981104982104983104984104985104986104987104988104989104990104991104992104993104994104995104996104997104998104999105000105001105002105003105004105005105006105007105008105009105010105011105012105013105014105015105016105017105018105019105020105021105022105023105024105025105026105027105028105029105030105031105032105033105034105035105036105037105038105039105040105041105042105043105044105045105046105047105048105049105050105051105052105053105054105055105056105057105058105059105060105061105062105063105064105065105066105067105068105069105070105071105072105073105074105075105076105077105078105079105080105081105082105083105084105085105086105087105088105089105090105091105092105093105094105095105096105097105098105099105100105101105102105103105104105105105106105107105108105109105110105111105112105113105114105115105116105117105118105119105120105121105122105123105124105125105126105127105128105129105130105131105132105133105134105135105136105137105138105139105140105141105142105143105144105145105146105147105148105149105150105151105152105153105154105155105156105157105158105159105160105161105162105163105164105165105166105167105168105169105170105171105172105173105174105175105176105177105178105179105180105181105182105183105184105185105186105187105188105189105190105191105192105193105194105195105196105197105198105199105200105201105202105203105204105205105206105207105208105209105210105211105212105213105214105215105216105217105218105219105220105221105222105223105224105225105226105227105228105229105230105231105232105233105234105235105236105237105238105239105240105241105242105243105244105245105246105247105248105249105250105251105252105253105254105255105256105257105258105259105260105261105262105263105264105265105266105267105268105269105270105271105272105273105274105275105276105277105278105279105280105281105282105283105284105285105286105287105288105289105290105291105292105293105294105295105296105297105298105299105300105301105302105303105304105305105306105307105308105309105310105311105312105313105314105315105316105317105318105319105320105321105322105323105324105325105326105327105328105329105330105331105332105333105334105335105336105337105338105339105340105341105342105343105344105345105346105347105348105349105350105351105352105353105354105355105356105357105358105359105360105361105362105363105364105365105366105367105368105369105370105371105372105373105374105375105376105377105378105379105380105381105382105383105384105385105386105387105388105389105390105391105392105393105394105395105396105397105398105399105400105401105402105403105404105405105406105407105408105409105410105411105412105413105414105415105416105417105418105419105420105421105422105423105424105425105426105427105428105429105430105431105432105433105434105435105436105437105438105439105440105441105442105443105444105445105446105447105448105449105450105451105452105453105454105455105456105457105458105459105460105461105462105463105464105465105466105467105468105469105470105471105472105473105474105475105476105477105478105479105480105481105482105483105484105485105486105487105488105489105490105491105492105493105494105495105496105497105498105499105500105501105502105503105504105505105506105507105508105509105510105511105512105513105514105515105516105517105518105519105520105521105522105523105524105525105526105527105528105529105530105531105532105533105534105535105536105537105538105539105540105541105542105543105544105545105546105547105548105549105550105551105552105553105554105555105556105557105558105559105560105561105562105563105564105565105566105567105568105569105570105571105572105573105574105575105576105577105578105579105580105581105582105583105584105585105586105587105588105589105590105591105592105593105594105595105596105597105598105599105600105601105602105603105604105605105606105607105608105609105610105611105612105613105614105615105616105617105618105619105620105621105622105623105624105625105626105627105628105629105630105631105632105633105634105635105636105637105638105639105640105641105642105643105644105645105646105647105648105649105650105651105652105653105654105655105656105657105658105659105660105661105662105663105664105665105666105667105668105669105670105671105672105673105674105675105676105677105678105679105680105681105682105683105684105685105686105687105688105689105690105691105692105693105694105695105696105697105698105699105700105701105702105703105704105705105706105707105708105709105710105711105712105713105714105715105716105717105718105719105720105721105722105723105724105725105726105727105728105729105730105731105732105733105734105735105736105737105738105739105740105741105742105743105744105745105746105747105748105749105750105751105752105753105754105755105756105757105758105759105760105761105762105763105764105765105766105767105768105769105770105771105772105773105774105775105776105777105778105779105780105781105782105783105784105785105786105787105788105789105790105791105792105793105794105795105796105797105798105799105800105801105802105803105804105805105806105807105808105809105810105811105812105813105814105815105816105817105818105819105820105821105822105823105824105825105826105827105828105829105830105831105832105833105834105835105836105837105838105839105840105841105842105843105844105845105846105847105848105849105850105851105852105853105854105855105856105857105858105859105860105861105862105863105864105865105866105867105868105869105870105871105872105873105874105875105876105877105878105879105880105881105882105883105884105885105886105887105888105889105890105891105892105893105894105895105896105897105898105899105900105901105902105903105904105905105906105907105908105909105910105911105912105913105914105915105916105917105918105919105920105921105922105923105924105925105926105927105928105929105930105931105932105933105934105935105936105937105938105939105940105941105942105943105944105945105946105947105948105949105950105951105952105953105954105955105956105957105958105959105960105961105962105963105964105965105966105967105968105969105970105971105972105973105974105975105976105977105978105979105980105981105982105983105984105985105986105987105988105989105990105991105992105993105994105995105996105997105998105999106000106001106002106003106004106005106006106007106008106009106010106011106012106013106014106015106016106017106018106019106020106021106022106023106024106025106026106027106028106029106030106031106032106033106034106035106036106037106038106039106040106041106042106043106044106045106046106047106048106049106050106051106052106053106054106055106056106057106058106059106060106061106062106063106064106065106066106067106068106069106070106071106072106073106074106075106076106077106078106079106080106081106082106083106084106085106086106087106088106089106090106091106092106093106094106095106096106097106098106099106100106101106102106103106104106105106106106107106108106109106110106111106112106113106114106115106116106117106118106119106120106121106122106123106124106125106126106127106128106129106130106131106132106133106134106135106136106137106138106139106140106141106142106143106144106145106146106147106148106149106150106151106152106153106154106155106156106157106158106159106160106161106162106163106164106165106166106167106168106169106170106171106172106173106174106175106176106177106178106179106180106181106182106183106184106185106186106187106188106189106190106191106192106193106194106195106196106197106198106199106200106201106202106203106204106205106206106207106208106209106210106211106212106213106214106215106216106217106218106219106220106221106222106223106224106225106226106227106228106229106230106231106232106233106234106235106236106237106238106239106240106241106242106243106244106245106246106247106248106249106250106251106252106253106254106255106256106257106258106259106260106261106262106263106264106265106266106267106268106269106270106271106272106273106274106275106276106277106278106279106280106281106282106283106284106285106286106287106288106289106290106291106292106293106294106295106296106297106298106299106300106301106302106303106304106305106306106307106308106309106310106311106312106313106314106315106316106317106318106319106320106321106322106323106324106325106326106327106328106329106330106331106332106333106334106335106336106337106338106339106340106341106342106343106344106345106346106347106348106349106350106351106352106353106354106355106356106357106358106359106360106361106362106363106364106365106366106367106368106369106370106371106372106373106374106375106376106377106378106379106380106381106382106383106384106385106386106387106388106389106390106391106392106393106394106395106396106397106398106399106400106401106402106403106404106405106406106407106408106409106410106411106412106413106414106415106416106417106418106419106420106421106422106423106424106425106426106427106428106429106430106431106432106433106434106435106436106437106438106439106440106441106442106443106444106445106446106447106448106449106450106451106452106453106454106455106456106457106458106459106460106461106462106463106464106465106466106467106468106469106470106471106472106473106474106475106476106477106478106479106480106481106482106483106484106485106486106487106488106489106490106491106492106493106494106495106496106497106498106499106500106501106502106503106504106505106506106507106508106509106510106511106512106513106514106515106516106517106518106519106520106521106522106523106524106525106526106527106528106529106530106531106532106533106534106535106536106537106538106539106540106541106542106543106544106545106546106547106548106549106550106551106552106553106554106555106556106557106558106559106560106561106562106563106564106565106566106567106568106569106570106571106572106573106574106575106576106577106578106579106580106581106582106583106584106585106586106587106588106589106590106591106592106593106594106595106596106597106598106599106600106601106602106603106604106605106606106607106608106609106610106611106612106613106614106615106616106617106618106619106620106621106622106623106624106625106626106627106628106629106630106631106632106633106634106635106636106637106638106639106640106641106642106643106644106645106646106647106648106649106650106651106652106653106654106655106656106657106658106659106660106661106662106663106664106665106666106667106668106669106670106671106672106673106674106675106676106677106678106679106680106681106682106683106684106685106686106687106688106689106690106691106692106693106694106695106696106697106698106699106700106701106702106703106704106705106706106707106708106709106710106711106712106713106714106715106716106717106718106719106720106721106722106723106724106725106726106727106728106729106730106731106732106733106734106735106736106737106738106739106740106741106742106743106744106745106746106747106748106749106750106751106752106753106754106755106756106757106758106759106760106761106762106763106764106765106766106767106768106769106770106771106772106773106774106775106776106777106778106779106780106781106782106783106784106785106786106787106788106789106790106791106792106793106794106795106796106797106798106799106800106801106802106803106804106805106806106807106808106809106810106811106812106813106814106815106816106817106818106819106820106821106822106823106824106825106826106827106828106829106830106831106832106833106834106835106836106837106838106839106840106841106842106843106844106845106846106847106848106849106850106851106852106853106854106855106856106857106858106859106860106861106862106863106864106865106866106867106868106869106870106871106872106873106874106875106876106877106878106879106880106881106882106883106884106885106886106887106888106889106890106891106892106893106894106895106896106897106898106899106900106901106902106903106904106905106906106907106908106909106910106911106912106913106914106915106916106917106918106919106920106921106922106923106924106925106926106927106928106929106930106931106932106933106934106935106936106937106938106939106940106941106942106943106944106945106946106947106948106949106950106951106952106953106954106955106956106957106958106959106960106961106962106963106964106965106966106967106968106969106970106971106972106973106974106975106976106977106978106979106980106981106982106983106984106985106986106987106988106989106990106991106992106993106994106995106996106997106998106999107000107001107002107003107004107005107006107007107008107009107010107011107012107013107014107015107016107017107018107019107020107021107022107023107024107025107026107027107028107029107030107031107032107033107034107035107036107037107038107039107040107041107042107043107044107045107046107047107048107049107050107051107052107053107054107055107056107057107058107059107060107061107062107063107064107065107066107067107068107069107070107071107072107073107074107075107076107077107078107079107080107081107082107083107084107085107086107087107088107089107090107091107092107093107094107095107096107097107098107099107100107101107102107103107104107105107106107107107108107109107110107111107112107113107114107115107116107117107118107119107120107121107122107123107124107125107126107127107128107129107130107131107132107133107134107135107136107137107138107139107140107141107142107143107144107145107146107147107148107149107150107151107152107153107154107155107156107157107158107159107160107161107162107163107164107165107166107167107168107169107170107171107172107173107174107175107176107177107178107179107180107181107182107183107184107185107186107187107188107189107190107191107192107193107194107195107196107197107198107199107200107201107202107203107204107205107206107207107208107209107210107211107212107213107214107215107216107217107218107219107220107221107222107223107224107225107226107227107228107229107230107231107232107233107234107235107236107237107238107239107240107241107242107243107244107245107246107247107248107249107250107251107252107253107254107255107256107257107258107259107260107261107262107263107264107265107266107267107268107269107270107271107272107273107274107275107276107277107278107279107280107281107282107283107284107285107286107287107288107289107290107291107292107293107294107295107296107297107298107299107300107301107302107303107304107305107306107307107308107309107310107311107312107313107314107315107316107317107318107319107320107321107322107323107324107325107326107327107328107329107330107331107332107333107334107335107336107337107338107339107340107341107342107343107344107345107346107347107348107349107350107351107352107353107354107355107356107357107358107359107360107361107362107363107364107365107366107367107368107369107370107371107372107373107374107375107376107377107378107379107380107381107382107383107384107385107386107387107388107389107390107391107392107393107394107395107396107397107398107399107400107401107402107403107404107405107406107407107408107409107410107411107412107413107414107415107416107417107418107419107420107421107422107423107424107425107426107427107428107429107430107431107432107433107434107435107436107437107438107439107440107441107442107443107444107445107446107447107448107449107450107451107452107453107454107455107456107457107458107459107460107461107462107463107464107465107466107467107468107469107470107471107472107473107474107475107476107477107478107479107480107481107482107483107484107485107486107487107488107489107490107491107492107493107494107495107496107497107498107499107500107501107502107503107504107505107506107507107508107509107510107511107512107513107514107515107516107517107518107519107520107521107522107523107524107525107526107527107528107529107530107531107532107533107534107535107536107537107538107539107540107541107542107543107544107545107546107547107548107549107550107551107552107553107554107555107556107557107558107559107560107561107562107563107564107565107566107567107568107569107570107571107572107573107574107575107576107577107578107579107580107581107582107583107584107585107586107587107588107589107590107591107592107593107594107595107596107597107598107599107600107601107602107603107604107605107606107607107608107609107610107611107612107613107614107615107616107617107618107619107620107621107622107623107624107625107626107627107628107629107630107631107632107633107634107635107636107637107638107639107640107641107642107643107644107645107646107647107648107649107650107651107652107653107654107655107656107657107658107659107660107661107662107663107664107665107666107667107668107669107670107671107672107673107674107675107676107677107678107679107680107681107682107683107684107685107686107687107688107689107690107691107692107693107694107695107696107697107698107699107700107701107702107703107704107705107706107707107708107709107710107711107712107713107714107715107716107717107718107719107720107721107722107723107724107725107726107727107728107729107730107731107732107733107734107735107736107737107738107739107740107741107742107743107744107745107746107747107748107749107750107751107752107753107754107755107756107757107758107759107760107761107762107763107764107765107766107767107768107769107770107771107772107773107774107775107776107777107778107779107780107781107782107783107784107785107786107787107788107789107790107791107792107793107794107795107796107797107798107799107800107801107802107803107804107805107806107807107808107809107810107811107812107813107814107815107816107817107818107819107820107821107822107823107824107825107826107827107828107829107830107831107832107833107834107835107836107837107838107839107840107841107842107843107844107845107846107847107848107849107850107851107852107853107854107855107856107857107858107859107860107861107862107863107864107865107866107867107868107869107870107871107872107873107874107875107876107877107878107879107880107881107882107883107884107885107886107887107888107889107890107891107892107893107894107895107896107897107898107899107900107901107902107903107904107905107906107907107908107909107910107911107912107913107914107915107916107917107918107919107920107921107922107923107924107925107926107927107928107929107930107931107932107933107934107935107936107937107938107939107940107941107942107943107944107945107946107947107948107949107950107951107952107953107954107955107956107957107958107959107960107961107962107963107964107965107966107967107968107969107970107971107972107973107974107975107976107977107978107979107980107981107982107983107984107985107986107987107988107989107990107991107992107993107994107995107996107997107998107999108000108001108002108003108004108005108006108007108008108009108010108011108012108013108014108015108016108017108018108019108020108021108022108023108024108025108026108027108028108029108030108031108032108033108034108035108036108037108038108039108040108041108042108043108044108045108046108047108048108049108050108051108052108053108054108055108056108057108058108059108060108061108062108063108064108065108066108067108068108069108070108071108072108073108074108075108076108077108078108079108080108081108082108083108084108085108086108087108088108089108090108091108092108093108094108095108096108097108098108099108100108101108102108103108104108105108106108107108108108109108110108111108112108113108114108115108116108117108118108119108120108121108122108123108124108125108126108127108128108129108130108131108132108133108134108135108136108137108138108139108140108141108142108143108144108145108146108147108148108149108150108151108152108153108154108155108156108157108158108159108160108161108162108163108164108165108166108167108168108169108170108171108172108173108174108175108176108177108178108179108180108181108182108183108184108185108186108187108188108189108190108191108192108193108194108195108196108197108198108199108200108201108202108203108204108205108206108207108208108209108210108211108212108213108214108215108216108217108218108219108220108221108222108223108224108225108226108227108228108229108230108231108232108233108234108235108236108237108238108239108240108241108242108243108244108245108246108247108248108249108250108251108252108253108254108255108256108257108258108259108260108261108262108263108264108265108266108267108268108269108270108271108272108273108274108275108276108277108278108279108280108281108282108283108284108285108286108287108288108289108290108291108292108293108294108295108296108297108298108299108300108301108302108303108304108305108306108307108308108309108310108311108312108313108314108315108316108317108318108319108320108321108322108323108324108325108326108327108328108329108330108331108332108333108334108335108336108337108338108339108340108341108342108343108344108345108346108347108348108349108350108351108352108353108354108355108356108357108358108359108360108361108362108363108364108365108366108367108368108369108370108371108372108373108374108375108376108377108378108379108380108381108382108383108384108385108386108387108388108389108390108391108392108393108394108395108396108397108398108399108400108401108402108403108404108405108406108407108408108409108410108411108412108413108414108415108416108417108418108419108420108421108422108423108424108425108426108427108428108429108430108431108432108433108434108435108436108437108438108439108440108441108442108443108444108445108446108447108448108449108450108451108452108453108454108455108456108457108458108459108460108461108462108463108464108465108466108467108468108469108470108471108472108473108474108475108476108477108478108479108480108481108482108483108484108485108486108487108488108489108490108491108492108493108494108495108496108497108498108499108500108501108502108503108504108505108506108507108508108509108510108511108512108513108514108515108516108517108518108519108520108521108522108523108524108525108526108527108528108529108530108531108532108533108534108535108536108537108538108539108540108541108542108543108544108545108546108547108548108549108550108551108552108553108554108555108556108557108558108559108560108561108562108563108564108565108566108567108568108569108570108571108572108573108574108575108576108577108578108579108580108581108582108583108584108585108586108587108588108589108590108591108592108593108594108595108596108597108598108599108600108601108602108603108604108605108606108607108608108609108610108611108612108613108614108615108616108617108618108619108620108621108622108623108624108625108626108627108628108629108630108631108632108633108634108635108636108637108638108639108640108641108642108643108644108645108646108647108648108649108650108651108652108653108654108655108656108657108658108659108660108661108662108663108664108665108666108667108668108669108670108671108672108673108674108675108676108677108678108679108680108681108682108683108684108685108686108687108688108689108690108691108692108693108694108695108696108697108698108699108700108701108702108703108704108705108706108707108708108709108710108711108712108713108714108715108716108717108718108719108720108721108722108723108724108725108726108727108728108729108730108731108732108733108734108735108736108737108738108739108740108741108742108743108744108745108746108747108748108749108750108751108752108753108754108755108756108757108758108759108760108761108762108763108764108765108766108767108768108769108770108771108772108773108774108775108776108777108778108779108780108781108782108783108784108785108786108787108788108789108790108791108792108793108794108795108796108797108798108799108800108801108802108803108804108805108806108807108808108809108810108811108812108813108814108815108816108817108818108819108820108821108822108823108824108825108826108827108828108829108830108831108832108833108834108835108836108837108838108839108840108841108842108843108844108845108846108847108848108849108850108851108852108853108854108855108856108857108858108859108860108861108862108863108864108865108866108867108868108869108870108871108872108873108874108875108876108877108878108879108880108881108882108883108884108885108886108887108888108889108890108891108892108893108894108895108896108897108898108899108900108901108902108903108904108905108906108907108908108909108910108911108912108913108914108915108916108917108918108919108920108921108922108923108924108925108926108927108928108929108930108931108932108933108934108935108936108937108938108939108940108941108942108943108944108945108946108947108948108949108950108951108952108953108954108955108956108957108958108959108960108961108962108963108964108965108966108967108968108969108970108971108972108973108974108975108976108977108978108979108980108981108982108983108984108985108986108987108988108989108990108991108992108993108994108995108996108997108998108999109000109001109002109003109004109005109006109007109008109009109010109011109012109013109014109015109016109017109018109019109020109021109022109023109024109025109026109027109028109029109030109031109032109033109034109035109036109037109038109039109040109041109042109043109044109045109046109047109048109049109050109051109052109053109054109055109056109057109058109059109060109061109062109063109064109065109066109067109068109069109070109071109072109073109074109075109076109077109078109079109080109081109082109083109084109085109086109087109088109089109090109091109092109093109094109095109096109097109098109099109100109101109102109103109104109105109106109107109108109109109110109111109112109113109114109115109116109117109118109119109120109121109122109123109124109125109126109127109128109129109130109131109132109133109134109135109136109137109138109139109140109141109142109143109144109145109146109147109148109149109150109151109152109153109154109155109156109157109158109159109160109161109162109163109164109165109166109167109168109169109170109171109172109173109174109175109176109177109178109179109180109181109182109183109184109185109186109187109188109189109190109191109192109193109194109195109196109197109198109199109200109201109202109203109204109205109206109207109208109209109210109211109212109213109214109215109216109217109218109219109220109221109222109223109224109225109226109227109228109229109230109231109232109233109234109235109236109237109238109239109240109241109242109243109244109245109246109247109248109249109250109251109252109253109254109255109256109257109258109259109260109261109262109263109264109265109266109267109268109269109270109271109272109273109274109275109276109277109278109279109280109281109282109283109284109285109286109287109288109289109290109291109292109293109294109295109296109297109298109299109300109301109302109303109304109305109306109307109308109309109310109311109312109313109314109315109316109317109318109319109320109321109322109323109324109325109326109327109328109329109330109331109332109333109334109335109336109337109338109339109340109341109342109343109344109345109346109347109348109349109350109351109352109353109354109355109356109357109358109359109360109361109362109363109364109365109366109367109368109369109370109371109372109373109374109375109376109377109378109379109380109381109382109383109384109385109386109387109388109389109390109391109392109393109394109395109396109397109398109399109400109401109402109403109404109405109406109407109408109409109410109411109412109413109414109415109416109417109418109419109420109421109422109423109424109425109426109427109428109429109430109431109432109433109434109435109436109437109438109439109440109441109442109443109444109445109446109447109448109449109450109451109452109453109454109455109456109457109458109459109460109461109462109463109464109465109466109467109468109469109470109471109472109473109474109475109476109477109478109479109480109481109482109483109484109485109486109487109488109489109490109491109492109493109494109495109496109497109498109499109500109501109502109503109504109505109506109507109508109509109510109511109512109513109514109515109516109517109518109519109520109521109522109523109524109525109526109527109528109529109530109531109532109533109534109535109536109537109538109539109540109541109542109543109544109545109546109547109548109549109550109551109552109553109554109555109556109557109558109559109560109561109562109563109564109565109566109567109568109569109570109571109572109573109574109575109576109577109578109579109580109581109582109583109584109585109586109587109588109589109590109591109592109593109594109595109596109597109598109599109600109601109602109603109604109605109606109607109608109609109610109611109612109613109614109615109616109617109618109619109620109621109622109623109624109625109626109627109628109629109630109631109632109633109634109635109636109637109638109639109640109641109642109643109644109645109646109647109648109649109650109651109652109653109654109655109656109657109658109659109660109661109662109663109664109665109666109667109668109669109670109671109672109673109674109675109676109677109678109679109680109681109682109683109684109685109686109687109688109689109690109691109692109693109694109695109696109697109698109699109700109701109702109703109704109705109706109707109708109709109710109711109712109713109714109715109716109717109718109719109720109721109722109723109724109725109726109727109728109729109730109731109732109733109734109735109736109737109738109739109740109741109742109743109744109745109746109747109748109749109750109751109752109753109754109755109756109757109758109759109760109761109762109763109764109765109766109767109768109769109770109771109772109773109774109775109776109777109778109779109780109781109782109783109784109785109786109787109788109789109790109791109792109793109794109795109796109797109798109799109800109801109802109803109804109805109806109807109808109809109810109811109812109813109814109815109816109817109818109819109820109821109822109823109824109825109826109827109828109829109830109831109832109833109834109835109836109837109838109839109840109841109842109843109844109845109846109847109848109849109850109851109852109853109854109855109856109857109858109859109860109861109862109863109864109865109866109867109868109869109870109871109872109873109874109875109876109877109878109879109880109881109882109883109884109885109886109887109888109889109890109891109892109893109894109895109896109897109898109899109900109901109902109903109904109905109906109907109908109909109910109911109912109913109914109915109916109917109918109919109920109921109922109923109924109925109926109927109928109929109930109931109932109933109934109935109936109937109938109939109940109941109942109943109944109945109946109947109948109949109950109951109952109953109954109955109956109957109958109959109960109961109962109963109964109965109966109967109968109969109970109971109972109973109974109975109976109977109978109979109980109981109982109983109984109985109986109987109988109989109990109991109992109993109994109995109996109997109998109999110000110001110002110003110004110005110006110007110008110009110010110011110012110013110014110015110016110017110018110019110020110021110022110023110024110025110026110027110028110029110030110031110032110033110034110035110036110037110038110039110040110041110042110043110044110045110046110047110048110049110050110051110052110053110054110055110056110057110058110059110060110061110062110063110064110065110066110067110068110069110070110071110072110073110074110075110076110077110078110079110080110081110082110083110084110085110086110087110088110089110090110091110092110093110094110095110096110097110098110099110100110101110102110103110104110105110106110107110108110109110110110111110112110113110114110115110116110117110118110119110120110121110122110123110124110125110126110127110128110129110130110131110132110133110134110135110136110137110138110139110140110141110142110143110144110145110146110147110148110149110150110151110152110153110154110155110156110157110158110159110160110161110162110163110164110165110166110167110168110169110170110171110172110173110174110175110176110177110178110179110180110181110182110183110184110185110186110187110188110189110190110191110192110193110194110195110196110197110198110199110200110201110202110203110204110205110206110207110208110209110210110211110212110213110214110215110216110217110218110219110220110221110222110223110224110225110226110227110228110229110230110231110232110233110234110235110236110237110238110239110240110241110242110243110244110245110246110247110248110249110250110251110252110253110254110255110256110257110258110259110260110261110262110263110264110265110266110267110268110269110270110271110272110273110274110275110276110277110278110279110280110281110282110283110284110285110286110287110288110289110290110291110292110293110294110295110296110297110298110299110300110301110302110303110304110305110306110307110308110309110310110311110312110313110314110315110316110317110318110319110320110321110322110323110324110325110326110327110328110329110330110331110332110333110334110335110336110337110338110339110340110341110342110343110344110345110346110347110348110349110350110351110352110353110354110355110356110357110358110359110360110361110362110363110364110365110366110367110368110369110370110371110372110373110374110375110376110377110378110379110380110381110382110383110384110385110386110387110388110389110390110391110392110393110394110395110396110397110398110399110400110401110402110403110404110405110406110407110408110409110410110411110412110413110414110415110416110417110418110419110420110421110422110423110424110425110426110427110428110429110430110431110432110433110434110435110436110437110438110439110440110441110442110443110444110445110446110447110448110449110450110451110452110453110454110455110456110457110458110459110460110461110462110463110464110465110466110467110468110469110470110471110472110473110474110475110476110477110478110479110480110481110482110483110484110485110486110487110488110489110490110491110492110493110494110495110496110497110498110499110500110501110502110503110504110505110506110507110508110509110510110511110512110513110514110515110516110517110518110519110520110521110522110523110524110525110526110527110528110529110530110531110532110533110534110535110536110537110538110539110540110541110542110543110544110545110546110547110548110549110550110551110552110553110554110555110556110557110558110559110560110561110562110563110564110565110566110567110568110569110570110571110572110573110574110575110576110577110578110579110580110581110582110583110584110585110586110587110588110589110590110591110592110593110594110595110596110597110598110599110600110601110602110603110604110605110606110607110608110609110610110611110612110613110614110615110616110617110618110619110620110621110622110623110624110625110626110627110628110629110630110631110632110633110634110635110636110637110638110639110640110641110642110643110644110645110646110647110648110649110650110651110652110653110654110655110656110657110658110659110660110661110662110663110664110665110666110667110668110669110670110671110672110673110674110675110676110677110678110679110680110681110682110683110684110685110686110687110688110689110690110691110692110693110694110695110696110697110698110699110700110701110702110703110704110705110706110707110708110709110710110711110712110713110714110715110716110717110718110719110720110721110722110723110724110725110726110727110728110729110730110731110732110733110734110735110736110737110738110739110740110741110742110743110744110745110746110747110748110749110750110751110752110753110754110755110756110757110758110759110760110761110762110763110764110765110766110767110768110769110770110771110772110773110774110775110776110777110778110779110780110781110782110783110784110785110786110787110788110789110790110791110792110793110794110795110796110797110798110799110800110801110802110803110804110805110806110807110808110809110810110811110812110813110814110815110816110817110818110819110820110821110822110823110824110825110826110827110828110829110830110831110832110833110834110835110836110837110838110839110840110841110842110843110844110845110846110847110848110849110850110851110852110853110854110855110856110857110858110859110860110861110862110863110864110865110866110867110868110869110870110871110872110873110874110875110876110877110878110879110880110881110882110883110884110885110886110887110888110889110890110891110892110893110894110895110896110897110898110899110900110901110902110903110904110905110906110907110908110909110910110911110912110913110914110915110916110917110918110919110920110921110922110923110924110925110926110927110928110929110930110931110932110933110934110935110936110937110938110939110940110941110942110943110944110945110946110947110948110949110950110951110952110953110954110955110956110957110958110959110960110961110962110963110964110965110966110967110968110969110970110971110972110973110974110975110976110977110978110979110980110981110982110983110984110985110986110987110988110989110990110991110992110993110994110995110996110997110998110999111000111001111002111003111004111005111006111007111008111009111010111011111012111013111014111015111016111017111018111019111020111021111022111023111024111025111026111027111028111029111030111031111032111033111034111035111036111037111038111039111040111041111042111043111044111045111046111047111048111049111050111051111052111053111054111055111056111057111058111059111060111061111062111063111064111065111066111067111068111069111070111071111072111073111074111075111076111077111078111079111080111081111082111083111084111085111086111087111088111089111090111091111092111093111094111095111096111097111098111099111100111101111102111103111104111105111106111107111108111109111110111111111112111113111114111115111116111117111118111119111120111121111122111123111124111125111126111127111128111129111130111131111132111133111134111135111136111137111138111139111140111141111142111143111144111145111146111147111148111149111150111151111152111153111154111155111156111157111158111159111160111161111162111163111164111165111166111167111168111169111170111171111172111173111174111175111176111177111178111179111180111181111182111183111184111185111186111187111188111189111190111191111192111193111194111195111196111197111198111199111200111201111202111203111204111205111206111207111208111209111210111211111212111213111214111215111216111217111218111219111220111221111222111223111224111225111226111227111228111229111230111231111232111233111234111235111236111237111238111239111240111241111242111243111244111245111246111247111248111249111250111251111252111253111254111255111256111257111258111259111260111261111262111263111264111265111266111267111268111269111270111271111272111273111274111275111276111277111278111279111280111281111282111283111284111285111286111287111288111289111290111291111292111293111294111295111296111297111298111299111300111301111302111303111304111305111306111307111308111309111310111311111312111313111314111315111316111317111318111319111320111321111322111323111324111325111326111327111328111329111330111331111332111333111334111335111336111337111338111339111340111341111342111343111344111345111346111347111348111349111350111351111352111353111354111355111356111357111358111359111360111361111362111363111364111365111366111367111368111369111370111371111372111373111374111375111376111377111378111379111380111381111382111383111384111385111386111387111388111389111390111391111392111393111394111395111396111397111398111399111400111401111402111403111404111405111406111407111408111409111410111411111412111413111414111415111416111417111418111419111420111421111422111423111424111425111426111427111428111429111430111431111432111433111434111435111436111437111438111439111440111441111442111443111444111445111446111447111448111449111450111451111452111453111454111455111456111457111458111459111460111461111462111463111464111465111466111467111468111469111470111471111472111473111474111475111476111477111478111479111480111481111482111483111484111485111486111487111488111489111490111491111492111493111494111495111496111497111498111499111500111501111502111503111504111505111506111507111508111509111510111511111512111513111514111515111516111517111518111519111520111521111522111523111524111525111526111527111528111529111530111531111532111533111534111535111536111537111538111539111540111541111542111543111544111545111546111547111548111549111550111551111552111553111554111555111556111557111558111559111560111561111562111563111564111565111566111567111568111569111570111571111572111573111574111575111576111577111578111579111580111581111582111583111584111585111586111587111588111589111590111591111592111593111594111595111596111597111598111599111600111601111602111603111604111605111606111607111608111609111610111611111612111613111614111615111616111617111618111619111620111621111622111623111624111625111626111627111628111629111630111631111632111633111634111635111636111637111638111639111640111641111642111643111644111645111646111647111648111649111650111651111652111653111654111655111656111657111658111659111660111661111662111663111664111665111666111667111668111669111670111671111672111673111674111675111676111677111678111679111680111681111682111683111684111685111686111687111688111689111690111691111692111693111694111695111696111697111698111699111700111701111702111703111704111705111706111707111708111709111710111711111712111713111714111715111716111717111718111719111720111721111722111723111724111725111726111727111728111729111730111731111732111733111734111735111736111737111738111739111740111741111742111743111744111745111746111747111748111749111750111751111752111753111754111755111756111757111758111759111760111761111762111763111764111765111766111767111768111769111770111771111772111773111774111775111776111777111778111779111780111781111782111783111784111785111786111787111788111789111790111791111792111793111794111795111796111797111798111799111800111801111802111803111804111805111806111807111808111809111810111811111812111813111814111815111816111817111818111819111820111821111822111823111824111825111826111827111828111829111830111831111832111833111834111835111836111837111838111839111840111841111842111843111844111845111846111847111848111849111850111851111852111853111854111855111856111857111858111859111860111861111862111863111864111865111866111867111868111869111870111871111872111873111874111875111876111877111878111879111880111881111882111883111884111885111886111887111888111889111890111891111892111893111894111895111896111897111898111899111900111901111902111903111904111905111906111907111908111909111910111911111912111913111914111915111916111917111918111919111920111921111922111923111924111925111926111927111928111929111930111931111932111933111934111935111936111937111938111939111940111941111942111943111944111945111946111947111948111949111950111951111952111953111954111955111956111957111958111959111960111961111962111963111964111965111966111967111968111969111970111971111972111973111974111975111976111977111978111979111980111981111982111983111984111985111986111987111988111989111990111991111992111993111994111995111996111997111998111999112000112001112002112003112004112005112006112007112008112009112010112011112012112013112014112015112016112017112018112019112020112021112022112023112024112025112026112027112028112029112030112031112032112033112034112035112036112037112038112039112040112041112042112043112044112045112046112047112048112049112050112051112052112053112054112055112056112057112058112059112060112061112062112063112064112065112066112067112068112069112070112071112072112073112074112075112076112077112078112079112080112081112082112083112084112085112086112087112088112089112090112091112092112093112094112095112096112097112098112099112100112101112102112103112104112105112106112107112108112109112110112111112112112113112114112115112116112117112118112119112120112121112122112123112124112125112126112127112128112129112130112131112132112133112134112135112136112137112138112139112140112141112142112143112144112145112146112147112148112149112150112151112152112153112154112155112156112157112158112159112160112161112162112163112164112165112166112167112168112169112170112171112172112173112174112175112176112177112178112179112180112181112182112183112184112185112186112187112188112189112190112191112192112193112194112195112196112197112198112199112200112201112202112203112204112205112206112207112208112209112210112211112212112213112214112215112216112217112218112219112220112221112222112223112224112225112226112227112228112229112230112231112232112233112234112235112236112237112238112239112240112241112242112243112244112245112246112247112248112249112250112251112252112253112254112255112256112257112258112259112260112261112262112263112264112265112266112267112268112269112270112271112272112273112274112275112276112277112278112279112280112281112282112283112284112285112286112287112288112289112290112291112292112293112294112295112296112297112298112299112300112301112302112303112304112305112306112307112308112309112310112311112312112313112314112315112316112317112318112319112320112321112322112323112324112325112326112327112328112329112330112331112332112333112334112335112336112337112338112339112340112341112342112343112344112345112346112347112348112349112350112351112352112353112354112355112356112357112358112359112360112361112362112363112364112365112366112367112368112369112370112371112372112373112374112375112376112377112378112379112380112381112382112383112384112385112386112387112388112389112390112391112392112393112394112395112396112397112398112399112400112401112402112403112404112405112406112407112408112409112410112411112412112413112414112415112416112417112418112419112420112421112422112423112424112425112426112427112428112429112430112431112432112433112434112435112436112437112438112439112440112441112442112443112444112445112446112447112448112449112450112451112452112453112454112455112456112457112458112459112460112461112462112463112464112465112466112467112468112469112470112471112472112473112474112475112476112477112478112479112480112481112482112483112484112485112486112487112488112489112490112491112492112493112494112495112496112497112498112499112500112501112502112503112504112505112506112507112508112509112510112511112512112513112514112515112516112517112518112519112520112521112522112523112524112525112526112527112528112529112530112531112532112533112534112535112536112537112538112539112540112541112542112543112544112545112546112547112548112549112550112551112552112553112554112555112556112557112558112559112560112561112562112563112564112565112566112567112568112569112570112571112572112573112574112575112576112577112578112579112580112581112582112583112584112585112586112587112588112589112590112591112592112593112594112595112596112597112598112599112600112601112602112603112604112605112606112607112608112609112610112611112612112613112614112615112616112617112618112619112620112621112622112623112624112625112626112627112628112629112630112631112632112633112634112635112636112637112638112639112640112641112642112643112644112645112646112647112648112649112650112651112652112653112654112655112656112657112658112659112660112661112662112663112664112665112666112667112668112669112670112671112672112673112674112675112676112677112678112679112680112681112682112683112684112685112686112687112688112689112690112691112692112693112694112695112696112697112698112699112700112701112702112703112704112705112706112707112708112709112710112711112712112713112714112715112716112717112718112719112720112721112722112723112724112725112726112727112728112729112730112731112732112733112734112735112736112737112738112739112740112741112742112743112744112745112746112747112748112749112750112751112752112753112754112755112756112757112758112759112760112761112762112763112764112765112766112767112768112769112770112771112772112773112774112775112776112777112778112779112780112781112782112783112784112785112786112787112788112789112790112791112792112793112794112795112796112797112798112799112800112801112802112803112804112805112806112807112808112809112810112811112812112813112814112815112816112817112818112819112820112821112822112823112824112825112826112827112828112829112830112831112832112833112834112835112836112837112838112839112840112841112842112843112844112845112846112847112848112849112850112851112852112853112854112855112856112857112858112859112860112861112862112863112864112865112866112867112868112869112870112871112872112873112874112875112876112877112878112879112880112881112882112883112884112885112886112887112888112889112890112891112892112893112894112895112896112897112898112899112900112901112902112903112904112905112906112907112908112909112910112911112912112913112914112915112916112917112918112919112920112921112922112923112924112925112926112927112928112929112930112931112932112933112934112935112936112937112938112939112940112941112942112943112944112945112946112947112948112949112950112951112952112953112954112955112956112957112958112959112960112961112962112963112964112965112966112967112968112969112970112971112972112973112974112975112976112977112978112979112980112981112982112983112984112985112986112987112988112989112990112991112992112993112994112995112996112997112998112999113000113001113002113003113004113005113006113007113008113009113010113011113012113013113014113015113016113017113018113019113020113021113022113023113024113025113026113027113028113029113030113031113032113033113034113035113036113037113038113039113040113041113042113043113044113045113046113047113048113049113050113051113052113053113054113055113056113057113058113059113060113061113062113063113064113065113066113067113068113069113070113071113072113073113074113075113076113077113078113079113080113081113082113083113084113085113086113087113088113089113090113091113092113093113094113095113096113097113098113099113100113101113102113103113104113105113106113107113108113109113110113111113112113113113114113115113116113117113118113119113120113121113122113123113124113125113126113127113128113129113130113131113132113133113134113135113136113137113138113139113140113141113142113143113144113145113146113147113148113149113150113151113152113153113154113155113156113157113158113159113160113161113162113163113164113165113166113167113168113169113170113171113172113173113174113175113176113177113178113179113180113181113182113183113184113185113186113187113188113189113190113191113192113193113194113195113196113197113198113199113200113201113202113203113204113205113206113207113208113209113210113211113212113213113214113215113216113217113218113219113220113221113222113223113224113225113226113227113228113229113230113231113232113233113234113235113236113237113238113239113240113241113242113243113244113245113246113247113248113249113250113251113252113253113254113255113256113257113258113259113260113261113262113263113264113265113266113267113268113269113270113271113272113273113274113275113276113277113278113279113280113281113282113283113284113285113286113287113288113289113290113291113292113293113294113295113296113297113298113299113300113301113302113303113304113305113306113307113308113309113310113311113312113313113314113315113316113317113318113319113320113321113322113323113324113325113326113327113328113329113330113331113332113333113334113335113336113337113338113339113340113341113342113343113344113345113346113347113348113349113350113351113352113353113354113355113356113357113358113359113360113361113362113363113364113365113366113367113368113369113370113371113372113373113374113375113376113377113378113379113380113381113382113383113384113385113386113387113388113389113390113391113392113393113394113395113396113397113398113399113400113401113402113403113404113405113406113407113408113409113410113411113412113413113414113415113416113417113418113419113420113421113422113423113424113425113426113427113428113429113430113431113432113433113434113435113436113437113438113439113440113441113442113443113444113445113446113447113448113449113450113451113452113453113454113455113456113457113458113459113460113461113462113463113464113465113466113467113468113469113470113471113472113473113474113475113476113477113478113479113480113481113482113483113484113485113486113487113488113489113490113491113492113493113494113495113496113497113498113499113500113501113502113503113504113505113506113507113508113509113510113511113512113513113514113515113516113517113518113519113520113521113522113523113524113525113526113527113528113529113530113531113532113533113534113535113536113537113538113539113540113541113542113543113544113545113546113547113548113549113550113551113552113553113554113555113556113557113558113559113560113561113562113563113564113565113566113567113568113569113570113571113572113573113574113575113576113577113578113579113580113581113582113583113584113585113586113587113588113589113590113591113592113593113594113595113596113597113598113599113600113601113602113603113604113605113606113607113608113609113610113611113612113613113614113615113616113617113618113619113620113621113622113623113624113625113626113627113628113629113630113631113632113633113634113635113636113637113638113639113640113641113642113643113644113645113646113647113648113649113650113651113652113653113654113655113656113657113658113659113660113661113662113663113664113665113666113667113668113669113670113671113672113673113674113675113676113677113678113679113680113681113682113683113684113685113686113687113688113689113690113691113692113693113694113695113696113697113698113699113700113701113702113703113704113705113706113707113708113709113710113711113712113713113714113715113716113717113718113719113720113721113722113723113724113725113726113727113728113729113730113731113732113733113734113735113736113737113738113739113740113741113742113743113744113745113746113747113748113749113750113751113752113753113754113755113756113757113758113759113760113761113762113763113764113765113766113767113768113769113770113771113772113773113774113775113776113777113778113779113780113781113782113783113784113785113786113787113788113789113790113791113792113793113794113795113796113797113798113799113800113801113802113803113804113805113806113807113808113809113810113811113812113813113814113815113816113817113818113819113820113821113822113823113824113825113826113827113828113829113830113831113832113833113834113835113836113837113838113839113840113841113842113843113844113845113846113847113848113849113850113851113852113853113854113855113856113857113858113859113860113861113862113863113864113865113866113867113868113869113870113871113872113873113874113875113876113877113878113879113880113881113882113883113884113885113886113887113888113889113890113891113892113893113894113895113896113897113898113899113900113901113902113903113904113905113906113907113908113909113910113911113912113913113914113915113916113917113918113919113920113921113922113923113924113925113926113927113928113929113930113931113932113933113934113935113936113937113938113939113940113941113942113943113944113945113946113947113948113949113950113951113952113953113954113955113956113957113958113959113960113961113962113963113964113965113966113967113968113969113970113971113972113973113974113975113976113977113978113979113980113981113982113983113984113985113986113987113988113989113990113991113992113993113994113995113996113997113998113999114000114001114002114003114004114005114006114007114008114009114010114011114012114013114014114015114016114017114018114019114020114021114022114023114024114025114026114027114028114029114030114031114032114033114034114035114036114037114038114039114040114041114042114043114044114045114046114047114048114049114050114051114052114053114054114055114056114057114058114059114060114061114062114063114064114065114066114067114068114069114070114071114072114073114074114075114076114077114078114079114080114081114082114083114084114085114086114087114088114089114090114091114092114093114094114095114096114097114098114099114100114101114102114103114104114105114106114107114108114109114110114111114112114113114114114115114116114117114118114119114120114121114122114123114124114125114126114127114128114129114130114131114132114133114134114135114136114137114138114139114140114141114142114143114144114145114146114147114148114149114150114151114152114153114154114155114156114157114158114159114160114161114162114163114164114165114166114167114168114169114170114171114172114173114174114175114176114177114178114179114180114181114182114183114184114185114186114187114188114189114190114191114192114193114194114195114196114197114198114199114200114201114202114203114204114205114206114207114208114209114210114211114212114213114214114215114216114217114218114219114220114221114222114223114224114225114226114227114228114229114230114231114232114233114234114235114236114237114238114239114240114241114242114243114244114245114246114247114248114249114250114251114252114253114254114255114256114257114258114259114260114261114262114263114264114265114266114267114268114269114270114271114272114273114274114275114276114277114278114279114280114281114282114283114284114285114286114287114288114289114290114291114292114293114294114295114296114297114298114299114300114301114302114303114304114305114306114307114308114309114310114311114312114313114314114315114316114317114318114319114320114321114322114323114324114325114326114327114328114329114330114331114332114333114334114335114336114337114338114339114340114341114342114343114344114345114346114347114348114349114350114351114352114353114354114355114356114357114358114359114360114361114362114363114364114365114366114367114368114369114370114371114372114373114374114375114376114377114378114379114380114381114382114383114384114385114386114387114388114389114390114391114392114393114394114395114396114397114398114399114400114401114402114403114404114405114406114407114408114409114410114411114412114413114414114415114416114417114418114419114420114421114422114423114424114425114426114427114428114429114430114431114432114433114434114435114436114437114438114439114440114441114442114443114444114445114446114447114448114449114450114451114452114453114454114455114456114457114458114459114460114461114462114463114464114465114466114467114468114469114470114471114472114473114474114475114476114477114478114479114480114481114482114483114484114485114486114487114488114489114490114491114492114493114494114495114496114497114498114499114500114501114502114503114504114505114506114507114508114509114510114511114512114513114514114515114516114517114518114519114520114521114522114523114524114525114526114527114528114529114530114531114532114533114534114535114536114537114538114539114540114541114542114543114544114545114546114547114548114549114550114551114552114553114554114555114556114557114558114559114560114561114562114563114564114565114566114567114568114569114570114571114572114573114574114575114576114577114578114579114580114581114582114583114584114585114586114587114588114589114590114591114592114593114594114595114596114597114598114599114600114601114602114603114604114605114606114607114608114609114610114611114612114613114614114615114616114617114618114619114620114621114622114623114624114625114626114627114628114629114630114631114632114633114634114635114636114637114638114639114640114641114642114643114644114645114646114647114648114649114650114651114652114653114654114655114656114657114658114659114660114661114662114663114664114665114666114667114668114669114670114671114672114673114674114675114676114677114678114679114680114681114682114683114684114685114686114687114688114689114690114691114692114693114694114695114696114697114698114699114700114701114702114703114704114705114706114707114708114709114710114711114712114713114714114715114716114717114718114719114720114721114722114723114724114725114726114727114728114729114730114731114732114733114734114735114736114737114738114739114740114741114742114743114744114745114746114747114748114749114750114751114752114753114754114755114756114757114758114759114760114761114762114763114764114765114766114767114768114769114770114771114772114773114774114775114776114777114778114779114780114781114782114783114784114785114786114787114788114789114790114791114792114793114794114795114796114797114798114799114800114801114802114803114804114805114806114807114808114809114810114811114812114813114814114815114816114817114818114819114820114821114822114823114824114825114826114827114828114829114830114831114832114833114834114835114836114837114838114839114840114841114842114843114844114845114846114847114848114849114850114851114852114853114854114855114856114857114858114859114860114861114862114863114864114865114866114867114868114869114870114871114872114873114874114875114876114877114878114879114880114881114882114883114884114885114886114887114888114889114890114891114892114893114894114895114896114897114898114899114900114901114902114903114904114905114906114907114908114909114910114911114912114913114914114915114916114917114918114919114920114921114922114923114924114925114926114927114928114929114930114931114932114933114934114935114936114937114938114939114940114941114942114943114944114945114946114947114948114949114950114951114952114953114954114955114956114957114958114959114960114961114962114963114964114965114966114967114968114969114970114971114972114973114974114975114976114977114978114979114980114981114982114983114984114985114986114987114988114989114990114991114992114993114994114995114996114997114998114999115000115001115002115003115004115005115006115007115008115009115010115011115012115013115014115015115016115017115018115019115020115021115022115023115024115025115026115027115028115029115030115031115032115033115034115035115036115037115038115039115040115041115042115043115044115045115046115047115048115049115050115051115052115053115054115055115056115057115058115059115060115061115062115063115064115065115066115067115068115069115070115071115072115073115074115075115076115077115078115079115080115081115082115083115084115085115086115087115088115089115090115091115092115093115094115095115096115097115098115099115100115101115102115103115104115105115106115107115108115109115110115111115112115113115114115115115116115117115118115119115120115121115122115123115124115125115126115127115128115129115130115131115132115133115134115135115136115137115138115139115140115141115142115143115144115145115146115147115148115149115150115151115152115153115154115155115156115157115158115159115160115161115162115163115164115165115166115167115168115169115170115171115172115173115174115175115176115177115178115179115180115181115182115183115184115185115186115187115188115189115190115191115192115193115194115195115196115197115198115199115200115201115202115203115204115205115206115207115208115209115210115211115212115213115214115215115216115217115218115219115220115221115222115223115224115225115226115227115228115229115230115231115232115233115234115235115236115237115238115239115240115241115242115243115244115245115246115247115248115249115250115251115252115253115254115255115256115257115258115259115260115261115262115263115264115265115266115267115268115269115270115271115272115273115274115275115276115277115278115279115280115281115282115283115284115285115286115287115288115289115290115291115292115293115294115295115296115297115298115299115300115301115302115303115304115305115306115307115308115309115310115311115312115313115314115315115316115317115318115319115320115321115322115323115324115325115326115327115328115329115330115331115332115333115334115335115336115337115338115339115340115341115342115343115344115345115346115347115348115349115350115351115352115353115354115355115356115357115358115359115360115361115362115363115364115365115366115367115368115369115370115371115372115373115374115375115376115377115378115379115380115381115382115383115384115385115386115387115388115389115390115391115392115393115394115395115396115397115398115399115400115401115402115403115404115405115406115407115408115409115410115411115412115413115414115415115416115417115418115419115420115421115422115423115424115425115426115427115428115429115430115431115432115433115434115435115436115437115438115439115440115441115442115443115444115445115446115447115448115449115450115451115452115453115454115455115456115457115458115459115460115461115462115463115464115465115466115467115468115469115470115471115472115473115474115475115476115477115478115479115480115481115482115483115484115485115486115487115488115489115490115491115492115493115494115495115496115497115498115499115500115501115502115503115504115505115506115507115508115509115510115511115512115513115514115515115516115517115518115519115520115521115522115523115524115525115526115527115528115529115530115531115532115533115534115535115536115537115538115539115540115541115542115543115544115545115546115547115548115549115550115551115552115553115554115555115556115557115558115559115560115561115562115563115564115565115566115567115568115569115570115571115572115573115574115575115576115577115578115579115580115581115582115583115584115585115586115587115588115589115590115591115592115593115594115595115596115597115598115599115600115601115602115603115604115605115606115607115608115609115610115611115612115613115614115615115616115617115618115619115620115621115622115623115624115625115626115627115628115629115630115631115632115633115634115635115636115637115638115639115640115641115642115643115644115645115646115647115648115649115650115651115652115653115654115655115656115657115658115659115660115661115662115663115664115665115666115667115668115669115670115671115672115673115674115675115676115677115678115679115680115681115682115683115684115685115686115687115688115689115690115691115692115693115694115695115696115697115698115699115700115701115702115703115704115705115706115707115708115709115710115711115712115713115714115715115716115717115718115719115720115721115722115723115724115725115726115727115728115729115730115731115732115733115734115735115736115737115738115739115740115741115742115743115744115745115746115747115748115749115750115751115752115753115754115755115756115757115758115759115760115761115762115763115764115765115766115767115768115769115770115771115772115773115774115775115776115777115778115779115780115781115782115783115784115785115786115787115788115789115790115791115792115793115794115795115796115797115798115799115800115801115802115803115804115805115806115807115808115809115810115811115812115813115814115815115816115817115818115819115820115821115822115823115824115825115826115827115828115829115830115831115832115833115834115835115836115837115838115839115840115841115842115843115844115845115846115847115848115849115850115851115852115853115854115855115856115857115858115859115860115861115862115863115864115865115866115867115868115869115870115871115872115873115874115875115876115877115878115879115880115881115882115883115884115885115886115887115888115889115890115891115892115893115894115895115896115897115898115899115900115901115902115903115904115905115906115907115908115909115910115911115912115913115914115915115916115917115918115919115920115921115922115923115924115925115926115927115928115929115930115931115932115933115934115935115936115937115938115939115940115941115942115943115944115945115946115947115948115949115950115951115952115953115954115955115956115957115958115959115960115961115962115963115964115965115966115967115968115969115970115971115972115973115974115975115976115977115978115979115980115981115982115983115984115985115986115987115988115989115990115991115992115993115994115995115996115997115998115999116000116001116002116003116004116005116006116007116008116009116010116011116012116013116014116015116016116017116018116019116020116021116022116023116024116025116026116027116028116029116030116031116032116033116034116035116036116037116038116039116040116041116042116043116044116045116046116047116048116049116050116051116052116053116054116055116056116057116058116059116060116061116062116063116064116065116066116067116068116069116070116071116072116073116074116075116076116077116078116079116080116081116082116083116084116085116086116087116088116089116090116091116092116093116094116095116096116097116098116099116100116101116102116103116104116105116106116107116108116109116110116111116112116113116114116115116116116117116118116119116120116121116122116123116124116125116126116127116128116129116130116131116132116133116134116135116136116137116138116139116140116141116142116143116144116145116146116147116148116149116150116151116152116153116154116155116156116157116158116159116160116161116162116163116164116165116166116167116168116169116170116171116172116173116174116175116176116177116178116179116180116181116182116183116184116185116186116187116188116189116190116191116192116193116194116195116196116197116198116199116200116201116202116203116204116205116206116207116208116209116210116211116212116213116214116215116216116217116218116219116220116221116222116223116224116225116226116227116228116229116230116231116232116233116234116235116236116237116238116239116240116241116242116243116244116245116246116247116248116249116250116251116252116253116254116255116256116257116258116259116260116261116262116263116264116265116266116267116268116269116270116271116272116273116274116275116276116277116278116279116280116281116282116283116284116285116286116287116288116289116290116291116292116293116294116295116296116297116298116299116300116301116302116303116304116305116306116307116308116309116310116311116312116313116314116315116316116317116318116319116320116321116322116323116324116325116326116327116328116329116330116331116332116333116334116335116336116337116338116339116340116341116342116343116344116345116346116347116348116349116350116351116352116353116354116355116356116357116358116359116360116361116362116363116364116365116366116367116368116369116370116371116372116373116374116375116376116377116378116379116380116381116382116383116384116385116386116387116388116389116390116391116392116393116394116395116396116397116398116399116400116401116402116403116404116405116406116407116408116409116410116411116412116413116414116415116416116417116418116419116420116421116422116423116424116425116426116427116428116429116430116431116432116433116434116435116436116437116438116439116440116441116442116443116444116445116446116447116448116449116450116451116452116453116454116455116456116457116458116459116460116461116462116463116464116465116466116467116468116469116470116471116472116473116474116475116476116477116478116479116480116481116482116483116484116485116486116487116488116489116490116491116492116493116494116495116496116497116498116499116500116501116502116503116504116505116506116507116508116509116510116511116512116513116514116515116516116517116518116519116520116521116522116523116524116525116526116527116528116529116530116531116532116533116534116535116536116537116538116539116540116541116542116543116544116545116546116547116548116549116550116551116552116553116554116555116556116557116558116559116560116561116562116563116564116565116566116567116568116569116570116571116572116573116574116575116576116577116578116579116580116581116582116583116584116585116586116587116588116589116590116591116592116593116594116595116596116597116598116599116600116601116602116603116604116605116606116607116608116609116610116611116612116613116614116615116616116617116618116619116620116621116622116623116624116625116626116627116628116629116630116631116632116633116634116635116636116637116638116639116640116641116642116643116644116645116646116647116648116649116650116651116652116653116654116655116656116657116658116659116660116661116662116663116664116665116666116667116668116669116670116671116672116673116674116675116676116677116678116679116680116681116682116683116684116685116686116687116688116689116690116691116692116693116694116695116696116697116698116699116700116701116702116703116704116705116706116707116708116709116710116711116712116713116714116715116716116717116718116719116720116721116722116723116724116725116726116727116728116729116730116731116732116733116734116735116736116737116738116739116740116741116742116743116744116745116746116747116748116749116750116751116752116753116754116755116756116757116758116759116760116761116762116763116764116765116766116767116768116769116770116771116772116773116774116775116776116777116778116779116780116781116782116783116784116785116786116787116788116789116790116791116792116793116794116795116796116797116798116799116800116801116802116803116804116805116806116807116808116809116810116811116812116813116814116815116816116817116818116819116820116821116822116823116824116825116826116827116828116829116830116831116832116833116834116835116836116837116838116839116840116841116842116843116844116845116846116847116848116849116850116851116852116853116854116855116856116857116858116859116860116861116862116863116864116865116866116867116868116869116870116871116872116873116874116875116876116877116878116879116880116881116882116883116884116885116886116887116888116889116890116891116892116893116894116895116896116897116898116899116900116901116902116903116904116905116906116907116908116909116910116911116912116913116914116915116916116917116918116919116920116921116922116923116924116925116926116927116928116929116930116931116932116933116934116935116936116937116938116939116940116941116942116943116944116945116946116947116948116949116950116951116952116953116954116955116956116957116958116959116960116961116962116963116964116965116966116967116968116969116970116971116972116973116974116975116976116977116978116979116980116981116982116983116984116985116986116987116988116989116990116991116992116993116994116995116996116997116998116999117000117001117002117003117004117005117006117007117008117009117010117011117012117013117014117015117016117017117018117019117020117021117022117023117024117025117026117027117028117029117030117031117032117033117034117035117036117037117038117039117040117041117042117043117044117045117046117047117048117049117050117051117052117053117054117055117056117057117058117059117060117061117062117063117064117065117066117067117068117069117070117071117072117073117074117075117076117077117078117079117080117081117082117083117084117085117086117087117088117089117090117091117092117093117094117095117096117097117098117099117100117101117102117103117104117105117106117107117108117109117110117111117112117113117114117115117116117117117118117119117120117121117122117123117124117125117126117127117128117129117130117131117132117133117134117135117136117137117138117139117140117141117142117143117144117145117146117147117148117149117150117151117152117153117154117155117156117157117158117159117160117161117162117163117164117165117166117167117168117169117170117171117172117173117174117175117176117177117178117179117180117181117182117183117184117185117186117187117188117189117190117191117192117193117194117195117196117197117198117199117200117201117202117203117204117205117206117207117208117209117210117211117212117213117214117215117216117217117218117219117220117221117222117223117224117225117226117227117228117229117230117231117232117233117234117235117236117237117238117239117240117241117242117243117244117245117246117247117248117249117250117251117252117253117254117255117256117257117258117259117260117261117262117263117264117265117266117267117268117269117270117271117272117273117274117275117276117277117278117279117280117281117282117283117284117285117286117287117288117289117290117291117292117293117294117295117296117297117298117299117300117301117302117303117304117305117306117307117308117309117310117311117312117313117314117315117316117317117318117319117320117321117322117323117324117325117326117327117328117329117330117331117332117333117334117335117336117337117338117339117340117341117342117343117344117345117346117347117348117349117350117351117352117353117354117355117356117357117358117359117360117361117362117363117364117365117366117367117368117369117370117371117372117373117374117375117376117377117378117379117380117381117382117383117384117385117386117387117388117389117390117391117392117393117394117395117396117397117398117399117400117401117402117403117404117405117406117407117408117409117410117411117412117413117414117415117416117417117418117419117420117421117422117423117424117425117426117427117428117429117430117431117432117433117434117435117436117437117438117439117440117441117442117443117444117445117446117447117448117449117450117451117452117453117454117455117456117457117458117459117460117461117462117463117464117465117466117467117468117469117470117471117472117473117474117475117476117477117478117479117480117481117482117483117484117485117486117487117488117489117490117491117492117493117494117495117496117497117498117499117500117501117502117503117504117505117506117507117508117509117510117511117512117513117514117515117516117517117518117519117520117521117522117523117524117525117526117527117528117529117530117531117532117533117534117535117536117537117538117539117540117541117542117543117544117545117546117547117548117549117550117551117552117553117554117555117556117557117558117559117560117561117562117563117564117565117566117567117568117569117570117571117572117573117574117575117576117577117578117579117580117581117582117583117584117585117586117587117588117589117590117591117592117593117594117595117596117597117598117599117600117601117602117603117604117605117606117607117608117609117610117611117612117613117614117615117616117617117618117619117620117621117622117623117624117625117626117627117628117629117630117631117632117633117634117635117636117637117638117639117640117641117642117643117644117645117646117647117648117649117650117651117652117653117654117655117656117657117658117659117660117661117662117663117664117665117666117667117668117669117670117671117672117673117674117675117676117677117678117679117680117681117682117683117684117685117686117687117688117689117690117691117692117693117694117695117696117697117698117699117700117701117702117703117704117705117706117707117708117709117710117711117712117713117714117715117716117717117718117719117720117721117722117723117724117725117726117727117728117729117730117731117732117733117734117735117736117737117738117739117740117741117742117743117744117745117746117747117748117749117750117751117752117753117754117755117756117757117758117759117760117761117762117763117764117765117766117767117768117769117770117771117772117773117774117775117776117777117778117779117780117781117782117783117784117785117786117787117788117789117790117791117792117793117794117795117796117797117798117799117800117801117802117803117804117805117806117807117808117809117810117811117812117813117814117815117816117817117818117819117820117821117822117823117824117825117826117827117828117829117830117831117832117833117834117835117836117837117838117839117840117841117842117843117844117845117846117847117848117849117850117851117852117853117854117855117856117857117858117859117860117861117862117863117864117865117866117867117868117869117870117871117872117873117874117875117876117877117878117879117880117881117882117883117884117885117886117887117888117889117890117891117892117893117894117895117896117897117898117899117900117901117902117903117904117905117906117907117908117909117910117911117912117913117914117915117916117917117918117919117920117921117922117923117924117925117926117927117928117929117930117931117932117933117934117935117936117937117938117939117940117941117942117943117944117945117946117947117948117949117950117951117952117953117954117955117956117957117958117959117960117961117962117963117964117965117966117967117968117969117970117971117972117973117974117975117976117977117978117979117980117981117982117983117984117985117986117987117988117989117990117991117992117993117994117995117996117997117998117999118000118001118002118003118004118005118006118007118008118009118010118011118012118013118014118015118016118017118018118019118020118021118022118023118024118025118026118027118028118029118030118031118032118033118034118035118036118037118038118039118040118041118042118043118044118045118046118047118048118049118050118051118052118053118054118055118056118057118058118059118060118061118062118063118064118065118066118067118068118069118070118071118072118073118074118075118076118077118078118079118080118081118082118083118084118085118086118087118088118089118090118091118092118093118094118095118096118097118098118099118100118101118102118103118104118105118106118107118108118109118110118111118112118113118114118115118116118117118118118119118120118121118122118123118124118125118126118127118128118129118130118131118132118133118134118135118136118137118138118139118140118141118142118143118144118145118146118147118148118149118150118151118152118153118154118155118156118157118158118159118160118161118162118163118164118165118166118167118168118169118170118171118172118173118174118175118176118177118178118179118180118181118182118183118184118185118186118187118188118189118190118191118192118193118194118195118196118197118198118199118200118201118202118203118204118205118206118207118208118209118210118211118212118213118214118215118216118217118218118219118220118221118222118223118224118225118226118227118228118229118230118231118232118233118234118235118236118237118238118239118240118241118242118243118244118245118246118247118248118249118250118251118252118253118254118255118256118257118258118259118260118261118262118263118264118265118266118267118268118269118270118271118272118273118274118275118276118277118278118279118280118281118282118283118284118285118286118287118288118289118290118291118292118293118294118295118296118297118298118299118300118301118302118303118304118305118306118307118308118309118310118311118312118313118314118315118316118317118318118319118320118321118322118323118324118325118326118327118328118329118330118331118332118333118334118335118336118337118338118339118340118341118342118343118344118345118346118347118348118349118350118351118352118353118354118355118356118357118358118359118360118361118362118363118364118365118366118367118368118369118370118371118372118373118374118375118376118377118378118379118380118381118382118383118384118385118386118387118388118389118390118391118392118393118394118395118396118397118398118399118400118401118402118403118404118405118406118407118408118409118410118411118412118413118414118415118416118417118418118419118420118421118422118423118424118425118426118427118428118429118430118431118432118433118434118435118436118437118438118439118440118441118442118443118444118445118446118447118448118449118450118451118452118453118454118455118456118457118458118459118460118461118462118463118464118465118466118467118468118469118470118471118472118473118474118475118476118477118478118479118480118481118482118483118484118485118486118487118488118489118490118491118492118493118494118495118496118497118498118499118500118501118502118503118504118505118506118507118508118509118510118511118512118513118514118515118516118517118518118519118520118521118522118523118524118525118526118527118528118529118530118531118532118533118534118535118536118537118538118539118540118541118542118543118544118545118546118547118548118549118550118551118552118553118554118555118556118557118558118559118560118561118562118563118564118565118566118567118568118569118570118571118572118573118574118575118576118577118578118579118580118581118582118583118584118585118586118587118588118589118590118591118592118593118594118595118596118597118598118599118600118601118602118603118604118605118606118607118608118609118610118611118612118613118614118615118616118617118618118619118620118621118622118623118624118625118626118627118628118629118630118631118632118633118634118635118636118637118638118639118640118641118642118643118644118645118646118647118648118649118650118651118652118653118654118655118656118657118658118659118660118661118662118663118664118665118666118667118668118669118670118671118672118673118674118675118676118677118678118679118680118681118682118683118684118685118686118687118688118689118690118691118692118693118694118695118696118697118698118699118700118701118702118703118704118705118706118707118708118709118710118711118712118713118714118715118716118717118718118719118720118721118722118723118724118725118726118727118728118729118730118731118732118733118734118735118736118737118738118739118740118741118742118743118744118745118746118747118748118749118750118751118752118753118754118755118756118757118758118759118760118761118762118763118764118765118766118767118768118769118770118771118772118773118774118775118776118777118778118779118780118781118782118783118784118785118786118787118788118789118790118791118792118793118794118795118796118797118798118799118800118801118802118803118804118805118806118807118808118809118810118811118812118813118814118815118816118817118818118819118820118821118822118823118824118825118826118827118828118829118830118831118832118833118834118835118836118837118838118839118840118841118842118843118844118845118846118847118848118849118850118851118852118853118854118855118856118857118858118859118860118861118862118863118864118865118866118867118868118869118870118871118872118873118874118875118876118877118878118879118880118881118882118883118884118885118886118887118888118889118890118891118892118893118894118895118896118897118898118899118900118901118902118903118904118905118906118907118908118909118910118911118912118913118914118915118916118917118918118919118920118921118922118923118924118925118926118927118928118929118930118931118932118933118934118935118936118937118938118939118940118941118942118943118944118945118946118947118948118949118950118951118952118953118954118955118956118957118958118959118960118961118962118963118964118965118966118967118968118969118970118971118972118973118974118975118976118977118978118979118980118981118982118983118984118985118986118987118988118989118990118991118992118993118994118995118996118997118998118999119000119001119002119003119004119005119006119007119008119009119010119011119012119013119014119015119016119017119018119019119020119021119022119023119024119025119026119027119028119029119030119031119032119033119034119035119036119037119038119039119040119041119042119043119044119045119046119047119048119049119050119051119052119053119054119055119056119057119058119059119060119061119062119063119064119065119066119067119068119069119070119071119072119073119074119075119076119077119078119079119080119081119082119083119084119085119086119087119088119089119090119091119092119093119094119095119096119097119098119099119100119101119102119103119104119105119106119107119108119109119110119111119112119113119114119115119116119117119118119119119120119121119122119123119124119125119126119127119128119129119130119131119132119133119134119135119136119137119138119139119140119141119142119143119144119145119146119147119148119149119150119151119152119153119154119155119156119157119158119159119160119161119162119163119164119165119166119167119168119169119170119171119172119173119174119175119176119177119178119179119180119181119182119183119184119185119186119187119188119189119190119191119192119193119194119195119196119197119198119199119200119201119202119203119204119205119206119207119208119209119210119211119212119213119214119215119216119217119218119219119220119221119222119223119224119225119226119227119228119229119230119231119232119233119234119235119236119237119238119239119240119241119242119243119244119245119246119247119248119249119250119251119252119253119254119255119256119257119258119259119260119261119262119263119264119265119266119267119268119269119270119271119272119273119274119275119276119277119278119279119280119281119282119283119284119285119286119287119288119289119290119291119292119293119294119295119296119297119298119299119300119301119302119303119304119305119306119307119308119309119310119311119312119313119314119315119316119317119318119319119320119321119322119323119324119325119326119327119328119329119330119331119332119333119334119335119336119337119338119339119340119341119342119343119344119345119346119347119348119349119350119351119352119353119354119355119356119357119358119359119360119361119362119363119364119365119366119367119368119369119370119371119372119373119374119375119376119377119378119379119380119381119382119383119384119385119386119387119388119389119390119391119392119393119394119395119396119397119398119399119400119401119402119403119404119405119406119407119408119409119410119411119412119413119414119415119416119417119418119419119420119421119422119423119424119425119426119427119428119429119430119431119432119433119434119435119436119437119438119439119440119441119442119443119444119445119446119447119448119449119450119451119452119453119454119455119456119457119458119459119460119461119462119463119464119465119466119467119468119469119470119471119472119473119474119475119476119477119478119479119480119481119482119483119484119485119486119487119488119489119490119491119492119493119494119495119496119497119498119499119500119501119502119503119504119505119506119507119508119509119510119511119512119513119514119515119516119517119518119519119520119521119522119523119524119525119526119527119528119529119530119531119532119533119534119535119536119537119538119539119540119541119542119543119544119545119546119547119548119549119550119551119552119553119554119555119556119557119558119559119560119561119562119563119564119565119566119567119568119569119570119571119572119573119574119575119576119577119578119579119580119581119582119583119584119585119586119587119588119589119590119591119592119593119594119595119596119597119598119599119600119601119602119603119604119605119606119607119608119609119610119611119612119613119614119615119616119617119618119619119620119621119622119623119624119625119626119627119628119629119630119631119632119633119634119635119636119637119638119639119640119641119642119643119644119645119646119647119648119649119650119651119652119653119654119655119656119657119658119659119660119661119662 |
- (window["webpackJsonp"] = window["webpackJsonp"] || []).push([["vendor"],{
- /***/ "/d8p":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/repeat.js ***!
- \*****************************************************************/
- /*! exports provided: repeat */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "repeat", function() { return repeat; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../observable/empty */ "EY2u");
- function repeat(count = -1) {
- return (source) => {
- if (count === 0) {
- return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_1__["empty"])();
- }
- else if (count < 0) {
- return source.lift(new RepeatOperator(-1, source));
- }
- else {
- return source.lift(new RepeatOperator(count - 1, source));
- }
- };
- }
- class RepeatOperator {
- constructor(count, source) {
- this.count = count;
- this.source = source;
- }
- call(subscriber, source) {
- return source.subscribe(new RepeatSubscriber(subscriber, this.count, this.source));
- }
- }
- class RepeatSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, count, source) {
- super(destination);
- this.count = count;
- this.source = source;
- }
- complete() {
- if (!this.isStopped) {
- const { source, count } = this;
- if (count === 0) {
- return super.complete();
- }
- else if (count > -1) {
- this.count = count - 1;
- }
- source.subscribe(this._unsubscribeAndRecycle());
- }
- }
- }
- //# sourceMappingURL=repeat.js.map
- /***/ }),
- /***/ "/uUt":
- /*!*******************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/distinctUntilChanged.js ***!
- \*******************************************************************************/
- /*! exports provided: distinctUntilChanged */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "distinctUntilChanged", function() { return distinctUntilChanged; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function distinctUntilChanged(compare, keySelector) {
- return (source) => source.lift(new DistinctUntilChangedOperator(compare, keySelector));
- }
- class DistinctUntilChangedOperator {
- constructor(compare, keySelector) {
- this.compare = compare;
- this.keySelector = keySelector;
- }
- call(subscriber, source) {
- return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));
- }
- }
- class DistinctUntilChangedSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, compare, keySelector) {
- super(destination);
- this.keySelector = keySelector;
- this.hasKey = false;
- if (typeof compare === 'function') {
- this.compare = compare;
- }
- }
- compare(x, y) {
- return x === y;
- }
- _next(value) {
- let key;
- try {
- const { keySelector } = this;
- key = keySelector ? keySelector(value) : value;
- }
- catch (err) {
- return this.destination.error(err);
- }
- let result = false;
- if (this.hasKey) {
- try {
- const { compare } = this;
- result = compare(this.key, key);
- }
- catch (err) {
- return this.destination.error(err);
- }
- }
- else {
- this.hasKey = true;
- }
- if (!result) {
- this.key = key;
- this.destination.next(value);
- }
- }
- }
- //# sourceMappingURL=distinctUntilChanged.js.map
- /***/ }),
- /***/ "02Lk":
- /*!*******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/distinct.js ***!
- \*******************************************************************/
- /*! exports provided: distinct, DistinctSubscriber */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "distinct", function() { return distinct; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DistinctSubscriber", function() { return DistinctSubscriber; });
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function distinct(keySelector, flushes) {
- return (source) => source.lift(new DistinctOperator(keySelector, flushes));
- }
- class DistinctOperator {
- constructor(keySelector, flushes) {
- this.keySelector = keySelector;
- this.flushes = flushes;
- }
- call(subscriber, source) {
- return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));
- }
- }
- class DistinctSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__["OuterSubscriber"] {
- constructor(destination, keySelector, flushes) {
- super(destination);
- this.keySelector = keySelector;
- this.values = new Set();
- if (flushes) {
- this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(this, flushes));
- }
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.values.clear();
- }
- notifyError(error, innerSub) {
- this._error(error);
- }
- _next(value) {
- if (this.keySelector) {
- this._useKeySelector(value);
- }
- else {
- this._finalizeNext(value, value);
- }
- }
- _useKeySelector(value) {
- let key;
- const { destination } = this;
- try {
- key = this.keySelector(value);
- }
- catch (err) {
- destination.error(err);
- return;
- }
- this._finalizeNext(key, value);
- }
- _finalizeNext(key, value) {
- const { values } = this;
- if (!values.has(key)) {
- values.add(key);
- this.destination.next(value);
- }
- }
- }
- //# sourceMappingURL=distinct.js.map
- /***/ }),
- /***/ "04ZW":
- /*!****************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/fromEventPattern.js ***!
- \****************************************************************************/
- /*! exports provided: fromEventPattern */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromEventPattern", function() { return fromEventPattern; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/isArray */ "DH7j");
- /* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/isFunction */ "n6bG");
- /* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../operators/map */ "lJxs");
- function fromEventPattern(addHandler, removeHandler, resultSelector) {
- if (resultSelector) {
- return fromEventPattern(addHandler, removeHandler).pipe(Object(_operators_map__WEBPACK_IMPORTED_MODULE_3__["map"])(args => Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(args) ? resultSelector(...args) : resultSelector(args)));
- }
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- const handler = (...e) => subscriber.next(e.length === 1 ? e[0] : e);
- let retValue;
- try {
- retValue = addHandler(handler);
- }
- catch (err) {
- subscriber.error(err);
- return undefined;
- }
- if (!Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(removeHandler)) {
- return undefined;
- }
- return () => removeHandler(handler, retValue);
- });
- }
- //# sourceMappingURL=fromEventPattern.js.map
- /***/ }),
- /***/ "05l1":
- /*!************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/publishReplay.js ***!
- \************************************************************************/
- /*! exports provided: publishReplay */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishReplay", function() { return publishReplay; });
- /* harmony import */ var _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../ReplaySubject */ "jtHE");
- /* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./multicast */ "oB13");
- function publishReplay(bufferSize, windowTime, selectorOrScheduler, scheduler) {
- if (selectorOrScheduler && typeof selectorOrScheduler !== 'function') {
- scheduler = selectorOrScheduler;
- }
- const selector = typeof selectorOrScheduler === 'function' ? selectorOrScheduler : undefined;
- const subject = new _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__["ReplaySubject"](bufferSize, windowTime, scheduler);
- return (source) => Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(() => subject, selector)(source);
- }
- //# sourceMappingURL=publishReplay.js.map
- /***/ }),
- /***/ "0EQZ":
- /*!************************************************************************!*\
- !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/collections.js ***!
- \************************************************************************/
- /*! exports provided: ArrayDataSource, DataSource, SelectionModel, UniqueSelectionDispatcher, getMultipleValuesInSingleSelectionError, isDataSource */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ArrayDataSource", function() { return ArrayDataSource; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DataSource", function() { return DataSource; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SelectionModel", function() { return SelectionModel; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UniqueSelectionDispatcher", function() { return UniqueSelectionDispatcher; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getMultipleValuesInSingleSelectionError", function() { return getMultipleValuesInSingleSelectionError; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isDataSource", function() { return isDataSource; });
- /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "qCKp");
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/collections/data-source.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @abstract
- * @template T
- */
- class DataSource {
- }
- if (false) {}
- /**
- * Checks whether an object is a data source.
- * @param {?} value
- * @return {?}
- */
- function isDataSource(value) {
- // Check if the value is a DataSource by observing if it has a connect function. Cannot
- // be checked as an `instanceof DataSource` since people could create their own sources
- // that match the interface, but don't extend DataSource.
- return value && typeof value.connect === 'function';
- }
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/collections/array-data-source.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * DataSource wrapper for a native array.
- * @template T
- */
- class ArrayDataSource extends DataSource {
- /**
- * @param {?} _data
- */
- constructor(_data) {
- super();
- this._data = _data;
- }
- /**
- * @return {?}
- */
- connect() {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["isObservable"])(this._data) ? this._data : Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])(this._data);
- }
- /**
- * @return {?}
- */
- disconnect() { }
- }
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/collections/collection-viewer.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Interface for any component that provides a view of some data collection and wants to provide
- * information regarding the view and any changes made.
- * @record
- */
- function CollectionViewer() { }
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/collections/selection-model.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * Class to be used to power selecting one or more options from a list.
- * @template T
- */
- class SelectionModel {
- /**
- * @param {?=} _multiple
- * @param {?=} initiallySelectedValues
- * @param {?=} _emitChanges
- */
- constructor(_multiple = false, initiallySelectedValues, _emitChanges = true) {
- this._multiple = _multiple;
- this._emitChanges = _emitChanges;
- /**
- * Currently-selected values.
- */
- this._selection = new Set();
- /**
- * Keeps track of the deselected options that haven't been emitted by the change event.
- */
- this._deselectedToEmit = [];
- /**
- * Keeps track of the selected options that haven't been emitted by the change event.
- */
- this._selectedToEmit = [];
- /**
- * Event emitted when the value has changed.
- */
- this.changed = new rxjs__WEBPACK_IMPORTED_MODULE_0__["Subject"]();
- if (initiallySelectedValues && initiallySelectedValues.length) {
- if (_multiple) {
- initiallySelectedValues.forEach((/**
- * @param {?} value
- * @return {?}
- */
- value => this._markSelected(value)));
- }
- else {
- this._markSelected(initiallySelectedValues[0]);
- }
- // Clear the array in order to avoid firing the change event for preselected values.
- this._selectedToEmit.length = 0;
- }
- }
- /**
- * Selected values.
- * @return {?}
- */
- get selected() {
- if (!this._selected) {
- this._selected = Array.from(this._selection.values());
- }
- return this._selected;
- }
- /**
- * Selects a value or an array of values.
- * @param {...?} values
- * @return {?}
- */
- select(...values) {
- this._verifyValueAssignment(values);
- values.forEach((/**
- * @param {?} value
- * @return {?}
- */
- value => this._markSelected(value)));
- this._emitChangeEvent();
- }
- /**
- * Deselects a value or an array of values.
- * @param {...?} values
- * @return {?}
- */
- deselect(...values) {
- this._verifyValueAssignment(values);
- values.forEach((/**
- * @param {?} value
- * @return {?}
- */
- value => this._unmarkSelected(value)));
- this._emitChangeEvent();
- }
- /**
- * Toggles a value between selected and deselected.
- * @param {?} value
- * @return {?}
- */
- toggle(value) {
- this.isSelected(value) ? this.deselect(value) : this.select(value);
- }
- /**
- * Clears all of the selected values.
- * @return {?}
- */
- clear() {
- this._unmarkAll();
- this._emitChangeEvent();
- }
- /**
- * Determines whether a value is selected.
- * @param {?} value
- * @return {?}
- */
- isSelected(value) {
- return this._selection.has(value);
- }
- /**
- * Determines whether the model does not have a value.
- * @return {?}
- */
- isEmpty() {
- return this._selection.size === 0;
- }
- /**
- * Determines whether the model has a value.
- * @return {?}
- */
- hasValue() {
- return !this.isEmpty();
- }
- /**
- * Sorts the selected values based on a predicate function.
- * @param {?=} predicate
- * @return {?}
- */
- sort(predicate) {
- if (this._multiple && this.selected) {
- (/** @type {?} */ (this._selected)).sort(predicate);
- }
- }
- /**
- * Gets whether multiple values can be selected.
- * @return {?}
- */
- isMultipleSelection() {
- return this._multiple;
- }
- /**
- * Emits a change event and clears the records of selected and deselected values.
- * @private
- * @return {?}
- */
- _emitChangeEvent() {
- // Clear the selected values so they can be re-cached.
- this._selected = null;
- if (this._selectedToEmit.length || this._deselectedToEmit.length) {
- this.changed.next({
- source: this,
- added: this._selectedToEmit,
- removed: this._deselectedToEmit
- });
- this._deselectedToEmit = [];
- this._selectedToEmit = [];
- }
- }
- /**
- * Selects a value.
- * @private
- * @param {?} value
- * @return {?}
- */
- _markSelected(value) {
- if (!this.isSelected(value)) {
- if (!this._multiple) {
- this._unmarkAll();
- }
- this._selection.add(value);
- if (this._emitChanges) {
- this._selectedToEmit.push(value);
- }
- }
- }
- /**
- * Deselects a value.
- * @private
- * @param {?} value
- * @return {?}
- */
- _unmarkSelected(value) {
- if (this.isSelected(value)) {
- this._selection.delete(value);
- if (this._emitChanges) {
- this._deselectedToEmit.push(value);
- }
- }
- }
- /**
- * Clears out the selected values.
- * @private
- * @return {?}
- */
- _unmarkAll() {
- if (!this.isEmpty()) {
- this._selection.forEach((/**
- * @param {?} value
- * @return {?}
- */
- value => this._unmarkSelected(value)));
- }
- }
- /**
- * Verifies the value assignment and throws an error if the specified value array is
- * including multiple values while the selection model is not supporting multiple values.
- * @private
- * @param {?} values
- * @return {?}
- */
- _verifyValueAssignment(values) {
- if (values.length > 1 && !this._multiple) {
- throw getMultipleValuesInSingleSelectionError();
- }
- }
- }
- if (false) {}
- /**
- * Event emitted when the value of a MatSelectionModel has changed.
- * \@docs-private
- * @record
- * @template T
- */
- function SelectionChange() { }
- if (false) {}
- /**
- * Returns an error that reports that multiple values are passed into a selection model
- * with a single value.
- * \@docs-private
- * @return {?}
- */
- function getMultipleValuesInSingleSelectionError() {
- return Error('Cannot pass multiple values into SelectionModel with single-value mode.');
- }
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/collections/unique-selection-dispatcher.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * Class to coordinate unique selection based on name.
- * Intended to be consumed as an Angular service.
- * This service is needed because native radio change events are only fired on the item currently
- * being selected, and we still need to uncheck the previous selection.
- *
- * This service does not *store* any IDs and names because they may change at any time, so it is
- * less error-prone if they are simply passed through when the events occur.
- */
- class UniqueSelectionDispatcher {
- constructor() {
- this._listeners = [];
- }
- /**
- * Notify other items that selection for the given name has been set.
- * @param {?} id ID of the item.
- * @param {?} name Name of the item.
- * @return {?}
- */
- notify(id, name) {
- for (let listener of this._listeners) {
- listener(id, name);
- }
- }
- /**
- * Listen for future changes to item selection.
- * @param {?} listener
- * @return {?} Function used to deregister listener
- */
- listen(listener) {
- this._listeners.push(listener);
- return (/**
- * @return {?}
- */
- () => {
- this._listeners = this._listeners.filter((/**
- * @param {?} registered
- * @return {?}
- */
- (registered) => {
- return listener !== registered;
- }));
- });
- }
- /**
- * @return {?}
- */
- ngOnDestroy() {
- this._listeners = [];
- }
- }
- UniqueSelectionDispatcher.ɵfac = function UniqueSelectionDispatcher_Factory(t) { return new (t || UniqueSelectionDispatcher)(); };
- /** @nocollapse */ UniqueSelectionDispatcher.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({ factory: function UniqueSelectionDispatcher_Factory() { return new UniqueSelectionDispatcher(); }, token: UniqueSelectionDispatcher, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](UniqueSelectionDispatcher, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return []; }, null); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/collections/tree-adapter.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Interface for a class that can flatten hierarchical structured data and re-expand the flattened
- * data back into its original structure. Should be used in conjunction with the cdk-tree.
- * @record
- * @template T
- */
- function TreeDataNodeFlattener() { }
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/collections/public-api.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=collections.js.map
- /***/ }),
- /***/ "0EUg":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/concatAll.js ***!
- \********************************************************************/
- /*! exports provided: concatAll */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concatAll", function() { return concatAll; });
- /* harmony import */ var _mergeAll__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mergeAll */ "bHdf");
- function concatAll() {
- return Object(_mergeAll__WEBPACK_IMPORTED_MODULE_0__["mergeAll"])(1);
- }
- //# sourceMappingURL=concatAll.js.map
- /***/ }),
- /***/ "0Pi8":
- /*!******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/endWith.js ***!
- \******************************************************************/
- /*! exports provided: endWith */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "endWith", function() { return endWith; });
- /* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../observable/concat */ "GyhO");
- /* harmony import */ var _observable_of__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../observable/of */ "LRne");
- function endWith(...array) {
- return (source) => Object(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"])(source, Object(_observable_of__WEBPACK_IMPORTED_MODULE_1__["of"])(...array));
- }
- //# sourceMappingURL=endWith.js.map
- /***/ }),
- /***/ "128B":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/reduce.js ***!
- \*****************************************************************/
- /*! exports provided: reduce */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reduce", function() { return reduce; });
- /* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./scan */ "Kqap");
- /* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./takeLast */ "BFxc");
- /* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./defaultIfEmpty */ "xbPD");
- /* harmony import */ var _util_pipe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/pipe */ "mCNh");
- function reduce(accumulator, seed) {
- if (arguments.length >= 2) {
- return function reduceOperatorFunctionWithSeed(source) {
- return Object(_util_pipe__WEBPACK_IMPORTED_MODULE_3__["pipe"])(Object(_scan__WEBPACK_IMPORTED_MODULE_0__["scan"])(accumulator, seed), Object(_takeLast__WEBPACK_IMPORTED_MODULE_1__["takeLast"])(1), Object(_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_2__["defaultIfEmpty"])(seed))(source);
- };
- }
- return function reduceOperatorFunction(source) {
- return Object(_util_pipe__WEBPACK_IMPORTED_MODULE_3__["pipe"])(Object(_scan__WEBPACK_IMPORTED_MODULE_0__["scan"])((acc, value, index) => accumulator(acc, value, index + 1)), Object(_takeLast__WEBPACK_IMPORTED_MODULE_1__["takeLast"])(1))(source);
- };
- }
- //# sourceMappingURL=reduce.js.map
- /***/ }),
- /***/ "1G5W":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/takeUntil.js ***!
- \********************************************************************/
- /*! exports provided: takeUntil */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "takeUntil", function() { return takeUntil; });
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function takeUntil(notifier) {
- return (source) => source.lift(new TakeUntilOperator(notifier));
- }
- class TakeUntilOperator {
- constructor(notifier) {
- this.notifier = notifier;
- }
- call(subscriber, source) {
- const takeUntilSubscriber = new TakeUntilSubscriber(subscriber);
- const notifierSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(takeUntilSubscriber, this.notifier);
- if (notifierSubscription && !takeUntilSubscriber.seenValue) {
- takeUntilSubscriber.add(notifierSubscription);
- return source.subscribe(takeUntilSubscriber);
- }
- return takeUntilSubscriber;
- }
- }
- class TakeUntilSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__["OuterSubscriber"] {
- constructor(destination) {
- super(destination);
- this.seenValue = false;
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.seenValue = true;
- this.complete();
- }
- notifyComplete() {
- }
- }
- //# sourceMappingURL=takeUntil.js.map
- /***/ }),
- /***/ "1Ykd":
- /*!*********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/sampleTime.js ***!
- \*********************************************************************/
- /*! exports provided: sampleTime */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sampleTime", function() { return sampleTime; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../scheduler/async */ "D0XW");
- function sampleTime(period, scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"]) {
- return (source) => source.lift(new SampleTimeOperator(period, scheduler));
- }
- class SampleTimeOperator {
- constructor(period, scheduler) {
- this.period = period;
- this.scheduler = scheduler;
- }
- call(subscriber, source) {
- return source.subscribe(new SampleTimeSubscriber(subscriber, this.period, this.scheduler));
- }
- }
- class SampleTimeSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, period, scheduler) {
- super(destination);
- this.period = period;
- this.scheduler = scheduler;
- this.hasValue = false;
- this.add(scheduler.schedule(dispatchNotification, period, { subscriber: this, period }));
- }
- _next(value) {
- this.lastValue = value;
- this.hasValue = true;
- }
- notifyNext() {
- if (this.hasValue) {
- this.hasValue = false;
- this.destination.next(this.lastValue);
- }
- }
- }
- function dispatchNotification(state) {
- let { subscriber, period } = state;
- subscriber.notifyNext();
- this.schedule(state, period);
- }
- //# sourceMappingURL=sampleTime.js.map
- /***/ }),
- /***/ "1kSV":
- /*!***************************************************************************************!*\
- !*** ./node_modules/@ng-bootstrap/ng-bootstrap/__ivy_ngcc__/fesm2015/ng-bootstrap.js ***!
- \***************************************************************************************/
- /*! exports provided: ModalDismissReasons, NgbAccordion, NgbAccordionConfig, NgbAccordionModule, NgbActiveModal, NgbAlert, NgbAlertConfig, NgbAlertModule, NgbButtonLabel, NgbButtonsModule, NgbCalendar, NgbCalendarGregorian, NgbCalendarHebrew, NgbCalendarIslamicCivil, NgbCalendarIslamicUmalqura, NgbCalendarPersian, NgbCarousel, NgbCarouselConfig, NgbCarouselModule, NgbCheckBox, NgbCollapse, NgbCollapseConfig, NgbCollapseModule, NgbConfig, NgbDate, NgbDateAdapter, NgbDateNativeAdapter, NgbDateNativeUTCAdapter, NgbDateParserFormatter, NgbDatepicker, NgbDatepickerConfig, NgbDatepickerContent, NgbDatepickerI18n, NgbDatepickerI18nHebrew, NgbDatepickerKeyboardService, NgbDatepickerModule, NgbDatepickerMonth, NgbDropdown, NgbDropdownAnchor, NgbDropdownConfig, NgbDropdownItem, NgbDropdownMenu, NgbDropdownModule, NgbDropdownToggle, NgbHighlight, NgbInputDatepicker, NgbInputDatepickerConfig, NgbModal, NgbModalConfig, NgbModalModule, NgbModalRef, NgbModule, NgbNav, NgbNavConfig, NgbNavContent, NgbNavItem, NgbNavLink, NgbNavModule, NgbNavOutlet, NgbNavPane, NgbNavbar, NgbPagination, NgbPaginationConfig, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationModule, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious, NgbPanel, NgbPanelContent, NgbPanelHeader, NgbPanelTitle, NgbPanelToggle, NgbPopover, NgbPopoverConfig, NgbPopoverModule, NgbProgressbar, NgbProgressbarConfig, NgbProgressbarModule, NgbRadio, NgbRadioGroup, NgbRating, NgbRatingConfig, NgbRatingModule, NgbSlide, NgbSlideEventDirection, NgbSlideEventSource, NgbTimeAdapter, NgbTimepicker, NgbTimepickerConfig, NgbTimepickerI18n, NgbTimepickerModule, NgbToast, NgbToastConfig, NgbToastHeader, NgbToastModule, NgbTooltip, NgbTooltipConfig, NgbTooltipModule, NgbTypeahead, NgbTypeaheadConfig, NgbTypeaheadModule, ɵa, ɵb, ɵba, ɵbb, ɵbc, ɵc, ɵd, ɵe, ɵf, ɵg, ɵh, ɵi, ɵj, ɵk, ɵl, ɵm, ɵn, ɵo, ɵp, ɵq, ɵr, ɵs, ɵt, ɵu, ɵv, ɵw, ɵx, ɵy, ɵz */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ModalDismissReasons", function() { return ModalDismissReasons; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbAccordion", function() { return NgbAccordion; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbAccordionConfig", function() { return NgbAccordionConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbAccordionModule", function() { return NgbAccordionModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbActiveModal", function() { return NgbActiveModal; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbAlert", function() { return NgbAlert; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbAlertConfig", function() { return NgbAlertConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbAlertModule", function() { return NgbAlertModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbButtonLabel", function() { return NgbButtonLabel; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbButtonsModule", function() { return NgbButtonsModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbCalendar", function() { return NgbCalendar; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbCalendarGregorian", function() { return NgbCalendarGregorian; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbCalendarHebrew", function() { return NgbCalendarHebrew; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbCalendarIslamicCivil", function() { return NgbCalendarIslamicCivil; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbCalendarIslamicUmalqura", function() { return NgbCalendarIslamicUmalqura; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbCalendarPersian", function() { return NgbCalendarPersian; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbCarousel", function() { return NgbCarousel; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbCarouselConfig", function() { return NgbCarouselConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbCarouselModule", function() { return NgbCarouselModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbCheckBox", function() { return NgbCheckBox; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbCollapse", function() { return NgbCollapse; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbCollapseConfig", function() { return NgbCollapseConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbCollapseModule", function() { return NgbCollapseModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbConfig", function() { return NgbConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDate", function() { return NgbDate; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDateAdapter", function() { return NgbDateAdapter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDateNativeAdapter", function() { return NgbDateNativeAdapter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDateNativeUTCAdapter", function() { return NgbDateNativeUTCAdapter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDateParserFormatter", function() { return NgbDateParserFormatter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDatepicker", function() { return NgbDatepicker; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDatepickerConfig", function() { return NgbDatepickerConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDatepickerContent", function() { return NgbDatepickerContent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDatepickerI18n", function() { return NgbDatepickerI18n; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDatepickerI18nHebrew", function() { return NgbDatepickerI18nHebrew; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDatepickerKeyboardService", function() { return NgbDatepickerKeyboardService; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDatepickerModule", function() { return NgbDatepickerModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDatepickerMonth", function() { return NgbDatepickerMonth; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDropdown", function() { return NgbDropdown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDropdownAnchor", function() { return NgbDropdownAnchor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDropdownConfig", function() { return NgbDropdownConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDropdownItem", function() { return NgbDropdownItem; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDropdownMenu", function() { return NgbDropdownMenu; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDropdownModule", function() { return NgbDropdownModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbDropdownToggle", function() { return NgbDropdownToggle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbHighlight", function() { return NgbHighlight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbInputDatepicker", function() { return NgbInputDatepicker; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbInputDatepickerConfig", function() { return NgbInputDatepickerConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbModal", function() { return NgbModal; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbModalConfig", function() { return NgbModalConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbModalModule", function() { return NgbModalModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbModalRef", function() { return NgbModalRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbModule", function() { return NgbModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbNav", function() { return NgbNav; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbNavConfig", function() { return NgbNavConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbNavContent", function() { return NgbNavContent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbNavItem", function() { return NgbNavItem; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbNavLink", function() { return NgbNavLink; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbNavModule", function() { return NgbNavModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbNavOutlet", function() { return NgbNavOutlet; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbNavPane", function() { return NgbNavPane; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbNavbar", function() { return NgbNavbar; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbPagination", function() { return NgbPagination; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbPaginationConfig", function() { return NgbPaginationConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbPaginationEllipsis", function() { return NgbPaginationEllipsis; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbPaginationFirst", function() { return NgbPaginationFirst; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbPaginationLast", function() { return NgbPaginationLast; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbPaginationModule", function() { return NgbPaginationModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbPaginationNext", function() { return NgbPaginationNext; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbPaginationNumber", function() { return NgbPaginationNumber; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbPaginationPrevious", function() { return NgbPaginationPrevious; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbPanel", function() { return NgbPanel; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbPanelContent", function() { return NgbPanelContent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbPanelHeader", function() { return NgbPanelHeader; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbPanelTitle", function() { return NgbPanelTitle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbPanelToggle", function() { return NgbPanelToggle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbPopover", function() { return NgbPopover; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbPopoverConfig", function() { return NgbPopoverConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbPopoverModule", function() { return NgbPopoverModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbProgressbar", function() { return NgbProgressbar; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbProgressbarConfig", function() { return NgbProgressbarConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbProgressbarModule", function() { return NgbProgressbarModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbRadio", function() { return NgbRadio; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbRadioGroup", function() { return NgbRadioGroup; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbRating", function() { return NgbRating; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbRatingConfig", function() { return NgbRatingConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbRatingModule", function() { return NgbRatingModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbSlide", function() { return NgbSlide; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbSlideEventDirection", function() { return NgbSlideEventDirection; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbSlideEventSource", function() { return NgbSlideEventSource; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbTimeAdapter", function() { return NgbTimeAdapter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbTimepicker", function() { return NgbTimepicker; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbTimepickerConfig", function() { return NgbTimepickerConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbTimepickerI18n", function() { return NgbTimepickerI18n; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbTimepickerModule", function() { return NgbTimepickerModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbToast", function() { return NgbToast; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbToastConfig", function() { return NgbToastConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbToastHeader", function() { return NgbToastHeader; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbToastModule", function() { return NgbToastModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbTooltip", function() { return NgbTooltip; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbTooltipConfig", function() { return NgbTooltipConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbTooltipModule", function() { return NgbTooltipModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbTypeahead", function() { return NgbTypeahead; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbTypeaheadConfig", function() { return NgbTypeaheadConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgbTypeaheadModule", function() { return NgbTypeaheadModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵa", function() { return NGB_CAROUSEL_DIRECTIVES; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵb", function() { return NGB_DATEPICKER_VALUE_ACCESSOR; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵba", function() { return Live; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵbb", function() { return NgbCalendarHijri; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵbc", function() { return ContentRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵc", function() { return NGB_DATEPICKER_CALENDAR_FACTORY; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵd", function() { return NgbDatepickerDayView; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵe", function() { return NgbDatepickerNavigation; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵf", function() { return NgbDatepickerNavigationSelect; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵg", function() { return NGB_DATEPICKER_18N_FACTORY; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵh", function() { return NgbDatepickerI18nDefault; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵi", function() { return NGB_DATEPICKER_DATE_ADAPTER_FACTORY; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵj", function() { return NgbDateStructAdapter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵk", function() { return NGB_DATEPICKER_PARSER_FORMATTER_FACTORY; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵl", function() { return NgbDateISOParserFormatter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵm", function() { return NgbPopoverWindow; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵn", function() { return NGB_DATEPICKER_TIME_ADAPTER_FACTORY; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵo", function() { return NgbTimeStructAdapter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵp", function() { return NGB_TIMEPICKER_I18N_FACTORY; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵq", function() { return NgbTimepickerI18nDefault; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵr", function() { return NgbTooltipWindow; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵs", function() { return NgbTypeaheadWindow; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵt", function() { return NgbDatepickerService; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵu", function() { return NgbModalBackdrop; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵv", function() { return NgbModalWindow; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵw", function() { return NgbModalStack; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵx", function() { return ScrollBar; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵy", function() { return ARIA_LIVE_DELAY; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵz", function() { return ARIA_LIVE_DELAY_FACTORY; });
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ "ofXK");
- /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ "qCKp");
- /* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ "kU1M");
- /* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/forms */ "3Pt+");
- function NgbAccordion_ng_template_0_ng_template_2_Template(rf, ctx) { }
- function NgbAccordion_ng_template_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbAccordion_ng_template_0_ng_template_2_Template, 0, 0, "ng-template", 4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const panel_r3 = ctx.$implicit;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngbPanelToggle", panel_r3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"](" ", panel_r3.title, "");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", panel_r3.titleTpl == null ? null : panel_r3.titleTpl.templateRef);
- } }
- function NgbAccordion_ng_template_2_ng_template_2_Template(rf, ctx) { }
- function NgbAccordion_ng_template_2_div_3_ng_template_2_Template(rf, ctx) { }
- function NgbAccordion_ng_template_2_div_3_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 8);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 9);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbAccordion_ng_template_2_div_3_ng_template_2_Template, 0, 0, "ng-template", 4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const panel_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpropertyInterpolate"]("id", panel_r5.id);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-labelledby", panel_r5.id + "-header");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (panel_r5.contentTpl == null ? null : panel_r5.contentTpl.templateRef) || null);
- } }
- const _c0 = function (a0, a1) { return { $implicit: a0, opened: a1 }; };
- function NgbAccordion_ng_template_2_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 5);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbAccordion_ng_template_2_ng_template_2_Template, 0, 0, "ng-template", 6);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbAccordion_ng_template_2_div_3_Template, 3, 3, "div", 7);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const panel_r5 = ctx.$implicit;
- const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- const _r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("card " + (panel_r5.cardClass || ""));
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("card-header " + (panel_r5.type ? "bg-" + panel_r5.type : ctx_r2.type ? "bg-" + ctx_r2.type : ""));
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpropertyInterpolate1"]("id", "", panel_r5.id, "-header");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (panel_r5.headerTpl == null ? null : panel_r5.headerTpl.templateRef) || _r0)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction2"](8, _c0, panel_r5, panel_r5.isOpen));
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx_r2.destroyOnHide || panel_r5.isOpen || panel_r5.transitionRunning);
- } }
- function NgbAlert_button_1_Template(rf, ctx) { if (rf & 1) {
- const _r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbAlert_button_1_Template_button_click_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r2); const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r1.close(); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "span", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2, "\u00D7");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }
- const _c5 = ["*"];
- function NgbCarousel_li_1_Template(rf, ctx) { if (rf & 1) {
- const _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 6);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbCarousel_li_1_Template_li_click_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r6); const slide_r4 = ctx.$implicit; const ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); ctx_r5.focus(); return ctx_r5.select(slide_r4.id, ctx_r5.NgbSlideEventSource.INDICATOR); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const slide_r4 = ctx.$implicit;
- const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("active", slide_r4.id === ctx_r0.activeId);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-labelledby", "slide-" + slide_r4.id)("aria-controls", "slide-" + slide_r4.id)("aria-selected", slide_r4.id === ctx_r0.activeId);
- } }
- function NgbCarousel_div_3_ng_template_3_Template(rf, ctx) { }
- function NgbCarousel_div_3_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 7);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "span", 8);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](2, 9);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbCarousel_div_3_ng_template_3_Template, 0, 0, "ng-template", 10);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const slide_r7 = ctx.$implicit;
- const i_r8 = ctx.index;
- const c_r9 = ctx.count;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("id", "slide-" + slide_r7.id);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18nExp"](i_r8 + 1)(c_r9);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18nApply"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", slide_r7.tplRef);
- } }
- function NgbCarousel_a_4_Template(rf, ctx) { if (rf & 1) {
- const _r12 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "a", 11);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbCarousel_a_4_Template_a_click_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r12); const ctx_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r11.arrowLeft(); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "span", 12);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 8);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](3, 13);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }
- function NgbCarousel_a_5_Template(rf, ctx) { if (rf & 1) {
- const _r14 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "a", 14);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbCarousel_a_5_Template_a_click_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r14); const ctx_r13 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r13.arrowRight(); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "span", 15);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 8);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](3, 16);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }
- const _c12 = ["defaultDayTemplate"];
- const _c13 = ["content"];
- function NgbDatepicker_ng_template_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 7);
- } if (rf & 2) {
- const date_r8 = ctx.date;
- const currentMonth_r9 = ctx.currentMonth;
- const selected_r10 = ctx.selected;
- const disabled_r11 = ctx.disabled;
- const focused_r12 = ctx.focused;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("date", date_r8)("currentMonth", currentMonth_r9)("selected", selected_r10)("disabled", disabled_r11)("focused", focused_r12);
- } }
- function NgbDatepicker_ng_template_2_div_0_div_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 12);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const month_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;
- const ctx_r16 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate2"](" ", ctx_r16.i18n.getMonthFullName(month_r14.number, month_r14.year), " ", ctx_r16.i18n.getYearNumerals(month_r14.year), " ");
- } }
- function NgbDatepicker_ng_template_2_div_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 9);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbDatepicker_ng_template_2_div_0_div_1_Template, 2, 2, "div", 10);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "ngb-datepicker-month", 11);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const month_r14 = ctx.$implicit;
- const ctx_r13 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r13.navigation === "none" || ctx_r13.displayMonths > 1 && ctx_r13.navigation === "select");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("month", month_r14.firstDate);
- } }
- function NgbDatepicker_ng_template_2_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbDatepicker_ng_template_2_div_0_Template, 3, 2, "div", 8);
- } if (rf & 2) {
- const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx_r3.model.months);
- } }
- function NgbDatepicker_ngb_datepicker_navigation_5_Template(rf, ctx) { if (rf & 1) {
- const _r19 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "ngb-datepicker-navigation", 13);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("navigate", function NgbDatepicker_ngb_datepicker_navigation_5_Template_ngb_datepicker_navigation_navigate_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r19); const ctx_r18 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r18.onNavigateEvent($event); })("select", function NgbDatepicker_ngb_datepicker_navigation_5_Template_ngb_datepicker_navigation_select_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r19); const ctx_r20 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r20.onNavigateDateSelect($event); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("date", ctx_r4.model.firstDate)("months", ctx_r4.model.months)("disabled", ctx_r4.model.disabled)("showSelect", ctx_r4.model.navigation === "select")("prevDisabled", ctx_r4.model.prevDisabled)("nextDisabled", ctx_r4.model.nextDisabled)("selectBoxes", ctx_r4.model.selectBoxes);
- } }
- function NgbDatepicker_ng_template_8_Template(rf, ctx) { }
- function NgbDatepicker_ng_template_9_Template(rf, ctx) { }
- function NgbDatepickerMonth_div_0_div_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 5);
- } }
- function NgbDatepickerMonth_div_0_div_2_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 6);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const w_r4 = ctx.$implicit;
- const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"](" ", ctx_r3.i18n.getWeekdayShortName(w_r4), " ");
- } }
- function NgbDatepickerMonth_div_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbDatepickerMonth_div_0_div_1_Template, 1, 0, "div", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbDatepickerMonth_div_0_div_2_Template, 2, 1, "div", 4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r0.datepicker.showWeekNumbers);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx_r0.viewModel.weekdays);
- } }
- function NgbDatepickerMonth_ng_template_1_div_0_div_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 11);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const week_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2).$implicit;
- const ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r7.i18n.getWeekNumerals(week_r5.number));
- } }
- function NgbDatepickerMonth_ng_template_1_div_0_div_2_ng_template_1_ng_template_0_Template(rf, ctx) { }
- function NgbDatepickerMonth_ng_template_1_div_0_div_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbDatepickerMonth_ng_template_1_div_0_div_2_ng_template_1_ng_template_0_Template, 0, 0, "ng-template", 14);
- } if (rf & 2) {
- const day_r10 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;
- const ctx_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r11.datepicker.dayTemplate)("ngTemplateOutletContext", day_r10.context);
- } }
- function NgbDatepickerMonth_ng_template_1_div_0_div_2_Template(rf, ctx) { if (rf & 1) {
- const _r15 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 12);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbDatepickerMonth_ng_template_1_div_0_div_2_Template_div_click_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r15); const day_r10 = ctx.$implicit; const ctx_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](3); ctx_r14.doSelect(day_r10); return $event.preventDefault(); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbDatepickerMonth_ng_template_1_div_0_div_2_ng_template_1_Template, 1, 2, "ng-template", 13);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const day_r10 = ctx.$implicit;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", day_r10.context.disabled)("hidden", day_r10.hidden)("ngb-dp-today", day_r10.context.today);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("tabindex", day_r10.tabindex);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-label", day_r10.ariaLabel);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !day_r10.hidden);
- } }
- function NgbDatepickerMonth_ng_template_1_div_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 8);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbDatepickerMonth_ng_template_1_div_0_div_1_Template, 2, 1, "div", 9);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbDatepickerMonth_ng_template_1_div_0_div_2_Template, 2, 9, "div", 10);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const week_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;
- const ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r6.datepicker.showWeekNumbers);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", week_r5.days);
- } }
- function NgbDatepickerMonth_ng_template_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbDatepickerMonth_ng_template_1_div_0_Template, 3, 2, "div", 7);
- } if (rf & 2) {
- const week_r5 = ctx.$implicit;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !week_r5.collapsed);
- } }
- function NgbDatepickerNavigation_ngb_datepicker_navigation_select_3_Template(rf, ctx) { if (rf & 1) {
- const _r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "ngb-datepicker-navigation-select", 7);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("select", function NgbDatepickerNavigation_ngb_datepicker_navigation_select_3_Template_ngb_datepicker_navigation_select_select_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r3); const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r2.select.emit($event); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("date", ctx_r0.date)("disabled", ctx_r0.disabled)("months", ctx_r0.selectBoxes.months)("years", ctx_r0.selectBoxes.years);
- } }
- function NgbDatepickerNavigation_4_ng_template_0_div_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 0);
- } }
- function NgbDatepickerNavigation_4_ng_template_0_div_3_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 0);
- } }
- function NgbDatepickerNavigation_4_ng_template_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbDatepickerNavigation_4_ng_template_0_div_0_Template, 1, 0, "div", 9);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 10);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbDatepickerNavigation_4_ng_template_0_div_3_Template, 1, 0, "div", 9);
- } if (rf & 2) {
- const month_r5 = ctx.$implicit;
- const i_r6 = ctx.index;
- const ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", i_r6 > 0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate2"](" ", ctx_r4.i18n.getMonthFullName(month_r5.number, month_r5.year), " ", ctx_r4.i18n.getYearNumerals(month_r5.year), " ");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", i_r6 !== ctx_r4.months.length - 1);
- } }
- function NgbDatepickerNavigation_4_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbDatepickerNavigation_4_ng_template_0_Template, 4, 4, "ng-template", 8);
- } if (rf & 2) {
- const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx_r1.months);
- } }
- const _c22 = ["ngbDatepickerDayView", ""];
- const _c23 = ["month"];
- const _c24 = ["year"];
- function NgbDatepickerNavigationSelect_option_2_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "option", 5);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const m_r4 = ctx.$implicit;
- const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("value", m_r4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-label", ctx_r1.i18n.getMonthFullName(m_r4, ctx_r1.date == null ? null : ctx_r1.date.year));
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r1.i18n.getMonthShortName(m_r4, ctx_r1.date == null ? null : ctx_r1.date.year));
- } }
- function NgbDatepickerNavigationSelect_option_5_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "option", 5);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const y_r5 = ctx.$implicit;
- const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("value", y_r5);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r3.i18n.getYearNumerals(y_r5));
- } }
- const _c33 = ["dialog"];
- const _c34 = ["ngbNavOutlet", ""];
- function NgbNavOutlet_ng_template_0_div_0_ng_template_1_Template(rf, ctx) { }
- const _c35 = function (a0) { return { $implicit: a0 }; };
- function NgbNavOutlet_ng_template_0_div_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbNavOutlet_ng_template_0_div_0_ng_template_1_Template, 0, 0, "ng-template", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const item_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;
- const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("item", item_r1)("nav", ctx_r2.nav)("role", ctx_r2.paneRole);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (item_r1.contentTpl == null ? null : item_r1.contentTpl.templateRef) || null)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](5, _c35, item_r1.active || ctx_r2.isPanelTransitioning(item_r1)));
- } }
- function NgbNavOutlet_ng_template_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbNavOutlet_ng_template_0_div_0_Template, 2, 7, "div", 1);
- } if (rf & 2) {
- const item_r1 = ctx.$implicit;
- const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", item_r1.isPanelInDom() || ctx_r0.isPanelTransitioning(item_r1));
- } }
- function NgbPagination_ng_template_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 8);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](1, 9);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }
- function NgbPagination_ng_template_2_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 8);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](1, 10);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }
- function NgbPagination_ng_template_4_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 8);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](1, 11);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }
- function NgbPagination_ng_template_6_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 8);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](1, 12);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }
- function NgbPagination_ng_template_8_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](0, "...");
- } }
- function NgbPagination_ng_template_10_span_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 14);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1, "(current)");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }
- function NgbPagination_ng_template_10_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbPagination_ng_template_10_span_1_Template, 2, 0, "span", 13);
- } if (rf & 2) {
- const page_r17 = ctx.$implicit;
- const currentPage_r18 = ctx.currentPage;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"](" ", page_r17, " ");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", page_r17 === currentPage_r18);
- } }
- function NgbPagination_li_13_ng_template_2_Template(rf, ctx) { }
- const _c46 = function (a0, a1) { return { disabled: a0, currentPage: a1 }; };
- function NgbPagination_li_13_Template(rf, ctx) { if (rf & 1) {
- const _r22 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 15);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "a", 16);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbPagination_li_13_Template_a_click_1_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r22); const ctx_r21 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); ctx_r21.selectPage(1); return $event.preventDefault(); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbPagination_li_13_ng_template_2_Template, 0, 0, "ng-template", 17);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r12 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- const _r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", ctx_r12.previousDisabled());
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("tabindex", ctx_r12.previousDisabled() ? "-1" : null)("aria-disabled", ctx_r12.previousDisabled() ? "true" : null);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (ctx_r12.tplFirst == null ? null : ctx_r12.tplFirst.templateRef) || _r0)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction2"](6, _c46, ctx_r12.previousDisabled(), ctx_r12.page));
- } }
- function NgbPagination_li_14_ng_template_2_Template(rf, ctx) { }
- const _c49 = function (a0) { return { disabled: a0 }; };
- function NgbPagination_li_14_Template(rf, ctx) { if (rf & 1) {
- const _r25 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 15);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "a", 18);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbPagination_li_14_Template_a_click_1_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r25); const ctx_r24 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); ctx_r24.selectPage(ctx_r24.page - 1); return $event.preventDefault(); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbPagination_li_14_ng_template_2_Template, 0, 0, "ng-template", 17);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r13 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- const _r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", ctx_r13.previousDisabled());
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("tabindex", ctx_r13.previousDisabled() ? "-1" : null)("aria-disabled", ctx_r13.previousDisabled() ? "true" : null);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (ctx_r13.tplPrevious == null ? null : ctx_r13.tplPrevious.templateRef) || _r2)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](6, _c49, ctx_r13.previousDisabled()));
- } }
- function NgbPagination_li_15_a_1_ng_template_1_Template(rf, ctx) { }
- const _c50 = function (a1) { return { disabled: true, currentPage: a1 }; };
- function NgbPagination_li_15_a_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "a", 21);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbPagination_li_15_a_1_ng_template_1_Template, 0, 0, "ng-template", 17);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r27 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- const _r8 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](9);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (ctx_r27.tplEllipsis == null ? null : ctx_r27.tplEllipsis.templateRef) || _r8)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](2, _c50, ctx_r27.page));
- } }
- function NgbPagination_li_15_a_2_ng_template_1_Template(rf, ctx) { }
- const _c51 = function (a0, a1, a2) { return { disabled: a0, $implicit: a1, currentPage: a2 }; };
- function NgbPagination_li_15_a_2_Template(rf, ctx) { if (rf & 1) {
- const _r33 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "a", 22);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbPagination_li_15_a_2_Template_a_click_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r33); const pageNumber_r26 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit; const ctx_r31 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); ctx_r31.selectPage(pageNumber_r26); return $event.preventDefault(); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbPagination_li_15_a_2_ng_template_1_Template, 0, 0, "ng-template", 17);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const pageNumber_r26 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;
- const ctx_r28 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- const _r10 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](11);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("tabindex", ctx_r28.disabled ? "-1" : null)("aria-disabled", ctx_r28.disabled ? "true" : null);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (ctx_r28.tplNumber == null ? null : ctx_r28.tplNumber.templateRef) || _r10)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction3"](4, _c51, ctx_r28.disabled, pageNumber_r26, ctx_r28.page));
- } }
- function NgbPagination_li_15_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 15);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbPagination_li_15_a_1_Template, 2, 4, "a", 19);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbPagination_li_15_a_2_Template, 2, 8, "a", 20);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const pageNumber_r26 = ctx.$implicit;
- const ctx_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("active", pageNumber_r26 === ctx_r14.page)("disabled", ctx_r14.isEllipsis(pageNumber_r26) || ctx_r14.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-current", pageNumber_r26 === ctx_r14.page ? "page" : null);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r14.isEllipsis(pageNumber_r26));
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx_r14.isEllipsis(pageNumber_r26));
- } }
- function NgbPagination_li_16_ng_template_2_Template(rf, ctx) { }
- function NgbPagination_li_16_Template(rf, ctx) { if (rf & 1) {
- const _r37 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 15);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "a", 23);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbPagination_li_16_Template_a_click_1_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r37); const ctx_r36 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); ctx_r36.selectPage(ctx_r36.page + 1); return $event.preventDefault(); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbPagination_li_16_ng_template_2_Template, 0, 0, "ng-template", 17);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r15 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- const _r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](5);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", ctx_r15.nextDisabled());
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("tabindex", ctx_r15.nextDisabled() ? "-1" : null)("aria-disabled", ctx_r15.nextDisabled() ? "true" : null);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (ctx_r15.tplNext == null ? null : ctx_r15.tplNext.templateRef) || _r4)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction2"](6, _c46, ctx_r15.nextDisabled(), ctx_r15.page));
- } }
- function NgbPagination_li_17_ng_template_2_Template(rf, ctx) { }
- function NgbPagination_li_17_Template(rf, ctx) { if (rf & 1) {
- const _r40 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 15);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "a", 24);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbPagination_li_17_Template_a_click_1_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r40); const ctx_r39 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); ctx_r39.selectPage(ctx_r39.pageCount); return $event.preventDefault(); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbPagination_li_17_ng_template_2_Template, 0, 0, "ng-template", 17);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r16 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- const _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](7);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", ctx_r16.nextDisabled());
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("tabindex", ctx_r16.nextDisabled() ? "-1" : null)("aria-disabled", ctx_r16.nextDisabled() ? "true" : null);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (ctx_r16.tplLast == null ? null : ctx_r16.tplLast.templateRef) || _r6)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction2"](6, _c46, ctx_r16.nextDisabled(), ctx_r16.page));
- } }
- function NgbPopoverWindow_h3_1_ng_template_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](0);
- } if (rf & 2) {
- const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r2.title);
- } }
- function NgbPopoverWindow_h3_1_ng_template_3_Template(rf, ctx) { }
- function NgbPopoverWindow_h3_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "h3", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbPopoverWindow_h3_1_ng_template_1_Template, 1, 1, "ng-template", null, 4, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbPopoverWindow_h3_1_ng_template_3_Template, 0, 0, "ng-template", 5);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);
- const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r0.isTitleTemplate() ? ctx_r0.title : _r1)("ngTemplateOutletContext", ctx_r0.context);
- } }
- function NgbProgressbar_span_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](1, 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipe"](2, "percent");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18nExp"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipeBind1"](2, 1, ctx_r0.getValue() / ctx_r0.max));
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18nApply"](1);
- } }
- function NgbRating_ng_template_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](0);
- } if (rf & 2) {
- const fill_r3 = ctx.fill;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](fill_r3 === 100 ? "\u2605" : "\u2606");
- } }
- function NgbRating_ng_template_2_ng_template_3_Template(rf, ctx) { }
- function NgbRating_ng_template_2_Template(rf, ctx) { if (rf & 1) {
- const _r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mouseenter", function NgbRating_ng_template_2_Template_span_mouseenter_2_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r7); const index_r4 = ctx.index; const ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r6.enter(index_r4 + 1); })("click", function NgbRating_ng_template_2_Template_span_click_2_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r7); const index_r4 = ctx.index; const ctx_r8 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r8.handleClick(index_r4 + 1); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbRating_ng_template_2_ng_template_3_Template, 0, 0, "ng-template", 4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const index_r4 = ctx.index;
- const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- const _r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"]("(", index_r4 < ctx_r2.nextRate ? "*" : " ", ")");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("cursor", ctx_r2.isInteractive() ? "pointer" : "default");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r2.starTemplate || ctx_r2.starTemplateFromContent || _r0)("ngTemplateOutletContext", ctx_r2.contexts[index_r4]);
- } }
- function NgbTimepicker_button_3_Template(rf, ctx) { if (rf & 1) {
- const _r9 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 11);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbTimepicker_button_3_Template_button_click_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r9); const ctx_r8 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r8.changeHour(ctx_r8.hourStep); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "span", 12);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 13);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](3, 14);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("btn-sm", ctx_r0.isSmallSize)("btn-lg", ctx_r0.isLargeSize)("disabled", ctx_r0.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx_r0.disabled);
- } }
- function NgbTimepicker_button_5_Template(rf, ctx) { if (rf & 1) {
- const _r11 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 11);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbTimepicker_button_5_Template_button_click_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r11); const ctx_r10 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r10.changeHour(-ctx_r10.hourStep); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "span", 15);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 13);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](3, 16);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("btn-sm", ctx_r1.isSmallSize)("btn-lg", ctx_r1.isLargeSize)("disabled", ctx_r1.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx_r1.disabled);
- } }
- function NgbTimepicker_button_9_Template(rf, ctx) { if (rf & 1) {
- const _r13 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 11);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbTimepicker_button_9_Template_button_click_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r13); const ctx_r12 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r12.changeMinute(ctx_r12.minuteStep); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "span", 12);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 13);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](3, 17);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("btn-sm", ctx_r2.isSmallSize)("btn-lg", ctx_r2.isLargeSize)("disabled", ctx_r2.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx_r2.disabled);
- } }
- function NgbTimepicker_button_11_Template(rf, ctx) { if (rf & 1) {
- const _r15 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 11);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbTimepicker_button_11_Template_button_click_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r15); const ctx_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r14.changeMinute(-ctx_r14.minuteStep); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "span", 15);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 13);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](3, 18);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("btn-sm", ctx_r3.isSmallSize)("btn-lg", ctx_r3.isLargeSize)("disabled", ctx_r3.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx_r3.disabled);
- } }
- function NgbTimepicker_div_12_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 5);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1, ":");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }
- function NgbTimepicker_div_13_button_1_Template(rf, ctx) { if (rf & 1) {
- const _r19 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 11);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbTimepicker_div_13_button_1_Template_button_click_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r19); const ctx_r18 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2); return ctx_r18.changeSecond(ctx_r18.secondStep); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "span", 12);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 13);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](3, 21);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r16 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("btn-sm", ctx_r16.isSmallSize)("btn-lg", ctx_r16.isLargeSize)("disabled", ctx_r16.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx_r16.disabled);
- } }
- function NgbTimepicker_div_13_button_3_Template(rf, ctx) { if (rf & 1) {
- const _r21 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 11);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbTimepicker_div_13_button_3_Template_button_click_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r21); const ctx_r20 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2); return ctx_r20.changeSecond(-ctx_r20.secondStep); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "span", 15);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 13);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](3, 22);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r17 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("btn-sm", ctx_r17.isSmallSize)("btn-lg", ctx_r17.isLargeSize)("disabled", ctx_r17.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx_r17.disabled);
- } }
- function NgbTimepicker_div_13_Template(rf, ctx) { if (rf & 1) {
- const _r23 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 19);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbTimepicker_div_13_button_1_Template, 4, 7, "button", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "input", 20);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function NgbTimepicker_div_13_Template_input_change_2_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r23); const ctx_r22 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r22.updateSecond($event.target.value); })("input", function NgbTimepicker_div_13_Template_input_input_2_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r23); const ctx_r24 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r24.formatInput($event.target); })("keydown.ArrowUp", function NgbTimepicker_div_13_Template_input_keydown_ArrowUp_2_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r23); const ctx_r25 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); ctx_r25.changeSecond(ctx_r25.secondStep); return $event.preventDefault(); })("keydown.ArrowDown", function NgbTimepicker_div_13_Template_input_keydown_ArrowDown_2_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r23); const ctx_r26 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); ctx_r26.changeSecond(-ctx_r26.secondStep); return $event.preventDefault(); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbTimepicker_div_13_button_3_Template, 4, 7, "button", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r5.spinners);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("form-control-sm", ctx_r5.isSmallSize)("form-control-lg", ctx_r5.isLargeSize);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("value", ctx_r5.formatMinSec(ctx_r5.model == null ? null : ctx_r5.model.second))("readOnly", ctx_r5.readonlyInputs)("disabled", ctx_r5.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r5.spinners);
- } }
- function NgbTimepicker_div_14_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 5);
- } }
- function NgbTimepicker_div_15_ng_container_2_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerStart"](0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](1, 27);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerEnd"]();
- } if (rf & 2) {
- const ctx_r27 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18nExp"](ctx_r27.i18n.getAfternoonPeriod());
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18nApply"](1);
- } }
- function NgbTimepicker_div_15_ng_template_3_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](0, 28);
- } if (rf & 2) {
- const ctx_r29 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18nExp"](ctx_r29.i18n.getMorningPeriod());
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18nApply"](0);
- } }
- function NgbTimepicker_div_15_Template(rf, ctx) { if (rf & 1) {
- const _r31 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 23);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "button", 24);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbTimepicker_div_15_Template_button_click_1_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r31); const ctx_r30 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r30.toggleMeridian(); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbTimepicker_div_15_ng_container_2_Template, 2, 1, "ng-container", 25);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbTimepicker_div_15_ng_template_3_Template, 1, 1, "ng-template", null, 26, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const _r28 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](4);
- const ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("btn-sm", ctx_r7.isSmallSize)("btn-lg", ctx_r7.isLargeSize)("disabled", ctx_r7.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx_r7.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r7.model && ctx_r7.model.hour >= 12)("ngIfElse", _r28);
- } }
- function NgbToast_ng_template_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "strong", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r1.header);
- } }
- function NgbToast_ng_template_2_ng_template_1_Template(rf, ctx) { }
- function NgbToast_ng_template_2_Template(rf, ctx) { if (rf & 1) {
- const _r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbToast_ng_template_2_ng_template_1_Template, 0, 0, "ng-template", 5);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "button", 6);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbToast_ng_template_2_Template_button_click_2_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r5); const ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r4.hide(); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "span", 7);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](4, "\u00D7");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- const _r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r2.contentHeaderTpl || _r0);
- } }
- function NgbHighlight_ng_template_0_span_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const part_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;
- const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"](ctx_r3.highlightClass);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](part_r1);
- } }
- function NgbHighlight_ng_template_0_ng_template_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](0);
- } if (rf & 2) {
- const part_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](part_r1);
- } }
- function NgbHighlight_ng_template_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbHighlight_ng_template_0_span_0_Template, 2, 3, "span", 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbHighlight_ng_template_0_ng_template_1_Template, 1, 1, "ng-template", null, 2, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- } if (rf & 2) {
- const isOdd_r2 = ctx.odd;
- const _r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", isOdd_r2)("ngIfElse", _r4);
- } }
- function NgbTypeaheadWindow_ng_template_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "ngb-highlight", 2);
- } if (rf & 2) {
- const result_r3 = ctx.result;
- const term_r4 = ctx.term;
- const formatter_r5 = ctx.formatter;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("result", formatter_r5(result_r3))("term", term_r4);
- } }
- function NgbTypeaheadWindow_ng_template_2_ng_template_1_Template(rf, ctx) { }
- const _c88 = function (a0, a1, a2) { return { result: a0, term: a1, formatter: a2 }; };
- function NgbTypeaheadWindow_ng_template_2_Template(rf, ctx) { if (rf & 1) {
- const _r10 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mouseenter", function NgbTypeaheadWindow_ng_template_2_Template_button_mouseenter_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r10); const idx_r7 = ctx.index; const ctx_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r9.markActive(idx_r7); })("click", function NgbTypeaheadWindow_ng_template_2_Template_button_click_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r10); const result_r6 = ctx.$implicit; const ctx_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r11.select(result_r6); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbTypeaheadWindow_ng_template_2_ng_template_1_Template, 0, 0, "ng-template", 4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const result_r6 = ctx.$implicit;
- const idx_r7 = ctx.index;
- const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- const _r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("active", idx_r7 === ctx_r2.activeIdx);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("id", ctx_r2.id + "-" + idx_r7);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r2.resultTemplate || _r0)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction3"](5, _c88, result_r6, ctx_r2.term, ctx_r2.formatter));
- } }
- function toInteger(value) {
- return parseInt(`${value}`, 10);
- }
- function toString(value) {
- return (value !== undefined && value !== null) ? `${value}` : '';
- }
- function getValueInRange(value, max, min = 0) {
- return Math.max(Math.min(value, max), min);
- }
- function isString(value) {
- return typeof value === 'string';
- }
- function isNumber(value) {
- return !isNaN(toInteger(value));
- }
- function isInteger(value) {
- return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;
- }
- function isDefined(value) {
- return value !== undefined && value !== null;
- }
- function padNumber(value) {
- if (isNumber(value)) {
- return `0${value}`.slice(-2);
- }
- else {
- return '';
- }
- }
- function regExpEscape(text) {
- return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
- }
- function hasClassName(element, className) {
- return element && element.className && element.className.split &&
- element.className.split(/\s+/).indexOf(className) >= 0;
- }
- if (typeof Element !== 'undefined' && !Element.prototype.closest) {
- // Polyfill for ie10+
- if (!Element.prototype.matches) {
- // IE uses the non-standard name: msMatchesSelector
- Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
- }
- Element.prototype.closest = function (s) {
- let el = this;
- if (!document.documentElement.contains(el)) {
- return null;
- }
- do {
- if (el.matches(s)) {
- return el;
- }
- el = el.parentElement || el.parentNode;
- } while (el !== null && el.nodeType === 1);
- return null;
- };
- }
- function closest(element, selector) {
- if (!selector) {
- return null;
- }
- /*
- * In certain browsers (e.g. Edge 44.18362.449.0) HTMLDocument does
- * not support `Element.prototype.closest`. To emulate the correct behaviour
- * we return null when the method is missing.
- *
- * Note that in evergreen browsers `closest(document.documentElement, 'html')`
- * will return the document element whilst in Edge null will be returned. This
- * compromise was deemed good enough.
- */
- if (typeof element.closest === 'undefined') {
- return null;
- }
- return element.closest(selector);
- }
- /**
- * Force a browser reflow
- * @param element element where to apply the reflow
- */
- function reflow(element) {
- return (element || document.body).offsetHeight;
- }
- const environment = {
- animation: true,
- transitionTimerDelayMs: 5,
- };
- /**
- * Global ng-bootstrap config
- *
- * @since 8.0.0
- */
- class NgbConfig {
- constructor() {
- this.animation = environment.animation;
- }
- }
- NgbConfig.ɵfac = function NgbConfig_Factory(t) { return new (t || NgbConfig)(); };
- NgbConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbConfig_Factory() { return new NgbConfig(); }, token: NgbConfig, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return []; }, null); })();
- /**
- * A configuration service for the [NgbAccordion](#/components/accordion/api#NgbAccordion) component.
- *
- * You can inject this service, typically in your root component, and customize its properties
- * to provide default values for all accordions used in the application.
- */
- class NgbAccordionConfig {
- constructor(ngbConfig) {
- this.closeOthers = false;
- this.animation = ngbConfig.animation;
- }
- }
- NgbAccordionConfig.ɵfac = function NgbAccordionConfig_Factory(t) { return new (t || NgbAccordionConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig)); };
- NgbAccordionConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbAccordionConfig_Factory() { return new NgbAccordionConfig(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(NgbConfig)); }, token: NgbAccordionConfig, providedIn: "root" });
- NgbAccordionConfig.ctorParameters = () => [
- { type: NgbConfig }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbAccordionConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: NgbConfig }]; }, null); })();
- function getTransitionDurationMs(element) {
- const { transitionDelay, transitionDuration } = window.getComputedStyle(element);
- const transitionDelaySec = parseFloat(transitionDelay);
- const transitionDurationSec = parseFloat(transitionDuration);
- return (transitionDelaySec + transitionDurationSec) * 1000;
- }
- const noopFn = () => { };
- const ɵ0 = noopFn;
- const { transitionTimerDelayMs } = environment;
- const runningTransitions = new Map();
- const ngbRunTransition = (element, startFn, options) => {
- // Getting initial context from options
- let context = options.context || {};
- // Checking if there are already running transitions on the given element.
- const running = runningTransitions.get(element);
- if (running) {
- switch (options.runningTransition) {
- // If there is one running and we want for it to 'continue' to run, we have to cancel the new one.
- // We're not emitting any values, but simply completing the observable (EMPTY).
- case 'continue':
- return rxjs__WEBPACK_IMPORTED_MODULE_2__["EMPTY"];
- // If there is one running and we want for it to 'stop', we have to complete the running one.
- // We're simply completing the running one and not emitting any values and merging newly provided context
- // with the one coming from currently running transition.
- case 'stop':
- running.transition$.complete();
- context = Object.assign(running.context, context);
- runningTransitions.delete(element);
- }
- }
- // A reflow is required here, to be sure that everything is ready,
- // Without reflow, the transition will not be started for some widgets, at initialization time
- reflow(element);
- const endFn = startFn(element, context) || noopFn;
- // If 'prefer-reduced-motion' is enabled, the 'transition' will be set to 'none'.
- // If animations are disabled, we have to emit a value and complete the observable
- // In this case we have to call the end function, but can finish immediately by emitting a value,
- // completing the observable and executing end functions synchronously.
- if (!options.animation || window.getComputedStyle(element).transitionProperty === 'none') {
- endFn();
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(undefined);
- }
- // Starting a new transition
- const transition$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- const stop$ = transition$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["endWith"])(true));
- runningTransitions.set(element, { transition$, context });
- const transitionDurationMs = getTransitionDurationMs(element);
- // 1. We have to both listen for the 'transitionend' event and have a 'just-in-case' timer,
- // because 'transitionend' event might not be fired in some browsers, if the transitioning
- // element becomes invisible (ex. when scrolling, making browser tab inactive, etc.). The timer
- // guarantees, that we'll release the DOM element and complete 'ngbRunTransition'.
- // 2. We need to filter transition end events, because they might bubble from shorter transitions
- // on inner DOM elements. We're only interested in the transition on the 'element' itself.
- const transitionEnd$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(element, 'transitionend').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(stop$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(({ target }) => target === element));
- const timer$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["timer"])(transitionDurationMs + transitionTimerDelayMs).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(stop$));
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["race"])(timer$, transitionEnd$).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(stop$)).subscribe(() => {
- runningTransitions.delete(element);
- endFn();
- transition$.next();
- transition$.complete();
- });
- return transition$.asObservable();
- };
- function measureCollapsingElementHeightPx(element) {
- // SSR fix for without injecting the PlatformId
- if (typeof navigator === 'undefined') {
- return '0px';
- }
- const { classList } = element;
- const hasShownClass = classList.contains('show');
- if (!hasShownClass) {
- classList.add('show');
- }
- element.style.height = '';
- const height = element.getBoundingClientRect().height + 'px';
- if (!hasShownClass) {
- classList.remove('show');
- }
- return height;
- }
- const ngbCollapsingTransition = (element, context) => {
- let { direction, maxHeight } = context;
- const { classList } = element;
- // No maxHeight -> running the transition for the first time
- if (!maxHeight) {
- maxHeight = measureCollapsingElementHeightPx(element);
- context.maxHeight = maxHeight;
- // Fix the height before starting the animation
- element.style.height = direction !== 'show' ? maxHeight : '0px';
- classList.remove('collapse');
- classList.remove('collapsing');
- classList.remove('show');
- reflow(element);
- // Start the animation
- classList.add('collapsing');
- }
- // Start or revert the animation
- element.style.height = direction === 'show' ? maxHeight : '0px';
- return () => {
- classList.remove('collapsing');
- classList.add('collapse');
- if (direction === 'show') {
- classList.add('show');
- }
- else {
- classList.remove('show');
- }
- element.style.height = '';
- };
- };
- let nextId = 0;
- /**
- * A directive that wraps an accordion panel header with any HTML markup and a toggling button
- * marked with [`NgbPanelToggle`](#/components/accordion/api#NgbPanelToggle).
- * See the [header customization demo](#/components/accordion/examples#header) for more details.
- *
- * You can also use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to customize only the panel title.
- *
- * @since 4.1.0
- */
- class NgbPanelHeader {
- constructor(templateRef) {
- this.templateRef = templateRef;
- }
- }
- NgbPanelHeader.ɵfac = function NgbPanelHeader_Factory(t) { return new (t || NgbPanelHeader)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgbPanelHeader.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbPanelHeader, selectors: [["ng-template", "ngbPanelHeader", ""]] });
- NgbPanelHeader.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPanelHeader, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: 'ng-template[ngbPanelHeader]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- /**
- * A directive that wraps only the panel title with HTML markup inside.
- *
- * You can also use [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) to customize the full panel header.
- */
- class NgbPanelTitle {
- constructor(templateRef) {
- this.templateRef = templateRef;
- }
- }
- NgbPanelTitle.ɵfac = function NgbPanelTitle_Factory(t) { return new (t || NgbPanelTitle)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgbPanelTitle.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbPanelTitle, selectors: [["ng-template", "ngbPanelTitle", ""]] });
- NgbPanelTitle.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPanelTitle, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: 'ng-template[ngbPanelTitle]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- /**
- * A directive that wraps the accordion panel content.
- */
- class NgbPanelContent {
- constructor(templateRef) {
- this.templateRef = templateRef;
- }
- }
- NgbPanelContent.ɵfac = function NgbPanelContent_Factory(t) { return new (t || NgbPanelContent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgbPanelContent.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbPanelContent, selectors: [["ng-template", "ngbPanelContent", ""]] });
- NgbPanelContent.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPanelContent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: 'ng-template[ngbPanelContent]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- /**
- * A directive that wraps an individual accordion panel with title and collapsible content.
- */
- class NgbPanel {
- constructor() {
- /**
- * If `true`, the panel is disabled an can't be toggled.
- */
- this.disabled = false;
- /**
- * An optional id for the panel that must be unique on the page.
- *
- * If not provided, it will be auto-generated in the `ngb-panel-xxx` format.
- */
- this.id = `ngb-panel-${nextId++}`;
- this.isOpen = false;
- /* A flag to specified that the transition panel classes have been initialized */
- this.initClassDone = false;
- /* A flag to specified if the panel is currently being animated, to ensure its presence in the dom */
- this.transitionRunning = false;
- /**
- * An event emitted when the panel is shown, after the transition. It has no payload.
- *
- * @since 8.0.0
- */
- this.shown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An event emitted when the panel is hidden, after the transition. It has no payload.
- *
- * @since 8.0.0
- */
- this.hidden = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- }
- ngAfterContentChecked() {
- // We are using @ContentChildren instead of @ContentChild as in the Angular version being used
- // only @ContentChildren allows us to specify the {descendants: false} option.
- // Without {descendants: false} we are hitting bugs described in:
- // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240
- this.titleTpl = this.titleTpls.first;
- this.headerTpl = this.headerTpls.first;
- this.contentTpl = this.contentTpls.first;
- }
- }
- NgbPanel.ɵfac = function NgbPanel_Factory(t) { return new (t || NgbPanel)(); };
- NgbPanel.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbPanel, selectors: [["ngb-panel"]], contentQueries: function NgbPanel_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPanelTitle, false);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPanelHeader, false);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPanelContent, false);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.titleTpls = _t);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.headerTpls = _t);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.contentTpls = _t);
- } }, inputs: { disabled: "disabled", id: "id", title: "title", type: "type", cardClass: "cardClass" }, outputs: { shown: "shown", hidden: "hidden" } });
- NgbPanel.propDecorators = {
- disabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- id: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- title: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- type: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- cardClass: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- shown: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- hidden: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- titleTpls: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"], args: [NgbPanelTitle, { descendants: false },] }],
- headerTpls: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"], args: [NgbPanelHeader, { descendants: false },] }],
- contentTpls: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"], args: [NgbPanelContent, { descendants: false },] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPanel, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: 'ngb-panel' }]
- }], function () { return []; }, { disabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], id: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], shown: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], hidden: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], title: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], type: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], cardClass: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], titleTpls: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
- args: [NgbPanelTitle, { descendants: false }]
- }], headerTpls: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
- args: [NgbPanelHeader, { descendants: false }]
- }], contentTpls: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
- args: [NgbPanelContent, { descendants: false }]
- }] }); })();
- /**
- * Accordion is a collection of collapsible panels (bootstrap cards).
- *
- * It can ensure only one panel is opened at a time and allows to customize panel
- * headers.
- */
- class NgbAccordion {
- constructor(config, _element, _ngZone, _changeDetector) {
- this._element = _element;
- this._ngZone = _ngZone;
- this._changeDetector = _changeDetector;
- /**
- * An array or comma separated strings of panel ids that should be opened **initially**.
- *
- * For subsequent changes use methods like `expand()`, `collapse()`, etc. and
- * the `(panelChange)` event.
- */
- this.activeIds = [];
- /**
- * If `true`, panel content will be detached from DOM and not simply hidden when the panel is collapsed.
- */
- this.destroyOnHide = true;
- /**
- * Event emitted right before the panel toggle happens.
- *
- * See [NgbPanelChangeEvent](#/components/accordion/api#NgbPanelChangeEvent) for payload details.
- */
- this.panelChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An event emitted when the expanding animation is finished on the panel. The payload is the panel id.
- *
- * @since 8.0.0
- */
- this.shown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An event emitted when the collapsing animation is finished on the panel, and before the panel element is removed.
- * The payload is the panel id.
- *
- * @since 8.0.0
- */
- this.hidden = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.animation = config.animation;
- this.type = config.type;
- this.closeOtherPanels = config.closeOthers;
- }
- /**
- * Checks if a panel with a given id is expanded.
- */
- isExpanded(panelId) { return this.activeIds.indexOf(panelId) > -1; }
- /**
- * Expands a panel with a given id.
- *
- * Has no effect if the panel is already expanded or disabled.
- */
- expand(panelId) { this._changeOpenState(this._findPanelById(panelId), true); }
- /**
- * Expands all panels, if `[closeOthers]` is `false`.
- *
- * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened.
- */
- expandAll() {
- if (this.closeOtherPanels) {
- if (this.activeIds.length === 0 && this.panels.length) {
- this._changeOpenState(this.panels.first, true);
- }
- }
- else {
- this.panels.forEach(panel => this._changeOpenState(panel, true));
- }
- }
- /**
- * Collapses a panel with the given id.
- *
- * Has no effect if the panel is already collapsed or disabled.
- */
- collapse(panelId) { this._changeOpenState(this._findPanelById(panelId), false); }
- /**
- * Collapses all opened panels.
- */
- collapseAll() {
- this.panels.forEach((panel) => { this._changeOpenState(panel, false); });
- }
- /**
- * Toggles a panel with the given id.
- *
- * Has no effect if the panel is disabled.
- */
- toggle(panelId) {
- const panel = this._findPanelById(panelId);
- if (panel) {
- this._changeOpenState(panel, !panel.isOpen);
- }
- }
- ngAfterContentChecked() {
- // active id updates
- if (isString(this.activeIds)) {
- this.activeIds = this.activeIds.split(/\s*,\s*/);
- }
- // update panels open states
- this.panels.forEach(panel => { panel.isOpen = !panel.disabled && this.activeIds.indexOf(panel.id) > -1; });
- // closeOthers updates
- if (this.activeIds.length > 1 && this.closeOtherPanels) {
- this._closeOthers(this.activeIds[0], false);
- this._updateActiveIds();
- }
- // Setup the initial classes here
- this._ngZone.onStable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(() => {
- this.panels.forEach(panel => {
- const panelElement = this._getPanelElement(panel.id);
- if (panelElement) {
- if (!panel.initClassDone) {
- panel.initClassDone = true;
- const { classList } = panelElement;
- classList.add('collapse');
- if (panel.isOpen) {
- classList.add('show');
- }
- }
- }
- else {
- // Classes must be initialized next time it will be in the dom
- panel.initClassDone = false;
- }
- });
- });
- }
- _changeOpenState(panel, nextState) {
- if (panel != null && !panel.disabled && panel.isOpen !== nextState) {
- let defaultPrevented = false;
- this.panelChange.emit({ panelId: panel.id, nextState: nextState, preventDefault: () => { defaultPrevented = true; } });
- if (!defaultPrevented) {
- panel.isOpen = nextState;
- panel.transitionRunning = true;
- if (nextState && this.closeOtherPanels) {
- this._closeOthers(panel.id);
- }
- this._updateActiveIds();
- this._runTransitions(this.animation);
- }
- }
- }
- _closeOthers(panelId, enableTransition = true) {
- this.panels.forEach(panel => {
- if (panel.id !== panelId && panel.isOpen) {
- panel.isOpen = false;
- panel.transitionRunning = enableTransition;
- }
- });
- }
- _findPanelById(panelId) { return this.panels.find(p => p.id === panelId) || null; }
- _updateActiveIds() {
- this.activeIds = this.panels.filter(panel => panel.isOpen && !panel.disabled).map(panel => panel.id);
- }
- _runTransitions(animation, emitEvent = true) {
- // detectChanges is performed to ensure that all panels are in the dom (via transitionRunning = true)
- // before starting the animation
- this._changeDetector.detectChanges();
- this.panels.forEach(panel => {
- // When panel.transitionRunning is true, the transition needs to be started OR reversed,
- // The direction (show or hide) is choosen by each panel.isOpen state
- if (panel.transitionRunning) {
- const panelElement = this._getPanelElement(panel.id);
- ngbRunTransition(panelElement, ngbCollapsingTransition, {
- animation,
- runningTransition: 'stop',
- context: { direction: panel.isOpen ? 'show' : 'hide' }
- }).subscribe(() => {
- panel.transitionRunning = false;
- if (emitEvent) {
- const { id } = panel;
- if (panel.isOpen) {
- panel.shown.emit();
- this.shown.emit(id);
- }
- else {
- panel.hidden.emit();
- this.hidden.emit(id);
- }
- }
- });
- }
- });
- }
- _getPanelElement(panelId) {
- return this._element.nativeElement.querySelector('#' + panelId);
- }
- }
- NgbAccordion.ɵfac = function NgbAccordion_Factory(t) { return new (t || NgbAccordion)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbAccordionConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"])); };
- NgbAccordion.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbAccordion, selectors: [["ngb-accordion"]], contentQueries: function NgbAccordion_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPanel, false);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.panels = _t);
- } }, hostAttrs: ["role", "tablist", 1, "accordion"], hostVars: 1, hostBindings: function NgbAccordion_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-multiselectable", !ctx.closeOtherPanels);
- } }, inputs: { activeIds: "activeIds", destroyOnHide: "destroyOnHide", animation: "animation", type: "type", closeOtherPanels: ["closeOthers", "closeOtherPanels"] }, outputs: { panelChange: "panelChange", shown: "shown", hidden: "hidden" }, exportAs: ["ngbAccordion"], decls: 3, vars: 1, consts: [["ngbPanelHeader", ""], ["t", ""], ["ngFor", "", 3, "ngForOf"], [1, "btn", "btn-link", 3, "ngbPanelToggle"], [3, "ngTemplateOutlet"], ["role", "tab", 3, "id"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], ["role", "tabpanel", 3, "id", 4, "ngIf"], ["role", "tabpanel", 3, "id"], [1, "card-body"]], template: function NgbAccordion_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbAccordion_ng_template_0_Template, 3, 3, "ng-template", 0, 1, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbAccordion_ng_template_2_Template, 4, 11, "ng-template", 2);
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.panels);
- } }, directives: function () { return [NgbPanelHeader, _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], NgbPanelToggle, _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"]]; }, encapsulation: 2 });
- NgbAccordion.ctorParameters = () => [
- { type: NgbAccordionConfig },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }
- ];
- NgbAccordion.propDecorators = {
- panels: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"], args: [NgbPanel,] }],
- animation: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- activeIds: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- closeOtherPanels: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['closeOthers',] }],
- destroyOnHide: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- type: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- panelChange: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- shown: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- hidden: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbAccordion, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngb-accordion',
- exportAs: 'ngbAccordion',
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- host: { 'class': 'accordion', 'role': 'tablist', '[attr.aria-multiselectable]': '!closeOtherPanels' },
- template: `
- <ng-template #t ngbPanelHeader let-panel>
- <button class="btn btn-link" [ngbPanelToggle]="panel">
- {{panel.title}}<ng-template [ngTemplateOutlet]="panel.titleTpl?.templateRef"></ng-template>
- </button>
- </ng-template>
- <ng-template ngFor let-panel [ngForOf]="panels">
- <div [class]="'card ' + (panel.cardClass || '')">
- <div role="tab" id="{{panel.id}}-header" [class]="'card-header ' + (panel.type ? 'bg-'+panel.type: type ? 'bg-'+type : '')">
- <ng-template [ngTemplateOutlet]="panel.headerTpl?.templateRef || t"
- [ngTemplateOutletContext]="{$implicit: panel, opened: panel.isOpen}"></ng-template>
- </div>
- <div id="{{panel.id}}" role="tabpanel" [attr.aria-labelledby]="panel.id + '-header'"
- *ngIf="!destroyOnHide || panel.isOpen || panel.transitionRunning">
- <div class="card-body">
- <ng-template [ngTemplateOutlet]="panel.contentTpl?.templateRef || null"></ng-template>
- </div>
- </div>
- </div>
- </ng-template>
- `
- }]
- }], function () { return [{ type: NgbAccordionConfig }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }]; }, { activeIds: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], destroyOnHide: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], panelChange: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], shown: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], hidden: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], animation: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], type: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], closeOtherPanels: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['closeOthers']
- }], panels: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
- args: [NgbPanel]
- }] }); })();
- /**
- * A directive to put on a button that toggles panel opening and closing.
- *
- * To be used inside the [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader)
- *
- * @since 4.1.0
- */
- class NgbPanelToggle {
- constructor(accordion, panel) {
- this.accordion = accordion;
- this.panel = panel;
- }
- set ngbPanelToggle(panel) {
- if (panel) {
- this.panel = panel;
- }
- }
- }
- NgbPanelToggle.ɵfac = function NgbPanelToggle_Factory(t) { return new (t || NgbPanelToggle)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbAccordion), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbPanel, 9)); };
- NgbPanelToggle.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbPanelToggle, selectors: [["button", "ngbPanelToggle", ""]], hostAttrs: ["type", "button"], hostVars: 5, hostBindings: function NgbPanelToggle_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbPanelToggle_click_HostBindingHandler() { return ctx.accordion.toggle(ctx.panel.id); });
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("disabled", ctx.panel.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-expanded", ctx.panel.isOpen)("aria-controls", ctx.panel.id);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("collapsed", !ctx.panel.isOpen);
- } }, inputs: { ngbPanelToggle: "ngbPanelToggle" } });
- NgbPanelToggle.ctorParameters = () => [
- { type: NgbAccordion },
- { type: NgbPanel, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"] }] }
- ];
- NgbPanelToggle.propDecorators = {
- ngbPanelToggle: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPanelToggle, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: 'button[ngbPanelToggle]',
- host: {
- 'type': 'button',
- '[disabled]': 'panel.disabled',
- '[class.collapsed]': '!panel.isOpen',
- '[attr.aria-expanded]': 'panel.isOpen',
- '[attr.aria-controls]': 'panel.id',
- '(click)': 'accordion.toggle(panel.id)'
- }
- }]
- }], function () { return [{ type: NgbAccordion }, { type: NgbPanel, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
- }] }]; }, { ngbPanelToggle: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- const NGB_ACCORDION_DIRECTIVES = [NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle];
- class NgbAccordionModule {
- }
- NgbAccordionModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbAccordionModule });
- NgbAccordionModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbAccordionModule_Factory(t) { return new (t || NgbAccordionModule)(); }, imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbAccordionModule, { declarations: function () { return [NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]; }, exports: function () { return [NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbAccordionModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{ declarations: NGB_ACCORDION_DIRECTIVES, exports: NGB_ACCORDION_DIRECTIVES, imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]] }]
- }], null, null); })();
- /**
- * A configuration service for the [NgbAlert](#/components/alert/api#NgbAlert) component.
- *
- * You can inject this service, typically in your root component, and customize its properties
- * to provide default values for all alerts used in the application.
- */
- class NgbAlertConfig {
- constructor(ngbConfig) {
- this.dismissible = true;
- this.type = 'warning';
- this.animation = ngbConfig.animation;
- }
- }
- NgbAlertConfig.ɵfac = function NgbAlertConfig_Factory(t) { return new (t || NgbAlertConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig)); };
- NgbAlertConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbAlertConfig_Factory() { return new NgbAlertConfig(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(NgbConfig)); }, token: NgbAlertConfig, providedIn: "root" });
- NgbAlertConfig.ctorParameters = () => [
- { type: NgbConfig }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbAlertConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: NgbConfig }]; }, null); })();
- const ngbAlertFadingTransition = ({ classList }) => {
- classList.remove('show');
- };
- /**
- * Alert is a component to provide contextual feedback messages for user.
- *
- * It supports several alert types and can be dismissed.
- */
- class NgbAlert {
- constructor(config, _renderer, _element) {
- this._renderer = _renderer;
- this._element = _element;
- /**
- * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts.
- *
- * @since 8.0.0
- */
- this.closed = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.dismissible = config.dismissible;
- this.type = config.type;
- this.animation = config.animation;
- }
- /**
- * Triggers alert closing programmatically (same as clicking on the close button (×)).
- *
- * The returned observable will emit and be completed once the closing transition has finished.
- * If the animations are turned off this happens synchronously.
- *
- * Alternatively you could listen or subscribe to the `(closed)` output
- *
- * @since 8.0.0
- */
- close() {
- const transition = ngbRunTransition(this._element.nativeElement, ngbAlertFadingTransition, { animation: this.animation, runningTransition: 'continue' });
- transition.subscribe(() => this.closed.emit());
- return transition;
- }
- ngOnChanges(changes) {
- const typeChange = changes['type'];
- if (typeChange && !typeChange.firstChange) {
- this._renderer.removeClass(this._element.nativeElement, `alert-${typeChange.previousValue}`);
- this._renderer.addClass(this._element.nativeElement, `alert-${typeChange.currentValue}`);
- }
- }
- ngOnInit() { this._renderer.addClass(this._element.nativeElement, `alert-${this.type}`); }
- }
- NgbAlert.ɵfac = function NgbAlert_Factory(t) { return new (t || NgbAlert)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbAlertConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- NgbAlert.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbAlert, selectors: [["ngb-alert"]], hostAttrs: ["role", "alert", 1, "alert", "show"], hostVars: 4, hostBindings: function NgbAlert_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("fade", ctx.animation)("alert-dismissible", ctx.dismissible);
- } }, inputs: { dismissible: "dismissible", type: "type", animation: "animation" }, outputs: { closed: "closed" }, exportAs: ["ngbAlert"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], ngContentSelectors: _c5, decls: 2, vars: 1, consts: function () { let i18n_1; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_alert_close$$FESM2015_NG_BOOTSTRAP_JS_2 = goog.getMsg("Close");
- i18n_1 = MSG_EXTERNAL_ngb_alert_close$$FESM2015_NG_BOOTSTRAP_JS_2;
- }
- else {
- i18n_1 = $localize `:@@ngb.alert.close␟f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8␟7819314041543176992:Close`;
- } let i18n_3; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_alert_close$$FESM2015_NG_BOOTSTRAP_JS__4 = goog.getMsg("Close");
- i18n_3 = MSG_EXTERNAL_ngb_alert_close$$FESM2015_NG_BOOTSTRAP_JS__4;
- }
- else {
- i18n_3 = $localize `:@@ngb.alert.close␟f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8␟7819314041543176992:Close`;
- } return [["type", "button", "class", "close", "aria-label", i18n_1, 3, "click", 4, "ngIf"], ["type", "button", "aria-label", i18n_3, 1, "close", 3, "click"], ["aria-hidden", "true"]]; }, template: function NgbAlert_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbAlert_button_1_Template, 3, 0, "button", 0);
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.dismissible);
- } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"]], styles: ["ngb-alert{display:block}"], encapsulation: 2, changeDetection: 0 });
- NgbAlert.ctorParameters = () => [
- { type: NgbAlertConfig },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- NgbAlert.propDecorators = {
- animation: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- dismissible: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- type: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- closed: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbAlert, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngb-alert',
- exportAs: 'ngbAlert',
- changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- host: { 'role': 'alert', 'class': 'alert show', '[class.fade]': 'animation', '[class.alert-dismissible]': 'dismissible' },
- template: `
- <ng-content></ng-content>
- <button *ngIf="dismissible" type="button" class="close" aria-label="Close" i18n-aria-label="@@ngb.alert.close"
- (click)="close()">
- <span aria-hidden="true">×</span>
- </button>
- `,
- styles: ["ngb-alert{display:block}"]
- }]
- }], function () { return [{ type: NgbAlertConfig }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, { closed: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], dismissible: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], type: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], animation: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class NgbAlertModule {
- }
- NgbAlertModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbAlertModule });
- NgbAlertModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbAlertModule_Factory(t) { return new (t || NgbAlertModule)(); }, imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbAlertModule, { declarations: function () { return [NgbAlert]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]; }, exports: function () { return [NgbAlert]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbAlertModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{ declarations: [NgbAlert], exports: [NgbAlert], imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]], entryComponents: [NgbAlert] }]
- }], null, null); })();
- class NgbButtonLabel {
- }
- NgbButtonLabel.ɵfac = function NgbButtonLabel_Factory(t) { return new (t || NgbButtonLabel)(); };
- NgbButtonLabel.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbButtonLabel, selectors: [["", "ngbButtonLabel", ""]], hostVars: 8, hostBindings: function NgbButtonLabel_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("btn", true)("active", ctx.active)("disabled", ctx.disabled)("focus", ctx.focused);
- } } });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbButtonLabel, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[ngbButtonLabel]',
- host: { '[class.btn]': 'true', '[class.active]': 'active', '[class.disabled]': 'disabled', '[class.focus]': 'focused' }
- }]
- }], null, null); })();
- const NGB_CHECKBOX_VALUE_ACCESSOR = {
- provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbCheckBox),
- multi: true
- };
- /**
- * Allows to easily create Bootstrap-style checkbox buttons.
- *
- * Integrates with forms, so the value of a checked button is bound to the underlying form control
- * either in a reactive or template-driven way.
- */
- class NgbCheckBox {
- constructor(_label, _cd) {
- this._label = _label;
- this._cd = _cd;
- /**
- * If `true`, the checkbox button will be disabled
- */
- this.disabled = false;
- /**
- * The form control value when the checkbox is checked.
- */
- this.valueChecked = true;
- /**
- * The form control value when the checkbox is unchecked.
- */
- this.valueUnChecked = false;
- this.onChange = (_) => { };
- this.onTouched = () => { };
- }
- set focused(isFocused) {
- this._label.focused = isFocused;
- if (!isFocused) {
- this.onTouched();
- }
- }
- onInputChange($event) {
- const modelToPropagate = $event.target.checked ? this.valueChecked : this.valueUnChecked;
- this.onChange(modelToPropagate);
- this.onTouched();
- this.writeValue(modelToPropagate);
- }
- registerOnChange(fn) { this.onChange = fn; }
- registerOnTouched(fn) { this.onTouched = fn; }
- setDisabledState(isDisabled) {
- this.disabled = isDisabled;
- this._label.disabled = isDisabled;
- }
- writeValue(value) {
- this.checked = value === this.valueChecked;
- this._label.active = this.checked;
- // label won't be updated, if it is inside the OnPush component when [ngModel] changes
- this._cd.markForCheck();
- }
- }
- NgbCheckBox.ɵfac = function NgbCheckBox_Factory(t) { return new (t || NgbCheckBox)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbButtonLabel), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"])); };
- NgbCheckBox.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbCheckBox, selectors: [["", "ngbButton", "", "type", "checkbox"]], hostVars: 2, hostBindings: function NgbCheckBox_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function NgbCheckBox_change_HostBindingHandler($event) { return ctx.onInputChange($event); })("focus", function NgbCheckBox_focus_HostBindingHandler() { return ctx.focused = true; })("blur", function NgbCheckBox_blur_HostBindingHandler() { return ctx.focused = false; });
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("checked", ctx.checked)("disabled", ctx.disabled);
- } }, inputs: { disabled: "disabled", valueChecked: "valueChecked", valueUnChecked: "valueUnChecked" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([NGB_CHECKBOX_VALUE_ACCESSOR])] });
- NgbCheckBox.ctorParameters = () => [
- { type: NgbButtonLabel },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }
- ];
- NgbCheckBox.propDecorators = {
- disabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- valueChecked: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- valueUnChecked: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCheckBox, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[ngbButton][type=checkbox]',
- host: {
- '[checked]': 'checked',
- '[disabled]': 'disabled',
- '(change)': 'onInputChange($event)',
- '(focus)': 'focused = true',
- '(blur)': 'focused = false'
- },
- providers: [NGB_CHECKBOX_VALUE_ACCESSOR]
- }]
- }], function () { return [{ type: NgbButtonLabel }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }]; }, { disabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], valueChecked: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], valueUnChecked: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- const NGB_RADIO_VALUE_ACCESSOR = {
- provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbRadioGroup),
- multi: true
- };
- let nextId$1 = 0;
- /**
- * Allows to easily create Bootstrap-style radio buttons.
- *
- * Integrates with forms, so the value of a checked button is bound to the underlying form control
- * either in a reactive or template-driven way.
- */
- class NgbRadioGroup {
- constructor() {
- this._radios = new Set();
- this._value = null;
- /**
- * Name of the radio group applied to radio input elements.
- *
- * Will be applied to all radio input elements inside the group,
- * unless [`NgbRadio`](#/components/buttons/api#NgbRadio)'s specify names themselves.
- *
- * If not provided, will be generated in the `ngb-radio-xx` format.
- */
- this.name = `ngb-radio-${nextId$1++}`;
- this.onChange = (_) => { };
- this.onTouched = () => { };
- }
- get disabled() { return this._disabled; }
- set disabled(isDisabled) { this.setDisabledState(isDisabled); }
- onRadioChange(radio) {
- this.writeValue(radio.value);
- this.onChange(radio.value);
- }
- onRadioValueUpdate() { this._updateRadiosValue(); }
- register(radio) { this._radios.add(radio); }
- registerOnChange(fn) { this.onChange = fn; }
- registerOnTouched(fn) { this.onTouched = fn; }
- setDisabledState(isDisabled) {
- this._disabled = isDisabled;
- this._updateRadiosDisabled();
- }
- unregister(radio) { this._radios.delete(radio); }
- writeValue(value) {
- this._value = value;
- this._updateRadiosValue();
- }
- _updateRadiosValue() { this._radios.forEach((radio) => radio.updateValue(this._value)); }
- _updateRadiosDisabled() { this._radios.forEach((radio) => radio.updateDisabled()); }
- }
- NgbRadioGroup.ɵfac = function NgbRadioGroup_Factory(t) { return new (t || NgbRadioGroup)(); };
- NgbRadioGroup.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbRadioGroup, selectors: [["", "ngbRadioGroup", ""]], hostAttrs: ["role", "radiogroup"], inputs: { name: "name" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([NGB_RADIO_VALUE_ACCESSOR])] });
- NgbRadioGroup.propDecorators = {
- name: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbRadioGroup, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngbRadioGroup]', host: { 'role': 'radiogroup' }, providers: [NGB_RADIO_VALUE_ACCESSOR] }]
- }], function () { return []; }, { name: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * A directive that marks an input of type "radio" as a part of the
- * [`NgbRadioGroup`](#/components/buttons/api#NgbRadioGroup).
- */
- class NgbRadio {
- constructor(_group, _label, _renderer, _element, _cd) {
- this._group = _group;
- this._label = _label;
- this._renderer = _renderer;
- this._element = _element;
- this._cd = _cd;
- this._value = null;
- this._group.register(this);
- this.updateDisabled();
- }
- /**
- * The form control value when current radio button is checked.
- */
- set value(value) {
- this._value = value;
- const stringValue = value ? value.toString() : '';
- this._renderer.setProperty(this._element.nativeElement, 'value', stringValue);
- this._group.onRadioValueUpdate();
- }
- /**
- * If `true`, current radio button will be disabled.
- */
- set disabled(isDisabled) {
- this._disabled = isDisabled !== false;
- this.updateDisabled();
- }
- set focused(isFocused) {
- if (this._label) {
- this._label.focused = isFocused;
- }
- if (!isFocused) {
- this._group.onTouched();
- }
- }
- get checked() { return this._checked; }
- get disabled() { return this._group.disabled || this._disabled; }
- get value() { return this._value; }
- get nameAttr() { return this.name || this._group.name; }
- ngOnDestroy() { this._group.unregister(this); }
- onChange() { this._group.onRadioChange(this); }
- updateValue(value) {
- // label won't be updated, if it is inside the OnPush component when [ngModel] changes
- if (this.value !== value) {
- this._cd.markForCheck();
- }
- this._checked = this.value === value;
- this._label.active = this._checked;
- }
- updateDisabled() { this._label.disabled = this.disabled; }
- }
- NgbRadio.ɵfac = function NgbRadio_Factory(t) { return new (t || NgbRadio)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbRadioGroup), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbButtonLabel), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"])); };
- NgbRadio.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbRadio, selectors: [["", "ngbButton", "", "type", "radio"]], hostVars: 3, hostBindings: function NgbRadio_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function NgbRadio_change_HostBindingHandler() { return ctx.onChange(); })("focus", function NgbRadio_focus_HostBindingHandler() { return ctx.focused = true; })("blur", function NgbRadio_blur_HostBindingHandler() { return ctx.focused = false; });
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("checked", ctx.checked)("disabled", ctx.disabled)("name", ctx.nameAttr);
- } }, inputs: { value: "value", disabled: "disabled", name: "name" } });
- NgbRadio.ctorParameters = () => [
- { type: NgbRadioGroup },
- { type: NgbButtonLabel },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }
- ];
- NgbRadio.propDecorators = {
- name: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- value: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['value',] }],
- disabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['disabled',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbRadio, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[ngbButton][type=radio]',
- host: {
- '[checked]': 'checked',
- '[disabled]': 'disabled',
- '[name]': 'nameAttr',
- '(change)': 'onChange()',
- '(focus)': 'focused = true',
- '(blur)': 'focused = false'
- }
- }]
- }], function () { return [{ type: NgbRadioGroup }, { type: NgbButtonLabel }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }]; }, { value: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['value']
- }], disabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['disabled']
- }], name: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- const NGB_BUTTON_DIRECTIVES = [NgbButtonLabel, NgbCheckBox, NgbRadioGroup, NgbRadio];
- class NgbButtonsModule {
- }
- NgbButtonsModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbButtonsModule });
- NgbButtonsModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbButtonsModule_Factory(t) { return new (t || NgbButtonsModule)(); } });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbButtonsModule, { declarations: [NgbButtonLabel, NgbCheckBox, NgbRadioGroup, NgbRadio], exports: [NgbButtonLabel, NgbCheckBox, NgbRadioGroup, NgbRadio] }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbButtonsModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{ declarations: NGB_BUTTON_DIRECTIVES, exports: NGB_BUTTON_DIRECTIVES }]
- }], null, null); })();
- /**
- * A configuration service for the [NgbCarousel](#/components/carousel/api#NgbCarousel) component.
- *
- * You can inject this service, typically in your root component, and customize its properties
- * to provide default values for all carousels used in the application.
- */
- class NgbCarouselConfig {
- constructor(ngbConfig) {
- this.interval = 5000;
- this.wrap = true;
- this.keyboard = true;
- this.pauseOnHover = true;
- this.pauseOnFocus = true;
- this.showNavigationArrows = true;
- this.showNavigationIndicators = true;
- this.animation = ngbConfig.animation;
- }
- }
- NgbCarouselConfig.ɵfac = function NgbCarouselConfig_Factory(t) { return new (t || NgbCarouselConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig)); };
- NgbCarouselConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbCarouselConfig_Factory() { return new NgbCarouselConfig(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(NgbConfig)); }, token: NgbCarouselConfig, providedIn: "root" });
- NgbCarouselConfig.ctorParameters = () => [
- { type: NgbConfig }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCarouselConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: NgbConfig }]; }, null); })();
- /**
- * Defines the carousel slide transition direction.
- */
- var NgbSlideEventDirection;
- (function (NgbSlideEventDirection) {
- NgbSlideEventDirection["LEFT"] = "left";
- NgbSlideEventDirection["RIGHT"] = "right";
- })(NgbSlideEventDirection || (NgbSlideEventDirection = {}));
- const isAnimated = ({ classList }) => {
- return classList.contains('carousel-item-left') || classList.contains('carousel-item-right');
- };
- const ɵ0$1 = isAnimated;
- const removeDirectionClasses = ({ classList }) => {
- classList.remove('carousel-item-left');
- classList.remove('carousel-item-right');
- };
- const ɵ1 = removeDirectionClasses;
- const removeClasses = ({ classList }) => {
- removeDirectionClasses({ classList });
- classList.remove('carousel-item-prev');
- classList.remove('carousel-item-next');
- };
- const ɵ2 = removeClasses;
- const ngbCarouselTransitionIn = (element, { direction }) => {
- const { classList } = element;
- if (isAnimated(element)) {
- // Revert the transition
- removeDirectionClasses(element);
- }
- else {
- // For the 'in' transition, a 'pre-class' is applied to the element to ensure its visibility
- classList.add('carousel-item-' + (direction === NgbSlideEventDirection.LEFT ? 'next' : 'prev'));
- reflow(element);
- classList.add('carousel-item-' + direction);
- }
- return () => {
- removeClasses(element);
- classList.add('active');
- };
- };
- const ngbCarouselTransitionOut = (element, { direction }) => {
- const { classList } = element;
- // direction is left or right, depending on the way the slide goes out.
- if (isAnimated(element)) {
- // Revert the transition
- removeDirectionClasses(element);
- }
- else {
- classList.add('carousel-item-' + direction);
- }
- return () => {
- removeClasses(element);
- classList.remove('active');
- };
- };
- let nextId$2 = 0;
- /**
- * A directive that wraps the individual carousel slide.
- */
- class NgbSlide {
- constructor(tplRef) {
- this.tplRef = tplRef;
- /**
- * Slide id that must be unique for the entire document.
- *
- * If not provided, will be generated in the `ngb-slide-xx` format.
- */
- this.id = `ngb-slide-${nextId$2++}`;
- /**
- * An event emitted when the slide transition is finished
- *
- * @since 8.0.0
- */
- this.slid = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- }
- }
- NgbSlide.ɵfac = function NgbSlide_Factory(t) { return new (t || NgbSlide)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgbSlide.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbSlide, selectors: [["ng-template", "ngbSlide", ""]], inputs: { id: "id" }, outputs: { slid: "slid" } });
- NgbSlide.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- NgbSlide.propDecorators = {
- id: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- slid: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbSlide, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: 'ng-template[ngbSlide]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, { id: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], slid: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }] }); })();
- /**
- * Carousel is a component to easily create and control slideshows.
- *
- * Allows to set intervals, change the way user interacts with the slides and provides a programmatic API.
- */
- class NgbCarousel {
- constructor(config, _platformId, _ngZone, _cd, _container) {
- this._platformId = _platformId;
- this._ngZone = _ngZone;
- this._cd = _cd;
- this._container = _container;
- this.NgbSlideEventSource = NgbSlideEventSource;
- this._destroy$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- this._interval$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](0);
- this._mouseHover$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](false);
- this._focused$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](false);
- this._pauseOnHover$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](false);
- this._pauseOnFocus$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](false);
- this._pause$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](false);
- this._wrap$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](false);
- /**
- * An event emitted just before the slide transition starts.
- *
- * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details.
- */
- this.slide = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An event emitted right after the slide transition is completed.
- *
- * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details.
- *
- * @since 8.0.0
- */
- this.slid = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /*
- * Keep the ids of the panels currently transitionning
- * in order to allow only the transition revertion
- */
- this._transitionIds = null;
- this.animation = config.animation;
- this.interval = config.interval;
- this.wrap = config.wrap;
- this.keyboard = config.keyboard;
- this.pauseOnHover = config.pauseOnHover;
- this.pauseOnFocus = config.pauseOnFocus;
- this.showNavigationArrows = config.showNavigationArrows;
- this.showNavigationIndicators = config.showNavigationIndicators;
- }
- /**
- * Time in milliseconds before the next slide is shown.
- */
- set interval(value) {
- this._interval$.next(value);
- }
- get interval() { return this._interval$.value; }
- /**
- * If `true`, will 'wrap' the carousel by switching from the last slide back to the first.
- */
- set wrap(value) {
- this._wrap$.next(value);
- }
- get wrap() { return this._wrap$.value; }
- /**
- * If `true`, will pause slide switching when mouse cursor hovers the slide.
- *
- * @since 2.2.0
- */
- set pauseOnHover(value) {
- this._pauseOnHover$.next(value);
- }
- get pauseOnHover() { return this._pauseOnHover$.value; }
- /**
- * If `true`, will pause slide switching when the focus is inside the carousel.
- */
- set pauseOnFocus(value) {
- this._pauseOnFocus$.next(value);
- }
- get pauseOnFocus() { return this._pauseOnFocus$.value; }
- set mouseHover(value) { this._mouseHover$.next(value); }
- get mouseHover() { return this._mouseHover$.value; }
- set focused(value) { this._focused$.next(value); }
- get focused() { return this._focused$.value; }
- arrowLeft() {
- this.focus();
- this.prev(NgbSlideEventSource.ARROW_LEFT);
- }
- arrowRight() {
- this.focus();
- this.next(NgbSlideEventSource.ARROW_RIGHT);
- }
- ngAfterContentInit() {
- // setInterval() doesn't play well with SSR and protractor,
- // so we should run it in the browser and outside Angular
- if (Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["isPlatformBrowser"])(this._platformId)) {
- this._ngZone.runOutsideAngular(() => {
- const hasNextSlide$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["combineLatest"])([
- this.slide.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(slideEvent => slideEvent.current), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["startWith"])(this.activeId)),
- this._wrap$, this.slides.changes.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["startWith"])(null))
- ])
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(([currentSlideId, wrap]) => {
- const slideArr = this.slides.toArray();
- const currentSlideIdx = this._getSlideIdxById(currentSlideId);
- return wrap ? slideArr.length > 1 : currentSlideIdx < slideArr.length - 1;
- }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["distinctUntilChanged"])());
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["combineLatest"])([
- this._pause$, this._pauseOnHover$, this._mouseHover$, this._pauseOnFocus$, this._focused$, this._interval$,
- hasNextSlide$
- ])
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(([pause, pauseOnHover, mouseHover, pauseOnFocus, focused, interval, hasNextSlide]) => ((pause || (pauseOnHover && mouseHover) || (pauseOnFocus && focused) || !hasNextSlide) ?
- 0 :
- interval)), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["distinctUntilChanged"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(interval => interval > 0 ? Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["timer"])(interval, interval) : rxjs__WEBPACK_IMPORTED_MODULE_2__["NEVER"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._destroy$))
- .subscribe(() => this._ngZone.run(() => this.next(NgbSlideEventSource.TIMER)));
- });
- }
- this.slides.changes.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._destroy$)).subscribe(() => this._cd.markForCheck());
- }
- ngAfterContentChecked() {
- let activeSlide = this._getSlideById(this.activeId);
- this.activeId = activeSlide ? activeSlide.id : (this.slides.length ? this.slides.first.id : '');
- }
- ngAfterViewInit() {
- // Initialize the 'active' class (not managed by the template)
- if (this.activeId) {
- const element = this._getSlideElement(this.activeId);
- if (element) {
- element.classList.add('active');
- }
- }
- }
- ngOnDestroy() { this._destroy$.next(); }
- /**
- * Navigates to a slide with the specified identifier.
- */
- select(slideId, source) {
- this._cycleToSelected(slideId, this._getSlideEventDirection(this.activeId, slideId), source);
- }
- /**
- * Navigates to the previous slide.
- */
- prev(source) {
- this._cycleToSelected(this._getPrevSlide(this.activeId), NgbSlideEventDirection.RIGHT, source);
- }
- /**
- * Navigates to the next slide.
- */
- next(source) {
- this._cycleToSelected(this._getNextSlide(this.activeId), NgbSlideEventDirection.LEFT, source);
- }
- /**
- * Pauses cycling through the slides.
- */
- pause() { this._pause$.next(true); }
- /**
- * Restarts cycling through the slides from left to right.
- */
- cycle() { this._pause$.next(false); }
- /**
- * Set the focus on the carousel.
- */
- focus() { this._container.nativeElement.focus(); }
- _cycleToSelected(slideIdx, direction, source) {
- const transitionIds = this._transitionIds;
- if (transitionIds && (transitionIds[0] !== slideIdx || transitionIds[1] !== this.activeId)) {
- // Revert prevented
- return;
- }
- let selectedSlide = this._getSlideById(slideIdx);
- if (selectedSlide && selectedSlide.id !== this.activeId) {
- this._transitionIds = [this.activeId, slideIdx];
- this.slide.emit({ prev: this.activeId, current: selectedSlide.id, direction: direction, paused: this._pause$.value, source });
- const options = {
- animation: this.animation,
- runningTransition: 'stop',
- context: { direction },
- };
- const transitions = [];
- const activeSlide = this._getSlideById(this.activeId);
- if (activeSlide) {
- const activeSlideTransition = ngbRunTransition(this._getSlideElement(activeSlide.id), ngbCarouselTransitionOut, options);
- activeSlideTransition.subscribe(() => { activeSlide.slid.emit({ isShown: false, direction, source }); });
- transitions.push(activeSlideTransition);
- }
- const previousId = this.activeId;
- this.activeId = selectedSlide.id;
- const nextSlide = this._getSlideById(this.activeId);
- const transition = ngbRunTransition(this._getSlideElement(selectedSlide.id), ngbCarouselTransitionIn, options);
- transition.subscribe(() => { nextSlide === null || nextSlide === void 0 ? void 0 : nextSlide.slid.emit({ isShown: true, direction, source }); });
- transitions.push(transition);
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["zip"])(...transitions).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(() => {
- this._transitionIds = null;
- this.slid.emit({ prev: previousId, current: selectedSlide.id, direction: direction, paused: this._pause$.value, source });
- });
- }
- // we get here after the interval fires or any external API call like next(), prev() or select()
- this._cd.markForCheck();
- }
- _getSlideEventDirection(currentActiveSlideId, nextActiveSlideId) {
- const currentActiveSlideIdx = this._getSlideIdxById(currentActiveSlideId);
- const nextActiveSlideIdx = this._getSlideIdxById(nextActiveSlideId);
- return currentActiveSlideIdx > nextActiveSlideIdx ? NgbSlideEventDirection.RIGHT : NgbSlideEventDirection.LEFT;
- }
- _getSlideById(slideId) {
- return this.slides.find(slide => slide.id === slideId) || null;
- }
- _getSlideIdxById(slideId) {
- const slide = this._getSlideById(slideId);
- return slide != null ? this.slides.toArray().indexOf(slide) : -1;
- }
- _getNextSlide(currentSlideId) {
- const slideArr = this.slides.toArray();
- const currentSlideIdx = this._getSlideIdxById(currentSlideId);
- const isLastSlide = currentSlideIdx === slideArr.length - 1;
- return isLastSlide ? (this.wrap ? slideArr[0].id : slideArr[slideArr.length - 1].id) :
- slideArr[currentSlideIdx + 1].id;
- }
- _getPrevSlide(currentSlideId) {
- const slideArr = this.slides.toArray();
- const currentSlideIdx = this._getSlideIdxById(currentSlideId);
- const isFirstSlide = currentSlideIdx === 0;
- return isFirstSlide ? (this.wrap ? slideArr[slideArr.length - 1].id : slideArr[0].id) :
- slideArr[currentSlideIdx - 1].id;
- }
- _getSlideElement(slideId) {
- return this._container.nativeElement.querySelector(`#slide-${slideId}`);
- }
- }
- NgbCarousel.ɵfac = function NgbCarousel_Factory(t) { return new (t || NgbCarousel)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbCarouselConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- NgbCarousel.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbCarousel, selectors: [["ngb-carousel"]], contentQueries: function NgbCarousel_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbSlide, false);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.slides = _t);
- } }, hostAttrs: ["tabIndex", "0", 1, "carousel", "slide"], hostVars: 3, hostBindings: function NgbCarousel_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keydown.arrowLeft", function NgbCarousel_keydown_arrowLeft_HostBindingHandler() { return ctx.keyboard && ctx.arrowLeft(); })("keydown.arrowRight", function NgbCarousel_keydown_arrowRight_HostBindingHandler() { return ctx.keyboard && ctx.arrowRight(); })("mouseenter", function NgbCarousel_mouseenter_HostBindingHandler() { return ctx.mouseHover = true; })("mouseleave", function NgbCarousel_mouseleave_HostBindingHandler() { return ctx.mouseHover = false; })("focusin", function NgbCarousel_focusin_HostBindingHandler() { return ctx.focused = true; })("focusout", function NgbCarousel_focusout_HostBindingHandler() { return ctx.focused = false; });
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-activedescendant", ctx.activeId);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("display", "block");
- } }, inputs: { animation: "animation", interval: "interval", wrap: "wrap", keyboard: "keyboard", pauseOnHover: "pauseOnHover", pauseOnFocus: "pauseOnFocus", showNavigationArrows: "showNavigationArrows", showNavigationIndicators: "showNavigationIndicators", activeId: "activeId" }, outputs: { slide: "slide", slid: "slid" }, exportAs: ["ngbCarousel"], decls: 6, vars: 6, consts: function () { let i18n_6; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- /**
- * @desc Currently selected slide number read by screen reader
- */
- const MSG_EXTERNAL_ngb_carousel_slide_number$$FESM2015_NG_BOOTSTRAP_JS__7 = goog.getMsg(" Slide {$interpolation} of {$interpolation_1} ", { "interpolation": "\uFFFD0\uFFFD", "interpolation_1": "\uFFFD1\uFFFD" });
- i18n_6 = MSG_EXTERNAL_ngb_carousel_slide_number$$FESM2015_NG_BOOTSTRAP_JS__7;
- }
- else {
- i18n_6 = $localize `:Currently selected slide number read by screen reader@@ngb.carousel.slide-number␟a65b1b49aa7dd8c4f3004da6a8c2241814dae621␟783273603869937627: Slide ${"\uFFFD0\uFFFD"}:INTERPOLATION: of ${"\uFFFD1\uFFFD"}:INTERPOLATION_1: `;
- } let i18n_8; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_carousel_previous$$FESM2015_NG_BOOTSTRAP_JS__9 = goog.getMsg("Previous");
- i18n_8 = MSG_EXTERNAL_ngb_carousel_previous$$FESM2015_NG_BOOTSTRAP_JS__9;
- }
- else {
- i18n_8 = $localize `:@@ngb.carousel.previous␟680d5c75b7fd8d37961083608b9fcdc4167b4c43␟4452427314943113135:Previous`;
- } let i18n_10; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_carousel_next$$FESM2015_NG_BOOTSTRAP_JS__11 = goog.getMsg("Next");
- i18n_10 = MSG_EXTERNAL_ngb_carousel_next$$FESM2015_NG_BOOTSTRAP_JS__11;
- }
- else {
- i18n_10 = $localize `:@@ngb.carousel.next␟f732c304c7433e5a83ffcd862c3dce709a0f4982␟3885497195825665706:Next`;
- } return [["role", "tablist", 1, "carousel-indicators"], ["role", "tab", 3, "active", "click", 4, "ngFor", "ngForOf"], [1, "carousel-inner"], ["class", "carousel-item", "role", "tabpanel", 3, "id", 4, "ngFor", "ngForOf"], ["class", "carousel-control-prev", "role", "button", 3, "click", 4, "ngIf"], ["class", "carousel-control-next", "role", "button", 3, "click", 4, "ngIf"], ["role", "tab", 3, "click"], ["role", "tabpanel", 1, "carousel-item", 3, "id"], [1, "sr-only"], i18n_6, [3, "ngTemplateOutlet"], ["role", "button", 1, "carousel-control-prev", 3, "click"], ["aria-hidden", "true", 1, "carousel-control-prev-icon"], i18n_8, ["role", "button", 1, "carousel-control-next", 3, "click"], ["aria-hidden", "true", 1, "carousel-control-next-icon"], i18n_10]; }, template: function NgbCarousel_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "ol", 0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbCarousel_li_1_Template, 1, 5, "li", 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "div", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbCarousel_div_3_Template, 4, 4, "div", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, NgbCarousel_a_4_Template, 4, 0, "a", 4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](5, NgbCarousel_a_5_Template, 4, 0, "a", 5);
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("sr-only", !ctx.showNavigationIndicators);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.slides);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.slides);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.showNavigationArrows);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.showNavigationArrows);
- } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]], encapsulation: 2, changeDetection: 0 });
- NgbCarousel.ctorParameters = () => [
- { type: NgbCarouselConfig },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"],] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- NgbCarousel.propDecorators = {
- slides: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"], args: [NgbSlide,] }],
- animation: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- activeId: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- interval: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- wrap: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- keyboard: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- pauseOnHover: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- pauseOnFocus: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- showNavigationArrows: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- showNavigationIndicators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- slide: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- slid: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCarousel, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngb-carousel',
- exportAs: 'ngbCarousel',
- changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- host: {
- 'class': 'carousel slide',
- '[style.display]': '"block"',
- 'tabIndex': '0',
- '(keydown.arrowLeft)': 'keyboard && arrowLeft()',
- '(keydown.arrowRight)': 'keyboard && arrowRight()',
- '(mouseenter)': 'mouseHover = true',
- '(mouseleave)': 'mouseHover = false',
- '(focusin)': 'focused = true',
- '(focusout)': 'focused = false',
- '[attr.aria-activedescendant]': 'activeId'
- },
- template: `
- <ol class="carousel-indicators" [class.sr-only]="!showNavigationIndicators" role="tablist">
- <li *ngFor="let slide of slides" [class.active]="slide.id === activeId"
- role="tab" [attr.aria-labelledby]="'slide-' + slide.id" [attr.aria-controls]="'slide-' + slide.id"
- [attr.aria-selected]="slide.id === activeId"
- (click)="focus();select(slide.id, NgbSlideEventSource.INDICATOR);"></li>
- </ol>
- <div class="carousel-inner">
- <div *ngFor="let slide of slides; index as i; count as c" class="carousel-item" [id]="'slide-' + slide.id" role="tabpanel">
- <span class="sr-only" i18n="Currently selected slide number read by screen reader@@ngb.carousel.slide-number">
- Slide {{i + 1}} of {{c}}
- </span>
- <ng-template [ngTemplateOutlet]="slide.tplRef"></ng-template>
- </div>
- </div>
- <a class="carousel-control-prev" role="button" (click)="arrowLeft()" *ngIf="showNavigationArrows">
- <span class="carousel-control-prev-icon" aria-hidden="true"></span>
- <span class="sr-only" i18n="@@ngb.carousel.previous">Previous</span>
- </a>
- <a class="carousel-control-next" role="button" (click)="arrowRight()" *ngIf="showNavigationArrows">
- <span class="carousel-control-next-icon" aria-hidden="true"></span>
- <span class="sr-only" i18n="@@ngb.carousel.next">Next</span>
- </a>
- `
- }]
- }], function () { return [{ type: NgbCarouselConfig }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, { slide: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], slid: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], animation: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], interval: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], wrap: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], keyboard: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], pauseOnHover: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], pauseOnFocus: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], showNavigationArrows: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], showNavigationIndicators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], activeId: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], slides: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
- args: [NgbSlide]
- }] }); })();
- var NgbSlideEventSource;
- (function (NgbSlideEventSource) {
- NgbSlideEventSource["TIMER"] = "timer";
- NgbSlideEventSource["ARROW_LEFT"] = "arrowLeft";
- NgbSlideEventSource["ARROW_RIGHT"] = "arrowRight";
- NgbSlideEventSource["INDICATOR"] = "indicator";
- })(NgbSlideEventSource || (NgbSlideEventSource = {}));
- const NGB_CAROUSEL_DIRECTIVES = [NgbCarousel, NgbSlide];
- class NgbCarouselModule {
- }
- NgbCarouselModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbCarouselModule });
- NgbCarouselModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbCarouselModule_Factory(t) { return new (t || NgbCarouselModule)(); }, imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbCarouselModule, { declarations: function () { return [NgbCarousel, NgbSlide]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]; }, exports: function () { return [NgbCarousel, NgbSlide]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCarouselModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{ declarations: NGB_CAROUSEL_DIRECTIVES, exports: NGB_CAROUSEL_DIRECTIVES, imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]] }]
- }], null, null); })();
- /**
- * A configuration service for the [NgbCollapse](#/components/collapse/api#NgbCollapse) component.
- *
- * You can inject this service, typically in your root component, and customize its properties
- * to provide default values for all collapses used in the application.
- */
- class NgbCollapseConfig {
- constructor(ngbConfig) { this.animation = ngbConfig.animation; }
- }
- NgbCollapseConfig.ɵfac = function NgbCollapseConfig_Factory(t) { return new (t || NgbCollapseConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig)); };
- NgbCollapseConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbCollapseConfig_Factory() { return new NgbCollapseConfig(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(NgbConfig)); }, token: NgbCollapseConfig, providedIn: "root" });
- NgbCollapseConfig.ctorParameters = () => [
- { type: NgbConfig }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCollapseConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: NgbConfig }]; }, null); })();
- /**
- * A directive to provide a simple way of hiding and showing elements on the page.
- */
- class NgbCollapse {
- constructor(_element, config) {
- this._element = _element;
- /**
- * If `true`, collapse will be animated.
- *
- * Animation is triggered only when clicked on triggering element
- * or via the `.toggle()` function
- *
- * @since 8.0.0
- */
- this.animation = false;
- /**
- * If `true`, will collapse the element or show it otherwise.
- */
- this.collapsed = false;
- this.ngbCollapseChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An event emitted when the collapse element is shown, after the transition. It has no payload.
- *
- * @since 8.0.0
- */
- this.shown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An event emitted when the collapse element is hidden, after the transition. It has no payload.
- *
- * @since 8.0.0
- */
- this.hidden = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.animation = config.animation;
- }
- ngOnInit() {
- this._element.nativeElement.classList.add('collapse');
- this._runTransition(this.collapsed, false, false);
- }
- ngOnChanges({ collapsed }) {
- if (!collapsed.firstChange) {
- this._runTransition(this.collapsed, this.animation);
- }
- }
- /**
- * Triggers collapsing programmatically.
- *
- * If there is a collapsing transition running already, it will be reversed.
- * If the animations are turned off this happens synchronously.
- *
- * @since 8.0.0
- */
- toggle(open = this.collapsed) {
- this.collapsed = !open;
- this.ngbCollapseChange.next(this.collapsed);
- this._runTransition(this.collapsed, this.animation);
- }
- _runTransition(collapsed, animation, emitEvent = true) {
- ngbRunTransition(this._element.nativeElement, ngbCollapsingTransition, {
- animation,
- runningTransition: 'stop',
- context: { direction: collapsed ? 'hide' : 'show' }
- }).subscribe(() => {
- if (emitEvent) {
- if (collapsed) {
- this.hidden.emit();
- }
- else {
- this.shown.emit();
- }
- }
- });
- }
- }
- NgbCollapse.ɵfac = function NgbCollapse_Factory(t) { return new (t || NgbCollapse)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbCollapseConfig)); };
- NgbCollapse.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbCollapse, selectors: [["", "ngbCollapse", ""]], inputs: { animation: "animation", collapsed: ["ngbCollapse", "collapsed"] }, outputs: { ngbCollapseChange: "ngbCollapseChange", shown: "shown", hidden: "hidden" }, exportAs: ["ngbCollapse"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- NgbCollapse.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: NgbCollapseConfig }
- ];
- NgbCollapse.propDecorators = {
- animation: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- collapsed: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['ngbCollapse',] }],
- ngbCollapseChange: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- shown: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- hidden: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCollapse, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngbCollapse]', exportAs: 'ngbCollapse' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: NgbCollapseConfig }]; }, { animation: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], collapsed: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['ngbCollapse']
- }], ngbCollapseChange: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], shown: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], hidden: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }] }); })();
- class NgbCollapseModule {
- }
- NgbCollapseModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbCollapseModule });
- NgbCollapseModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbCollapseModule_Factory(t) { return new (t || NgbCollapseModule)(); } });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbCollapseModule, { declarations: [NgbCollapse], exports: [NgbCollapse] }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCollapseModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{ declarations: [NgbCollapse], exports: [NgbCollapse] }]
- }], null, null); })();
- /**
- * A simple class that represents a date that datepicker also uses internally.
- *
- * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods,
- * like `.equals()`, `.before()`, etc.
- *
- * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`.
- *
- * In many cases it is simpler to manipulate these objects together with
- * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates.
- *
- * See the [date format overview](#/components/datepicker/overview#date-model) for more details.
- *
- * @since 3.0.0
- */
- class NgbDate {
- constructor(year, month, day) {
- this.year = isInteger(year) ? year : null;
- this.month = isInteger(month) ? month : null;
- this.day = isInteger(day) ? day : null;
- }
- /**
- * A **static method** that creates a new date object from the `NgbDateStruct`,
- *
- * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`.
- *
- * If the `date` is already of `NgbDate` type, the method will return the same object.
- */
- static from(date) {
- if (date instanceof NgbDate) {
- return date;
- }
- return date ? new NgbDate(date.year, date.month, date.day) : null;
- }
- /**
- * Checks if the current date is equal to another date.
- */
- equals(other) {
- return other != null && this.year === other.year && this.month === other.month && this.day === other.day;
- }
- /**
- * Checks if the current date is before another date.
- */
- before(other) {
- if (!other) {
- return false;
- }
- if (this.year === other.year) {
- if (this.month === other.month) {
- return this.day === other.day ? false : this.day < other.day;
- }
- else {
- return this.month < other.month;
- }
- }
- else {
- return this.year < other.year;
- }
- }
- /**
- * Checks if the current date is after another date.
- */
- after(other) {
- if (!other) {
- return false;
- }
- if (this.year === other.year) {
- if (this.month === other.month) {
- return this.day === other.day ? false : this.day > other.day;
- }
- else {
- return this.month > other.month;
- }
- }
- else {
- return this.year > other.year;
- }
- }
- }
- function fromJSDate(jsDate) {
- return new NgbDate(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate());
- }
- function toJSDate(date) {
- const jsDate = new Date(date.year, date.month - 1, date.day, 12);
- // this is done avoid 30 -> 1930 conversion
- if (!isNaN(jsDate.getTime())) {
- jsDate.setFullYear(date.year);
- }
- return jsDate;
- }
- function NGB_DATEPICKER_CALENDAR_FACTORY() {
- return new NgbCalendarGregorian();
- }
- /**
- * A service that represents the calendar used by the datepicker.
- *
- * The default implementation uses the Gregorian calendar. You can inject it in your own
- * implementations if necessary to simplify `NgbDate` calculations.
- */
- class NgbCalendar {
- }
- NgbCalendar.ɵfac = function NgbCalendar_Factory(t) { return new (t || NgbCalendar)(); };
- NgbCalendar.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: NGB_DATEPICKER_CALENDAR_FACTORY, token: NgbCalendar, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCalendar, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_CALENDAR_FACTORY }]
- }], null, null); })();
- class NgbCalendarGregorian extends NgbCalendar {
- getDaysPerWeek() { return 7; }
- getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }
- getWeeksPerMonth() { return 6; }
- getNext(date, period = 'd', number = 1) {
- let jsDate = toJSDate(date);
- let checkMonth = true;
- let expectedMonth = jsDate.getMonth();
- switch (period) {
- case 'y':
- jsDate.setFullYear(jsDate.getFullYear() + number);
- break;
- case 'm':
- expectedMonth += number;
- jsDate.setMonth(expectedMonth);
- expectedMonth = expectedMonth % 12;
- if (expectedMonth < 0) {
- expectedMonth = expectedMonth + 12;
- }
- break;
- case 'd':
- jsDate.setDate(jsDate.getDate() + number);
- checkMonth = false;
- break;
- default:
- return date;
- }
- if (checkMonth && jsDate.getMonth() !== expectedMonth) {
- // this means the destination month has less days than the initial month
- // let's go back to the end of the previous month:
- jsDate.setDate(0);
- }
- return fromJSDate(jsDate);
- }
- getPrev(date, period = 'd', number = 1) { return this.getNext(date, period, -number); }
- getWeekday(date) {
- let jsDate = toJSDate(date);
- let day = jsDate.getDay();
- // in JS Date Sun=0, in ISO 8601 Sun=7
- return day === 0 ? 7 : day;
- }
- getWeekNumber(week, firstDayOfWeek) {
- // in JS Date Sun=0, in ISO 8601 Sun=7
- if (firstDayOfWeek === 7) {
- firstDayOfWeek = 0;
- }
- const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;
- let date = week[thursdayIndex];
- const jsDate = toJSDate(date);
- jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday
- const time = jsDate.getTime();
- jsDate.setMonth(0); // Compare with Jan 1
- jsDate.setDate(1);
- return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1;
- }
- getToday() { return fromJSDate(new Date()); }
- isValid(date) {
- if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) {
- return false;
- }
- // year 0 doesn't exist in Gregorian calendar
- if (date.year === 0) {
- return false;
- }
- const jsDate = toJSDate(date);
- return !isNaN(jsDate.getTime()) && jsDate.getFullYear() === date.year && jsDate.getMonth() + 1 === date.month &&
- jsDate.getDate() === date.day;
- }
- }
- NgbCalendarGregorian.ɵfac = function NgbCalendarGregorian_Factory(t) { return ɵNgbCalendarGregorian_BaseFactory(t || NgbCalendarGregorian); };
- NgbCalendarGregorian.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NgbCalendarGregorian, factory: NgbCalendarGregorian.ɵfac });
- const ɵNgbCalendarGregorian_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbCalendarGregorian);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCalendarGregorian, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- function isChangedDate(prev, next) {
- return !dateComparator(prev, next);
- }
- function isChangedMonth(prev, next) {
- return !prev && !next ? false : !prev || !next ? true : prev.year !== next.year || prev.month !== next.month;
- }
- function dateComparator(prev, next) {
- return (!prev && !next) || (!!prev && !!next && prev.equals(next));
- }
- function checkMinBeforeMax(minDate, maxDate) {
- if (maxDate && minDate && maxDate.before(minDate)) {
- throw new Error(`'maxDate' ${maxDate} should be greater than 'minDate' ${minDate}`);
- }
- }
- function checkDateInRange(date, minDate, maxDate) {
- if (date && minDate && date.before(minDate)) {
- return minDate;
- }
- if (date && maxDate && date.after(maxDate)) {
- return maxDate;
- }
- return date || null;
- }
- function isDateSelectable(date, state) {
- const { minDate, maxDate, disabled, markDisabled } = state;
- // clang-format off
- return !(date === null ||
- date === undefined ||
- disabled ||
- (markDisabled && markDisabled(date, { year: date.year, month: date.month })) ||
- (minDate && date.before(minDate)) ||
- (maxDate && date.after(maxDate)));
- // clang-format on
- }
- function generateSelectBoxMonths(calendar, date, minDate, maxDate) {
- if (!date) {
- return [];
- }
- let months = calendar.getMonths(date.year);
- if (minDate && date.year === minDate.year) {
- const index = months.findIndex(month => month === minDate.month);
- months = months.slice(index);
- }
- if (maxDate && date.year === maxDate.year) {
- const index = months.findIndex(month => month === maxDate.month);
- months = months.slice(0, index + 1);
- }
- return months;
- }
- function generateSelectBoxYears(date, minDate, maxDate) {
- if (!date) {
- return [];
- }
- const start = minDate ? Math.max(minDate.year, date.year - 500) : date.year - 10;
- const end = maxDate ? Math.min(maxDate.year, date.year + 500) : date.year + 10;
- const length = end - start + 1;
- const numbers = Array(length);
- for (let i = 0; i < length; i++) {
- numbers[i] = start + i;
- }
- return numbers;
- }
- function nextMonthDisabled(calendar, date, maxDate) {
- const nextDate = Object.assign(calendar.getNext(date, 'm'), { day: 1 });
- return maxDate != null && nextDate.after(maxDate);
- }
- function prevMonthDisabled(calendar, date, minDate) {
- const prevDate = Object.assign(calendar.getPrev(date, 'm'), { day: 1 });
- return minDate != null && (prevDate.year === minDate.year && prevDate.month < minDate.month ||
- prevDate.year < minDate.year && minDate.month === 1);
- }
- function buildMonths(calendar, date, state, i18n, force) {
- const { displayMonths, months } = state;
- // move old months to a temporary array
- const monthsToReuse = months.splice(0, months.length);
- // generate new first dates, nullify or reuse months
- const firstDates = Array.from({ length: displayMonths }, (_, i) => {
- const firstDate = Object.assign(calendar.getNext(date, 'm', i), { day: 1 });
- months[i] = null;
- if (!force) {
- const reusedIndex = monthsToReuse.findIndex(month => month.firstDate.equals(firstDate));
- // move reused month back to months
- if (reusedIndex !== -1) {
- months[i] = monthsToReuse.splice(reusedIndex, 1)[0];
- }
- }
- return firstDate;
- });
- // rebuild nullified months
- firstDates.forEach((firstDate, i) => {
- if (months[i] === null) {
- months[i] = buildMonth(calendar, firstDate, state, i18n, monthsToReuse.shift() || {});
- }
- });
- return months;
- }
- function buildMonth(calendar, date, state, i18n, month = {}) {
- const { dayTemplateData, minDate, maxDate, firstDayOfWeek, markDisabled, outsideDays } = state;
- const calendarToday = calendar.getToday();
- month.firstDate = null;
- month.lastDate = null;
- month.number = date.month;
- month.year = date.year;
- month.weeks = month.weeks || [];
- month.weekdays = month.weekdays || [];
- date = getFirstViewDate(calendar, date, firstDayOfWeek);
- // month has weeks
- for (let week = 0; week < calendar.getWeeksPerMonth(); week++) {
- let weekObject = month.weeks[week];
- if (!weekObject) {
- weekObject = month.weeks[week] = { number: 0, days: [], collapsed: true };
- }
- const days = weekObject.days;
- // week has days
- for (let day = 0; day < calendar.getDaysPerWeek(); day++) {
- if (week === 0) {
- month.weekdays[day] = calendar.getWeekday(date);
- }
- const newDate = new NgbDate(date.year, date.month, date.day);
- const nextDate = calendar.getNext(newDate);
- const ariaLabel = i18n.getDayAriaLabel(newDate);
- // marking date as disabled
- let disabled = !!((minDate && newDate.before(minDate)) || (maxDate && newDate.after(maxDate)));
- if (!disabled && markDisabled) {
- disabled = markDisabled(newDate, { month: month.number, year: month.year });
- }
- // today
- let today = newDate.equals(calendarToday);
- // adding user-provided data to the context
- let contextUserData = dayTemplateData ? dayTemplateData(newDate, { month: month.number, year: month.year }) : undefined;
- // saving first date of the month
- if (month.firstDate === null && newDate.month === month.number) {
- month.firstDate = newDate;
- }
- // saving last date of the month
- if (newDate.month === month.number && nextDate.month !== month.number) {
- month.lastDate = newDate;
- }
- let dayObject = days[day];
- if (!dayObject) {
- dayObject = days[day] = {};
- }
- dayObject.date = newDate;
- dayObject.context = Object.assign(dayObject.context || {}, {
- $implicit: newDate,
- date: newDate,
- data: contextUserData,
- currentMonth: month.number,
- currentYear: month.year, disabled,
- focused: false,
- selected: false, today
- });
- dayObject.tabindex = -1;
- dayObject.ariaLabel = ariaLabel;
- dayObject.hidden = false;
- date = nextDate;
- }
- weekObject.number = calendar.getWeekNumber(days.map(day => day.date), firstDayOfWeek);
- // marking week as collapsed
- weekObject.collapsed = outsideDays === 'collapsed' && days[0].date.month !== month.number &&
- days[days.length - 1].date.month !== month.number;
- }
- return month;
- }
- function getFirstViewDate(calendar, date, firstDayOfWeek) {
- const daysPerWeek = calendar.getDaysPerWeek();
- const firstMonthDate = new NgbDate(date.year, date.month, 1);
- const dayOfWeek = calendar.getWeekday(firstMonthDate) % daysPerWeek;
- return calendar.getPrev(firstMonthDate, 'd', (daysPerWeek + dayOfWeek - firstDayOfWeek) % daysPerWeek);
- }
- function NGB_DATEPICKER_18N_FACTORY(locale) {
- return new NgbDatepickerI18nDefault(locale);
- }
- /**
- * A service supplying i18n data to the datepicker component.
- *
- * The default implementation of this service uses the Angular locale and registered locale data for
- * weekdays and month names (as explained in the Angular i18n guide).
- *
- * It also provides a way to i18n data that depends on calendar calculations, like aria labels, day, week and year
- * numerals. For other static labels the datepicker uses the default Angular i18n.
- *
- * See the [i18n demo](#/components/datepicker/examples#i18n) and
- * [Hebrew calendar demo](#/components/datepicker/calendars#hebrew) on how to extend this class and define
- * a custom provider for i18n.
- */
- class NgbDatepickerI18n {
- /**
- * Returns the textual representation of a day that is rendered in a day cell.
- *
- * @since 3.0.0
- */
- getDayNumerals(date) { return `${date.day}`; }
- /**
- * Returns the textual representation of a week number rendered by datepicker.
- *
- * @since 3.0.0
- */
- getWeekNumerals(weekNumber) { return `${weekNumber}`; }
- /**
- * Returns the textual representation of a year that is rendered in the datepicker year select box.
- *
- * @since 3.0.0
- */
- getYearNumerals(year) { return `${year}`; }
- }
- NgbDatepickerI18n.ɵfac = function NgbDatepickerI18n_Factory(t) { return new (t || NgbDatepickerI18n)(); };
- NgbDatepickerI18n.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbDatepickerI18n_Factory() { return NGB_DATEPICKER_18N_FACTORY(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"])); }, token: NgbDatepickerI18n, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerI18n, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_18N_FACTORY, deps: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]] }]
- }], null, null); })();
- class NgbDatepickerI18nDefault extends NgbDatepickerI18n {
- constructor(_locale) {
- super();
- this._locale = _locale;
- const weekdaysStartingOnSunday = Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["getLocaleDayNames"])(_locale, _angular_common__WEBPACK_IMPORTED_MODULE_1__["FormStyle"].Standalone, _angular_common__WEBPACK_IMPORTED_MODULE_1__["TranslationWidth"].Short);
- this._weekdaysShort = weekdaysStartingOnSunday.map((day, index) => weekdaysStartingOnSunday[(index + 1) % 7]);
- this._monthsShort = Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["getLocaleMonthNames"])(_locale, _angular_common__WEBPACK_IMPORTED_MODULE_1__["FormStyle"].Standalone, _angular_common__WEBPACK_IMPORTED_MODULE_1__["TranslationWidth"].Abbreviated);
- this._monthsFull = Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["getLocaleMonthNames"])(_locale, _angular_common__WEBPACK_IMPORTED_MODULE_1__["FormStyle"].Standalone, _angular_common__WEBPACK_IMPORTED_MODULE_1__["TranslationWidth"].Wide);
- }
- getWeekdayShortName(weekday) { return this._weekdaysShort[weekday - 1] || ''; }
- getMonthShortName(month) { return this._monthsShort[month - 1] || ''; }
- getMonthFullName(month) { return this._monthsFull[month - 1] || ''; }
- getDayAriaLabel(date) {
- const jsDate = new Date(date.year, date.month - 1, date.day);
- return Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["formatDate"])(jsDate, 'fullDate', this._locale);
- }
- }
- NgbDatepickerI18nDefault.ɵfac = function NgbDatepickerI18nDefault_Factory(t) { return new (t || NgbDatepickerI18nDefault)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"])); };
- NgbDatepickerI18nDefault.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NgbDatepickerI18nDefault, factory: NgbDatepickerI18nDefault.ɵfac });
- NgbDatepickerI18nDefault.ctorParameters = () => [
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerI18nDefault, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
- }] }]; }, null); })();
- class NgbDatepickerService {
- constructor(_calendar, _i18n) {
- this._calendar = _calendar;
- this._i18n = _i18n;
- this._VALIDATORS = {
- dayTemplateData: (dayTemplateData) => {
- if (this._state.dayTemplateData !== dayTemplateData) {
- return { dayTemplateData };
- }
- },
- displayMonths: (displayMonths) => {
- displayMonths = toInteger(displayMonths);
- if (isInteger(displayMonths) && displayMonths > 0 && this._state.displayMonths !== displayMonths) {
- return { displayMonths };
- }
- },
- disabled: (disabled) => {
- if (this._state.disabled !== disabled) {
- return { disabled };
- }
- },
- firstDayOfWeek: (firstDayOfWeek) => {
- firstDayOfWeek = toInteger(firstDayOfWeek);
- if (isInteger(firstDayOfWeek) && firstDayOfWeek >= 0 && this._state.firstDayOfWeek !== firstDayOfWeek) {
- return { firstDayOfWeek };
- }
- },
- focusVisible: (focusVisible) => {
- if (this._state.focusVisible !== focusVisible && !this._state.disabled) {
- return { focusVisible };
- }
- },
- markDisabled: (markDisabled) => {
- if (this._state.markDisabled !== markDisabled) {
- return { markDisabled };
- }
- },
- maxDate: (date) => {
- const maxDate = this.toValidDate(date, null);
- if (isChangedDate(this._state.maxDate, maxDate)) {
- return { maxDate };
- }
- },
- minDate: (date) => {
- const minDate = this.toValidDate(date, null);
- if (isChangedDate(this._state.minDate, minDate)) {
- return { minDate };
- }
- },
- navigation: (navigation) => {
- if (this._state.navigation !== navigation) {
- return { navigation };
- }
- },
- outsideDays: (outsideDays) => {
- if (this._state.outsideDays !== outsideDays) {
- return { outsideDays };
- }
- }
- };
- this._model$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- this._dateSelect$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- this._state = {
- dayTemplateData: null,
- markDisabled: null,
- maxDate: null,
- minDate: null,
- disabled: false,
- displayMonths: 1,
- firstDate: null,
- firstDayOfWeek: 1,
- lastDate: null,
- focusDate: null,
- focusVisible: false,
- months: [],
- navigation: 'select',
- outsideDays: 'visible',
- prevDisabled: false,
- nextDisabled: false,
- selectedDate: null,
- selectBoxes: { years: [], months: [] }
- };
- }
- get model$() { return this._model$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(model => model.months.length > 0)); }
- get dateSelect$() { return this._dateSelect$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(date => date !== null)); }
- set(options) {
- let patch = Object.keys(options)
- .map(key => this._VALIDATORS[key](options[key]))
- .reduce((obj, part) => (Object.assign(Object.assign({}, obj), part)), {});
- if (Object.keys(patch).length > 0) {
- this._nextState(patch);
- }
- }
- focus(date) {
- const focusedDate = this.toValidDate(date, null);
- if (focusedDate != null && !this._state.disabled && isChangedDate(this._state.focusDate, focusedDate)) {
- this._nextState({ focusDate: date });
- }
- }
- focusSelect() {
- if (isDateSelectable(this._state.focusDate, this._state)) {
- this.select(this._state.focusDate, { emitEvent: true });
- }
- }
- open(date) {
- const firstDate = this.toValidDate(date, this._calendar.getToday());
- if (firstDate != null && !this._state.disabled &&
- (!this._state.firstDate || isChangedMonth(this._state.firstDate, firstDate))) {
- this._nextState({ firstDate });
- }
- }
- select(date, options = {}) {
- const selectedDate = this.toValidDate(date, null);
- if (selectedDate != null && !this._state.disabled) {
- if (isChangedDate(this._state.selectedDate, selectedDate)) {
- this._nextState({ selectedDate });
- }
- if (options.emitEvent && isDateSelectable(selectedDate, this._state)) {
- this._dateSelect$.next(selectedDate);
- }
- }
- }
- toValidDate(date, defaultValue) {
- const ngbDate = NgbDate.from(date);
- if (defaultValue === undefined) {
- defaultValue = this._calendar.getToday();
- }
- return this._calendar.isValid(ngbDate) ? ngbDate : defaultValue;
- }
- getMonth(struct) {
- for (let month of this._state.months) {
- if (struct.month === month.number && struct.year === month.year) {
- return month;
- }
- }
- throw new Error(`month ${struct.month} of year ${struct.year} not found`);
- }
- _nextState(patch) {
- const newState = this._updateState(patch);
- this._patchContexts(newState);
- this._state = newState;
- this._model$.next(this._state);
- }
- _patchContexts(state) {
- const { months, displayMonths, selectedDate, focusDate, focusVisible, disabled, outsideDays } = state;
- state.months.forEach(month => {
- month.weeks.forEach(week => {
- week.days.forEach(day => {
- // patch focus flag
- if (focusDate) {
- day.context.focused = focusDate.equals(day.date) && focusVisible;
- }
- // calculating tabindex
- day.tabindex =
- !disabled && focusDate && day.date.equals(focusDate) && focusDate.month === month.number ? 0 : -1;
- // override context disabled
- if (disabled === true) {
- day.context.disabled = true;
- }
- // patch selection flag
- if (selectedDate !== undefined) {
- day.context.selected = selectedDate !== null && selectedDate.equals(day.date);
- }
- // visibility
- if (month.number !== day.date.month) {
- day.hidden = outsideDays === 'hidden' || outsideDays === 'collapsed' ||
- (displayMonths > 1 && day.date.after(months[0].firstDate) &&
- day.date.before(months[displayMonths - 1].lastDate));
- }
- });
- });
- });
- }
- _updateState(patch) {
- // patching fields
- const state = Object.assign({}, this._state, patch);
- let startDate = state.firstDate;
- // min/max dates changed
- if ('minDate' in patch || 'maxDate' in patch) {
- checkMinBeforeMax(state.minDate, state.maxDate);
- state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);
- state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);
- startDate = state.focusDate;
- }
- // disabled
- if ('disabled' in patch) {
- state.focusVisible = false;
- }
- // initial rebuild via 'select()'
- if ('selectedDate' in patch && this._state.months.length === 0) {
- startDate = state.selectedDate;
- }
- // terminate early if only focus visibility was changed
- if ('focusVisible' in patch) {
- return state;
- }
- // focus date changed
- if ('focusDate' in patch) {
- state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);
- startDate = state.focusDate;
- // nothing to rebuild if only focus changed and it is still visible
- if (state.months.length !== 0 && state.focusDate && !state.focusDate.before(state.firstDate) &&
- !state.focusDate.after(state.lastDate)) {
- return state;
- }
- }
- // first date changed
- if ('firstDate' in patch) {
- state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);
- startDate = state.firstDate;
- }
- // rebuilding months
- if (startDate) {
- const forceRebuild = 'dayTemplateData' in patch || 'firstDayOfWeek' in patch || 'markDisabled' in patch ||
- 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch || 'outsideDays' in patch;
- const months = buildMonths(this._calendar, startDate, state, this._i18n, forceRebuild);
- // updating months and boundary dates
- state.months = months;
- state.firstDate = months[0].firstDate;
- state.lastDate = months[months.length - 1].lastDate;
- // reset selected date if 'markDisabled' returns true
- if ('selectedDate' in patch && !isDateSelectable(state.selectedDate, state)) {
- state.selectedDate = null;
- }
- // adjusting focus after months were built
- if ('firstDate' in patch) {
- if (!state.focusDate || state.focusDate.before(state.firstDate) || state.focusDate.after(state.lastDate)) {
- state.focusDate = startDate;
- }
- }
- // adjusting months/years for the select box navigation
- const yearChanged = !this._state.firstDate || this._state.firstDate.year !== state.firstDate.year;
- const monthChanged = !this._state.firstDate || this._state.firstDate.month !== state.firstDate.month;
- if (state.navigation === 'select') {
- // years -> boundaries (min/max were changed)
- if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.years.length === 0 || yearChanged) {
- state.selectBoxes.years = generateSelectBoxYears(state.firstDate, state.minDate, state.maxDate);
- }
- // months -> when current year or boundaries change
- if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.months.length === 0 || yearChanged) {
- state.selectBoxes.months =
- generateSelectBoxMonths(this._calendar, state.firstDate, state.minDate, state.maxDate);
- }
- }
- else {
- state.selectBoxes = { years: [], months: [] };
- }
- // updating navigation arrows -> boundaries change (min/max) or month/year changes
- if ((state.navigation === 'arrows' || state.navigation === 'select') &&
- (monthChanged || yearChanged || 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch)) {
- state.prevDisabled = state.disabled || prevMonthDisabled(this._calendar, state.firstDate, state.minDate);
- state.nextDisabled = state.disabled || nextMonthDisabled(this._calendar, state.lastDate, state.maxDate);
- }
- }
- return state;
- }
- }
- NgbDatepickerService.ɵfac = function NgbDatepickerService_Factory(t) { return new (t || NgbDatepickerService)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbCalendar), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbDatepickerI18n)); };
- NgbDatepickerService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NgbDatepickerService, factory: NgbDatepickerService.ɵfac });
- NgbDatepickerService.ctorParameters = () => [
- { type: NgbCalendar },
- { type: NgbDatepickerI18n }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerService, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: NgbCalendar }, { type: NgbDatepickerI18n }]; }, null); })();
- // clang-format on
- var NavigationEvent;
- (function (NavigationEvent) {
- NavigationEvent[NavigationEvent["PREV"] = 0] = "PREV";
- NavigationEvent[NavigationEvent["NEXT"] = 1] = "NEXT";
- })(NavigationEvent || (NavigationEvent = {}));
- /**
- * A configuration service for the [`NgbDatepicker`](#/components/datepicker/api#NgbDatepicker) component.
- *
- * You can inject this service, typically in your root component, and customize the values of its properties in
- * order to provide default values for all the datepickers used in the application.
- */
- class NgbDatepickerConfig {
- constructor() {
- this.displayMonths = 1;
- this.firstDayOfWeek = 1;
- this.navigation = 'select';
- this.outsideDays = 'visible';
- this.showWeekdays = true;
- this.showWeekNumbers = false;
- }
- }
- NgbDatepickerConfig.ɵfac = function NgbDatepickerConfig_Factory(t) { return new (t || NgbDatepickerConfig)(); };
- NgbDatepickerConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbDatepickerConfig_Factory() { return new NgbDatepickerConfig(); }, token: NgbDatepickerConfig, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return []; }, null); })();
- function NGB_DATEPICKER_DATE_ADAPTER_FACTORY() {
- return new NgbDateStructAdapter();
- }
- /**
- * An abstract service that does the conversion between the internal datepicker `NgbDateStruct` model and
- * any provided user date model `D`, ex. a string, a native date, etc.
- *
- * The adapter is used **only** for conversion when binding datepicker to a form control,
- * ex. `[(ngModel)]="userDateModel"`. Here `userDateModel` can be of any type.
- *
- * The default datepicker implementation assumes we use `NgbDateStruct` as a user model.
- *
- * See the [date format overview](#/components/datepicker/overview#date-model) for more details
- * and the [custom adapter demo](#/components/datepicker/examples#adapter) for an example.
- */
- class NgbDateAdapter {
- }
- NgbDateAdapter.ɵfac = function NgbDateAdapter_Factory(t) { return new (t || NgbDateAdapter)(); };
- NgbDateAdapter.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY, token: NgbDateAdapter, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDateAdapter, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY }]
- }], null, null); })();
- class NgbDateStructAdapter extends NgbDateAdapter {
- /**
- * Converts a NgbDateStruct value into NgbDateStruct value
- */
- fromModel(date) {
- return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ?
- { year: date.year, month: date.month, day: date.day } :
- null;
- }
- /**
- * Converts a NgbDateStruct value into NgbDateStruct value
- */
- toModel(date) {
- return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ?
- { year: date.year, month: date.month, day: date.day } :
- null;
- }
- }
- NgbDateStructAdapter.ɵfac = function NgbDateStructAdapter_Factory(t) { return ɵNgbDateStructAdapter_BaseFactory(t || NgbDateStructAdapter); };
- NgbDateStructAdapter.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NgbDateStructAdapter, factory: NgbDateStructAdapter.ɵfac });
- const ɵNgbDateStructAdapter_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbDateStructAdapter);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDateStructAdapter, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- const NGB_DATEPICKER_VALUE_ACCESSOR = {
- provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbDatepicker),
- multi: true
- };
- /**
- * A directive that marks the content template that customizes the way datepicker months are displayed
- *
- * @since 5.3.0
- */
- class NgbDatepickerContent {
- constructor(templateRef) {
- this.templateRef = templateRef;
- }
- }
- NgbDatepickerContent.ɵfac = function NgbDatepickerContent_Factory(t) { return new (t || NgbDatepickerContent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgbDatepickerContent.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbDatepickerContent, selectors: [["ng-template", "ngbDatepickerContent", ""]] });
- NgbDatepickerContent.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerContent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: 'ng-template[ngbDatepickerContent]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- /**
- * A highly configurable component that helps you with selecting calendar dates.
- *
- * `NgbDatepicker` is meant to be displayed inline on a page or put inside a popup.
- */
- class NgbDatepicker {
- constructor(_service, _calendar, i18n, config, cd, _elementRef, _ngbDateAdapter, _ngZone) {
- this._service = _service;
- this._calendar = _calendar;
- this.i18n = i18n;
- this._elementRef = _elementRef;
- this._ngbDateAdapter = _ngbDateAdapter;
- this._ngZone = _ngZone;
- this._controlValue = null;
- this._destroyed$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- this._publicState = {};
- /**
- * An event emitted right before the navigation happens and displayed month changes.
- *
- * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.
- */
- this.navigate = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An event emitted when user selects a date using keyboard or mouse.
- *
- * The payload of the event is currently selected `NgbDate`.
- *
- * @since 5.2.0
- */
- this.dateSelect = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.onChange = (_) => { };
- this.onTouched = () => { };
- ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate',
- 'maxDate', 'navigation', 'outsideDays', 'showWeekdays', 'showWeekNumbers', 'startDate']
- .forEach(input => this[input] = config[input]);
- _service.dateSelect$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._destroyed$)).subscribe(date => { this.dateSelect.emit(date); });
- _service.model$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._destroyed$)).subscribe(model => {
- const newDate = model.firstDate;
- const oldDate = this.model ? this.model.firstDate : null;
- // update public state
- this._publicState = {
- maxDate: model.maxDate,
- minDate: model.minDate,
- firstDate: model.firstDate,
- lastDate: model.lastDate,
- focusedDate: model.focusDate,
- months: model.months.map(viewModel => viewModel.firstDate)
- };
- let navigationPrevented = false;
- // emitting navigation event if the first month changes
- if (!newDate.equals(oldDate)) {
- this.navigate.emit({
- current: oldDate ? { year: oldDate.year, month: oldDate.month } : null,
- next: { year: newDate.year, month: newDate.month },
- preventDefault: () => navigationPrevented = true
- });
- // can't prevent the very first navigation
- if (navigationPrevented && oldDate !== null) {
- this._service.open(oldDate);
- return;
- }
- }
- const newSelectedDate = model.selectedDate;
- const newFocusedDate = model.focusDate;
- const oldFocusedDate = this.model ? this.model.focusDate : null;
- this.model = model;
- // handling selection change
- if (isChangedDate(newSelectedDate, this._controlValue)) {
- this._controlValue = newSelectedDate;
- this.onTouched();
- this.onChange(this._ngbDateAdapter.toModel(newSelectedDate));
- }
- // handling focus change
- if (isChangedDate(newFocusedDate, oldFocusedDate) && oldFocusedDate && model.focusVisible) {
- this.focus();
- }
- cd.markForCheck();
- });
- }
- /**
- * Returns the readonly public state of the datepicker
- *
- * @since 5.2.0
- */
- get state() { return this._publicState; }
- /**
- * Returns the calendar service used in the specific datepicker instance.
- *
- * @since 5.3.0
- */
- get calendar() { return this._calendar; }
- /**
- * Focuses on given date.
- */
- focusDate(date) { this._service.focus(NgbDate.from(date)); }
- /**
- * Selects focused date.
- */
- focusSelect() { this._service.focusSelect(); }
- focus() {
- this._ngZone.onStable.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(() => {
- const elementToFocus = this._elementRef.nativeElement.querySelector('div.ngb-dp-day[tabindex="0"]');
- if (elementToFocus) {
- elementToFocus.focus();
- }
- });
- }
- /**
- * Navigates to the provided date.
- *
- * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.
- * If nothing or invalid date provided calendar will open current month.
- *
- * Use the `[startDate]` input as an alternative.
- */
- navigateTo(date) {
- this._service.open(NgbDate.from(date ? date.day ? date : Object.assign(Object.assign({}, date), { day: 1 }) : null));
- }
- ngAfterViewInit() {
- this._ngZone.runOutsideAngular(() => {
- const focusIns$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(this._contentEl.nativeElement, 'focusin');
- const focusOuts$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(this._contentEl.nativeElement, 'focusout');
- const { nativeElement } = this._elementRef;
- // we're changing 'focusVisible' only when entering or leaving months view
- // and ignoring all focus events where both 'target' and 'related' target are day cells
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["merge"])(focusIns$, focusOuts$)
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(({ target, relatedTarget }) => !(hasClassName(target, 'ngb-dp-day') && hasClassName(relatedTarget, 'ngb-dp-day') &&
- nativeElement.contains(target) && nativeElement.contains(relatedTarget))), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._destroyed$))
- .subscribe(({ type }) => this._ngZone.run(() => this._service.set({ focusVisible: type === 'focusin' })));
- });
- }
- ngOnDestroy() { this._destroyed$.next(); }
- ngOnInit() {
- if (this.model === undefined) {
- const inputs = {};
- ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate',
- 'outsideDays']
- .forEach(name => inputs[name] = this[name]);
- this._service.set(inputs);
- this.navigateTo(this.startDate);
- }
- if (!this.dayTemplate) {
- this.dayTemplate = this._defaultDayTemplate;
- }
- }
- ngOnChanges(changes) {
- const inputs = {};
- ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate',
- 'outsideDays']
- .filter(name => name in changes)
- .forEach(name => inputs[name] = this[name]);
- this._service.set(inputs);
- if ('startDate' in changes) {
- const { currentValue, previousValue } = changes.startDate;
- if (isChangedMonth(previousValue, currentValue)) {
- this.navigateTo(this.startDate);
- }
- }
- }
- onDateSelect(date) {
- this._service.focus(date);
- this._service.select(date, { emitEvent: true });
- }
- onNavigateDateSelect(date) { this._service.open(date); }
- onNavigateEvent(event) {
- switch (event) {
- case NavigationEvent.PREV:
- this._service.open(this._calendar.getPrev(this.model.firstDate, 'm', 1));
- break;
- case NavigationEvent.NEXT:
- this._service.open(this._calendar.getNext(this.model.firstDate, 'm', 1));
- break;
- }
- }
- registerOnChange(fn) { this.onChange = fn; }
- registerOnTouched(fn) { this.onTouched = fn; }
- setDisabledState(disabled) { this._service.set({ disabled }); }
- writeValue(value) {
- this._controlValue = NgbDate.from(this._ngbDateAdapter.fromModel(value));
- this._service.select(this._controlValue);
- }
- }
- NgbDatepicker.ɵfac = function NgbDatepicker_Factory(t) { return new (t || NgbDatepicker)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerService), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbCalendar), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerI18n), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDateAdapter), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"])); };
- NgbDatepicker.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbDatepicker, selectors: [["ngb-datepicker"]], contentQueries: function NgbDatepicker_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstaticContentQuery"](dirIndex, NgbDatepickerContent, true);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.contentTemplate = _t.first);
- } }, viewQuery: function NgbDatepicker_Query(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstaticViewQuery"](_c12, true);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstaticViewQuery"](_c13, true);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._defaultDayTemplate = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._contentEl = _t.first);
- } }, inputs: { dayTemplate: "dayTemplate", dayTemplateData: "dayTemplateData", displayMonths: "displayMonths", firstDayOfWeek: "firstDayOfWeek", footerTemplate: "footerTemplate", markDisabled: "markDisabled", maxDate: "maxDate", minDate: "minDate", navigation: "navigation", outsideDays: "outsideDays", showWeekdays: "showWeekdays", showWeekNumbers: "showWeekNumbers", startDate: "startDate" }, outputs: { navigate: "navigate", dateSelect: "dateSelect" }, exportAs: ["ngbDatepicker"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([NGB_DATEPICKER_VALUE_ACCESSOR, NgbDatepickerService]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], decls: 10, vars: 5, consts: [["defaultDayTemplate", ""], ["defaultContentTemplate", ""], [1, "ngb-dp-header"], [3, "date", "months", "disabled", "showSelect", "prevDisabled", "nextDisabled", "selectBoxes", "navigate", "select", 4, "ngIf"], [1, "ngb-dp-content"], ["content", ""], [3, "ngTemplateOutlet"], ["ngbDatepickerDayView", "", 3, "date", "currentMonth", "selected", "disabled", "focused"], ["class", "ngb-dp-month", 4, "ngFor", "ngForOf"], [1, "ngb-dp-month"], ["class", "ngb-dp-month-name", 4, "ngIf"], [3, "month"], [1, "ngb-dp-month-name"], [3, "date", "months", "disabled", "showSelect", "prevDisabled", "nextDisabled", "selectBoxes", "navigate", "select"]], template: function NgbDatepicker_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbDatepicker_ng_template_0_Template, 1, 5, "ng-template", null, 0, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbDatepicker_ng_template_2_Template, 1, 1, "ng-template", null, 1, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "div", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](5, NgbDatepicker_ngb_datepicker_navigation_5_Template, 1, 7, "ngb-datepicker-navigation", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "div", 4, 5);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](8, NgbDatepicker_ng_template_8_Template, 0, 0, "ng-template", 6);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](9, NgbDatepicker_ng_template_9_Template, 0, 0, "ng-template", 6);
- } if (rf & 2) {
- const _r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](5);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.navigation !== "none");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("ngb-dp-months", !ctx.contentTemplate);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (ctx.contentTemplate == null ? null : ctx.contentTemplate.templateRef) || _r2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx.footerTemplate);
- } }, directives: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"], NgbDatepickerDayView, _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], NgbDatepickerMonth, NgbDatepickerNavigation]; }, styles: ["ngb-datepicker{border:1px solid #dfdfdf;border-radius:.25rem;display:inline-block}ngb-datepicker-month{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}.ngb-dp-body{z-index:1050}.ngb-dp-header{background-color:#f8f9fa;background-color:var(--light);border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem}.ngb-dp-months{display:-ms-flexbox;display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{background-color:#f8f9fa;background-color:var(--light);font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}"], encapsulation: 2, changeDetection: 0 });
- NgbDatepicker.ctorParameters = () => [
- { type: NgbDatepickerService },
- { type: NgbCalendar },
- { type: NgbDatepickerI18n },
- { type: NgbDatepickerConfig },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: NgbDateAdapter },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }
- ];
- NgbDatepicker.propDecorators = {
- _defaultDayTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"], args: ['defaultDayTemplate', { static: true },] }],
- _contentEl: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"], args: ['content', { static: true },] }],
- contentTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgbDatepickerContent, { static: true },] }],
- dayTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- dayTemplateData: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- displayMonths: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- firstDayOfWeek: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- footerTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- markDisabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- maxDate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- minDate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- navigation: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- outsideDays: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- showWeekdays: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- showWeekNumbers: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- startDate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- navigate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- dateSelect: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepicker, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- exportAs: 'ngbDatepicker',
- selector: 'ngb-datepicker',
- changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- template: `
- <ng-template #defaultDayTemplate let-date="date" let-currentMonth="currentMonth" let-selected="selected"
- let-disabled="disabled" let-focused="focused">
- <div ngbDatepickerDayView
- [date]="date"
- [currentMonth]="currentMonth"
- [selected]="selected"
- [disabled]="disabled"
- [focused]="focused">
- </div>
- </ng-template>
- <ng-template #defaultContentTemplate>
- <div *ngFor="let month of model.months; let i = index;" class="ngb-dp-month">
- <div *ngIf="navigation === 'none' || (displayMonths > 1 && navigation === 'select')" class="ngb-dp-month-name">
- {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}
- </div>
- <ngb-datepicker-month [month]="month.firstDate"></ngb-datepicker-month>
- </div>
- </ng-template>
- <div class="ngb-dp-header">
- <ngb-datepicker-navigation *ngIf="navigation !== 'none'"
- [date]="model.firstDate!"
- [months]="model.months"
- [disabled]="model.disabled"
- [showSelect]="model.navigation === 'select'"
- [prevDisabled]="model.prevDisabled"
- [nextDisabled]="model.nextDisabled"
- [selectBoxes]="model.selectBoxes"
- (navigate)="onNavigateEvent($event)"
- (select)="onNavigateDateSelect($event)">
- </ngb-datepicker-navigation>
- </div>
- <div class="ngb-dp-content" [class.ngb-dp-months]="!contentTemplate" #content>
- <ng-template [ngTemplateOutlet]="contentTemplate?.templateRef || defaultContentTemplate"></ng-template>
- </div>
- <ng-template [ngTemplateOutlet]="footerTemplate"></ng-template>
- `,
- providers: [NGB_DATEPICKER_VALUE_ACCESSOR, NgbDatepickerService],
- styles: ["ngb-datepicker{border:1px solid #dfdfdf;border-radius:.25rem;display:inline-block}ngb-datepicker-month{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}.ngb-dp-body{z-index:1050}.ngb-dp-header{background-color:#f8f9fa;background-color:var(--light);border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem}.ngb-dp-months{display:-ms-flexbox;display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{background-color:#f8f9fa;background-color:var(--light);font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}"]
- }]
- }], function () { return [{ type: NgbDatepickerService }, { type: NgbCalendar }, { type: NgbDatepickerI18n }, { type: NgbDatepickerConfig }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: NgbDateAdapter }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }]; }, { navigate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], dateSelect: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], dayTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], _defaultDayTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
- args: ['defaultDayTemplate', { static: true }]
- }], _contentEl: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
- args: ['content', { static: true }]
- }], contentTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgbDatepickerContent, { static: true }]
- }], dayTemplateData: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], displayMonths: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], firstDayOfWeek: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], footerTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], markDisabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], maxDate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], minDate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], navigation: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], outsideDays: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], showWeekdays: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], showWeekNumbers: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], startDate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- var Key;
- (function (Key) {
- Key[Key["Tab"] = 9] = "Tab";
- Key[Key["Enter"] = 13] = "Enter";
- Key[Key["Escape"] = 27] = "Escape";
- Key[Key["Space"] = 32] = "Space";
- Key[Key["PageUp"] = 33] = "PageUp";
- Key[Key["PageDown"] = 34] = "PageDown";
- Key[Key["End"] = 35] = "End";
- Key[Key["Home"] = 36] = "Home";
- Key[Key["ArrowLeft"] = 37] = "ArrowLeft";
- Key[Key["ArrowUp"] = 38] = "ArrowUp";
- Key[Key["ArrowRight"] = 39] = "ArrowRight";
- Key[Key["ArrowDown"] = 40] = "ArrowDown";
- })(Key || (Key = {}));
- /**
- * A service that represents the keyboard navigation.
- *
- * Default keyboard shortcuts [are documented in the overview](#/components/datepicker/overview#keyboard-shortcuts)
- *
- * @since 5.2.0
- */
- class NgbDatepickerKeyboardService {
- /**
- * Processes a keyboard event.
- */
- processKey(event, datepicker) {
- const { state, calendar } = datepicker;
- // tslint:disable-next-line:deprecation
- switch (event.which) {
- case Key.PageUp:
- datepicker.focusDate(calendar.getPrev(state.focusedDate, event.shiftKey ? 'y' : 'm', 1));
- break;
- case Key.PageDown:
- datepicker.focusDate(calendar.getNext(state.focusedDate, event.shiftKey ? 'y' : 'm', 1));
- break;
- case Key.End:
- datepicker.focusDate(event.shiftKey ? state.maxDate : state.lastDate);
- break;
- case Key.Home:
- datepicker.focusDate(event.shiftKey ? state.minDate : state.firstDate);
- break;
- case Key.ArrowLeft:
- datepicker.focusDate(calendar.getPrev(state.focusedDate, 'd', 1));
- break;
- case Key.ArrowUp:
- datepicker.focusDate(calendar.getPrev(state.focusedDate, 'd', calendar.getDaysPerWeek()));
- break;
- case Key.ArrowRight:
- datepicker.focusDate(calendar.getNext(state.focusedDate, 'd', 1));
- break;
- case Key.ArrowDown:
- datepicker.focusDate(calendar.getNext(state.focusedDate, 'd', calendar.getDaysPerWeek()));
- break;
- case Key.Enter:
- case Key.Space:
- datepicker.focusSelect();
- break;
- default:
- return;
- }
- event.preventDefault();
- event.stopPropagation();
- }
- }
- NgbDatepickerKeyboardService.ɵfac = function NgbDatepickerKeyboardService_Factory(t) { return new (t || NgbDatepickerKeyboardService)(); };
- NgbDatepickerKeyboardService.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbDatepickerKeyboardService_Factory() { return new NgbDatepickerKeyboardService(); }, token: NgbDatepickerKeyboardService, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerKeyboardService, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], null, null); })();
- /**
- * A component that renders one month including all the days, weekdays and week numbers. Can be used inside
- * the `<ng-template ngbDatepickerMonths></ng-template>` when you want to customize months layout.
- *
- * For a usage example, see [custom month layout demo](#/components/datepicker/examples#custommonth)
- *
- * @since 5.3.0
- */
- class NgbDatepickerMonth {
- constructor(i18n, datepicker, _keyboardService, _service) {
- this.i18n = i18n;
- this.datepicker = datepicker;
- this._keyboardService = _keyboardService;
- this._service = _service;
- }
- /**
- * The first date of month to be rendered.
- *
- * This month must one of the months present in the
- * [datepicker state](#/components/datepicker/api#NgbDatepickerState).
- */
- set month(month) {
- this.viewModel = this._service.getMonth(month);
- }
- onKeyDown(event) { this._keyboardService.processKey(event, this.datepicker); }
- doSelect(day) {
- if (!day.context.disabled && !day.hidden) {
- this.datepicker.onDateSelect(day.date);
- }
- }
- }
- NgbDatepickerMonth.ɵfac = function NgbDatepickerMonth_Factory(t) { return new (t || NgbDatepickerMonth)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerI18n), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepicker), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerKeyboardService), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerService)); };
- NgbDatepickerMonth.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbDatepickerMonth, selectors: [["ngb-datepicker-month"]], hostAttrs: ["role", "grid"], hostBindings: function NgbDatepickerMonth_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keydown", function NgbDatepickerMonth_keydown_HostBindingHandler($event) { return ctx.onKeyDown($event); });
- } }, inputs: { month: "month" }, decls: 2, vars: 2, consts: [["class", "ngb-dp-week ngb-dp-weekdays", "role", "row", 4, "ngIf"], ["ngFor", "", 3, "ngForOf"], ["role", "row", 1, "ngb-dp-week", "ngb-dp-weekdays"], ["class", "ngb-dp-weekday ngb-dp-showweek", 4, "ngIf"], ["class", "ngb-dp-weekday small", "role", "columnheader", 4, "ngFor", "ngForOf"], [1, "ngb-dp-weekday", "ngb-dp-showweek"], ["role", "columnheader", 1, "ngb-dp-weekday", "small"], ["class", "ngb-dp-week", "role", "row", 4, "ngIf"], ["role", "row", 1, "ngb-dp-week"], ["class", "ngb-dp-week-number small text-muted", 4, "ngIf"], ["class", "ngb-dp-day", "role", "gridcell", 3, "disabled", "tabindex", "hidden", "ngb-dp-today", "click", 4, "ngFor", "ngForOf"], [1, "ngb-dp-week-number", "small", "text-muted"], ["role", "gridcell", 1, "ngb-dp-day", 3, "tabindex", "click"], [3, "ngIf"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"]], template: function NgbDatepickerMonth_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbDatepickerMonth_div_0_Template, 3, 2, "div", 0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbDatepickerMonth_ng_template_1_Template, 1, 1, "ng-template", 1);
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.datepicker.showWeekdays);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.viewModel.weeks);
- } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]], styles: ["ngb-datepicker-month{display:block}.ngb-dp-week-number,.ngb-dp-weekday{font-style:italic;line-height:2rem;text-align:center}.ngb-dp-weekday{color:#5bc0de;color:var(--info)}.ngb-dp-week{border-radius:.25rem;display:-ms-flexbox;display:flex}.ngb-dp-weekdays{background-color:#f8f9fa;background-color:var(--light);border-bottom:1px solid rgba(0,0,0,.125);border-radius:0}.ngb-dp-day,.ngb-dp-week-number,.ngb-dp-weekday{height:2rem;width:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default;pointer-events:none}.ngb-dp-day[tabindex=\"0\"]{z-index:1}"], encapsulation: 2 });
- NgbDatepickerMonth.ctorParameters = () => [
- { type: NgbDatepickerI18n },
- { type: NgbDatepicker },
- { type: NgbDatepickerKeyboardService },
- { type: NgbDatepickerService }
- ];
- NgbDatepickerMonth.propDecorators = {
- month: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerMonth, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngb-datepicker-month',
- host: { 'role': 'grid', '(keydown)': 'onKeyDown($event)' },
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- template: `
- <div *ngIf="datepicker.showWeekdays" class="ngb-dp-week ngb-dp-weekdays" role="row">
- <div *ngIf="datepicker.showWeekNumbers" class="ngb-dp-weekday ngb-dp-showweek"></div>
- <div *ngFor="let w of viewModel.weekdays" class="ngb-dp-weekday small" role="columnheader">
- {{ i18n.getWeekdayShortName(w) }}
- </div>
- </div>
- <ng-template ngFor let-week [ngForOf]="viewModel.weeks">
- <div *ngIf="!week.collapsed" class="ngb-dp-week" role="row">
- <div *ngIf="datepicker.showWeekNumbers" class="ngb-dp-week-number small text-muted">{{ i18n.getWeekNumerals(week.number) }}</div>
- <div *ngFor="let day of week.days" (click)="doSelect(day); $event.preventDefault()" class="ngb-dp-day" role="gridcell"
- [class.disabled]="day.context.disabled"
- [tabindex]="day.tabindex"
- [class.hidden]="day.hidden"
- [class.ngb-dp-today]="day.context.today"
- [attr.aria-label]="day.ariaLabel">
- <ng-template [ngIf]="!day.hidden">
- <ng-template [ngTemplateOutlet]="datepicker.dayTemplate" [ngTemplateOutletContext]="day.context"></ng-template>
- </ng-template>
- </div>
- </div>
- </ng-template>
- `,
- styles: ["ngb-datepicker-month{display:block}.ngb-dp-week-number,.ngb-dp-weekday{font-style:italic;line-height:2rem;text-align:center}.ngb-dp-weekday{color:#5bc0de;color:var(--info)}.ngb-dp-week{border-radius:.25rem;display:-ms-flexbox;display:flex}.ngb-dp-weekdays{background-color:#f8f9fa;background-color:var(--light);border-bottom:1px solid rgba(0,0,0,.125);border-radius:0}.ngb-dp-day,.ngb-dp-week-number,.ngb-dp-weekday{height:2rem;width:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default;pointer-events:none}.ngb-dp-day[tabindex=\"0\"]{z-index:1}"]
- }]
- }], function () { return [{ type: NgbDatepickerI18n }, { type: NgbDatepicker }, { type: NgbDatepickerKeyboardService }, { type: NgbDatepickerService }]; }, { month: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class NgbDatepickerNavigation {
- constructor(i18n) {
- this.i18n = i18n;
- this.navigation = NavigationEvent;
- this.months = [];
- this.navigate = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.select = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- }
- onClickPrev(event) {
- event.currentTarget.focus();
- this.navigate.emit(this.navigation.PREV);
- }
- onClickNext(event) {
- event.currentTarget.focus();
- this.navigate.emit(this.navigation.NEXT);
- }
- }
- NgbDatepickerNavigation.ɵfac = function NgbDatepickerNavigation_Factory(t) { return new (t || NgbDatepickerNavigation)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerI18n)); };
- NgbDatepickerNavigation.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbDatepickerNavigation, selectors: [["ngb-datepicker-navigation"]], inputs: { months: "months", date: "date", disabled: "disabled", showSelect: "showSelect", prevDisabled: "prevDisabled", nextDisabled: "nextDisabled", selectBoxes: "selectBoxes" }, outputs: { navigate: "navigate", select: "select" }, decls: 8, vars: 4, consts: function () { let i18n_14; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_datepicker_previous_month$$FESM2015_NG_BOOTSTRAP_JS_15 = goog.getMsg("Previous month");
- i18n_14 = MSG_EXTERNAL_ngb_datepicker_previous_month$$FESM2015_NG_BOOTSTRAP_JS_15;
- }
- else {
- i18n_14 = $localize `:@@ngb.datepicker.previous-month␟c3b08b07b5ab98e7cdcf18df39355690ab7d3884␟8586908745456864217:Previous month`;
- } let i18n_16; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_datepicker_previous_month$$FESM2015_NG_BOOTSTRAP_JS_17 = goog.getMsg("Previous month");
- i18n_16 = MSG_EXTERNAL_ngb_datepicker_previous_month$$FESM2015_NG_BOOTSTRAP_JS_17;
- }
- else {
- i18n_16 = $localize `:@@ngb.datepicker.previous-month␟c3b08b07b5ab98e7cdcf18df39355690ab7d3884␟8586908745456864217:Previous month`;
- } let i18n_18; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_datepicker_next_month$$FESM2015_NG_BOOTSTRAP_JS_19 = goog.getMsg("Next month");
- i18n_18 = MSG_EXTERNAL_ngb_datepicker_next_month$$FESM2015_NG_BOOTSTRAP_JS_19;
- }
- else {
- i18n_18 = $localize `:@@ngb.datepicker.next-month␟4bd046985cfe13040d5ef0cd881edce0968a111a␟3628374603023447227:Next month`;
- } let i18n_20; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_datepicker_next_month$$FESM2015_NG_BOOTSTRAP_JS_21 = goog.getMsg("Next month");
- i18n_20 = MSG_EXTERNAL_ngb_datepicker_next_month$$FESM2015_NG_BOOTSTRAP_JS_21;
- }
- else {
- i18n_20 = $localize `:@@ngb.datepicker.next-month␟4bd046985cfe13040d5ef0cd881edce0968a111a␟3628374603023447227:Next month`;
- } return [[1, "ngb-dp-arrow"], ["type", "button", "aria-label", i18n_14, "title", i18n_16, 1, "btn", "btn-link", "ngb-dp-arrow-btn", 3, "disabled", "click"], [1, "ngb-dp-navigation-chevron"], ["class", "ngb-dp-navigation-select", 3, "date", "disabled", "months", "years", "select", 4, "ngIf"], [4, "ngIf"], [1, "ngb-dp-arrow", "right"], ["type", "button", "aria-label", i18n_18, "title", i18n_20, 1, "btn", "btn-link", "ngb-dp-arrow-btn", 3, "disabled", "click"], [1, "ngb-dp-navigation-select", 3, "date", "disabled", "months", "years", "select"], ["ngFor", "", 3, "ngForOf"], ["class", "ngb-dp-arrow", 4, "ngIf"], [1, "ngb-dp-month-name"]]; }, template: function NgbDatepickerNavigation_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "button", 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbDatepickerNavigation_Template_button_click_1_listener($event) { return ctx.onClickPrev($event); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "span", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbDatepickerNavigation_ngb_datepicker_navigation_select_3_Template, 1, 4, "ngb-datepicker-navigation-select", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, NgbDatepickerNavigation_4_Template, 1, 1, undefined, 4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "div", 5);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "button", 6);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbDatepickerNavigation_Template_button_click_6_listener($event) { return ctx.onClickNext($event); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](7, "span", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx.prevDisabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.showSelect);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.showSelect);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx.nextDisabled);
- } }, directives: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], NgbDatepickerNavigationSelect, _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"]]; }, styles: ["ngb-datepicker-navigation{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.ngb-dp-navigation-chevron{-webkit-transform:rotate(-135deg);border-style:solid;border-width:.2em .2em 0 0;display:inline-block;height:.75em;margin-left:.25em;margin-right:.15em;transform:rotate(-135deg);width:.75em}.right .ngb-dp-navigation-chevron{-webkit-transform:rotate(45deg);margin-left:.15em;margin-right:.25em;transform:rotate(45deg)}.ngb-dp-arrow{-ms-flex:1 1 auto;display:-ms-flexbox;display:flex;flex:1 1 auto;height:2rem;margin:0;padding-left:0;padding-right:0;width:2rem}.ngb-dp-arrow.right{-ms-flex-pack:end;justify-content:flex-end}.ngb-dp-arrow-btn{background-color:transparent;border:none;margin:0 .5rem;padding:0 .25rem;z-index:1}.ngb-dp-arrow-btn:focus{outline-style:auto;outline-width:1px}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{-ms-flex:1 1 9rem;display:-ms-flexbox;display:flex;flex:1 1 9rem}"], encapsulation: 2, changeDetection: 0 });
- NgbDatepickerNavigation.ctorParameters = () => [
- { type: NgbDatepickerI18n }
- ];
- NgbDatepickerNavigation.propDecorators = {
- date: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- disabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- months: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- showSelect: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- prevDisabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- nextDisabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- selectBoxes: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- navigate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- select: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerNavigation, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngb-datepicker-navigation',
- changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- template: `
- <div class="ngb-dp-arrow">
- <button type="button" class="btn btn-link ngb-dp-arrow-btn" (click)="onClickPrev($event)" [disabled]="prevDisabled"
- i18n-aria-label="@@ngb.datepicker.previous-month" aria-label="Previous month"
- i18n-title="@@ngb.datepicker.previous-month" title="Previous month">
- <span class="ngb-dp-navigation-chevron"></span>
- </button>
- </div>
- <ngb-datepicker-navigation-select *ngIf="showSelect" class="ngb-dp-navigation-select"
- [date]="date"
- [disabled] = "disabled"
- [months]="selectBoxes.months"
- [years]="selectBoxes.years"
- (select)="select.emit($event)">
- </ngb-datepicker-navigation-select>
- <ng-template *ngIf="!showSelect" ngFor let-month [ngForOf]="months" let-i="index">
- <div class="ngb-dp-arrow" *ngIf="i > 0"></div>
- <div class="ngb-dp-month-name">
- {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}
- </div>
- <div class="ngb-dp-arrow" *ngIf="i !== months.length - 1"></div>
- </ng-template>
- <div class="ngb-dp-arrow right">
- <button type="button" class="btn btn-link ngb-dp-arrow-btn" (click)="onClickNext($event)" [disabled]="nextDisabled"
- i18n-aria-label="@@ngb.datepicker.next-month" aria-label="Next month"
- i18n-title="@@ngb.datepicker.next-month" title="Next month">
- <span class="ngb-dp-navigation-chevron"></span>
- </button>
- </div>
- `,
- styles: ["ngb-datepicker-navigation{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.ngb-dp-navigation-chevron{-webkit-transform:rotate(-135deg);border-style:solid;border-width:.2em .2em 0 0;display:inline-block;height:.75em;margin-left:.25em;margin-right:.15em;transform:rotate(-135deg);width:.75em}.right .ngb-dp-navigation-chevron{-webkit-transform:rotate(45deg);margin-left:.15em;margin-right:.25em;transform:rotate(45deg)}.ngb-dp-arrow{-ms-flex:1 1 auto;display:-ms-flexbox;display:flex;flex:1 1 auto;height:2rem;margin:0;padding-left:0;padding-right:0;width:2rem}.ngb-dp-arrow.right{-ms-flex-pack:end;justify-content:flex-end}.ngb-dp-arrow-btn{background-color:transparent;border:none;margin:0 .5rem;padding:0 .25rem;z-index:1}.ngb-dp-arrow-btn:focus{outline-style:auto;outline-width:1px}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{-ms-flex:1 1 9rem;display:-ms-flexbox;display:flex;flex:1 1 9rem}"]
- }]
- }], function () { return [{ type: NgbDatepickerI18n }]; }, { months: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], navigate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], select: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], date: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], disabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], showSelect: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], prevDisabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], nextDisabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], selectBoxes: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- const isContainedIn = (element, array) => array ? array.some(item => item.contains(element)) : false;
- const ɵ0$2 = isContainedIn;
- const matchesSelectorIfAny = (element, selector) => !selector || closest(element, selector) != null;
- const ɵ1$1 = matchesSelectorIfAny;
- const ɵ2$1 = () => {
- const isIOS = () => /iPad|iPhone|iPod/.test(navigator.userAgent) ||
- (/Macintosh/.test(navigator.userAgent) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2);
- const isAndroid = () => /Android/.test(navigator.userAgent);
- return typeof navigator !== 'undefined' ? !!navigator.userAgent && (isIOS() || isAndroid()) : false;
- };
- // we have to add a more significant delay to avoid re-opening when handling (click) on a toggling element
- // TODO: use proper Angular platform detection when NgbAutoClose becomes a service and we can inject PLATFORM_ID
- const isMobile = (ɵ2$1)();
- // setting 'ngbAutoClose' synchronously on mobile results in immediate popup closing
- // when tapping on the triggering element
- const wrapAsyncForMobile = fn => isMobile ? () => setTimeout(() => fn(), 100) : fn;
- const ɵ3 = wrapAsyncForMobile;
- function ngbAutoClose(zone, document, type, close, closed$, insideElements, ignoreElements, insideSelector) {
- // closing on ESC and outside clicks
- if (type) {
- zone.runOutsideAngular(wrapAsyncForMobile(() => {
- const shouldCloseOnClick = (event) => {
- const element = event.target;
- if (event.button === 2 || isContainedIn(element, ignoreElements)) {
- return false;
- }
- if (type === 'inside') {
- return isContainedIn(element, insideElements) && matchesSelectorIfAny(element, insideSelector);
- }
- else if (type === 'outside') {
- return !isContainedIn(element, insideElements);
- }
- else /* if (type === true) */ {
- return matchesSelectorIfAny(element, insideSelector) || !isContainedIn(element, insideElements);
- }
- };
- const escapes$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(document, 'keydown')
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(closed$),
- // tslint:disable-next-line:deprecation
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(e => e.which === Key.Escape), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(e => e.preventDefault()));
- // we have to pre-calculate 'shouldCloseOnClick' on 'mousedown',
- // because on 'mouseup' DOM nodes might be detached
- const mouseDowns$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(document, 'mousedown').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(shouldCloseOnClick), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(closed$));
- const closeableClicks$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(document, 'mouseup')
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["withLatestFrom"])(mouseDowns$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(([_, shouldClose]) => shouldClose), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["delay"])(0), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(closed$));
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["race"])([
- escapes$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(_ => 0 /* ESCAPE */)), closeableClicks$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(_ => 1 /* CLICK */))
- ]).subscribe((source) => zone.run(() => close(source)));
- }));
- }
- }
- const FOCUSABLE_ELEMENTS_SELECTOR = [
- 'a[href]', 'button:not([disabled])', 'input:not([disabled]):not([type="hidden"])', 'select:not([disabled])',
- 'textarea:not([disabled])', '[contenteditable]', '[tabindex]:not([tabindex="-1"])'
- ].join(', ');
- /**
- * Returns first and last focusable elements inside of a given element based on specific CSS selector
- */
- function getFocusableBoundaryElements(element) {
- const list = Array.from(element.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR))
- .filter(el => el.tabIndex !== -1);
- return [list[0], list[list.length - 1]];
- }
- /**
- * Function that enforces browser focus to be trapped inside a DOM element.
- *
- * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element
- *
- * @param zone Angular zone
- * @param element The element around which focus will be trapped inside
- * @param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners
- * and free internal resources
- * @param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to
- * false)
- */
- const ngbFocusTrap = (zone, element, stopFocusTrap$, refocusOnClick = false) => {
- zone.runOutsideAngular(() => {
- // last focused element
- const lastFocusedElement$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(element, 'focusin').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(stopFocusTrap$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(e => e.target));
- // 'tab' / 'shift+tab' stream
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(element, 'keydown')
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(stopFocusTrap$),
- // tslint:disable:deprecation
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(e => e.which === Key.Tab),
- // tslint:enable:deprecation
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["withLatestFrom"])(lastFocusedElement$))
- .subscribe(([tabEvent, focusedElement]) => {
- const [first, last] = getFocusableBoundaryElements(element);
- if ((focusedElement === first || focusedElement === element) && tabEvent.shiftKey) {
- last.focus();
- tabEvent.preventDefault();
- }
- if (focusedElement === last && !tabEvent.shiftKey) {
- first.focus();
- tabEvent.preventDefault();
- }
- });
- // inside click
- if (refocusOnClick) {
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(element, 'click')
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(stopFocusTrap$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["withLatestFrom"])(lastFocusedElement$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(arr => arr[1]))
- .subscribe(lastFocusedElement => lastFocusedElement.focus());
- }
- });
- };
- // previous version:
- // https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js
- class Positioning {
- getAllStyles(element) { return window.getComputedStyle(element); }
- getStyle(element, prop) { return this.getAllStyles(element)[prop]; }
- isStaticPositioned(element) {
- return (this.getStyle(element, 'position') || 'static') === 'static';
- }
- offsetParent(element) {
- let offsetParentEl = element.offsetParent || document.documentElement;
- while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) {
- offsetParentEl = offsetParentEl.offsetParent;
- }
- return offsetParentEl || document.documentElement;
- }
- position(element, round = true) {
- let elPosition;
- let parentOffset = { width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0 };
- if (this.getStyle(element, 'position') === 'fixed') {
- elPosition = element.getBoundingClientRect();
- elPosition = {
- top: elPosition.top,
- bottom: elPosition.bottom,
- left: elPosition.left,
- right: elPosition.right,
- height: elPosition.height,
- width: elPosition.width
- };
- }
- else {
- const offsetParentEl = this.offsetParent(element);
- elPosition = this.offset(element, false);
- if (offsetParentEl !== document.documentElement) {
- parentOffset = this.offset(offsetParentEl, false);
- }
- parentOffset.top += offsetParentEl.clientTop;
- parentOffset.left += offsetParentEl.clientLeft;
- }
- elPosition.top -= parentOffset.top;
- elPosition.bottom -= parentOffset.top;
- elPosition.left -= parentOffset.left;
- elPosition.right -= parentOffset.left;
- if (round) {
- elPosition.top = Math.round(elPosition.top);
- elPosition.bottom = Math.round(elPosition.bottom);
- elPosition.left = Math.round(elPosition.left);
- elPosition.right = Math.round(elPosition.right);
- }
- return elPosition;
- }
- offset(element, round = true) {
- const elBcr = element.getBoundingClientRect();
- const viewportOffset = {
- top: window.pageYOffset - document.documentElement.clientTop,
- left: window.pageXOffset - document.documentElement.clientLeft
- };
- let elOffset = {
- height: elBcr.height || element.offsetHeight,
- width: elBcr.width || element.offsetWidth,
- top: elBcr.top + viewportOffset.top,
- bottom: elBcr.bottom + viewportOffset.top,
- left: elBcr.left + viewportOffset.left,
- right: elBcr.right + viewportOffset.left
- };
- if (round) {
- elOffset.height = Math.round(elOffset.height);
- elOffset.width = Math.round(elOffset.width);
- elOffset.top = Math.round(elOffset.top);
- elOffset.bottom = Math.round(elOffset.bottom);
- elOffset.left = Math.round(elOffset.left);
- elOffset.right = Math.round(elOffset.right);
- }
- return elOffset;
- }
- /*
- Return false if the element to position is outside the viewport
- */
- positionElements(hostElement, targetElement, placement, appendToBody) {
- const [placementPrimary = 'top', placementSecondary = 'center'] = placement.split('-');
- const hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false);
- const targetElStyles = this.getAllStyles(targetElement);
- const marginTop = parseFloat(targetElStyles.marginTop);
- const marginBottom = parseFloat(targetElStyles.marginBottom);
- const marginLeft = parseFloat(targetElStyles.marginLeft);
- const marginRight = parseFloat(targetElStyles.marginRight);
- let topPosition = 0;
- let leftPosition = 0;
- switch (placementPrimary) {
- case 'top':
- topPosition = (hostElPosition.top - (targetElement.offsetHeight + marginTop + marginBottom));
- break;
- case 'bottom':
- topPosition = (hostElPosition.top + hostElPosition.height);
- break;
- case 'left':
- leftPosition = (hostElPosition.left - (targetElement.offsetWidth + marginLeft + marginRight));
- break;
- case 'right':
- leftPosition = (hostElPosition.left + hostElPosition.width);
- break;
- }
- switch (placementSecondary) {
- case 'top':
- topPosition = hostElPosition.top;
- break;
- case 'bottom':
- topPosition = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight;
- break;
- case 'left':
- leftPosition = hostElPosition.left;
- break;
- case 'right':
- leftPosition = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth;
- break;
- case 'center':
- if (placementPrimary === 'top' || placementPrimary === 'bottom') {
- leftPosition = (hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2);
- }
- else {
- topPosition = (hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2);
- }
- break;
- }
- /// The translate3d/gpu acceleration render a blurry text on chrome, the next line is commented until a browser fix
- // targetElement.style.transform = `translate3d(${Math.round(leftPosition)}px, ${Math.floor(topPosition)}px, 0px)`;
- targetElement.style.transform = `translate(${Math.round(leftPosition)}px, ${Math.round(topPosition)}px)`;
- // Check if the targetElement is inside the viewport
- const targetElBCR = targetElement.getBoundingClientRect();
- const html = document.documentElement;
- const windowHeight = window.innerHeight || html.clientHeight;
- const windowWidth = window.innerWidth || html.clientWidth;
- return targetElBCR.left >= 0 && targetElBCR.top >= 0 && targetElBCR.right <= windowWidth &&
- targetElBCR.bottom <= windowHeight;
- }
- }
- const placementSeparator = /\s+/;
- const positionService = new Positioning();
- /*
- * Accept the placement array and applies the appropriate placement dependent on the viewport.
- * Returns the applied placement.
- * In case of auto placement, placements are selected in order
- * 'top', 'bottom', 'left', 'right',
- * 'top-left', 'top-right',
- * 'bottom-left', 'bottom-right',
- * 'left-top', 'left-bottom',
- * 'right-top', 'right-bottom'.
- * */
- function positionElements(hostElement, targetElement, placement, appendToBody, baseClass) {
- let placementVals = Array.isArray(placement) ? placement : placement.split(placementSeparator);
- const allowedPlacements = [
- 'top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right', 'left-top', 'left-bottom',
- 'right-top', 'right-bottom'
- ];
- const classList = targetElement.classList;
- const addClassesToTarget = (targetPlacement) => {
- const [primary, secondary] = targetPlacement.split('-');
- const classes = [];
- if (baseClass) {
- classes.push(`${baseClass}-${primary}`);
- if (secondary) {
- classes.push(`${baseClass}-${primary}-${secondary}`);
- }
- classes.forEach((classname) => { classList.add(classname); });
- }
- return classes;
- };
- // Remove old placement classes to avoid issues
- if (baseClass) {
- allowedPlacements.forEach((placementToRemove) => { classList.remove(`${baseClass}-${placementToRemove}`); });
- }
- // replace auto placement with other placements
- let hasAuto = placementVals.findIndex(val => val === 'auto');
- if (hasAuto >= 0) {
- allowedPlacements.forEach(function (obj) {
- if (placementVals.find(val => val.search('^' + obj) !== -1) == null) {
- placementVals.splice(hasAuto++, 1, obj);
- }
- });
- }
- // coordinates where to position
- // Required for transform:
- const style = targetElement.style;
- style.position = 'absolute';
- style.top = '0';
- style.left = '0';
- style['will-change'] = 'transform';
- let testPlacement = null;
- let isInViewport = false;
- for (testPlacement of placementVals) {
- let addedClasses = addClassesToTarget(testPlacement);
- if (positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody)) {
- isInViewport = true;
- break;
- }
- // Remove the baseClasses for further calculation
- if (baseClass) {
- addedClasses.forEach((classname) => { classList.remove(classname); });
- }
- }
- if (!isInViewport) {
- // If nothing match, the first placement is the default one
- testPlacement = placementVals[0];
- addClassesToTarget(testPlacement);
- positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody);
- }
- return testPlacement;
- }
- function NGB_DATEPICKER_PARSER_FORMATTER_FACTORY() {
- return new NgbDateISOParserFormatter();
- }
- /**
- * An abstract service for parsing and formatting dates for the
- * [`NgbInputDatepicker`](#/components/datepicker/api#NgbInputDatepicker) directive.
- * Converts between the internal `NgbDateStruct` model presentation and a `string` that is displayed in the
- * input element.
- *
- * When user types something in the input this service attempts to parse it into a `NgbDateStruct` object.
- * And vice versa, when users selects a date in the calendar with the mouse, it must be displayed as a `string`
- * in the input.
- *
- * Default implementation uses the ISO 8601 format, but you can provide another implementation via DI
- * to use an alternative string format or a custom parsing logic.
- *
- * See the [date format overview](#/components/datepicker/overview#date-model) for more details.
- */
- class NgbDateParserFormatter {
- }
- NgbDateParserFormatter.ɵfac = function NgbDateParserFormatter_Factory(t) { return new (t || NgbDateParserFormatter)(); };
- NgbDateParserFormatter.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY, token: NgbDateParserFormatter, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDateParserFormatter, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY }]
- }], null, null); })();
- class NgbDateISOParserFormatter extends NgbDateParserFormatter {
- parse(value) {
- if (value != null) {
- const dateParts = value.trim().split('-');
- if (dateParts.length === 1 && isNumber(dateParts[0])) {
- return { year: toInteger(dateParts[0]), month: null, day: null };
- }
- else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) {
- return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: null };
- }
- else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) {
- return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: toInteger(dateParts[2]) };
- }
- }
- return null;
- }
- format(date) {
- return date ?
- `${date.year}-${isNumber(date.month) ? padNumber(date.month) : ''}-${isNumber(date.day) ? padNumber(date.day) : ''}` :
- '';
- }
- }
- NgbDateISOParserFormatter.ɵfac = function NgbDateISOParserFormatter_Factory(t) { return ɵNgbDateISOParserFormatter_BaseFactory(t || NgbDateISOParserFormatter); };
- NgbDateISOParserFormatter.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NgbDateISOParserFormatter, factory: NgbDateISOParserFormatter.ɵfac });
- const ɵNgbDateISOParserFormatter_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbDateISOParserFormatter);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDateISOParserFormatter, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- /**
- * A configuration service for the [`NgbDatepickerInput`](#/components/datepicker/api#NgbDatepicker) component.
- *
- * You can inject this service, typically in your root component, and customize the values of its properties in
- * order to provide default values for all the datepicker inputs used in the application.
- *
- * @since 5.2.0
- */
- class NgbInputDatepickerConfig extends NgbDatepickerConfig {
- constructor() {
- super(...arguments);
- this.autoClose = true;
- this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];
- this.restoreFocus = true;
- }
- }
- NgbInputDatepickerConfig.ɵfac = function NgbInputDatepickerConfig_Factory(t) { return ɵNgbInputDatepickerConfig_BaseFactory(t || NgbInputDatepickerConfig); };
- NgbInputDatepickerConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbInputDatepickerConfig_Factory() { return new NgbInputDatepickerConfig(); }, token: NgbInputDatepickerConfig, providedIn: "root" });
- const ɵNgbInputDatepickerConfig_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbInputDatepickerConfig);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbInputDatepickerConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], null, null); })();
- const NGB_DATEPICKER_VALUE_ACCESSOR$1 = {
- provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbInputDatepicker),
- multi: true
- };
- const NGB_DATEPICKER_VALIDATOR = {
- provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALIDATORS"],
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbInputDatepicker),
- multi: true
- };
- /**
- * A directive that allows to stick a datepicker popup to an input field.
- *
- * Manages interaction with the input field itself, does value formatting and provides forms integration.
- */
- class NgbInputDatepicker {
- constructor(_parserFormatter, _elRef, _vcRef, _renderer, _cfr, _ngZone, _calendar, _dateAdapter, _document, _changeDetector, config) {
- this._parserFormatter = _parserFormatter;
- this._elRef = _elRef;
- this._vcRef = _vcRef;
- this._renderer = _renderer;
- this._cfr = _cfr;
- this._ngZone = _ngZone;
- this._calendar = _calendar;
- this._dateAdapter = _dateAdapter;
- this._document = _document;
- this._changeDetector = _changeDetector;
- this._cRef = null;
- this._disabled = false;
- this._elWithFocus = null;
- this._model = null;
- /**
- * An event emitted when user selects a date using keyboard or mouse.
- *
- * The payload of the event is currently selected `NgbDate`.
- *
- * @since 1.1.1
- */
- this.dateSelect = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * Event emitted right after the navigation happens and displayed month changes.
- *
- * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.
- */
- this.navigate = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An event fired after closing datepicker window.
- *
- * @since 4.2.0
- */
- this.closed = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this._onChange = (_) => { };
- this._onTouched = () => { };
- this._validatorChange = () => { };
- ['autoClose', 'container', 'positionTarget', 'placement'].forEach(input => this[input] = config[input]);
- this._zoneSubscription = _ngZone.onStable.subscribe(() => this._updatePopupPosition());
- }
- get disabled() {
- return this._disabled;
- }
- set disabled(value) {
- this._disabled = value === '' || (value && value !== 'false');
- if (this.isOpen()) {
- this._cRef.instance.setDisabledState(this._disabled);
- }
- }
- registerOnChange(fn) { this._onChange = fn; }
- registerOnTouched(fn) { this._onTouched = fn; }
- registerOnValidatorChange(fn) { this._validatorChange = fn; }
- setDisabledState(isDisabled) { this.disabled = isDisabled; }
- validate(c) {
- const { value } = c;
- if (value != null) {
- const ngbDate = this._fromDateStruct(this._dateAdapter.fromModel(value));
- if (!ngbDate) {
- return { 'ngbDate': { invalid: value } };
- }
- if (this.minDate && ngbDate.before(NgbDate.from(this.minDate))) {
- return { 'ngbDate': { minDate: { minDate: this.minDate, actual: value } } };
- }
- if (this.maxDate && ngbDate.after(NgbDate.from(this.maxDate))) {
- return { 'ngbDate': { maxDate: { maxDate: this.maxDate, actual: value } } };
- }
- }
- return null;
- }
- writeValue(value) {
- this._model = this._fromDateStruct(this._dateAdapter.fromModel(value));
- this._writeModelValue(this._model);
- }
- manualDateChange(value, updateView = false) {
- const inputValueChanged = value !== this._inputValue;
- if (inputValueChanged) {
- this._inputValue = value;
- this._model = this._fromDateStruct(this._parserFormatter.parse(value));
- }
- if (inputValueChanged || !updateView) {
- this._onChange(this._model ? this._dateAdapter.toModel(this._model) : (value === '' ? null : value));
- }
- if (updateView && this._model) {
- this._writeModelValue(this._model);
- }
- }
- isOpen() { return !!this._cRef; }
- /**
- * Opens the datepicker popup.
- *
- * If the related form control contains a valid date, the corresponding month will be opened.
- */
- open() {
- if (!this.isOpen()) {
- const cf = this._cfr.resolveComponentFactory(NgbDatepicker);
- this._cRef = this._vcRef.createComponent(cf);
- this._applyPopupStyling(this._cRef.location.nativeElement);
- this._applyDatepickerInputs(this._cRef.instance);
- this._subscribeForDatepickerOutputs(this._cRef.instance);
- this._cRef.instance.ngOnInit();
- this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model));
- // date selection event handling
- this._cRef.instance.registerOnChange((selectedDate) => {
- this.writeValue(selectedDate);
- this._onChange(selectedDate);
- this._onTouched();
- });
- this._cRef.changeDetectorRef.detectChanges();
- this._cRef.instance.setDisabledState(this.disabled);
- if (this.container === 'body') {
- this._document.querySelector(this.container).appendChild(this._cRef.location.nativeElement);
- }
- // focus handling
- this._elWithFocus = this._document.activeElement;
- ngbFocusTrap(this._ngZone, this._cRef.location.nativeElement, this.closed, true);
- this._cRef.instance.focus();
- ngbAutoClose(this._ngZone, this._document, this.autoClose, () => this.close(), this.closed, [], [this._elRef.nativeElement, this._cRef.location.nativeElement]);
- }
- }
- /**
- * Closes the datepicker popup.
- */
- close() {
- if (this.isOpen()) {
- this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView));
- this._cRef = null;
- this.closed.emit();
- this._changeDetector.markForCheck();
- // restore focus
- let elementToFocus = this._elWithFocus;
- if (isString(this.restoreFocus)) {
- elementToFocus = this._document.querySelector(this.restoreFocus);
- }
- else if (this.restoreFocus !== undefined) {
- elementToFocus = this.restoreFocus;
- }
- // in IE document.activeElement can contain an object without 'focus()' sometimes
- if (elementToFocus && elementToFocus['focus']) {
- elementToFocus.focus();
- }
- else {
- this._document.body.focus();
- }
- }
- }
- /**
- * Toggles the datepicker popup.
- */
- toggle() {
- if (this.isOpen()) {
- this.close();
- }
- else {
- this.open();
- }
- }
- /**
- * Navigates to the provided date.
- *
- * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.
- * If nothing or invalid date provided calendar will open current month.
- *
- * Use the `[startDate]` input as an alternative.
- */
- navigateTo(date) {
- if (this.isOpen()) {
- this._cRef.instance.navigateTo(date);
- }
- }
- onBlur() { this._onTouched(); }
- onFocus() { this._elWithFocus = this._elRef.nativeElement; }
- ngOnChanges(changes) {
- if (changes['minDate'] || changes['maxDate']) {
- this._validatorChange();
- if (this.isOpen()) {
- if (changes['minDate']) {
- this._cRef.instance.minDate = this.minDate;
- }
- if (changes['maxDate']) {
- this._cRef.instance.maxDate = this.maxDate;
- }
- this._cRef.instance.ngOnChanges(changes);
- }
- }
- }
- ngOnDestroy() {
- this.close();
- this._zoneSubscription.unsubscribe();
- }
- _applyDatepickerInputs(datepickerInstance) {
- ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate',
- 'maxDate', 'navigation', 'outsideDays', 'showNavigation', 'showWeekdays', 'showWeekNumbers']
- .forEach((optionName) => {
- if (this[optionName] !== undefined) {
- datepickerInstance[optionName] = this[optionName];
- }
- });
- datepickerInstance.startDate = this.startDate || this._model;
- }
- _applyPopupStyling(nativeElement) {
- this._renderer.addClass(nativeElement, 'dropdown-menu');
- this._renderer.addClass(nativeElement, 'show');
- if (this.container === 'body') {
- this._renderer.addClass(nativeElement, 'ngb-dp-body');
- }
- }
- _subscribeForDatepickerOutputs(datepickerInstance) {
- datepickerInstance.navigate.subscribe(navigateEvent => this.navigate.emit(navigateEvent));
- datepickerInstance.dateSelect.subscribe(date => {
- this.dateSelect.emit(date);
- if (this.autoClose === true || this.autoClose === 'inside') {
- this.close();
- }
- });
- }
- _writeModelValue(model) {
- const value = this._parserFormatter.format(model);
- this._inputValue = value;
- this._renderer.setProperty(this._elRef.nativeElement, 'value', value);
- if (this.isOpen()) {
- this._cRef.instance.writeValue(this._dateAdapter.toModel(model));
- this._onTouched();
- }
- }
- _fromDateStruct(date) {
- const ngbDate = date ? new NgbDate(date.year, date.month, date.day) : null;
- return this._calendar.isValid(ngbDate) ? ngbDate : null;
- }
- _updatePopupPosition() {
- if (!this._cRef) {
- return;
- }
- let hostElement;
- if (isString(this.positionTarget)) {
- hostElement = this._document.querySelector(this.positionTarget);
- }
- else if (this.positionTarget instanceof HTMLElement) {
- hostElement = this.positionTarget;
- }
- else {
- hostElement = this._elRef.nativeElement;
- }
- if (this.positionTarget && !hostElement) {
- throw new Error('ngbDatepicker could not find element declared in [positionTarget] to position against.');
- }
- positionElements(hostElement, this._cRef.location.nativeElement, this.placement, this.container === 'body');
- }
- }
- NgbInputDatepicker.ɵfac = function NgbInputDatepicker_Factory(t) { return new (t || NgbInputDatepicker)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDateParserFormatter), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbCalendar), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDateAdapter), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbInputDatepickerConfig)); };
- NgbInputDatepicker.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbInputDatepicker, selectors: [["input", "ngbDatepicker", ""]], hostVars: 1, hostBindings: function NgbInputDatepicker_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("input", function NgbInputDatepicker_input_HostBindingHandler($event) { return ctx.manualDateChange($event.target.value); })("change", function NgbInputDatepicker_change_HostBindingHandler($event) { return ctx.manualDateChange($event.target.value, true); })("focus", function NgbInputDatepicker_focus_HostBindingHandler() { return ctx.onFocus(); })("blur", function NgbInputDatepicker_blur_HostBindingHandler() { return ctx.onBlur(); });
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("disabled", ctx.disabled);
- } }, inputs: { disabled: "disabled", autoClose: "autoClose", dayTemplate: "dayTemplate", dayTemplateData: "dayTemplateData", displayMonths: "displayMonths", firstDayOfWeek: "firstDayOfWeek", footerTemplate: "footerTemplate", markDisabled: "markDisabled", minDate: "minDate", maxDate: "maxDate", navigation: "navigation", outsideDays: "outsideDays", placement: "placement", restoreFocus: "restoreFocus", showWeekdays: "showWeekdays", showWeekNumbers: "showWeekNumbers", startDate: "startDate", container: "container", positionTarget: "positionTarget" }, outputs: { dateSelect: "dateSelect", navigate: "navigate", closed: "closed" }, exportAs: ["ngbDatepicker"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([
- NGB_DATEPICKER_VALUE_ACCESSOR$1, NGB_DATEPICKER_VALIDATOR,
- { provide: NgbDatepickerConfig, useExisting: NgbInputDatepickerConfig }
- ]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- NgbInputDatepicker.ctorParameters = () => [
- { type: NgbDateParserFormatter },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] },
- { type: NgbCalendar },
- { type: NgbDateAdapter },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"],] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] },
- { type: NgbInputDatepickerConfig }
- ];
- NgbInputDatepicker.propDecorators = {
- autoClose: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- dayTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- dayTemplateData: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- displayMonths: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- firstDayOfWeek: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- footerTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- markDisabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- minDate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- maxDate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- navigation: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- outsideDays: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- placement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- restoreFocus: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- showWeekdays: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- showWeekNumbers: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- startDate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- container: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- positionTarget: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- dateSelect: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- navigate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- closed: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- disabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbInputDatepicker, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: 'input[ngbDatepicker]',
- exportAs: 'ngbDatepicker',
- host: {
- '(input)': 'manualDateChange($event.target.value)',
- '(change)': 'manualDateChange($event.target.value, true)',
- '(focus)': 'onFocus()',
- '(blur)': 'onBlur()',
- '[disabled]': 'disabled'
- },
- providers: [
- NGB_DATEPICKER_VALUE_ACCESSOR$1, NGB_DATEPICKER_VALIDATOR,
- { provide: NgbDatepickerConfig, useExisting: NgbInputDatepickerConfig }
- ]
- }]
- }], function () { return [{ type: NgbDateParserFormatter }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }, { type: NgbCalendar }, { type: NgbDateAdapter }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }, { type: NgbInputDatepickerConfig }]; }, { dateSelect: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], navigate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], closed: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], disabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], autoClose: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], dayTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], dayTemplateData: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], displayMonths: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], firstDayOfWeek: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], footerTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], markDisabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], minDate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], maxDate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], navigation: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], outsideDays: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], placement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], restoreFocus: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], showWeekdays: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], showWeekNumbers: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], startDate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], container: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], positionTarget: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class NgbDatepickerDayView {
- constructor(i18n) {
- this.i18n = i18n;
- }
- isMuted() { return !this.selected && (this.date.month !== this.currentMonth || this.disabled); }
- }
- NgbDatepickerDayView.ɵfac = function NgbDatepickerDayView_Factory(t) { return new (t || NgbDatepickerDayView)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerI18n)); };
- NgbDatepickerDayView.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbDatepickerDayView, selectors: [["", "ngbDatepickerDayView", ""]], hostAttrs: [1, "btn-light"], hostVars: 10, hostBindings: function NgbDatepickerDayView_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("bg-primary", ctx.selected)("text-white", ctx.selected)("text-muted", ctx.isMuted())("outside", ctx.isMuted())("active", ctx.focused);
- } }, inputs: { currentMonth: "currentMonth", date: "date", disabled: "disabled", focused: "focused", selected: "selected" }, attrs: _c22, decls: 1, vars: 1, template: function NgbDatepickerDayView_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](0);
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx.i18n.getDayNumerals(ctx.date));
- } }, styles: ["[ngbDatepickerDayView]{background:transparent;border-radius:.25rem;height:2rem;line-height:2rem;text-align:center;width:2rem}[ngbDatepickerDayView].outside{opacity:.5}"], encapsulation: 2, changeDetection: 0 });
- NgbDatepickerDayView.ctorParameters = () => [
- { type: NgbDatepickerI18n }
- ];
- NgbDatepickerDayView.propDecorators = {
- currentMonth: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- date: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- disabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- focused: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- selected: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerDayView, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: '[ngbDatepickerDayView]',
- changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- host: {
- 'class': 'btn-light',
- '[class.bg-primary]': 'selected',
- '[class.text-white]': 'selected',
- '[class.text-muted]': 'isMuted()',
- '[class.outside]': 'isMuted()',
- '[class.active]': 'focused'
- },
- template: `{{ i18n.getDayNumerals(date) }}`,
- styles: ["[ngbDatepickerDayView]{background:transparent;border-radius:.25rem;height:2rem;line-height:2rem;text-align:center;width:2rem}[ngbDatepickerDayView].outside{opacity:.5}"]
- }]
- }], function () { return [{ type: NgbDatepickerI18n }]; }, { currentMonth: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], date: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], disabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], focused: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], selected: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class NgbDatepickerNavigationSelect {
- constructor(i18n, _renderer) {
- this.i18n = i18n;
- this._renderer = _renderer;
- this.select = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this._month = -1;
- this._year = -1;
- }
- changeMonth(month) { this.select.emit(new NgbDate(this.date.year, toInteger(month), 1)); }
- changeYear(year) { this.select.emit(new NgbDate(toInteger(year), this.date.month, 1)); }
- ngAfterViewChecked() {
- if (this.date) {
- if (this.date.month !== this._month) {
- this._month = this.date.month;
- this._renderer.setProperty(this.monthSelect.nativeElement, 'value', this._month);
- }
- if (this.date.year !== this._year) {
- this._year = this.date.year;
- this._renderer.setProperty(this.yearSelect.nativeElement, 'value', this._year);
- }
- }
- }
- }
- NgbDatepickerNavigationSelect.ɵfac = function NgbDatepickerNavigationSelect_Factory(t) { return new (t || NgbDatepickerNavigationSelect)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerI18n), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"])); };
- NgbDatepickerNavigationSelect.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbDatepickerNavigationSelect, selectors: [["ngb-datepicker-navigation-select"]], viewQuery: function NgbDatepickerNavigationSelect_Query(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstaticViewQuery"](_c23, true, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstaticViewQuery"](_c24, true, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.monthSelect = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.yearSelect = _t.first);
- } }, inputs: { date: "date", disabled: "disabled", months: "months", years: "years" }, outputs: { select: "select" }, decls: 6, vars: 4, consts: function () { let i18n_25; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_datepicker_select_month$$FESM2015_NG_BOOTSTRAP_JS_26 = goog.getMsg("Select month");
- i18n_25 = MSG_EXTERNAL_ngb_datepicker_select_month$$FESM2015_NG_BOOTSTRAP_JS_26;
- }
- else {
- i18n_25 = $localize `:@@ngb.datepicker.select-month␟1dbc84807f35518112f62e5775d1daebd3d8462b␟2253869508135064750:Select month`;
- } let i18n_27; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_datepicker_select_month$$FESM2015_NG_BOOTSTRAP_JS_28 = goog.getMsg("Select month");
- i18n_27 = MSG_EXTERNAL_ngb_datepicker_select_month$$FESM2015_NG_BOOTSTRAP_JS_28;
- }
- else {
- i18n_27 = $localize `:@@ngb.datepicker.select-month␟1dbc84807f35518112f62e5775d1daebd3d8462b␟2253869508135064750:Select month`;
- } let i18n_29; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_datepicker_select_year$$FESM2015_NG_BOOTSTRAP_JS_30 = goog.getMsg("Select year");
- i18n_29 = MSG_EXTERNAL_ngb_datepicker_select_year$$FESM2015_NG_BOOTSTRAP_JS_30;
- }
- else {
- i18n_29 = $localize `:@@ngb.datepicker.select-year␟8ceb09d002bf0c5d1cac171dfbffe1805d2b3962␟8852264961585484321:Select year`;
- } let i18n_31; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_datepicker_select_year$$FESM2015_NG_BOOTSTRAP_JS_32 = goog.getMsg("Select year");
- i18n_31 = MSG_EXTERNAL_ngb_datepicker_select_year$$FESM2015_NG_BOOTSTRAP_JS_32;
- }
- else {
- i18n_31 = $localize `:@@ngb.datepicker.select-year␟8ceb09d002bf0c5d1cac171dfbffe1805d2b3962␟8852264961585484321:Select year`;
- } return [["aria-label", i18n_25, "title", i18n_27, 1, "custom-select", 3, "disabled", "change"], ["month", ""], [3, "value", 4, "ngFor", "ngForOf"], ["aria-label", i18n_29, "title", i18n_31, 1, "custom-select", 3, "disabled", "change"], ["year", ""], [3, "value"]]; }, template: function NgbDatepickerNavigationSelect_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "select", 0, 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function NgbDatepickerNavigationSelect_Template_select_change_0_listener($event) { return ctx.changeMonth($event.target.value); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbDatepickerNavigationSelect_option_2_Template, 2, 3, "option", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "select", 3, 4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function NgbDatepickerNavigationSelect_Template_select_change_3_listener($event) { return ctx.changeYear($event.target.value); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](5, NgbDatepickerNavigationSelect_option_5_Template, 2, 2, "option", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.months);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.years);
- } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NgSelectOption"], _angular_forms__WEBPACK_IMPORTED_MODULE_4__["ɵangular_packages_forms_forms_x"]], styles: ["ngb-datepicker-navigation-select>.custom-select{-ms-flex:1 1 auto;flex:1 1 auto;font-size:.875rem;height:1.85rem;padding:0 .5rem}ngb-datepicker-navigation-select>.custom-select:focus{z-index:1}ngb-datepicker-navigation-select>.custom-select::-ms-value{background-color:transparent!important}"], encapsulation: 2, changeDetection: 0 });
- NgbDatepickerNavigationSelect.ctorParameters = () => [
- { type: NgbDatepickerI18n },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }
- ];
- NgbDatepickerNavigationSelect.propDecorators = {
- date: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- disabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- months: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- years: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- select: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- monthSelect: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"], args: ['month', { static: true, read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },] }],
- yearSelect: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"], args: ['year', { static: true, read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerNavigationSelect, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngb-datepicker-navigation-select',
- changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- template: `
- <select #month
- [disabled]="disabled"
- class="custom-select"
- i18n-aria-label="@@ngb.datepicker.select-month" aria-label="Select month"
- i18n-title="@@ngb.datepicker.select-month" title="Select month"
- (change)="changeMonth($any($event).target.value)">
- <option *ngFor="let m of months" [attr.aria-label]="i18n.getMonthFullName(m, date?.year)"
- [value]="m">{{ i18n.getMonthShortName(m, date?.year) }}</option>
- </select><select #year
- [disabled]="disabled"
- class="custom-select"
- i18n-aria-label="@@ngb.datepicker.select-year" aria-label="Select year"
- i18n-title="@@ngb.datepicker.select-year" title="Select year"
- (change)="changeYear($any($event).target.value)">
- <option *ngFor="let y of years" [value]="y">{{ i18n.getYearNumerals(y) }}</option>
- </select>
- `,
- styles: ["ngb-datepicker-navigation-select>.custom-select{-ms-flex:1 1 auto;flex:1 1 auto;font-size:.875rem;height:1.85rem;padding:0 .5rem}ngb-datepicker-navigation-select>.custom-select:focus{z-index:1}ngb-datepicker-navigation-select>.custom-select::-ms-value{background-color:transparent!important}"]
- }]
- }], function () { return [{ type: NgbDatepickerI18n }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }]; }, { select: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], date: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], disabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], months: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], years: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], monthSelect: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
- args: ['month', { static: true, read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]
- }], yearSelect: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
- args: ['year', { static: true, read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]
- }] }); })();
- class NgbCalendarHijri extends NgbCalendar {
- getDaysPerWeek() { return 7; }
- getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }
- getWeeksPerMonth() { return 6; }
- getNext(date, period = 'd', number = 1) {
- date = new NgbDate(date.year, date.month, date.day);
- switch (period) {
- case 'y':
- date = this._setYear(date, date.year + number);
- date.month = 1;
- date.day = 1;
- return date;
- case 'm':
- date = this._setMonth(date, date.month + number);
- date.day = 1;
- return date;
- case 'd':
- return this._setDay(date, date.day + number);
- default:
- return date;
- }
- }
- getPrev(date, period = 'd', number = 1) { return this.getNext(date, period, -number); }
- getWeekday(date) {
- const day = this.toGregorian(date).getDay();
- // in JS Date Sun=0, in ISO 8601 Sun=7
- return day === 0 ? 7 : day;
- }
- getWeekNumber(week, firstDayOfWeek) {
- // in JS Date Sun=0, in ISO 8601 Sun=7
- if (firstDayOfWeek === 7) {
- firstDayOfWeek = 0;
- }
- const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;
- const date = week[thursdayIndex];
- const jsDate = this.toGregorian(date);
- jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday
- const time = jsDate.getTime();
- const MuhDate = this.toGregorian(new NgbDate(date.year, 1, 1)); // Compare with Muharram 1
- return Math.floor(Math.round((time - MuhDate.getTime()) / 86400000) / 7) + 1;
- }
- getToday() { return this.fromGregorian(new Date()); }
- isValid(date) {
- return date != null && isNumber(date.year) && isNumber(date.month) && isNumber(date.day) &&
- !isNaN(this.toGregorian(date).getTime());
- }
- _setDay(date, day) {
- day = +day;
- let mDays = this.getDaysPerMonth(date.month, date.year);
- if (day <= 0) {
- while (day <= 0) {
- date = this._setMonth(date, date.month - 1);
- mDays = this.getDaysPerMonth(date.month, date.year);
- day += mDays;
- }
- }
- else if (day > mDays) {
- while (day > mDays) {
- day -= mDays;
- date = this._setMonth(date, date.month + 1);
- mDays = this.getDaysPerMonth(date.month, date.year);
- }
- }
- date.day = day;
- return date;
- }
- _setMonth(date, month) {
- month = +month;
- date.year = date.year + Math.floor((month - 1) / 12);
- date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1;
- return date;
- }
- _setYear(date, year) {
- date.year = +year;
- return date;
- }
- }
- NgbCalendarHijri.ɵfac = function NgbCalendarHijri_Factory(t) { return ɵNgbCalendarHijri_BaseFactory(t || NgbCalendarHijri); };
- NgbCalendarHijri.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NgbCalendarHijri, factory: NgbCalendarHijri.ɵfac });
- const ɵNgbCalendarHijri_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbCalendarHijri);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCalendarHijri, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- /**
- * Checks if islamic year is a leap year
- */
- function isIslamicLeapYear(hYear) {
- return (14 + 11 * hYear) % 30 < 11;
- }
- /**
- * Checks if gregorian years is a leap year
- */
- function isGregorianLeapYear(gDate) {
- const year = gDate.getFullYear();
- return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
- }
- /**
- * Returns the start of Hijri Month.
- * `hMonth` is 0 for Muharram, 1 for Safar, etc.
- * `hYear` is any Hijri hYear.
- */
- function getIslamicMonthStart(hYear, hMonth) {
- return Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30.0);
- }
- /**
- * Returns the start of Hijri year.
- * `year` is any Hijri year.
- */
- function getIslamicYearStart(year) {
- return (year - 1) * 354 + Math.floor((3 + 11 * year) / 30.0);
- }
- function mod(a, b) {
- return a - b * Math.floor(a / b);
- }
- /**
- * The civil calendar is one type of Hijri calendars used in islamic countries.
- * Uses a fixed cycle of alternating 29- and 30-day months,
- * with a leap day added to the last month of 11 out of every 30 years.
- * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types
- * All the calculations here are based on the equations from "Calendrical Calculations" By Edward M. Reingold, Nachum
- * Dershowitz.
- */
- const GREGORIAN_EPOCH = 1721425.5;
- const ISLAMIC_EPOCH = 1948439.5;
- class NgbCalendarIslamicCivil extends NgbCalendarHijri {
- /**
- * Returns the equivalent islamic(civil) date value for a give input Gregorian date.
- * `gDate` is a JS Date to be converted to Hijri.
- */
- fromGregorian(gDate) {
- const gYear = gDate.getFullYear(), gMonth = gDate.getMonth(), gDay = gDate.getDate();
- let julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) +
- -Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) +
- Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gDate) ? -1 : -2) + gDay);
- julianDay = Math.floor(julianDay) + 0.5;
- const days = julianDay - ISLAMIC_EPOCH;
- const hYear = Math.floor((30 * days + 10646) / 10631.0);
- let hMonth = Math.ceil((days - 29 - getIslamicYearStart(hYear)) / 29.5);
- hMonth = Math.min(hMonth, 11);
- const hDay = Math.ceil(days - getIslamicMonthStart(hYear, hMonth)) + 1;
- return new NgbDate(hYear, hMonth + 1, hDay);
- }
- /**
- * Returns the equivalent JS date value for a give input islamic(civil) date.
- * `hDate` is an islamic(civil) date to be converted to Gregorian.
- */
- toGregorian(hDate) {
- const hYear = hDate.year;
- const hMonth = hDate.month - 1;
- const hDay = hDate.day;
- const julianDay = hDay + Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30) + ISLAMIC_EPOCH - 1;
- const wjd = Math.floor(julianDay - 0.5) + 0.5, depoch = wjd - GREGORIAN_EPOCH, quadricent = Math.floor(depoch / 146097), dqc = mod(depoch, 146097), cent = Math.floor(dqc / 36524), dcent = mod(dqc, 36524), quad = Math.floor(dcent / 1461), dquad = mod(dcent, 1461), yindex = Math.floor(dquad / 365);
- let year = quadricent * 400 + cent * 100 + quad * 4 + yindex;
- if (!(cent === 4 || yindex === 4)) {
- year++;
- }
- const gYearStart = GREGORIAN_EPOCH + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) +
- Math.floor((year - 1) / 400);
- const yearday = wjd - gYearStart;
- const tjd = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) +
- Math.floor((year - 1) / 400) + Math.floor(739 / 12 + (isGregorianLeapYear(new Date(year, 3, 1)) ? -1 : -2) + 1);
- const leapadj = wjd < tjd ? 0 : isGregorianLeapYear(new Date(year, 3, 1)) ? 1 : 2;
- const month = Math.floor(((yearday + leapadj) * 12 + 373) / 367);
- const tjd2 = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) +
- Math.floor((year - 1) / 400) +
- Math.floor((367 * month - 362) / 12 + (month <= 2 ? 0 : isGregorianLeapYear(new Date(year, month - 1, 1)) ? -1 : -2) +
- 1);
- const day = wjd - tjd2 + 1;
- return new Date(year, month - 1, day);
- }
- /**
- * Returns the number of days in a specific Hijri month.
- * `month` is 1 for Muharram, 2 for Safar, etc.
- * `year` is any Hijri year.
- */
- getDaysPerMonth(month, year) {
- year = year + Math.floor(month / 13);
- month = ((month - 1) % 12) + 1;
- let length = 29 + month % 2;
- if (month === 12 && isIslamicLeapYear(year)) {
- length++;
- }
- return length;
- }
- }
- NgbCalendarIslamicCivil.ɵfac = function NgbCalendarIslamicCivil_Factory(t) { return ɵNgbCalendarIslamicCivil_BaseFactory(t || NgbCalendarIslamicCivil); };
- NgbCalendarIslamicCivil.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NgbCalendarIslamicCivil, factory: NgbCalendarIslamicCivil.ɵfac });
- const ɵNgbCalendarIslamicCivil_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbCalendarIslamicCivil);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCalendarIslamicCivil, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- /**
- * Umalqura calendar is one type of Hijri calendars used in islamic countries.
- * This Calendar is used by Saudi Arabia for administrative purpose.
- * Unlike tabular calendars, the algorithm involves astronomical calculation, but it's still deterministic.
- * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types
- */
- const GREGORIAN_FIRST_DATE = new Date(1882, 10, 12);
- const GREGORIAN_LAST_DATE = new Date(2174, 10, 25);
- const HIJRI_BEGIN = 1300;
- const HIJRI_END = 1600;
- const ONE_DAY = 1000 * 60 * 60 * 24;
- const MONTH_LENGTH = [
- // 1300-1304
- '101010101010', '110101010100', '111011001001', '011011010100', '011011101010',
- // 1305-1309
- '001101101100', '101010101101', '010101010101', '011010101001', '011110010010',
- // 1310-1314
- '101110101001', '010111010100', '101011011010', '010101011100', '110100101101',
- // 1315-1319
- '011010010101', '011101001010', '101101010100', '101101101010', '010110101101',
- // 1320-1324
- '010010101110', '101001001111', '010100010111', '011010001011', '011010100101',
- // 1325-1329
- '101011010101', '001011010110', '100101011011', '010010011101', '101001001101',
- // 1330-1334
- '110100100110', '110110010101', '010110101100', '100110110110', '001010111010',
- // 1335-1339
- '101001011011', '010100101011', '101010010101', '011011001010', '101011101001',
- // 1340-1344
- '001011110100', '100101110110', '001010110110', '100101010110', '101011001010',
- // 1345-1349
- '101110100100', '101111010010', '010111011001', '001011011100', '100101101101',
- // 1350-1354
- '010101001101', '101010100101', '101101010010', '101110100101', '010110110100',
- // 1355-1359
- '100110110110', '010101010111', '001010010111', '010101001011', '011010100011',
- // 1360-1364
- '011101010010', '101101100101', '010101101010', '101010101011', '010100101011',
- // 1365-1369
- '110010010101', '110101001010', '110110100101', '010111001010', '101011010110',
- // 1370-1374
- '100101010111', '010010101011', '100101001011', '101010100101', '101101010010',
- // 1375-1379
- '101101101010', '010101110101', '001001110110', '100010110111', '010001011011',
- // 1380-1384
- '010101010101', '010110101001', '010110110100', '100111011010', '010011011101',
- // 1385-1389
- '001001101110', '100100110110', '101010101010', '110101010100', '110110110010',
- // 1390-1394
- '010111010101', '001011011010', '100101011011', '010010101011', '101001010101',
- // 1395-1399
- '101101001001', '101101100100', '101101110001', '010110110100', '101010110101',
- // 1400-1404
- '101001010101', '110100100101', '111010010010', '111011001001', '011011010100',
- // 1405-1409
- '101011101001', '100101101011', '010010101011', '101010010011', '110101001001',
- // 1410-1414
- '110110100100', '110110110010', '101010111001', '010010111010', '101001011011',
- // 1415-1419
- '010100101011', '101010010101', '101100101010', '101101010101', '010101011100',
- // 1420-1424
- '010010111101', '001000111101', '100100011101', '101010010101', '101101001010',
- // 1425-1429
- '101101011010', '010101101101', '001010110110', '100100111011', '010010011011',
- // 1430-1434
- '011001010101', '011010101001', '011101010100', '101101101010', '010101101100',
- // 1435-1439
- '101010101101', '010101010101', '101100101001', '101110010010', '101110101001',
- // 1440-1444
- '010111010100', '101011011010', '010101011010', '101010101011', '010110010101',
- // 1445-1449
- '011101001001', '011101100100', '101110101010', '010110110101', '001010110110',
- // 1450-1454
- '101001010110', '111001001101', '101100100101', '101101010010', '101101101010',
- // 1455-1459
- '010110101101', '001010101110', '100100101111', '010010010111', '011001001011',
- // 1460-1464
- '011010100101', '011010101100', '101011010110', '010101011101', '010010011101',
- // 1465-1469
- '101001001101', '110100010110', '110110010101', '010110101010', '010110110101',
- // 1470-1474
- '001011011010', '100101011011', '010010101101', '010110010101', '011011001010',
- // 1475-1479
- '011011100100', '101011101010', '010011110101', '001010110110', '100101010110',
- // 1480-1484
- '101010101010', '101101010100', '101111010010', '010111011001', '001011101010',
- // 1485-1489
- '100101101101', '010010101101', '101010010101', '101101001010', '101110100101',
- // 1490-1494
- '010110110010', '100110110101', '010011010110', '101010010111', '010101000111',
- // 1495-1499
- '011010010011', '011101001001', '101101010101', '010101101010', '101001101011',
- // 1500-1504
- '010100101011', '101010001011', '110101000110', '110110100011', '010111001010',
- // 1505-1509
- '101011010110', '010011011011', '001001101011', '100101001011', '101010100101',
- // 1510-1514
- '101101010010', '101101101001', '010101110101', '000101110110', '100010110111',
- // 1515-1519
- '001001011011', '010100101011', '010101100101', '010110110100', '100111011010',
- // 1520-1524
- '010011101101', '000101101101', '100010110110', '101010100110', '110101010010',
- // 1525-1529
- '110110101001', '010111010100', '101011011010', '100101011011', '010010101011',
- // 1530-1534
- '011001010011', '011100101001', '011101100010', '101110101001', '010110110010',
- // 1535-1539
- '101010110101', '010101010101', '101100100101', '110110010010', '111011001001',
- // 1540-1544
- '011011010010', '101011101001', '010101101011', '010010101011', '101001010101',
- // 1545-1549
- '110100101001', '110101010100', '110110101010', '100110110101', '010010111010',
- // 1550-1554
- '101000111011', '010010011011', '101001001101', '101010101010', '101011010101',
- // 1555-1559
- '001011011010', '100101011101', '010001011110', '101000101110', '110010011010',
- // 1560-1564
- '110101010101', '011010110010', '011010111001', '010010111010', '101001011101',
- // 1565-1569
- '010100101101', '101010010101', '101101010010', '101110101000', '101110110100',
- // 1570-1574
- '010110111001', '001011011010', '100101011010', '101101001010', '110110100100',
- // 1575-1579
- '111011010001', '011011101000', '101101101010', '010101101101', '010100110101',
- // 1580-1584
- '011010010101', '110101001010', '110110101000', '110111010100', '011011011010',
- // 1585-1589
- '010101011011', '001010011101', '011000101011', '101100010101', '101101001010',
- // 1590-1594
- '101110010101', '010110101010', '101010101110', '100100101110', '110010001111',
- // 1595-1599
- '010100100111', '011010010101', '011010101010', '101011010110', '010101011101',
- // 1600
- '001010011101'
- ];
- function getDaysDiff(date1, date2) {
- // Ignores the time part in date1 and date2:
- const time1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate());
- const time2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate());
- const diff = Math.abs(time1 - time2);
- return Math.round(diff / ONE_DAY);
- }
- class NgbCalendarIslamicUmalqura extends NgbCalendarIslamicCivil {
- /**
- * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date.
- * `gdate` is s JS Date to be converted to Hijri.
- */
- fromGregorian(gDate) {
- let hDay = 1, hMonth = 0, hYear = 1300;
- let daysDiff = getDaysDiff(gDate, GREGORIAN_FIRST_DATE);
- if (gDate.getTime() - GREGORIAN_FIRST_DATE.getTime() >= 0 && gDate.getTime() - GREGORIAN_LAST_DATE.getTime() <= 0) {
- let year = 1300;
- for (let i = 0; i < MONTH_LENGTH.length; i++, year++) {
- for (let j = 0; j < 12; j++) {
- let numOfDays = +MONTH_LENGTH[i][j] + 29;
- if (daysDiff <= numOfDays) {
- hDay = daysDiff + 1;
- if (hDay > numOfDays) {
- hDay = 1;
- j++;
- }
- if (j > 11) {
- j = 0;
- year++;
- }
- hMonth = j;
- hYear = year;
- return new NgbDate(hYear, hMonth + 1, hDay);
- }
- daysDiff = daysDiff - numOfDays;
- }
- }
- return null;
- }
- else {
- return super.fromGregorian(gDate);
- }
- }
- /**
- * Converts the current Hijri date to Gregorian.
- */
- toGregorian(hDate) {
- const hYear = hDate.year;
- const hMonth = hDate.month - 1;
- const hDay = hDate.day;
- let gDate = new Date(GREGORIAN_FIRST_DATE);
- let dayDiff = hDay - 1;
- if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {
- for (let y = 0; y < hYear - HIJRI_BEGIN; y++) {
- for (let m = 0; m < 12; m++) {
- dayDiff += +MONTH_LENGTH[y][m] + 29;
- }
- }
- for (let m = 0; m < hMonth; m++) {
- dayDiff += +MONTH_LENGTH[hYear - HIJRI_BEGIN][m] + 29;
- }
- gDate.setDate(GREGORIAN_FIRST_DATE.getDate() + dayDiff);
- }
- else {
- gDate = super.toGregorian(hDate);
- }
- return gDate;
- }
- /**
- * Returns the number of days in a specific Hijri hMonth.
- * `hMonth` is 1 for Muharram, 2 for Safar, etc.
- * `hYear` is any Hijri hYear.
- */
- getDaysPerMonth(hMonth, hYear) {
- if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {
- const pos = hYear - HIJRI_BEGIN;
- return +MONTH_LENGTH[pos][hMonth - 1] + 29;
- }
- return super.getDaysPerMonth(hMonth, hYear);
- }
- }
- NgbCalendarIslamicUmalqura.ɵfac = function NgbCalendarIslamicUmalqura_Factory(t) { return ɵNgbCalendarIslamicUmalqura_BaseFactory(t || NgbCalendarIslamicUmalqura); };
- NgbCalendarIslamicUmalqura.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NgbCalendarIslamicUmalqura, factory: NgbCalendarIslamicUmalqura.ɵfac });
- const ɵNgbCalendarIslamicUmalqura_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbCalendarIslamicUmalqura);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCalendarIslamicUmalqura, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- /**
- * Returns the equivalent JS date value for a give input Jalali date.
- * `jalaliDate` is an Jalali date to be converted to Gregorian.
- */
- function toGregorian(jalaliDate) {
- let jdn = jalaliToJulian(jalaliDate.year, jalaliDate.month, jalaliDate.day);
- let date = julianToGregorian(jdn);
- date.setHours(6, 30, 3, 200);
- return date;
- }
- /**
- * Returns the equivalent jalali date value for a give input Gregorian date.
- * `gdate` is a JS Date to be converted to jalali.
- * utc to local
- */
- function fromGregorian(gdate) {
- let g2d = gregorianToJulian(gdate.getFullYear(), gdate.getMonth() + 1, gdate.getDate());
- return julianToJalali(g2d);
- }
- function setJalaliYear(date, yearValue) {
- date.year = +yearValue;
- return date;
- }
- function setJalaliMonth(date, month) {
- month = +month;
- date.year = date.year + Math.floor((month - 1) / 12);
- date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1;
- return date;
- }
- function setJalaliDay(date, day) {
- let mDays = getDaysPerMonth(date.month, date.year);
- if (day <= 0) {
- while (day <= 0) {
- date = setJalaliMonth(date, date.month - 1);
- mDays = getDaysPerMonth(date.month, date.year);
- day += mDays;
- }
- }
- else if (day > mDays) {
- while (day > mDays) {
- day -= mDays;
- date = setJalaliMonth(date, date.month + 1);
- mDays = getDaysPerMonth(date.month, date.year);
- }
- }
- date.day = day;
- return date;
- }
- function mod$1(a, b) {
- return a - b * Math.floor(a / b);
- }
- function div(a, b) {
- return Math.trunc(a / b);
- }
- /*
- This function determines if the Jalali (Persian) year is
- leap (366-day long) or is the common year (365 days), and
- finds the day in March (Gregorian calendar) of the first
- day of the Jalali year (jalaliYear).
- @param jalaliYear Jalali calendar year (-61 to 3177)
- @return
- leap: number of years since the last leap year (0 to 4)
- gYear: Gregorian year of the beginning of Jalali year
- march: the March day of Farvardin the 1st (1st day of jalaliYear)
- @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm
- @see: http://www.fourmilab.ch/documents/calendar/
- */
- function jalCal(jalaliYear) {
- // Jalali years starting the 33-year rule.
- let breaks = [-61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178];
- const breaksLength = breaks.length;
- const gYear = jalaliYear + 621;
- let leapJ = -14;
- let jp = breaks[0];
- if (jalaliYear < jp || jalaliYear >= breaks[breaksLength - 1]) {
- throw new Error('Invalid Jalali year ' + jalaliYear);
- }
- // Find the limiting years for the Jalali year jalaliYear.
- let jump;
- for (let i = 1; i < breaksLength; i += 1) {
- const jm = breaks[i];
- jump = jm - jp;
- if (jalaliYear < jm) {
- break;
- }
- leapJ = leapJ + div(jump, 33) * 8 + div(mod$1(jump, 33), 4);
- jp = jm;
- }
- let n = jalaliYear - jp;
- // Find the number of leap years from AD 621 to the beginning
- // of the current Jalali year in the Persian calendar.
- leapJ = leapJ + div(n, 33) * 8 + div(mod$1(n, 33) + 3, 4);
- if (mod$1(jump, 33) === 4 && jump - n === 4) {
- leapJ += 1;
- }
- // And the same in the Gregorian calendar (until the year gYear).
- const leapG = div(gYear, 4) - div((div(gYear, 100) + 1) * 3, 4) - 150;
- // Determine the Gregorian date of Farvardin the 1st.
- const march = 20 + leapJ - leapG;
- // Find how many years have passed since the last leap year.
- if (jump - n < 6) {
- n = n - jump + div(jump + 4, 33) * 33;
- }
- let leap = mod$1(mod$1(n + 1, 33) - 1, 4);
- if (leap === -1) {
- leap = 4;
- }
- return { leap: leap, gy: gYear, march: march };
- }
- /*
- Calculates Gregorian and Julian calendar dates from the Julian Day number
- (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both
- calendars) to some millions years ahead of the present.
- @param jdn Julian Day number
- @return
- gYear: Calendar year (years BC numbered 0, -1, -2, ...)
- gMonth: Calendar month (1 to 12)
- gDay: Calendar day of the month M (1 to 28/29/30/31)
- */
- function julianToGregorian(julianDayNumber) {
- let j = 4 * julianDayNumber + 139361631;
- j = j + div(div(4 * julianDayNumber + 183187720, 146097) * 3, 4) * 4 - 3908;
- const i = div(mod$1(j, 1461), 4) * 5 + 308;
- const gDay = div(mod$1(i, 153), 5) + 1;
- const gMonth = mod$1(div(i, 153), 12) + 1;
- const gYear = div(j, 1461) - 100100 + div(8 - gMonth, 6);
- return new Date(gYear, gMonth - 1, gDay);
- }
- /*
- Converts a date of the Jalali calendar to the Julian Day number.
- @param jy Jalali year (1 to 3100)
- @param jm Jalali month (1 to 12)
- @param jd Jalali day (1 to 29/31)
- @return Julian Day number
- */
- function gregorianToJulian(gy, gm, gd) {
- let d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + div(153 * mod$1(gm + 9, 12) + 2, 5) + gd - 34840408;
- d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752;
- return d;
- }
- /*
- Converts the Julian Day number to a date in the Jalali calendar.
- @param julianDayNumber Julian Day number
- @return
- jalaliYear: Jalali year (1 to 3100)
- jalaliMonth: Jalali month (1 to 12)
- jalaliDay: Jalali day (1 to 29/31)
- */
- function julianToJalali(julianDayNumber) {
- let gy = julianToGregorian(julianDayNumber).getFullYear() // Calculate Gregorian year (gy).
- , jalaliYear = gy - 621, r = jalCal(jalaliYear), gregorianDay = gregorianToJulian(gy, 3, r.march), jalaliDay, jalaliMonth, numberOfDays;
- // Find number of days that passed since 1 Farvardin.
- numberOfDays = julianDayNumber - gregorianDay;
- if (numberOfDays >= 0) {
- if (numberOfDays <= 185) {
- // The first 6 months.
- jalaliMonth = 1 + div(numberOfDays, 31);
- jalaliDay = mod$1(numberOfDays, 31) + 1;
- return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);
- }
- else {
- // The remaining months.
- numberOfDays -= 186;
- }
- }
- else {
- // Previous Jalali year.
- jalaliYear -= 1;
- numberOfDays += 179;
- if (r.leap === 1) {
- numberOfDays += 1;
- }
- }
- jalaliMonth = 7 + div(numberOfDays, 30);
- jalaliDay = mod$1(numberOfDays, 30) + 1;
- return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);
- }
- /*
- Converts a date of the Jalali calendar to the Julian Day number.
- @param jYear Jalali year (1 to 3100)
- @param jMonth Jalali month (1 to 12)
- @param jDay Jalali day (1 to 29/31)
- @return Julian Day number
- */
- function jalaliToJulian(jYear, jMonth, jDay) {
- let r = jalCal(jYear);
- return gregorianToJulian(r.gy, 3, r.march) + (jMonth - 1) * 31 - div(jMonth, 7) * (jMonth - 7) + jDay - 1;
- }
- /**
- * Returns the number of days in a specific jalali month.
- */
- function getDaysPerMonth(month, year) {
- if (month <= 6) {
- return 31;
- }
- if (month <= 11) {
- return 30;
- }
- if (jalCal(year).leap === 0) {
- return 30;
- }
- return 29;
- }
- class NgbCalendarPersian extends NgbCalendar {
- getDaysPerWeek() { return 7; }
- getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }
- getWeeksPerMonth() { return 6; }
- getNext(date, period = 'd', number = 1) {
- date = new NgbDate(date.year, date.month, date.day);
- switch (period) {
- case 'y':
- date = setJalaliYear(date, date.year + number);
- date.month = 1;
- date.day = 1;
- return date;
- case 'm':
- date = setJalaliMonth(date, date.month + number);
- date.day = 1;
- return date;
- case 'd':
- return setJalaliDay(date, date.day + number);
- default:
- return date;
- }
- }
- getPrev(date, period = 'd', number = 1) { return this.getNext(date, period, -number); }
- getWeekday(date) {
- const day = toGregorian(date).getDay();
- // in JS Date Sun=0, in ISO 8601 Sun=7
- return day === 0 ? 7 : day;
- }
- getWeekNumber(week, firstDayOfWeek) {
- // in JS Date Sun=0, in ISO 8601 Sun=7
- if (firstDayOfWeek === 7) {
- firstDayOfWeek = 0;
- }
- const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;
- const date = week[thursdayIndex];
- const jsDate = toGregorian(date);
- jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday
- const time = jsDate.getTime();
- const startDate = toGregorian(new NgbDate(date.year, 1, 1));
- return Math.floor(Math.round((time - startDate.getTime()) / 86400000) / 7) + 1;
- }
- getToday() { return fromGregorian(new Date()); }
- isValid(date) {
- return date != null && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) &&
- !isNaN(toGregorian(date).getTime());
- }
- }
- NgbCalendarPersian.ɵfac = function NgbCalendarPersian_Factory(t) { return ɵNgbCalendarPersian_BaseFactory(t || NgbCalendarPersian); };
- NgbCalendarPersian.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NgbCalendarPersian, factory: NgbCalendarPersian.ɵfac });
- const ɵNgbCalendarPersian_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbCalendarPersian);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCalendarPersian, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- const PARTS_PER_HOUR = 1080;
- const PARTS_PER_DAY = 24 * PARTS_PER_HOUR;
- const PARTS_FRACTIONAL_MONTH = 12 * PARTS_PER_HOUR + 793;
- const PARTS_PER_MONTH = 29 * PARTS_PER_DAY + PARTS_FRACTIONAL_MONTH;
- const BAHARAD = 11 * PARTS_PER_HOUR + 204;
- const HEBREW_DAY_ON_JAN_1_1970 = 2092591;
- const GREGORIAN_EPOCH$1 = 1721425.5;
- function isGregorianLeapYear$1(year) {
- return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
- }
- function numberOfFirstDayInYear(year) {
- let monthsBeforeYear = Math.floor((235 * year - 234) / 19);
- let fractionalMonthsBeforeYear = monthsBeforeYear * PARTS_FRACTIONAL_MONTH + BAHARAD;
- let dayNumber = monthsBeforeYear * 29 + Math.floor(fractionalMonthsBeforeYear / PARTS_PER_DAY);
- let timeOfDay = fractionalMonthsBeforeYear % PARTS_PER_DAY;
- let dayOfWeek = dayNumber % 7; // 0 == Monday
- if (dayOfWeek === 2 || dayOfWeek === 4 || dayOfWeek === 6) {
- dayNumber++;
- dayOfWeek = dayNumber % 7;
- }
- if (dayOfWeek === 1 && timeOfDay > 15 * PARTS_PER_HOUR + 204 && !isHebrewLeapYear(year)) {
- dayNumber += 2;
- }
- else if (dayOfWeek === 0 && timeOfDay > 21 * PARTS_PER_HOUR + 589 && isHebrewLeapYear(year - 1)) {
- dayNumber++;
- }
- return dayNumber;
- }
- function getDaysInGregorianMonth(month, year) {
- let days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
- if (isGregorianLeapYear$1(year)) {
- days[1]++;
- }
- return days[month - 1];
- }
- function getHebrewMonths(year) {
- return isHebrewLeapYear(year) ? 13 : 12;
- }
- /**
- * Returns the number of days in a specific Hebrew year.
- * `year` is any Hebrew year.
- */
- function getDaysInHebrewYear(year) {
- return numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);
- }
- function isHebrewLeapYear(year) {
- if (year != null) {
- let b = (year * 12 + 17) % 19;
- return b >= ((b < 0) ? -7 : 12);
- }
- return false;
- }
- /**
- * Returns the number of days in a specific Hebrew month.
- * `month` is 1 for Nisan, 2 for Iyar etc. Note: Hebrew leap year contains 13 months.
- * `year` is any Hebrew year.
- */
- function getDaysInHebrewMonth(month, year) {
- let yearLength = numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);
- let yearType = (yearLength <= 380 ? yearLength : (yearLength - 30)) - 353;
- let leapYear = isHebrewLeapYear(year);
- let daysInMonth = leapYear ? [30, 29, 29, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29] :
- [30, 29, 29, 29, 30, 29, 30, 29, 30, 29, 30, 29];
- if (yearType > 0) {
- daysInMonth[2]++; // Kislev gets an extra day in normal or complete years.
- }
- if (yearType > 1) {
- daysInMonth[1]++; // Heshvan gets an extra day in complete years only.
- }
- return daysInMonth[month - 1];
- }
- function getDayNumberInHebrewYear(date) {
- let numberOfDay = 0;
- for (let i = 1; i < date.month; i++) {
- numberOfDay += getDaysInHebrewMonth(i, date.year);
- }
- return numberOfDay + date.day;
- }
- function setHebrewMonth(date, val) {
- let after = val >= 0;
- if (!after) {
- val = -val;
- }
- while (val > 0) {
- if (after) {
- if (val > getHebrewMonths(date.year) - date.month) {
- val -= getHebrewMonths(date.year) - date.month + 1;
- date.year++;
- date.month = 1;
- }
- else {
- date.month += val;
- val = 0;
- }
- }
- else {
- if (val >= date.month) {
- date.year--;
- val -= date.month;
- date.month = getHebrewMonths(date.year);
- }
- else {
- date.month -= val;
- val = 0;
- }
- }
- }
- return date;
- }
- function setHebrewDay(date, val) {
- let after = val >= 0;
- if (!after) {
- val = -val;
- }
- while (val > 0) {
- if (after) {
- if (val > getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date)) {
- val -= getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date) + 1;
- date.year++;
- date.month = 1;
- date.day = 1;
- }
- else if (val > getDaysInHebrewMonth(date.month, date.year) - date.day) {
- val -= getDaysInHebrewMonth(date.month, date.year) - date.day + 1;
- date.month++;
- date.day = 1;
- }
- else {
- date.day += val;
- val = 0;
- }
- }
- else {
- if (val >= date.day) {
- val -= date.day;
- date.month--;
- if (date.month === 0) {
- date.year--;
- date.month = getHebrewMonths(date.year);
- }
- date.day = getDaysInHebrewMonth(date.month, date.year);
- }
- else {
- date.day -= val;
- val = 0;
- }
- }
- }
- return date;
- }
- /**
- * Returns the equivalent Hebrew date value for a give input Gregorian date.
- * `gdate` is a JS Date to be converted to Hebrew date.
- */
- function fromGregorian$1(gdate) {
- const date = new Date(gdate);
- const gYear = date.getFullYear(), gMonth = date.getMonth(), gDay = date.getDate();
- let julianDay = GREGORIAN_EPOCH$1 - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) -
- Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) +
- Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear$1(gYear) ? -1 : -2) + gDay);
- julianDay = Math.floor(julianDay + 0.5);
- let daysSinceHebEpoch = julianDay - 347997;
- let monthsSinceHebEpoch = Math.floor(daysSinceHebEpoch * PARTS_PER_DAY / PARTS_PER_MONTH);
- let hYear = Math.floor((monthsSinceHebEpoch * 19 + 234) / 235) + 1;
- let firstDayOfThisYear = numberOfFirstDayInYear(hYear);
- let dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;
- while (dayOfYear < 1) {
- hYear--;
- firstDayOfThisYear = numberOfFirstDayInYear(hYear);
- dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;
- }
- let hMonth = 1;
- let hDay = dayOfYear;
- while (hDay > getDaysInHebrewMonth(hMonth, hYear)) {
- hDay -= getDaysInHebrewMonth(hMonth, hYear);
- hMonth++;
- }
- return new NgbDate(hYear, hMonth, hDay);
- }
- /**
- * Returns the equivalent JS date value for a given Hebrew date.
- * `hebrewDate` is an Hebrew date to be converted to Gregorian.
- */
- function toGregorian$1(hebrewDate) {
- const hYear = hebrewDate.year;
- const hMonth = hebrewDate.month;
- const hDay = hebrewDate.day;
- let days = numberOfFirstDayInYear(hYear);
- for (let i = 1; i < hMonth; i++) {
- days += getDaysInHebrewMonth(i, hYear);
- }
- days += hDay;
- let diffDays = days - HEBREW_DAY_ON_JAN_1_1970;
- let after = diffDays >= 0;
- if (!after) {
- diffDays = -diffDays;
- }
- let gYear = 1970;
- let gMonth = 1;
- let gDay = 1;
- while (diffDays > 0) {
- if (after) {
- if (diffDays >= (isGregorianLeapYear$1(gYear) ? 366 : 365)) {
- diffDays -= isGregorianLeapYear$1(gYear) ? 366 : 365;
- gYear++;
- }
- else if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {
- diffDays -= getDaysInGregorianMonth(gMonth, gYear);
- gMonth++;
- }
- else {
- gDay += diffDays;
- diffDays = 0;
- }
- }
- else {
- if (diffDays >= (isGregorianLeapYear$1(gYear - 1) ? 366 : 365)) {
- diffDays -= isGregorianLeapYear$1(gYear - 1) ? 366 : 365;
- gYear--;
- }
- else {
- if (gMonth > 1) {
- gMonth--;
- }
- else {
- gMonth = 12;
- gYear--;
- }
- if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {
- diffDays -= getDaysInGregorianMonth(gMonth, gYear);
- }
- else {
- gDay = getDaysInGregorianMonth(gMonth, gYear) - diffDays + 1;
- diffDays = 0;
- }
- }
- }
- }
- return new Date(gYear, gMonth - 1, gDay);
- }
- function hebrewNumerals(numerals) {
- if (!numerals) {
- return '';
- }
- const hArray0_9 = ['', '\u05d0', '\u05d1', '\u05d2', '\u05d3', '\u05d4', '\u05d5', '\u05d6', '\u05d7', '\u05d8'];
- const hArray10_19 = [
- '\u05d9', '\u05d9\u05d0', '\u05d9\u05d1', '\u05d9\u05d2', '\u05d9\u05d3', '\u05d8\u05d5', '\u05d8\u05d6',
- '\u05d9\u05d6', '\u05d9\u05d7', '\u05d9\u05d8'
- ];
- const hArray20_90 = ['', '', '\u05db', '\u05dc', '\u05de', '\u05e0', '\u05e1', '\u05e2', '\u05e4', '\u05e6'];
- const hArray100_900 = [
- '', '\u05e7', '\u05e8', '\u05e9', '\u05ea', '\u05ea\u05e7', '\u05ea\u05e8', '\u05ea\u05e9', '\u05ea\u05ea',
- '\u05ea\u05ea\u05e7'
- ];
- const hArray1000_9000 = [
- '', '\u05d0', '\u05d1', '\u05d1\u05d0', '\u05d1\u05d1', '\u05d4', '\u05d4\u05d0', '\u05d4\u05d1',
- '\u05d4\u05d1\u05d0', '\u05d4\u05d1\u05d1'
- ];
- const geresh = '\u05f3', gershaim = '\u05f4';
- let mem = 0;
- let result = [];
- let step = 0;
- while (numerals > 0) {
- let m = numerals % 10;
- if (step === 0) {
- mem = m;
- }
- else if (step === 1) {
- if (m !== 1) {
- result.unshift(hArray20_90[m], hArray0_9[mem]);
- }
- else {
- result.unshift(hArray10_19[mem]);
- }
- }
- else if (step === 2) {
- result.unshift(hArray100_900[m]);
- }
- else {
- if (m !== 5) {
- result.unshift(hArray1000_9000[m], geresh, ' ');
- }
- break;
- }
- numerals = Math.floor(numerals / 10);
- if (step === 0 && numerals === 0) {
- result.unshift(hArray0_9[m]);
- }
- step++;
- }
- result = result.join('').split('');
- if (result.length === 1) {
- result.push(geresh);
- }
- else if (result.length > 1) {
- result.splice(result.length - 1, 0, gershaim);
- }
- return result.join('');
- }
- /**
- * @since 3.2.0
- */
- class NgbCalendarHebrew extends NgbCalendar {
- getDaysPerWeek() { return 7; }
- getMonths(year) {
- if (year && isHebrewLeapYear(year)) {
- return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
- }
- else {
- return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
- }
- }
- getWeeksPerMonth() { return 6; }
- isValid(date) {
- if (date != null) {
- let b = isNumber(date.year) && isNumber(date.month) && isNumber(date.day);
- b = b && date.month > 0 && date.month <= (isHebrewLeapYear(date.year) ? 13 : 12);
- b = b && date.day > 0 && date.day <= getDaysInHebrewMonth(date.month, date.year);
- return b && !isNaN(toGregorian$1(date).getTime());
- }
- return false;
- }
- getNext(date, period = 'd', number = 1) {
- date = new NgbDate(date.year, date.month, date.day);
- switch (period) {
- case 'y':
- date.year += number;
- date.month = 1;
- date.day = 1;
- return date;
- case 'm':
- date = setHebrewMonth(date, number);
- date.day = 1;
- return date;
- case 'd':
- return setHebrewDay(date, number);
- default:
- return date;
- }
- }
- getPrev(date, period = 'd', number = 1) { return this.getNext(date, period, -number); }
- getWeekday(date) {
- const day = toGregorian$1(date).getDay();
- // in JS Date Sun=0, in ISO 8601 Sun=7
- return day === 0 ? 7 : day;
- }
- getWeekNumber(week, firstDayOfWeek) {
- const date = week[week.length - 1];
- return Math.ceil(getDayNumberInHebrewYear(date) / 7);
- }
- getToday() { return fromGregorian$1(new Date()); }
- /**
- * @since 3.4.0
- */
- toGregorian(date) { return fromJSDate(toGregorian$1(date)); }
- /**
- * @since 3.4.0
- */
- fromGregorian(date) { return fromGregorian$1(toJSDate(date)); }
- }
- NgbCalendarHebrew.ɵfac = function NgbCalendarHebrew_Factory(t) { return ɵNgbCalendarHebrew_BaseFactory(t || NgbCalendarHebrew); };
- NgbCalendarHebrew.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NgbCalendarHebrew, factory: NgbCalendarHebrew.ɵfac });
- const ɵNgbCalendarHebrew_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbCalendarHebrew);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCalendarHebrew, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- const WEEKDAYS = ['שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת', 'ראשון'];
- const MONTHS = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'];
- const MONTHS_LEAP = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר א׳', 'אדר ב׳', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'];
- /**
- * @since 3.2.0
- */
- class NgbDatepickerI18nHebrew extends NgbDatepickerI18n {
- getMonthShortName(month, year) { return this.getMonthFullName(month, year); }
- getMonthFullName(month, year) {
- return isHebrewLeapYear(year) ? MONTHS_LEAP[month - 1] || '' : MONTHS[month - 1] || '';
- }
- getWeekdayShortName(weekday) { return WEEKDAYS[weekday - 1] || ''; }
- getDayAriaLabel(date) {
- return `${hebrewNumerals(date.day)} ${this.getMonthFullName(date.month, date.year)} ${hebrewNumerals(date.year)}`;
- }
- getDayNumerals(date) { return hebrewNumerals(date.day); }
- getWeekNumerals(weekNumber) { return hebrewNumerals(weekNumber); }
- getYearNumerals(year) { return hebrewNumerals(year); }
- }
- NgbDatepickerI18nHebrew.ɵfac = function NgbDatepickerI18nHebrew_Factory(t) { return ɵNgbDatepickerI18nHebrew_BaseFactory(t || NgbDatepickerI18nHebrew); };
- NgbDatepickerI18nHebrew.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NgbDatepickerI18nHebrew, factory: NgbDatepickerI18nHebrew.ɵfac });
- const ɵNgbDatepickerI18nHebrew_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbDatepickerI18nHebrew);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerI18nHebrew, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- /**
- * [`NgbDateAdapter`](#/components/datepicker/api#NgbDateAdapter) implementation that uses
- * native javascript dates as a user date model.
- */
- class NgbDateNativeAdapter extends NgbDateAdapter {
- /**
- * Converts a native `Date` to a `NgbDateStruct`.
- */
- fromModel(date) {
- return (date instanceof Date && !isNaN(date.getTime())) ? this._fromNativeDate(date) : null;
- }
- /**
- * Converts a `NgbDateStruct` to a native `Date`.
- */
- toModel(date) {
- return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? this._toNativeDate(date) :
- null;
- }
- _fromNativeDate(date) {
- return { year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate() };
- }
- _toNativeDate(date) {
- const jsDate = new Date(date.year, date.month - 1, date.day, 12);
- // avoid 30 -> 1930 conversion
- jsDate.setFullYear(date.year);
- return jsDate;
- }
- }
- NgbDateNativeAdapter.ɵfac = function NgbDateNativeAdapter_Factory(t) { return ɵNgbDateNativeAdapter_BaseFactory(t || NgbDateNativeAdapter); };
- NgbDateNativeAdapter.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NgbDateNativeAdapter, factory: NgbDateNativeAdapter.ɵfac });
- const ɵNgbDateNativeAdapter_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbDateNativeAdapter);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDateNativeAdapter, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- /**
- * Same as [`NgbDateNativeAdapter`](#/components/datepicker/api#NgbDateNativeAdapter), but with UTC dates.
- *
- * @since 3.2.0
- */
- class NgbDateNativeUTCAdapter extends NgbDateNativeAdapter {
- _fromNativeDate(date) {
- return { year: date.getUTCFullYear(), month: date.getUTCMonth() + 1, day: date.getUTCDate() };
- }
- _toNativeDate(date) {
- const jsDate = new Date(Date.UTC(date.year, date.month - 1, date.day));
- // avoid 30 -> 1930 conversion
- jsDate.setUTCFullYear(date.year);
- return jsDate;
- }
- }
- NgbDateNativeUTCAdapter.ɵfac = function NgbDateNativeUTCAdapter_Factory(t) { return ɵNgbDateNativeUTCAdapter_BaseFactory(t || NgbDateNativeUTCAdapter); };
- NgbDateNativeUTCAdapter.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NgbDateNativeUTCAdapter, factory: NgbDateNativeUTCAdapter.ɵfac });
- const ɵNgbDateNativeUTCAdapter_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbDateNativeUTCAdapter);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDateNativeUTCAdapter, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- class NgbDatepickerModule {
- }
- NgbDatepickerModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbDatepickerModule });
- NgbDatepickerModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbDatepickerModule_Factory(t) { return new (t || NgbDatepickerModule)(); }, imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_4__["FormsModule"]]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbDatepickerModule, { declarations: function () { return [NgbDatepicker, NgbDatepickerContent, NgbDatepickerMonth, NgbDatepickerNavigation, NgbDatepickerNavigationSelect, NgbDatepickerDayView, NgbInputDatepicker]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_4__["FormsModule"]]; }, exports: function () { return [NgbDatepicker, NgbDatepickerContent, NgbInputDatepicker, NgbDatepickerMonth]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- declarations: [
- NgbDatepicker, NgbDatepickerContent, NgbDatepickerMonth, NgbDatepickerNavigation, NgbDatepickerNavigationSelect,
- NgbDatepickerDayView, NgbInputDatepicker
- ],
- exports: [NgbDatepicker, NgbDatepickerContent, NgbInputDatepicker, NgbDatepickerMonth],
- imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_4__["FormsModule"]],
- entryComponents: [NgbDatepicker]
- }]
- }], null, null); })();
- /**
- * A configuration service for the [`NgbDropdown`](#/components/dropdown/api#NgbDropdown) component.
- *
- * You can inject this service, typically in your root component, and customize the values of its properties in
- * order to provide default values for all the dropdowns used in the application.
- */
- class NgbDropdownConfig {
- constructor() {
- this.autoClose = true;
- this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];
- }
- }
- NgbDropdownConfig.ɵfac = function NgbDropdownConfig_Factory(t) { return new (t || NgbDropdownConfig)(); };
- NgbDropdownConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbDropdownConfig_Factory() { return new NgbDropdownConfig(); }, token: NgbDropdownConfig, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDropdownConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return []; }, null); })();
- class NgbNavbar {
- }
- NgbNavbar.ɵfac = function NgbNavbar_Factory(t) { return new (t || NgbNavbar)(); };
- NgbNavbar.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbNavbar, selectors: [["", 8, "navbar"]] });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNavbar, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '.navbar' }]
- }], null, null); })();
- /**
- * A directive you should put on a dropdown item to enable keyboard navigation.
- * Arrow keys will move focus between items marked with this directive.
- *
- * @since 4.1.0
- */
- class NgbDropdownItem {
- constructor(elementRef) {
- this.elementRef = elementRef;
- this._disabled = false;
- }
- set disabled(value) {
- this._disabled = value === '' || value === true; // accept an empty attribute as true
- }
- get disabled() { return this._disabled; }
- }
- NgbDropdownItem.ɵfac = function NgbDropdownItem_Factory(t) { return new (t || NgbDropdownItem)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- NgbDropdownItem.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbDropdownItem, selectors: [["", "ngbDropdownItem", ""]], hostAttrs: [1, "dropdown-item"], hostVars: 2, hostBindings: function NgbDropdownItem_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", ctx.disabled);
- } }, inputs: { disabled: "disabled" } });
- NgbDropdownItem.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- NgbDropdownItem.propDecorators = {
- disabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDropdownItem, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngbDropdownItem]', host: { 'class': 'dropdown-item', '[class.disabled]': 'disabled' } }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, { disabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * A directive that wraps dropdown menu content and dropdown items.
- */
- class NgbDropdownMenu {
- constructor(dropdown, _elementRef) {
- this.dropdown = dropdown;
- this.placement = 'bottom';
- this.isOpen = false;
- this.nativeElement = _elementRef.nativeElement;
- }
- }
- NgbDropdownMenu.ɵfac = function NgbDropdownMenu_Factory(t) { return new (t || NgbDropdownMenu)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbDropdown)), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- NgbDropdownMenu.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbDropdownMenu, selectors: [["", "ngbDropdownMenu", ""]], contentQueries: function NgbDropdownMenu_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbDropdownItem, false);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.menuItems = _t);
- } }, hostVars: 5, hostBindings: function NgbDropdownMenu_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keydown.ArrowUp", function NgbDropdownMenu_keydown_ArrowUp_HostBindingHandler($event) { return ctx.dropdown.onKeyDown($event); })("keydown.ArrowDown", function NgbDropdownMenu_keydown_ArrowDown_HostBindingHandler($event) { return ctx.dropdown.onKeyDown($event); })("keydown.Home", function NgbDropdownMenu_keydown_Home_HostBindingHandler($event) { return ctx.dropdown.onKeyDown($event); })("keydown.End", function NgbDropdownMenu_keydown_End_HostBindingHandler($event) { return ctx.dropdown.onKeyDown($event); })("keydown.Enter", function NgbDropdownMenu_keydown_Enter_HostBindingHandler($event) { return ctx.dropdown.onKeyDown($event); })("keydown.Space", function NgbDropdownMenu_keydown_Space_HostBindingHandler($event) { return ctx.dropdown.onKeyDown($event); })("keydown.Tab", function NgbDropdownMenu_keydown_Tab_HostBindingHandler($event) { return ctx.dropdown.onKeyDown($event); })("keydown.Shift.Tab", function NgbDropdownMenu_keydown_Shift_Tab_HostBindingHandler($event) { return ctx.dropdown.onKeyDown($event); });
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("x-placement", ctx.placement);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("dropdown-menu", true)("show", ctx.dropdown.isOpen());
- } } });
- NgbDropdownMenu.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbDropdown),] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- NgbDropdownMenu.propDecorators = {
- menuItems: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"], args: [NgbDropdownItem,] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDropdownMenu, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[ngbDropdownMenu]',
- host: {
- '[class.dropdown-menu]': 'true',
- '[class.show]': 'dropdown.isOpen()',
- '[attr.x-placement]': 'placement',
- '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)',
- '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)',
- '(keydown.Home)': 'dropdown.onKeyDown($event)',
- '(keydown.End)': 'dropdown.onKeyDown($event)',
- '(keydown.Enter)': 'dropdown.onKeyDown($event)',
- '(keydown.Space)': 'dropdown.onKeyDown($event)',
- '(keydown.Tab)': 'dropdown.onKeyDown($event)',
- '(keydown.Shift.Tab)': 'dropdown.onKeyDown($event)'
- }
- }]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbDropdown)]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, { menuItems: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
- args: [NgbDropdownItem]
- }] }); })();
- /**
- * A directive to mark an element to which dropdown menu will be anchored.
- *
- * This is a simple version of the `NgbDropdownToggle` directive.
- * It plays the same role, but doesn't listen to click events to toggle dropdown menu thus enabling support
- * for events other than click.
- *
- * @since 1.1.0
- */
- class NgbDropdownAnchor {
- constructor(dropdown, _elementRef) {
- this.dropdown = dropdown;
- this.nativeElement = _elementRef.nativeElement;
- }
- }
- NgbDropdownAnchor.ɵfac = function NgbDropdownAnchor_Factory(t) { return new (t || NgbDropdownAnchor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbDropdown)), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- NgbDropdownAnchor.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbDropdownAnchor, selectors: [["", "ngbDropdownAnchor", ""]], hostAttrs: [1, "dropdown-toggle"], hostVars: 1, hostBindings: function NgbDropdownAnchor_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-expanded", ctx.dropdown.isOpen());
- } } });
- NgbDropdownAnchor.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbDropdown),] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDropdownAnchor, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngbDropdownAnchor]', host: { 'class': 'dropdown-toggle', '[attr.aria-expanded]': 'dropdown.isOpen()' } }]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbDropdown)]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, null); })();
- /**
- * A directive to mark an element that will toggle dropdown via the `click` event.
- *
- * You can also use `NgbDropdownAnchor` as an alternative.
- */
- class NgbDropdownToggle extends NgbDropdownAnchor {
- constructor(dropdown, elementRef) {
- super(dropdown, elementRef);
- }
- }
- NgbDropdownToggle.ɵfac = function NgbDropdownToggle_Factory(t) { return new (t || NgbDropdownToggle)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbDropdown)), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- NgbDropdownToggle.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbDropdownToggle, selectors: [["", "ngbDropdownToggle", ""]], hostAttrs: [1, "dropdown-toggle"], hostVars: 1, hostBindings: function NgbDropdownToggle_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbDropdownToggle_click_HostBindingHandler() { return ctx.dropdown.toggle(); })("keydown.ArrowUp", function NgbDropdownToggle_keydown_ArrowUp_HostBindingHandler($event) { return ctx.dropdown.onKeyDown($event); })("keydown.ArrowDown", function NgbDropdownToggle_keydown_ArrowDown_HostBindingHandler($event) { return ctx.dropdown.onKeyDown($event); })("keydown.Home", function NgbDropdownToggle_keydown_Home_HostBindingHandler($event) { return ctx.dropdown.onKeyDown($event); })("keydown.End", function NgbDropdownToggle_keydown_End_HostBindingHandler($event) { return ctx.dropdown.onKeyDown($event); })("keydown.Tab", function NgbDropdownToggle_keydown_Tab_HostBindingHandler($event) { return ctx.dropdown.onKeyDown($event); })("keydown.Shift.Tab", function NgbDropdownToggle_keydown_Shift_Tab_HostBindingHandler($event) { return ctx.dropdown.onKeyDown($event); });
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-expanded", ctx.dropdown.isOpen());
- } }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{ provide: NgbDropdownAnchor, useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbDropdownToggle) }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]] });
- NgbDropdownToggle.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbDropdown),] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDropdownToggle, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[ngbDropdownToggle]',
- host: {
- 'class': 'dropdown-toggle',
- '[attr.aria-expanded]': 'dropdown.isOpen()',
- '(click)': 'dropdown.toggle()',
- '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)',
- '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)',
- '(keydown.Home)': 'dropdown.onKeyDown($event)',
- '(keydown.End)': 'dropdown.onKeyDown($event)',
- '(keydown.Tab)': 'dropdown.onKeyDown($event)',
- '(keydown.Shift.Tab)': 'dropdown.onKeyDown($event)'
- },
- providers: [{ provide: NgbDropdownAnchor, useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbDropdownToggle) }]
- }]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbDropdown)]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, null); })();
- /**
- * A directive that provides contextual overlays for displaying lists of links and more.
- */
- class NgbDropdown {
- constructor(_changeDetector, config, _document, _ngZone, _elementRef, _renderer, ngbNavbar) {
- this._changeDetector = _changeDetector;
- this._document = _document;
- this._ngZone = _ngZone;
- this._elementRef = _elementRef;
- this._renderer = _renderer;
- this._closed$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- this._bodyContainer = null;
- /**
- * Defines whether or not the dropdown menu is opened initially.
- */
- this._open = false;
- /**
- * An event fired when the dropdown is opened or closed.
- *
- * The event payload is a `boolean`:
- * * `true` - the dropdown was opened
- * * `false` - the dropdown was closed
- */
- this.openChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.placement = config.placement;
- this.container = config.container;
- this.autoClose = config.autoClose;
- this.display = ngbNavbar ? 'static' : 'dynamic';
- this._zoneSubscription = _ngZone.onStable.subscribe(() => { this._positionMenu(); });
- }
- ngAfterContentInit() {
- this._ngZone.onStable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(() => {
- this._applyPlacementClasses();
- if (this._open) {
- this._setCloseHandlers();
- }
- });
- }
- ngOnChanges(changes) {
- if (changes.container && this._open) {
- this._applyContainer(this.container);
- }
- if (changes.placement && !changes.placement.isFirstChange) {
- this._applyPlacementClasses();
- }
- }
- /**
- * Checks if the dropdown menu is open.
- */
- isOpen() { return this._open; }
- /**
- * Opens the dropdown menu.
- */
- open() {
- if (!this._open) {
- this._open = true;
- this._applyContainer(this.container);
- this.openChange.emit(true);
- this._setCloseHandlers();
- if (this._anchor) {
- this._anchor.nativeElement.focus();
- }
- }
- }
- _setCloseHandlers() {
- ngbAutoClose(this._ngZone, this._document, this.autoClose, (source) => {
- this.close();
- if (source === 0 /* ESCAPE */) {
- this._anchor.nativeElement.focus();
- }
- }, this._closed$, this._menu ? [this._menu.nativeElement] : [], this._anchor ? [this._anchor.nativeElement] : [], '.dropdown-item,.dropdown-divider');
- }
- /**
- * Closes the dropdown menu.
- */
- close() {
- if (this._open) {
- this._open = false;
- this._resetContainer();
- this._closed$.next();
- this.openChange.emit(false);
- this._changeDetector.markForCheck();
- }
- }
- /**
- * Toggles the dropdown menu.
- */
- toggle() {
- if (this.isOpen()) {
- this.close();
- }
- else {
- this.open();
- }
- }
- ngOnDestroy() {
- this._resetContainer();
- this._closed$.next();
- this._zoneSubscription.unsubscribe();
- }
- onKeyDown(event) {
- // tslint:disable-next-line:deprecation
- const key = event.which;
- const itemElements = this._getMenuElements();
- let position = -1;
- let itemElement = null;
- const isEventFromToggle = this._isEventFromToggle(event);
- if (!isEventFromToggle && itemElements.length) {
- itemElements.forEach((item, index) => {
- if (item.contains(event.target)) {
- itemElement = item;
- }
- if (item === this._document.activeElement) {
- position = index;
- }
- });
- }
- // closing on Enter / Space
- if (key === Key.Space || key === Key.Enter) {
- if (itemElement && (this.autoClose === true || this.autoClose === 'inside')) {
- // Item is either a button or a link, so click will be triggered by the browser on Enter or Space.
- // So we have to register a one-time click handler that will fire after any user defined click handlers
- // to close the dropdown
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(itemElement, 'click').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(() => this.close());
- }
- return;
- }
- if (key === Key.Tab) {
- if (event.target && this.isOpen() && this.autoClose) {
- if (this._anchor.nativeElement === event.target) {
- if (this.container === 'body' && !event.shiftKey) {
- /* This case is special: user is using [Tab] from the anchor/toggle.
- User expects the next focusable element in the dropdown menu to get focus.
- But the menu is not a sibling to anchor/toggle, it is at the end of the body.
- Trick is to synchronously focus the menu element, and let the [keydown.Tab] go
- so that browser will focus the proper element (first one focusable in the menu) */
- this._renderer.setAttribute(this._menu.nativeElement, 'tabindex', '0');
- this._menu.nativeElement.focus();
- this._renderer.removeAttribute(this._menu.nativeElement, 'tabindex');
- }
- else if (event.shiftKey) {
- this.close();
- }
- return;
- }
- else if (this.container === 'body') {
- const focusableElements = this._menu.nativeElement.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR);
- if (event.shiftKey && event.target === focusableElements[0]) {
- this._anchor.nativeElement.focus();
- event.preventDefault();
- }
- else if (!event.shiftKey && event.target === focusableElements[focusableElements.length - 1]) {
- this._anchor.nativeElement.focus();
- this.close();
- }
- }
- else {
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(event.target, 'focusout').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(({ relatedTarget }) => {
- if (!this._elementRef.nativeElement.contains(relatedTarget)) {
- this.close();
- }
- });
- }
- }
- return;
- }
- // opening / navigating
- if (isEventFromToggle || itemElement) {
- this.open();
- if (itemElements.length) {
- switch (key) {
- case Key.ArrowDown:
- position = Math.min(position + 1, itemElements.length - 1);
- break;
- case Key.ArrowUp:
- if (this._isDropup() && position === -1) {
- position = itemElements.length - 1;
- break;
- }
- position = Math.max(position - 1, 0);
- break;
- case Key.Home:
- position = 0;
- break;
- case Key.End:
- position = itemElements.length - 1;
- break;
- }
- itemElements[position].focus();
- }
- event.preventDefault();
- }
- }
- _isDropup() { return this._elementRef.nativeElement.classList.contains('dropup'); }
- _isEventFromToggle(event) {
- return this._anchor.nativeElement.contains(event.target);
- }
- _getMenuElements() {
- const menu = this._menu;
- if (menu == null) {
- return [];
- }
- return menu.menuItems.filter(item => !item.disabled).map(item => item.elementRef.nativeElement);
- }
- _positionMenu() {
- const menu = this._menu;
- if (this.isOpen() && menu) {
- this._applyPlacementClasses(this.display === 'dynamic' ? positionElements(this._anchor.nativeElement, this._bodyContainer || this._menu.nativeElement, this.placement, this.container === 'body') :
- this._getFirstPlacement(this.placement));
- }
- }
- _getFirstPlacement(placement) {
- return Array.isArray(placement) ? placement[0] : placement.split(' ')[0];
- }
- _resetContainer() {
- const renderer = this._renderer;
- if (this._menu) {
- const dropdownElement = this._elementRef.nativeElement;
- const dropdownMenuElement = this._menu.nativeElement;
- renderer.appendChild(dropdownElement, dropdownMenuElement);
- renderer.removeStyle(dropdownMenuElement, 'position');
- renderer.removeStyle(dropdownMenuElement, 'transform');
- }
- if (this._bodyContainer) {
- renderer.removeChild(this._document.body, this._bodyContainer);
- this._bodyContainer = null;
- }
- }
- _applyContainer(container = null) {
- this._resetContainer();
- if (container === 'body') {
- const renderer = this._renderer;
- const dropdownMenuElement = this._menu.nativeElement;
- const bodyContainer = this._bodyContainer = this._bodyContainer || renderer.createElement('div');
- // Override some styles to have the positionning working
- renderer.setStyle(bodyContainer, 'position', 'absolute');
- renderer.setStyle(dropdownMenuElement, 'position', 'static');
- renderer.setStyle(bodyContainer, 'z-index', '1050');
- renderer.appendChild(bodyContainer, dropdownMenuElement);
- renderer.appendChild(this._document.body, bodyContainer);
- }
- }
- _applyPlacementClasses(placement) {
- const menu = this._menu;
- if (menu) {
- if (!placement) {
- placement = this._getFirstPlacement(this.placement);
- }
- const renderer = this._renderer;
- const dropdownElement = this._elementRef.nativeElement;
- // remove the current placement classes
- renderer.removeClass(dropdownElement, 'dropup');
- renderer.removeClass(dropdownElement, 'dropdown');
- menu.placement = this.display === 'static' ? null : placement;
- /*
- * apply the new placement
- * in case of top use up-arrow or down-arrow otherwise
- */
- const dropdownClass = placement.search('^top') !== -1 ? 'dropup' : 'dropdown';
- renderer.addClass(dropdownElement, dropdownClass);
- const bodyContainer = this._bodyContainer;
- if (bodyContainer) {
- renderer.removeClass(bodyContainer, 'dropup');
- renderer.removeClass(bodyContainer, 'dropdown');
- renderer.addClass(bodyContainer, dropdownClass);
- }
- }
- }
- }
- NgbDropdown.ɵfac = function NgbDropdown_Factory(t) { return new (t || NgbDropdown)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDropdownConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbNavbar, 8)); };
- NgbDropdown.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbDropdown, selectors: [["", "ngbDropdown", ""]], contentQueries: function NgbDropdown_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbDropdownMenu, true);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbDropdownAnchor, true);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._menu = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._anchor = _t.first);
- } }, hostVars: 2, hostBindings: function NgbDropdown_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("show", ctx.isOpen());
- } }, inputs: { _open: ["open", "_open"], placement: "placement", container: "container", autoClose: "autoClose", display: "display" }, outputs: { openChange: "openChange" }, exportAs: ["ngbDropdown"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- NgbDropdown.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] },
- { type: NgbDropdownConfig },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"],] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: NgbNavbar, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }] }
- ];
- NgbDropdown.propDecorators = {
- _menu: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgbDropdownMenu, { static: false },] }],
- _anchor: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgbDropdownAnchor, { static: false },] }],
- autoClose: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- _open: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['open',] }],
- placement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- container: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- display: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- openChange: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDropdown, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngbDropdown]', exportAs: 'ngbDropdown', host: { '[class.show]': 'isOpen()' } }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }, { type: NgbDropdownConfig }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: NgbNavbar, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }] }]; }, { _open: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['open']
- }], openChange: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], placement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], container: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], autoClose: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], display: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], _menu: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgbDropdownMenu, { static: false }]
- }], _anchor: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgbDropdownAnchor, { static: false }]
- }] }); })();
- const NGB_DROPDOWN_DIRECTIVES = [NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar];
- class NgbDropdownModule {
- }
- NgbDropdownModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbDropdownModule });
- NgbDropdownModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbDropdownModule_Factory(t) { return new (t || NgbDropdownModule)(); } });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbDropdownModule, { declarations: [NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar], exports: [NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar] }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDropdownModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{ declarations: NGB_DROPDOWN_DIRECTIVES, exports: NGB_DROPDOWN_DIRECTIVES }]
- }], null, null); })();
- /**
- * A configuration service for the [`NgbModal`](#/components/modal/api#NgbModal) service.
- *
- * You can inject this service, typically in your root component, and customize the values of its properties in
- * order to provide default values for all modals used in the application.
- *
- * @since 3.1.0
- */
- class NgbModalConfig {
- constructor(ngbConfig) {
- this.backdrop = true;
- this.keyboard = true;
- this.animation = ngbConfig.animation;
- }
- }
- NgbModalConfig.ɵfac = function NgbModalConfig_Factory(t) { return new (t || NgbModalConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig)); };
- NgbModalConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbModalConfig_Factory() { return new NgbModalConfig(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(NgbConfig)); }, token: NgbModalConfig, providedIn: "root" });
- NgbModalConfig.ctorParameters = () => [
- { type: NgbConfig }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbModalConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: NgbConfig }]; }, null); })();
- class ContentRef {
- constructor(nodes, viewRef, componentRef) {
- this.nodes = nodes;
- this.viewRef = viewRef;
- this.componentRef = componentRef;
- }
- }
- class PopupService {
- constructor(_type, _injector, _viewContainerRef, _renderer, _ngZone, _componentFactoryResolver, _applicationRef) {
- this._type = _type;
- this._injector = _injector;
- this._viewContainerRef = _viewContainerRef;
- this._renderer = _renderer;
- this._ngZone = _ngZone;
- this._componentFactoryResolver = _componentFactoryResolver;
- this._applicationRef = _applicationRef;
- this._windowRef = null;
- this._contentRef = null;
- }
- open(content, context, animation = false) {
- if (!this._windowRef) {
- this._contentRef = this._getContentRef(content, context);
- this._windowRef = this._viewContainerRef.createComponent(this._componentFactoryResolver.resolveComponentFactory(this._type), this._viewContainerRef.length, this._injector, this._contentRef.nodes);
- }
- const { nativeElement } = this._windowRef.location;
- const onStable$ = this._ngZone.onStable.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1));
- const transition$ = onStable$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(() => ngbRunTransition(nativeElement, ({ classList }) => classList.add('show'), { animation, runningTransition: 'continue' })));
- return { windowRef: this._windowRef, transition$ };
- }
- close(animation = false) {
- if (!this._windowRef) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(undefined);
- }
- return ngbRunTransition(this._windowRef.location.nativeElement, ({ classList }) => classList.remove('show'), { animation, runningTransition: 'stop' })
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(() => {
- var _a;
- if (this._windowRef) {
- // this is required because of the container='body' option
- this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView));
- this._windowRef = null;
- }
- if ((_a = this._contentRef) === null || _a === void 0 ? void 0 : _a.viewRef) {
- this._applicationRef.detachView(this._contentRef.viewRef);
- this._contentRef.viewRef.destroy();
- this._contentRef = null;
- }
- }));
- }
- _getContentRef(content, context) {
- if (!content) {
- return new ContentRef([]);
- }
- else if (content instanceof _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]) {
- const viewRef = content.createEmbeddedView(context);
- this._applicationRef.attachView(viewRef);
- return new ContentRef([viewRef.rootNodes], viewRef);
- }
- else {
- return new ContentRef([[this._renderer.createText(`${content}`)]]);
- }
- }
- }
- const noop = () => { };
- const ɵ0$3 = noop;
- /**
- * Utility to handle the scrollbar.
- *
- * It allows to compensate the lack of a vertical scrollbar by adding an
- * equivalent padding on the right of the body, and to remove this compensation.
- */
- class ScrollBar {
- constructor(_document) {
- this._document = _document;
- }
- /**
- * To be called right before a potential vertical scrollbar would be removed:
- *
- * - if there was a scrollbar, adds some compensation padding to the body
- * to keep the same layout as when the scrollbar is there
- * - if there was none, there is nothing to do
- *
- * @return a callback used to revert the compensation (noop if there was none,
- * otherwise a function removing the padding)
- */
- compensate() {
- const width = this._getWidth();
- return !this._isPresent(width) ? noop : this._adjustBody(width);
- }
- /**
- * Adds a padding of the given width on the right of the body.
- *
- * @return a callback used to revert the padding to its previous value
- */
- _adjustBody(scrollbarWidth) {
- const body = this._document.body;
- const userSetPaddingStyle = body.style.paddingRight;
- const actualPadding = parseFloat(window.getComputedStyle(body)['padding-right']);
- body.style['padding-right'] = `${actualPadding + scrollbarWidth}px`;
- return () => body.style['padding-right'] = userSetPaddingStyle;
- }
- /**
- * Tells whether a scrollbar is currently present on the body.
- *
- * @return true if scrollbar is present, false otherwise
- */
- _isPresent(scrollbarWidth) {
- const rect = this._document.body.getBoundingClientRect();
- const bodyToViewportGap = window.innerWidth - (rect.left + rect.right);
- const uncertainty = 0.1 * scrollbarWidth;
- return bodyToViewportGap >= scrollbarWidth - uncertainty;
- }
- /**
- * Calculates and returns the width of a scrollbar.
- *
- * @return the width of a scrollbar on this page
- */
- _getWidth() {
- const measurer = this._document.createElement('div');
- measurer.className = 'modal-scrollbar-measure';
- const body = this._document.body;
- body.appendChild(measurer);
- const width = measurer.getBoundingClientRect().width - measurer.clientWidth;
- body.removeChild(measurer);
- return width;
- }
- }
- ScrollBar.ɵfac = function ScrollBar_Factory(t) { return new (t || ScrollBar)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"])); };
- ScrollBar.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function ScrollBar_Factory() { return new ScrollBar(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"])); }, token: ScrollBar, providedIn: "root" });
- ScrollBar.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ScrollBar, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
- }] }]; }, null); })();
- class NgbModalBackdrop {
- constructor(_el, _zone) {
- this._el = _el;
- this._zone = _zone;
- }
- ngOnInit() {
- this._zone.onStable.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(() => {
- ngbRunTransition(this._el.nativeElement, ({ classList }) => classList.add('show'), { animation: this.animation, runningTransition: 'continue' });
- });
- }
- hide() {
- return ngbRunTransition(this._el.nativeElement, ({ classList }) => classList.remove('show'), { animation: this.animation, runningTransition: 'stop' });
- }
- }
- NgbModalBackdrop.ɵfac = function NgbModalBackdrop_Factory(t) { return new (t || NgbModalBackdrop)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"])); };
- NgbModalBackdrop.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbModalBackdrop, selectors: [["ngb-modal-backdrop"]], hostAttrs: [2, "z-index", "1050"], hostVars: 6, hostBindings: function NgbModalBackdrop_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("modal-backdrop" + (ctx.backdropClass ? " " + ctx.backdropClass : ""));
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("show", !ctx.animation)("fade", ctx.animation);
- } }, inputs: { animation: "animation", backdropClass: "backdropClass" }, decls: 0, vars: 0, template: function NgbModalBackdrop_Template(rf, ctx) { }, encapsulation: 2 });
- NgbModalBackdrop.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }
- ];
- NgbModalBackdrop.propDecorators = {
- animation: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- backdropClass: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbModalBackdrop, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngb-modal-backdrop',
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- template: '',
- host: {
- '[class]': '"modal-backdrop" + (backdropClass ? " " + backdropClass : "")',
- '[class.show]': '!animation',
- '[class.fade]': 'animation',
- 'style': 'z-index: 1050'
- }
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }]; }, { animation: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], backdropClass: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * A reference to the currently opened (active) modal.
- *
- * Instances of this class can be injected into your component passed as modal content.
- * So you can `.close()` or `.dismiss()` the modal window from your component.
- */
- class NgbActiveModal {
- /**
- * Closes the modal with an optional `result` value.
- *
- * The `NgbModalRef.result` promise will be resolved with the provided value.
- */
- close(result) { }
- /**
- * Dismisses the modal with an optional `reason` value.
- *
- * The `NgbModalRef.result` promise will be rejected with the provided value.
- */
- dismiss(reason) { }
- }
- /**
- * A reference to the newly opened modal returned by the `NgbModal.open()` method.
- */
- class NgbModalRef {
- constructor(_windowCmptRef, _contentRef, _backdropCmptRef, _beforeDismiss) {
- this._windowCmptRef = _windowCmptRef;
- this._contentRef = _contentRef;
- this._backdropCmptRef = _backdropCmptRef;
- this._beforeDismiss = _beforeDismiss;
- this._closed = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- this._dismissed = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- this._hidden = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- _windowCmptRef.instance.dismissEvent.subscribe((reason) => { this.dismiss(reason); });
- this.result = new Promise((resolve, reject) => {
- this._resolve = resolve;
- this._reject = reject;
- });
- this.result.then(null, () => { });
- }
- /**
- * The instance of a component used for the modal content.
- *
- * When a `TemplateRef` is used as the content or when the modal is closed, will return `undefined`.
- */
- get componentInstance() {
- if (this._contentRef && this._contentRef.componentRef) {
- return this._contentRef.componentRef.instance;
- }
- }
- /**
- * The observable that emits when the modal is closed via the `.close()` method.
- *
- * It will emit the result passed to the `.close()` method.
- *
- * @since 8.0.0
- */
- get closed() { return this._closed.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._hidden)); }
- /**
- * The observable that emits when the modal is dismissed via the `.dismiss()` method.
- *
- * It will emit the reason passed to the `.dismissed()` method by the user, or one of the internal
- * reasons like backdrop click or ESC key press.
- *
- * @since 8.0.0
- */
- get dismissed() { return this._dismissed.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._hidden)); }
- /**
- * The observable that emits when both modal window and backdrop are closed and animations were finished.
- * At this point modal and backdrop elements will be removed from the DOM tree.
- *
- * This observable will be completed after emitting.
- *
- * @since 8.0.0
- */
- get hidden() { return this._hidden.asObservable(); }
- /**
- * The observable that emits when modal is fully visible and animation was finished.
- * Modal DOM element is always available synchronously after calling 'modal.open()' service.
- *
- * This observable will be completed after emitting.
- * It will not emit, if modal is closed before open animation is finished.
- *
- * @since 8.0.0
- */
- get shown() { return this._windowCmptRef.instance.shown.asObservable(); }
- /**
- * Closes the modal with an optional `result` value.
- *
- * The `NgbMobalRef.result` promise will be resolved with the provided value.
- */
- close(result) {
- if (this._windowCmptRef) {
- this._closed.next(result);
- this._resolve(result);
- this._removeModalElements();
- }
- }
- _dismiss(reason) {
- this._dismissed.next(reason);
- this._reject(reason);
- this._removeModalElements();
- }
- /**
- * Dismisses the modal with an optional `reason` value.
- *
- * The `NgbModalRef.result` promise will be rejected with the provided value.
- */
- dismiss(reason) {
- if (this._windowCmptRef) {
- if (!this._beforeDismiss) {
- this._dismiss(reason);
- }
- else {
- const dismiss = this._beforeDismiss();
- if (dismiss && dismiss.then) {
- dismiss.then(result => {
- if (result !== false) {
- this._dismiss(reason);
- }
- }, () => { });
- }
- else if (dismiss !== false) {
- this._dismiss(reason);
- }
- }
- }
- }
- _removeModalElements() {
- const windowTransition$ = this._windowCmptRef.instance.hide();
- const backdropTransition$ = this._backdropCmptRef ? this._backdropCmptRef.instance.hide() : Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(undefined);
- // hiding window
- windowTransition$.subscribe(() => {
- const { nativeElement } = this._windowCmptRef.location;
- nativeElement.parentNode.removeChild(nativeElement);
- this._windowCmptRef.destroy();
- if (this._contentRef && this._contentRef.viewRef) {
- this._contentRef.viewRef.destroy();
- }
- this._windowCmptRef = null;
- this._contentRef = null;
- });
- // hiding backdrop
- backdropTransition$.subscribe(() => {
- if (this._backdropCmptRef) {
- const { nativeElement } = this._backdropCmptRef.location;
- nativeElement.parentNode.removeChild(nativeElement);
- this._backdropCmptRef.destroy();
- this._backdropCmptRef = null;
- }
- });
- // all done
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["zip"])(windowTransition$, backdropTransition$).subscribe(() => {
- this._hidden.next();
- this._hidden.complete();
- });
- }
- }
- var ModalDismissReasons;
- (function (ModalDismissReasons) {
- ModalDismissReasons[ModalDismissReasons["BACKDROP_CLICK"] = 0] = "BACKDROP_CLICK";
- ModalDismissReasons[ModalDismissReasons["ESC"] = 1] = "ESC";
- })(ModalDismissReasons || (ModalDismissReasons = {}));
- class NgbModalWindow {
- constructor(_document, _elRef, _zone) {
- this._document = _document;
- this._elRef = _elRef;
- this._zone = _zone;
- this._closed$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- this._elWithFocus = null; // element that is focused prior to modal opening
- this.backdrop = true;
- this.keyboard = true;
- this.dismissEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.shown = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- this.hidden = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- }
- dismiss(reason) { this.dismissEvent.emit(reason); }
- ngOnInit() { this._elWithFocus = this._document.activeElement; }
- ngAfterViewInit() { this._show(); }
- ngOnDestroy() { this._disableEventHandling(); }
- hide() {
- const { nativeElement } = this._elRef;
- const context = { animation: this.animation, runningTransition: 'stop' };
- const windowTransition$ = ngbRunTransition(nativeElement, () => nativeElement.classList.remove('show'), context);
- const dialogTransition$ = ngbRunTransition(this._dialogEl.nativeElement, () => { }, context);
- const transitions$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["zip"])(windowTransition$, dialogTransition$);
- transitions$.subscribe(() => {
- this.hidden.next();
- this.hidden.complete();
- });
- this._disableEventHandling();
- this._restoreFocus();
- return transitions$;
- }
- _show() {
- const { nativeElement } = this._elRef;
- const context = { animation: this.animation, runningTransition: 'continue' };
- const windowTransition$ = ngbRunTransition(nativeElement, () => nativeElement.classList.add('show'), context);
- const dialogTransition$ = ngbRunTransition(this._dialogEl.nativeElement, () => { }, context);
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["zip"])(windowTransition$, dialogTransition$).subscribe(() => {
- this.shown.next();
- this.shown.complete();
- });
- this._enableEventHandling();
- this._setFocus();
- }
- _enableEventHandling() {
- const { nativeElement } = this._elRef;
- this._zone.runOutsideAngular(() => {
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(nativeElement, 'keydown')
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._closed$),
- // tslint:disable-next-line:deprecation
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(e => e.which === Key.Escape))
- .subscribe(event => {
- if (this.keyboard) {
- requestAnimationFrame(() => {
- if (!event.defaultPrevented) {
- this._zone.run(() => this.dismiss(ModalDismissReasons.ESC));
- }
- });
- }
- else if (this.backdrop === 'static') {
- this._bumpBackdrop();
- }
- });
- // We're listening to 'mousedown' and 'mouseup' to prevent modal from closing when pressing the mouse
- // inside the modal dialog and releasing it outside
- let preventClose = false;
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(this._dialogEl.nativeElement, 'mousedown')
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._closed$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(() => preventClose = false), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(() => Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(nativeElement, 'mouseup').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._closed$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1))), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(({ target }) => nativeElement === target))
- .subscribe(() => { preventClose = true; });
- // We're listening to 'click' to dismiss modal on modal window click, except when:
- // 1. clicking on modal dialog itself
- // 2. closing was prevented by mousedown/up handlers
- // 3. clicking on scrollbar when the viewport is too small and modal doesn't fit (click is not triggered at all)
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(nativeElement, 'click').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._closed$)).subscribe(({ target }) => {
- if (nativeElement === target) {
- if (this.backdrop === 'static') {
- this._bumpBackdrop();
- }
- else if (this.backdrop === true && !preventClose) {
- this._zone.run(() => this.dismiss(ModalDismissReasons.BACKDROP_CLICK));
- }
- }
- preventClose = false;
- });
- });
- }
- _disableEventHandling() { this._closed$.next(); }
- _setFocus() {
- const { nativeElement } = this._elRef;
- if (!nativeElement.contains(document.activeElement)) {
- const autoFocusable = nativeElement.querySelector(`[ngbAutofocus]`);
- const firstFocusable = getFocusableBoundaryElements(nativeElement)[0];
- const elementToFocus = autoFocusable || firstFocusable || nativeElement;
- elementToFocus.focus();
- }
- }
- _restoreFocus() {
- const body = this._document.body;
- const elWithFocus = this._elWithFocus;
- let elementToFocus;
- if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) {
- elementToFocus = elWithFocus;
- }
- else {
- elementToFocus = body;
- }
- this._zone.runOutsideAngular(() => {
- setTimeout(() => elementToFocus.focus());
- this._elWithFocus = null;
- });
- }
- _bumpBackdrop() {
- if (this.backdrop === 'static') {
- ngbRunTransition(this._elRef.nativeElement, ({ classList }) => {
- classList.add('modal-static');
- return () => classList.remove('modal-static');
- }, { animation: this.animation, runningTransition: 'continue' });
- }
- }
- }
- NgbModalWindow.ɵfac = function NgbModalWindow_Factory(t) { return new (t || NgbModalWindow)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"])); };
- NgbModalWindow.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbModalWindow, selectors: [["ngb-modal-window"]], viewQuery: function NgbModalWindow_Query(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstaticViewQuery"](_c33, true);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._dialogEl = _t.first);
- } }, hostAttrs: ["role", "dialog", "tabindex", "-1"], hostVars: 7, hostBindings: function NgbModalWindow_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-modal", true)("aria-labelledby", ctx.ariaLabelledBy)("aria-describedby", ctx.ariaDescribedBy);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("modal d-block" + (ctx.windowClass ? " " + ctx.windowClass : ""));
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("fade", ctx.animation);
- } }, inputs: { backdrop: "backdrop", keyboard: "keyboard", animation: "animation", ariaLabelledBy: "ariaLabelledBy", ariaDescribedBy: "ariaDescribedBy", centered: "centered", scrollable: "scrollable", size: "size", windowClass: "windowClass" }, outputs: { dismissEvent: "dismiss" }, ngContentSelectors: _c5, decls: 4, vars: 2, consts: [["role", "document"], ["dialog", ""], [1, "modal-content"]], template: function NgbModalWindow_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0, 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "div", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("modal-dialog" + (ctx.size ? " modal-" + ctx.size : "") + (ctx.centered ? " modal-dialog-centered" : "") + (ctx.scrollable ? " modal-dialog-scrollable" : ""));
- } }, styles: ["ngb-modal-window .component-host-scrollable{-ms-flex-direction:column;display:-ms-flexbox;display:flex;flex-direction:column;overflow:hidden}"], encapsulation: 2 });
- NgbModalWindow.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"],] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }
- ];
- NgbModalWindow.propDecorators = {
- _dialogEl: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"], args: ['dialog', { static: true },] }],
- animation: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ariaLabelledBy: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ariaDescribedBy: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- backdrop: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- centered: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- keyboard: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- scrollable: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- size: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- windowClass: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- dismissEvent: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['dismiss',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbModalWindow, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngb-modal-window',
- host: {
- '[class]': '"modal d-block" + (windowClass ? " " + windowClass : "")',
- '[class.fade]': 'animation',
- 'role': 'dialog',
- 'tabindex': '-1',
- '[attr.aria-modal]': 'true',
- '[attr.aria-labelledby]': 'ariaLabelledBy',
- '[attr.aria-describedby]': 'ariaDescribedBy'
- },
- template: `
- <div #dialog [class]="'modal-dialog' + (size ? ' modal-' + size : '') + (centered ? ' modal-dialog-centered' : '') +
- (scrollable ? ' modal-dialog-scrollable' : '')" role="document">
- <div class="modal-content"><ng-content></ng-content></div>
- </div>
- `,
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- styles: ["ngb-modal-window .component-host-scrollable{-ms-flex-direction:column;display:-ms-flexbox;display:flex;flex-direction:column;overflow:hidden}"]
- }]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }]; }, { backdrop: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], keyboard: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], dismissEvent: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['dismiss']
- }], _dialogEl: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
- args: ['dialog', { static: true }]
- }], animation: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ariaLabelledBy: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ariaDescribedBy: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], centered: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], scrollable: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], size: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], windowClass: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class NgbModalStack {
- constructor(_applicationRef, _injector, _document, _scrollBar, _rendererFactory, _ngZone) {
- this._applicationRef = _applicationRef;
- this._injector = _injector;
- this._document = _document;
- this._scrollBar = _scrollBar;
- this._rendererFactory = _rendererFactory;
- this._ngZone = _ngZone;
- this._activeWindowCmptHasChanged = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- this._ariaHiddenValues = new Map();
- this._backdropAttributes = ['animation', 'backdropClass'];
- this._modalRefs = [];
- this._windowAttributes = [
- 'animation', 'ariaLabelledBy', 'ariaDescribedBy', 'backdrop', 'centered', 'keyboard', 'scrollable', 'size',
- 'windowClass'
- ];
- this._windowCmpts = [];
- this._activeInstances = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- // Trap focus on active WindowCmpt
- this._activeWindowCmptHasChanged.subscribe(() => {
- if (this._windowCmpts.length) {
- const activeWindowCmpt = this._windowCmpts[this._windowCmpts.length - 1];
- ngbFocusTrap(this._ngZone, activeWindowCmpt.location.nativeElement, this._activeWindowCmptHasChanged);
- this._revertAriaHidden();
- this._setAriaHidden(activeWindowCmpt.location.nativeElement);
- }
- });
- }
- open(moduleCFR, contentInjector, content, options) {
- const containerEl = options.container instanceof HTMLElement ? options.container : isDefined(options.container) ?
- this._document.querySelector(options.container) :
- this._document.body;
- const renderer = this._rendererFactory.createRenderer(null, null);
- const revertPaddingForScrollBar = this._scrollBar.compensate();
- const removeBodyClass = () => {
- if (!this._modalRefs.length) {
- renderer.removeClass(this._document.body, 'modal-open');
- this._revertAriaHidden();
- }
- };
- if (!containerEl) {
- throw new Error(`The specified modal container "${options.container || 'body'}" was not found in the DOM.`);
- }
- const activeModal = new NgbActiveModal();
- const contentRef = this._getContentRef(moduleCFR, options.injector || contentInjector, content, activeModal, options);
- let backdropCmptRef = options.backdrop !== false ? this._attachBackdrop(moduleCFR, containerEl) : undefined;
- let windowCmptRef = this._attachWindowComponent(moduleCFR, containerEl, contentRef);
- let ngbModalRef = new NgbModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss);
- this._registerModalRef(ngbModalRef);
- this._registerWindowCmpt(windowCmptRef);
- ngbModalRef.result.then(revertPaddingForScrollBar, revertPaddingForScrollBar);
- ngbModalRef.result.then(removeBodyClass, removeBodyClass);
- activeModal.close = (result) => { ngbModalRef.close(result); };
- activeModal.dismiss = (reason) => { ngbModalRef.dismiss(reason); };
- this._applyWindowOptions(windowCmptRef.instance, options);
- if (this._modalRefs.length === 1) {
- renderer.addClass(this._document.body, 'modal-open');
- }
- if (backdropCmptRef && backdropCmptRef.instance) {
- this._applyBackdropOptions(backdropCmptRef.instance, options);
- }
- return ngbModalRef;
- }
- get activeInstances() { return this._activeInstances; }
- dismissAll(reason) { this._modalRefs.forEach(ngbModalRef => ngbModalRef.dismiss(reason)); }
- hasOpenModals() { return this._modalRefs.length > 0; }
- _attachBackdrop(moduleCFR, containerEl) {
- let backdropFactory = moduleCFR.resolveComponentFactory(NgbModalBackdrop);
- let backdropCmptRef = backdropFactory.create(this._injector);
- this._applicationRef.attachView(backdropCmptRef.hostView);
- containerEl.appendChild(backdropCmptRef.location.nativeElement);
- return backdropCmptRef;
- }
- _attachWindowComponent(moduleCFR, containerEl, contentRef) {
- let windowFactory = moduleCFR.resolveComponentFactory(NgbModalWindow);
- let windowCmptRef = windowFactory.create(this._injector, contentRef.nodes);
- this._applicationRef.attachView(windowCmptRef.hostView);
- containerEl.appendChild(windowCmptRef.location.nativeElement);
- return windowCmptRef;
- }
- _applyWindowOptions(windowInstance, options) {
- this._windowAttributes.forEach((optionName) => {
- if (isDefined(options[optionName])) {
- windowInstance[optionName] = options[optionName];
- }
- });
- }
- _applyBackdropOptions(backdropInstance, options) {
- this._backdropAttributes.forEach((optionName) => {
- if (isDefined(options[optionName])) {
- backdropInstance[optionName] = options[optionName];
- }
- });
- }
- _getContentRef(moduleCFR, contentInjector, content, activeModal, options) {
- if (!content) {
- return new ContentRef([]);
- }
- else if (content instanceof _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]) {
- return this._createFromTemplateRef(content, activeModal);
- }
- else if (isString(content)) {
- return this._createFromString(content);
- }
- else {
- return this._createFromComponent(moduleCFR, contentInjector, content, activeModal, options);
- }
- }
- _createFromTemplateRef(content, activeModal) {
- const context = {
- $implicit: activeModal,
- close(result) { activeModal.close(result); },
- dismiss(reason) { activeModal.dismiss(reason); }
- };
- const viewRef = content.createEmbeddedView(context);
- this._applicationRef.attachView(viewRef);
- return new ContentRef([viewRef.rootNodes], viewRef);
- }
- _createFromString(content) {
- const component = this._document.createTextNode(`${content}`);
- return new ContentRef([[component]]);
- }
- _createFromComponent(moduleCFR, contentInjector, content, context, options) {
- const contentCmptFactory = moduleCFR.resolveComponentFactory(content);
- const modalContentInjector = _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"].create({ providers: [{ provide: NgbActiveModal, useValue: context }], parent: contentInjector });
- const componentRef = contentCmptFactory.create(modalContentInjector);
- const componentNativeEl = componentRef.location.nativeElement;
- if (options.scrollable) {
- componentNativeEl.classList.add('component-host-scrollable');
- }
- this._applicationRef.attachView(componentRef.hostView);
- // FIXME: we should here get rid of the component nativeElement
- // and use `[Array.from(componentNativeEl.childNodes)]` instead and remove the above CSS class.
- return new ContentRef([[componentNativeEl]], componentRef.hostView, componentRef);
- }
- _setAriaHidden(element) {
- const parent = element.parentElement;
- if (parent && element !== this._document.body) {
- Array.from(parent.children).forEach(sibling => {
- if (sibling !== element && sibling.nodeName !== 'SCRIPT') {
- this._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden'));
- sibling.setAttribute('aria-hidden', 'true');
- }
- });
- this._setAriaHidden(parent);
- }
- }
- _revertAriaHidden() {
- this._ariaHiddenValues.forEach((value, element) => {
- if (value) {
- element.setAttribute('aria-hidden', value);
- }
- else {
- element.removeAttribute('aria-hidden');
- }
- });
- this._ariaHiddenValues.clear();
- }
- _registerModalRef(ngbModalRef) {
- const unregisterModalRef = () => {
- const index = this._modalRefs.indexOf(ngbModalRef);
- if (index > -1) {
- this._modalRefs.splice(index, 1);
- this._activeInstances.emit(this._modalRefs);
- }
- };
- this._modalRefs.push(ngbModalRef);
- this._activeInstances.emit(this._modalRefs);
- ngbModalRef.result.then(unregisterModalRef, unregisterModalRef);
- }
- _registerWindowCmpt(ngbWindowCmpt) {
- this._windowCmpts.push(ngbWindowCmpt);
- this._activeWindowCmptHasChanged.next();
- ngbWindowCmpt.onDestroy(() => {
- const index = this._windowCmpts.indexOf(ngbWindowCmpt);
- if (index > -1) {
- this._windowCmpts.splice(index, 1);
- this._activeWindowCmptHasChanged.next();
- }
- });
- }
- }
- NgbModalStack.ɵfac = function NgbModalStack_Factory(t) { return new (t || NgbModalStack)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](ScrollBar), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"])); };
- NgbModalStack.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbModalStack_Factory() { return new NgbModalStack(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_0__["INJECTOR"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(ScrollBar), Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"])); }, token: NgbModalStack, providedIn: "root" });
- NgbModalStack.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"],] }] },
- { type: ScrollBar },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbModalStack, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
- }] }, { type: ScrollBar }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }]; }, null); })();
- /**
- * A service for opening modal windows.
- *
- * Creating a modal is straightforward: create a component or a template and pass it as an argument to
- * the `.open()` method.
- */
- class NgbModal {
- constructor(_moduleCFR, _injector, _modalStack, _config) {
- this._moduleCFR = _moduleCFR;
- this._injector = _injector;
- this._modalStack = _modalStack;
- this._config = _config;
- }
- /**
- * Opens a new modal window with the specified content and supplied options.
- *
- * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content,
- * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then
- * use `NgbActiveModal` methods to close / dismiss modals from "inside" of your component.
- *
- * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options.
- */
- open(content, options = {}) {
- const combinedOptions = Object.assign({}, this._config, options);
- return this._modalStack.open(this._moduleCFR, this._injector, content, combinedOptions);
- }
- /**
- * Returns an observable that holds the active modal instances.
- */
- get activeInstances() { return this._modalStack.activeInstances; }
- /**
- * Dismisses all currently displayed modal windows with the supplied reason.
- *
- * @since 3.1.0
- */
- dismissAll(reason) { this._modalStack.dismissAll(reason); }
- /**
- * Indicates if there are currently any open modal windows in the application.
- *
- * @since 3.3.0
- */
- hasOpenModals() { return this._modalStack.hasOpenModals(); }
- }
- NgbModal.ɵfac = function NgbModal_Factory(t) { return new (t || NgbModal)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbModalStack), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbModalConfig)); };
- NgbModal.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbModal_Factory() { return new NgbModal(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_0__["INJECTOR"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(NgbModalStack), Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(NgbModalConfig)); }, token: NgbModal, providedIn: "root" });
- NgbModal.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] },
- { type: NgbModalStack },
- { type: NgbModalConfig }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbModal, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] }, { type: NgbModalStack }, { type: NgbModalConfig }]; }, null); })();
- class NgbModalModule {
- }
- NgbModalModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbModalModule });
- NgbModalModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbModalModule_Factory(t) { return new (t || NgbModalModule)(); }, providers: [NgbModal] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbModalModule, { declarations: [NgbModalBackdrop, NgbModalWindow] }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbModalModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- declarations: [NgbModalBackdrop, NgbModalWindow],
- entryComponents: [NgbModalBackdrop, NgbModalWindow],
- providers: [NgbModal]
- }]
- }], null, null); })();
- /**
- * A configuration service for the [`NgbNav`](#/components/nav/api#NgbNav) component.
- *
- * You can inject this service, typically in your root component, and customize the values of its properties in
- * order to provide default values for all the navs used in the application.
- *
- * @since 5.2.0
- */
- class NgbNavConfig {
- constructor(ngbConfig) {
- this.destroyOnHide = true;
- this.orientation = 'horizontal';
- this.roles = 'tablist';
- this.keyboard = false;
- this.animation = ngbConfig.animation;
- }
- }
- NgbNavConfig.ɵfac = function NgbNavConfig_Factory(t) { return new (t || NgbNavConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig)); };
- NgbNavConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbNavConfig_Factory() { return new NgbNavConfig(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(NgbConfig)); }, token: NgbNavConfig, providedIn: "root" });
- NgbNavConfig.ctorParameters = () => [
- { type: NgbConfig }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNavConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: NgbConfig }]; }, null); })();
- const isValidNavId = (id) => isDefined(id) && id !== '';
- const ɵ0$4 = isValidNavId;
- let navCounter = 0;
- /**
- * This directive must be used to wrap content to be displayed in the nav.
- *
- * @since 5.2.0
- */
- class NgbNavContent {
- constructor(templateRef) {
- this.templateRef = templateRef;
- }
- }
- NgbNavContent.ɵfac = function NgbNavContent_Factory(t) { return new (t || NgbNavContent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgbNavContent.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbNavContent, selectors: [["ng-template", "ngbNavContent", ""]] });
- NgbNavContent.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNavContent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: 'ng-template[ngbNavContent]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- /**
- * The directive used to group nav link and related nav content. As well as set nav identifier and some options.
- *
- * @since 5.2.0
- */
- class NgbNavItem {
- constructor(nav, elementRef) {
- this.elementRef = elementRef;
- /**
- * If `true`, the current nav item is disabled and can't be toggled by user.
- *
- * Nevertheless disabled nav can be selected programmatically via the `.select()` method and the `[activeId]` binding.
- */
- this.disabled = false;
- /**
- * An event emitted when the fade in transition is finished on the related nav content
- *
- * @since 8.0.0
- */
- this.shown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An event emitted when the fade out transition is finished on the related nav content
- *
- * @since 8.0.0
- */
- this.hidden = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- // TODO: cf https://github.com/angular/angular/issues/30106
- this._nav = nav;
- }
- ngAfterContentChecked() {
- // We are using @ContentChildren instead of @ContentChild as in the Angular version being used
- // only @ContentChildren allows us to specify the {descendants: false} option.
- // Without {descendants: false} we are hitting bugs described in:
- // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240
- this.contentTpl = this.contentTpls.first;
- }
- ngOnInit() {
- if (!isDefined(this.domId)) {
- this.domId = `ngb-nav-${navCounter++}`;
- }
- }
- get active() { return this._nav.activeId === this.id; }
- get id() { return isValidNavId(this._id) ? this._id : this.domId; }
- get panelDomId() { return `${this.domId}-panel`; }
- isPanelInDom() {
- return (isDefined(this.destroyOnHide) ? !this.destroyOnHide : !this._nav.destroyOnHide) || this.active;
- }
- }
- NgbNavItem.ɵfac = function NgbNavItem_Factory(t) { return new (t || NgbNavItem)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbNav)), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- NgbNavItem.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbNavItem, selectors: [["", "ngbNavItem", ""]], contentQueries: function NgbNavItem_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbNavContent, false);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.contentTpls = _t);
- } }, hostVars: 2, hostBindings: function NgbNavItem_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("nav-item", true);
- } }, inputs: { disabled: "disabled", domId: "domId", destroyOnHide: "destroyOnHide", _id: ["ngbNavItem", "_id"] }, outputs: { shown: "shown", hidden: "hidden" }, exportAs: ["ngbNavItem"] });
- NgbNavItem.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbNav),] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- NgbNavItem.propDecorators = {
- destroyOnHide: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- disabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- domId: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- _id: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['ngbNavItem',] }],
- shown: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- hidden: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- contentTpls: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"], args: [NgbNavContent, { descendants: false },] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNavItem, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngbNavItem]', exportAs: 'ngbNavItem', host: { '[class.nav-item]': 'true' } }]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbNav)]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, { disabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], shown: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], hidden: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], domId: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], destroyOnHide: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], _id: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['ngbNavItem']
- }], contentTpls: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
- args: [NgbNavContent, { descendants: false }]
- }] }); })();
- /**
- * A nav directive that helps with implementing tabbed navigation components.
- *
- * @since 5.2.0
- */
- class NgbNav {
- constructor(role, config, _cd, _document) {
- this.role = role;
- this._cd = _cd;
- this._document = _document;
- /**
- * The event emitted after the active nav changes
- * The payload of the event is the newly active nav id
- *
- * If you want to prevent nav change, you should use `(navChange)` event
- */
- this.activeIdChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An event emitted when the fade in transition is finished for one of the items.
- *
- * Payload of the event is the nav id that was just shown.
- *
- * @since 8.0.0
- */
- this.shown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An event emitted when the fade out transition is finished for one of the items.
- *
- * Payload of the event is the nav id that was just hidden.
- *
- * @since 8.0.0
- */
- this.hidden = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.navItemChange$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- /**
- * The nav change event emitted right before the nav change happens on user click.
- *
- * This event won't be emitted if nav is changed programmatically via `[activeId]` or `.select()`.
- *
- * See [`NgbNavChangeEvent`](#/components/nav/api#NgbNavChangeEvent) for payload details.
- */
- this.navChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.animation = config.animation;
- this.destroyOnHide = config.destroyOnHide;
- this.orientation = config.orientation;
- this.roles = config.roles;
- this.keyboard = config.keyboard;
- }
- click(item) {
- if (!item.disabled) {
- this._updateActiveId(item.id);
- }
- }
- onKeyDown(event) {
- if (this.roles !== 'tablist' || !this.keyboard) {
- return;
- }
- // tslint:disable-next-line: deprecation
- const key = event.which;
- const enabledLinks = this.links.filter(link => !link.navItem.disabled);
- const { length } = enabledLinks;
- let position = -1;
- enabledLinks.forEach((link, index) => {
- if (link.elRef.nativeElement === this._document.activeElement) {
- position = index;
- }
- });
- if (length) {
- switch (key) {
- case Key.ArrowLeft:
- if (this.orientation === 'vertical') {
- return;
- }
- position = (position - 1 + length) % length;
- break;
- case Key.ArrowRight:
- if (this.orientation === 'vertical') {
- return;
- }
- position = (position + 1) % length;
- break;
- case Key.ArrowDown:
- if (this.orientation === 'horizontal') {
- return;
- }
- position = (position + 1) % length;
- break;
- case Key.ArrowUp:
- if (this.orientation === 'horizontal') {
- return;
- }
- position = (position - 1 + length) % length;
- break;
- case Key.Home:
- position = 0;
- break;
- case Key.End:
- position = length - 1;
- break;
- }
- if (this.keyboard === 'changeWithArrows') {
- this.select(enabledLinks[position].navItem.id);
- }
- enabledLinks[position].elRef.nativeElement.focus();
- event.preventDefault();
- }
- }
- /**
- * Selects the nav with the given id and shows its associated pane.
- * Any other nav that was previously selected becomes unselected and its associated pane is hidden.
- */
- select(id) { this._updateActiveId(id, false); }
- ngAfterContentInit() {
- if (!isDefined(this.activeId)) {
- const nextId = this.items.first ? this.items.first.id : null;
- if (isValidNavId(nextId)) {
- this._updateActiveId(nextId, false);
- this._cd.detectChanges();
- }
- }
- }
- ngOnChanges({ activeId }) {
- if (activeId && !activeId.firstChange) {
- this._notifyItemChanged(activeId.currentValue);
- }
- }
- _updateActiveId(nextId, emitNavChange = true) {
- if (this.activeId !== nextId) {
- let defaultPrevented = false;
- if (emitNavChange) {
- this.navChange.emit({ activeId: this.activeId, nextId, preventDefault: () => { defaultPrevented = true; } });
- }
- if (!defaultPrevented) {
- this.activeId = nextId;
- this.activeIdChange.emit(nextId);
- this._notifyItemChanged(nextId);
- }
- }
- }
- _notifyItemChanged(nextItemId) { this.navItemChange$.next(this._getItemById(nextItemId)); }
- _getItemById(itemId) {
- return this.items && this.items.find(item => item.id === itemId) || null;
- }
- }
- NgbNav.ɵfac = function NgbNav_Factory(t) { return new (t || NgbNav)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinjectAttribute"]('role'), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbNavConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"])); };
- NgbNav.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbNav, selectors: [["", "ngbNav", ""]], contentQueries: function NgbNav_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbNavItem, false);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbNavLink, true);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.items = _t);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.links = _t);
- } }, hostVars: 6, hostBindings: function NgbNav_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keydown.arrowLeft", function NgbNav_keydown_arrowLeft_HostBindingHandler($event) { return ctx.onKeyDown($event); })("keydown.arrowRight", function NgbNav_keydown_arrowRight_HostBindingHandler($event) { return ctx.onKeyDown($event); })("keydown.arrowDown", function NgbNav_keydown_arrowDown_HostBindingHandler($event) { return ctx.onKeyDown($event); })("keydown.arrowUp", function NgbNav_keydown_arrowUp_HostBindingHandler($event) { return ctx.onKeyDown($event); })("keydown.Home", function NgbNav_keydown_Home_HostBindingHandler($event) { return ctx.onKeyDown($event); })("keydown.End", function NgbNav_keydown_End_HostBindingHandler($event) { return ctx.onKeyDown($event); });
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-orientation", ctx.orientation === "vertical" && ctx.roles === "tablist" ? "vertical" : undefined)("role", ctx.role ? ctx.role : ctx.roles ? "tablist" : undefined);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("nav", true)("flex-column", ctx.orientation === "vertical");
- } }, inputs: { animation: "animation", destroyOnHide: "destroyOnHide", orientation: "orientation", roles: "roles", keyboard: "keyboard", activeId: "activeId" }, outputs: { activeIdChange: "activeIdChange", shown: "shown", hidden: "hidden", navChange: "navChange" }, exportAs: ["ngbNav"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- NgbNav.ctorParameters = () => [
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"], args: ['role',] }] },
- { type: NgbNavConfig },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"],] }] }
- ];
- NgbNav.propDecorators = {
- activeId: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- activeIdChange: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- animation: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- destroyOnHide: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- orientation: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- roles: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- keyboard: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- shown: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- hidden: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- items: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"], args: [NgbNavItem,] }],
- links: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"], args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbNavLink), { descendants: true },] }],
- navChange: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNav, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[ngbNav]',
- exportAs: 'ngbNav',
- host: {
- '[class.nav]': 'true',
- '[class.flex-column]': `orientation === 'vertical'`,
- '[attr.aria-orientation]': `orientation === 'vertical' && roles === 'tablist' ? 'vertical' : undefined`,
- '[attr.role]': `role ? role : roles ? 'tablist' : undefined`,
- '(keydown.arrowLeft)': 'onKeyDown($event)',
- '(keydown.arrowRight)': 'onKeyDown($event)',
- '(keydown.arrowDown)': 'onKeyDown($event)',
- '(keydown.arrowUp)': 'onKeyDown($event)',
- '(keydown.Home)': 'onKeyDown($event)',
- '(keydown.End)': 'onKeyDown($event)'
- }
- }]
- }], function () { return [{ type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"],
- args: ['role']
- }] }, { type: NgbNavConfig }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
- }] }]; }, { activeIdChange: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], shown: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], hidden: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], navChange: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], animation: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], destroyOnHide: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], orientation: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], roles: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], keyboard: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], activeId: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], items: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
- args: [NgbNavItem]
- }], links: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
- args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbNavLink), { descendants: true }]
- }] }); })();
- /**
- * A directive to put on the nav link.
- *
- * @since 5.2.0
- */
- class NgbNavLink {
- constructor(role, navItem, nav, elRef) {
- this.role = role;
- this.navItem = navItem;
- this.nav = nav;
- this.elRef = elRef;
- }
- hasNavItemClass() {
- // with alternative markup we have to add `.nav-item` class, because `ngbNavItem` is on the ng-container
- return this.navItem.elementRef.nativeElement.nodeType === Node.COMMENT_NODE;
- }
- }
- NgbNavLink.ɵfac = function NgbNavLink_Factory(t) { return new (t || NgbNavLink)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinjectAttribute"]('role'), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbNavItem), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbNav), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- NgbNavLink.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbNavLink, selectors: [["a", "ngbNavLink", ""]], hostAttrs: ["href", ""], hostVars: 14, hostBindings: function NgbNavLink_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbNavLink_click_HostBindingHandler($event) { ctx.nav.click(ctx.navItem); return $event.preventDefault(); });
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("id", ctx.navItem.domId);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("role", ctx.role ? ctx.role : ctx.nav.roles ? "tab" : undefined)("tabindex", ctx.navItem.disabled ? -1 : undefined)("aria-controls", ctx.navItem.isPanelInDom() ? ctx.navItem.panelDomId : null)("aria-selected", ctx.navItem.active)("aria-disabled", ctx.navItem.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("nav-link", true)("nav-item", ctx.hasNavItemClass())("active", ctx.navItem.active)("disabled", ctx.navItem.disabled);
- } } });
- NgbNavLink.ctorParameters = () => [
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"], args: ['role',] }] },
- { type: NgbNavItem },
- { type: NgbNav },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNavLink, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: 'a[ngbNavLink]',
- host: {
- '[id]': 'navItem.domId',
- '[class.nav-link]': 'true',
- '[class.nav-item]': 'hasNavItemClass()',
- '[attr.role]': `role ? role : nav.roles ? 'tab' : undefined`,
- 'href': '',
- '[class.active]': 'navItem.active',
- '[class.disabled]': 'navItem.disabled',
- '[attr.tabindex]': 'navItem.disabled ? -1 : undefined',
- '[attr.aria-controls]': 'navItem.isPanelInDom() ? navItem.panelDomId : null',
- '[attr.aria-selected]': 'navItem.active',
- '[attr.aria-disabled]': 'navItem.disabled',
- '(click)': 'nav.click(navItem); $event.preventDefault()'
- }
- }]
- }], function () { return [{ type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"],
- args: ['role']
- }] }, { type: NgbNavItem }, { type: NgbNav }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, null); })();
- const ngbNavFadeOutTransition = ({ classList }) => {
- classList.remove('show');
- return () => classList.remove('active');
- };
- const ngbNavFadeInTransition = (element) => {
- element.classList.add('active');
- reflow(element);
- element.classList.add('show');
- };
- const ngbNavFadeInNoReflowTransition = (element) => {
- element.classList.add('active');
- element.classList.add('show');
- };
- class NgbNavPane {
- constructor(elRef) {
- this.elRef = elRef;
- }
- }
- NgbNavPane.ɵfac = function NgbNavPane_Factory(t) { return new (t || NgbNavPane)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- NgbNavPane.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbNavPane, selectors: [["", "ngbNavPane", ""]], hostAttrs: [1, "tab-pane"], hostVars: 5, hostBindings: function NgbNavPane_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("id", ctx.item.panelDomId);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("role", ctx.role ? ctx.role : ctx.nav.roles ? "tabpanel" : undefined)("aria-labelledby", ctx.item.domId);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("fade", ctx.nav.animation);
- } }, inputs: { item: "item", nav: "nav", role: "role" } });
- NgbNavPane.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- NgbNavPane.propDecorators = {
- item: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- nav: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- role: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNavPane, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[ngbNavPane]',
- host: {
- '[id]': 'item.panelDomId',
- 'class': 'tab-pane',
- '[class.fade]': 'nav.animation',
- '[attr.role]': 'role ? role : nav.roles ? "tabpanel" : undefined',
- '[attr.aria-labelledby]': 'item.domId'
- }
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, { item: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], nav: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], role: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * The outlet where currently active nav content will be displayed.
- *
- * @since 5.2.0
- */
- class NgbNavOutlet {
- constructor(_cd) {
- this._cd = _cd;
- this._activePane = null;
- }
- isPanelTransitioning(item) { var _a; return ((_a = this._activePane) === null || _a === void 0 ? void 0 : _a.item) === item; }
- ngAfterViewInit() {
- var _a, _b, _c;
- // initial display
- this._activePane = this._getActivePane();
- (_a = this._activePane) === null || _a === void 0 ? void 0 : _a.elRef.nativeElement.classList.add('show');
- (_b = this._activePane) === null || _b === void 0 ? void 0 : _b.elRef.nativeElement.classList.add('active');
- // this will be emitted for all 3 types of nav changes: .select(), [activeId] or (click)
- this.nav.navItemChange$
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["startWith"])(((_c = this._activePane) === null || _c === void 0 ? void 0 : _c.item) || null), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["distinctUntilChanged"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["skip"])(1))
- .subscribe(nextItem => {
- const options = { animation: this.nav.animation, runningTransition: 'stop' };
- // fading out
- if (this._activePane) {
- ngbRunTransition(this._activePane.elRef.nativeElement, ngbNavFadeOutTransition, options).subscribe(() => {
- var _a;
- const activeItem = (_a = this._activePane) === null || _a === void 0 ? void 0 : _a.item;
- // next panel we're switching to will only appear in DOM after the change detection is done
- // and `this._panes` will be updated
- this._cd.detectChanges();
- this._activePane = this._getPaneForItem(nextItem);
- // fading in
- if (this._activePane) {
- const fadeInTransition = this.nav.animation ? ngbNavFadeInTransition : ngbNavFadeInNoReflowTransition;
- ngbRunTransition(this._activePane.elRef.nativeElement, fadeInTransition, options).subscribe(() => {
- if (nextItem) {
- nextItem.shown.emit();
- this.nav.shown.emit(nextItem.id);
- }
- });
- }
- if (activeItem) {
- activeItem.hidden.emit();
- this.nav.hidden.emit(activeItem.id);
- }
- });
- }
- });
- }
- _getPaneForItem(item) {
- return this._panes && this._panes.find(pane => pane.item === item) || null;
- }
- _getActivePane() {
- return this._panes && this._panes.find(pane => pane.item.active) || null;
- }
- }
- NgbNavOutlet.ɵfac = function NgbNavOutlet_Factory(t) { return new (t || NgbNavOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"])); };
- NgbNavOutlet.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbNavOutlet, selectors: [["", "ngbNavOutlet", ""]], viewQuery: function NgbNavOutlet_Query(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](NgbNavPane, true);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._panes = _t);
- } }, hostVars: 2, hostBindings: function NgbNavOutlet_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("tab-content", true);
- } }, inputs: { paneRole: "paneRole", nav: ["ngbNavOutlet", "nav"] }, attrs: _c34, decls: 1, vars: 1, consts: [["ngFor", "", 3, "ngForOf"], ["ngbNavPane", "", 3, "item", "nav", "role", 4, "ngIf"], ["ngbNavPane", "", 3, "item", "nav", "role"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"]], template: function NgbNavOutlet_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbNavOutlet_ng_template_0_Template, 1, 1, "ng-template", 0);
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.nav.items);
- } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], NgbNavPane, _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]], encapsulation: 2 });
- NgbNavOutlet.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }
- ];
- NgbNavOutlet.propDecorators = {
- _panes: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChildren"], args: [NgbNavPane,] }],
- paneRole: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- nav: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['ngbNavOutlet',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNavOutlet, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: '[ngbNavOutlet]',
- host: { '[class.tab-content]': 'true' },
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- template: `
- <ng-template ngFor let-item [ngForOf]="nav.items">
- <div ngbNavPane *ngIf="item.isPanelInDom() || isPanelTransitioning(item)" [item]="item" [nav]="nav" [role]="paneRole">
- <ng-template [ngTemplateOutlet]="item.contentTpl?.templateRef || null"
- [ngTemplateOutletContext]="{$implicit: item.active || isPanelTransitioning(item)}"></ng-template>
- </div>
- </ng-template>
- `
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }]; }, { _panes: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChildren"],
- args: [NgbNavPane]
- }], paneRole: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], nav: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['ngbNavOutlet']
- }] }); })();
- const NGB_NAV_DIRECTIVES = [NgbNavContent, NgbNav, NgbNavItem, NgbNavLink, NgbNavOutlet, NgbNavPane];
- class NgbNavModule {
- }
- NgbNavModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbNavModule });
- NgbNavModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbNavModule_Factory(t) { return new (t || NgbNavModule)(); }, imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbNavModule, { declarations: function () { return [NgbNavContent, NgbNav, NgbNavItem, NgbNavLink, NgbNavOutlet, NgbNavPane]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]; }, exports: function () { return [NgbNavContent, NgbNav, NgbNavItem, NgbNavLink, NgbNavOutlet, NgbNavPane]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNavModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{ declarations: NGB_NAV_DIRECTIVES, exports: NGB_NAV_DIRECTIVES, imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]] }]
- }], null, null); })();
- /**
- * A configuration service for the [`NgbPagination`](#/components/pagination/api#NgbPagination) component.
- *
- * You can inject this service, typically in your root component, and customize the values of its properties in
- * order to provide default values for all the paginations used in the application.
- */
- class NgbPaginationConfig {
- constructor() {
- this.disabled = false;
- this.boundaryLinks = false;
- this.directionLinks = true;
- this.ellipses = true;
- this.maxSize = 0;
- this.pageSize = 10;
- this.rotate = false;
- }
- }
- NgbPaginationConfig.ɵfac = function NgbPaginationConfig_Factory(t) { return new (t || NgbPaginationConfig)(); };
- NgbPaginationConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbPaginationConfig_Factory() { return new NgbPaginationConfig(); }, token: NgbPaginationConfig, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPaginationConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return []; }, null); })();
- /**
- * A directive to match the 'ellipsis' link template
- *
- * @since 4.1.0
- */
- class NgbPaginationEllipsis {
- constructor(templateRef) {
- this.templateRef = templateRef;
- }
- }
- NgbPaginationEllipsis.ɵfac = function NgbPaginationEllipsis_Factory(t) { return new (t || NgbPaginationEllipsis)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgbPaginationEllipsis.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbPaginationEllipsis, selectors: [["ng-template", "ngbPaginationEllipsis", ""]] });
- NgbPaginationEllipsis.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPaginationEllipsis, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: 'ng-template[ngbPaginationEllipsis]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- /**
- * A directive to match the 'first' link template
- *
- * @since 4.1.0
- */
- class NgbPaginationFirst {
- constructor(templateRef) {
- this.templateRef = templateRef;
- }
- }
- NgbPaginationFirst.ɵfac = function NgbPaginationFirst_Factory(t) { return new (t || NgbPaginationFirst)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgbPaginationFirst.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbPaginationFirst, selectors: [["ng-template", "ngbPaginationFirst", ""]] });
- NgbPaginationFirst.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPaginationFirst, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: 'ng-template[ngbPaginationFirst]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- /**
- * A directive to match the 'last' link template
- *
- * @since 4.1.0
- */
- class NgbPaginationLast {
- constructor(templateRef) {
- this.templateRef = templateRef;
- }
- }
- NgbPaginationLast.ɵfac = function NgbPaginationLast_Factory(t) { return new (t || NgbPaginationLast)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgbPaginationLast.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbPaginationLast, selectors: [["ng-template", "ngbPaginationLast", ""]] });
- NgbPaginationLast.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPaginationLast, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: 'ng-template[ngbPaginationLast]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- /**
- * A directive to match the 'next' link template
- *
- * @since 4.1.0
- */
- class NgbPaginationNext {
- constructor(templateRef) {
- this.templateRef = templateRef;
- }
- }
- NgbPaginationNext.ɵfac = function NgbPaginationNext_Factory(t) { return new (t || NgbPaginationNext)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgbPaginationNext.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbPaginationNext, selectors: [["ng-template", "ngbPaginationNext", ""]] });
- NgbPaginationNext.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPaginationNext, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: 'ng-template[ngbPaginationNext]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- /**
- * A directive to match the page 'number' link template
- *
- * @since 4.1.0
- */
- class NgbPaginationNumber {
- constructor(templateRef) {
- this.templateRef = templateRef;
- }
- }
- NgbPaginationNumber.ɵfac = function NgbPaginationNumber_Factory(t) { return new (t || NgbPaginationNumber)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgbPaginationNumber.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbPaginationNumber, selectors: [["ng-template", "ngbPaginationNumber", ""]] });
- NgbPaginationNumber.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPaginationNumber, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: 'ng-template[ngbPaginationNumber]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- /**
- * A directive to match the 'previous' link template
- *
- * @since 4.1.0
- */
- class NgbPaginationPrevious {
- constructor(templateRef) {
- this.templateRef = templateRef;
- }
- }
- NgbPaginationPrevious.ɵfac = function NgbPaginationPrevious_Factory(t) { return new (t || NgbPaginationPrevious)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgbPaginationPrevious.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbPaginationPrevious, selectors: [["ng-template", "ngbPaginationPrevious", ""]] });
- NgbPaginationPrevious.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPaginationPrevious, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: 'ng-template[ngbPaginationPrevious]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- /**
- * A component that displays page numbers and allows to customize them in several ways.
- */
- class NgbPagination {
- constructor(config) {
- this.pageCount = 0;
- this.pages = [];
- /**
- * The current page.
- *
- * Page numbers start with `1`.
- */
- this.page = 1;
- /**
- * An event fired when the page is changed. Will fire only if collection size is set and all values are valid.
- *
- * Event payload is the number of the newly selected page.
- *
- * Page numbers start with `1`.
- */
- this.pageChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](true);
- this.disabled = config.disabled;
- this.boundaryLinks = config.boundaryLinks;
- this.directionLinks = config.directionLinks;
- this.ellipses = config.ellipses;
- this.maxSize = config.maxSize;
- this.pageSize = config.pageSize;
- this.rotate = config.rotate;
- this.size = config.size;
- }
- hasPrevious() { return this.page > 1; }
- hasNext() { return this.page < this.pageCount; }
- nextDisabled() { return !this.hasNext() || this.disabled; }
- previousDisabled() { return !this.hasPrevious() || this.disabled; }
- selectPage(pageNumber) { this._updatePages(pageNumber); }
- ngOnChanges(changes) { this._updatePages(this.page); }
- isEllipsis(pageNumber) { return pageNumber === -1; }
- /**
- * Appends ellipses and first/last page number to the displayed pages
- */
- _applyEllipses(start, end) {
- if (this.ellipses) {
- if (start > 0) {
- // The first page will always be included. If the displayed range
- // starts after the third page, then add ellipsis. But if the range
- // starts on the third page, then add the second page instead of
- // an ellipsis, because the ellipsis would only hide a single page.
- if (start > 2) {
- this.pages.unshift(-1);
- }
- else if (start === 2) {
- this.pages.unshift(2);
- }
- this.pages.unshift(1);
- }
- if (end < this.pageCount) {
- // The last page will always be included. If the displayed range
- // ends before the third-last page, then add ellipsis. But if the range
- // ends on third-last page, then add the second-last page instead of
- // an ellipsis, because the ellipsis would only hide a single page.
- if (end < (this.pageCount - 2)) {
- this.pages.push(-1);
- }
- else if (end === (this.pageCount - 2)) {
- this.pages.push(this.pageCount - 1);
- }
- this.pages.push(this.pageCount);
- }
- }
- }
- /**
- * Rotates page numbers based on maxSize items visible.
- * Currently selected page stays in the middle:
- *
- * Ex. for selected page = 6:
- * [5,*6*,7] for maxSize = 3
- * [4,5,*6*,7] for maxSize = 4
- */
- _applyRotation() {
- let start = 0;
- let end = this.pageCount;
- let leftOffset = Math.floor(this.maxSize / 2);
- let rightOffset = this.maxSize % 2 === 0 ? leftOffset - 1 : leftOffset;
- if (this.page <= leftOffset) {
- // very beginning, no rotation -> [0..maxSize]
- end = this.maxSize;
- }
- else if (this.pageCount - this.page < leftOffset) {
- // very end, no rotation -> [len-maxSize..len]
- start = this.pageCount - this.maxSize;
- }
- else {
- // rotate
- start = this.page - leftOffset - 1;
- end = this.page + rightOffset;
- }
- return [start, end];
- }
- /**
- * Paginates page numbers based on maxSize items per page.
- */
- _applyPagination() {
- let page = Math.ceil(this.page / this.maxSize) - 1;
- let start = page * this.maxSize;
- let end = start + this.maxSize;
- return [start, end];
- }
- _setPageInRange(newPageNo) {
- const prevPageNo = this.page;
- this.page = getValueInRange(newPageNo, this.pageCount, 1);
- if (this.page !== prevPageNo && isNumber(this.collectionSize)) {
- this.pageChange.emit(this.page);
- }
- }
- _updatePages(newPage) {
- this.pageCount = Math.ceil(this.collectionSize / this.pageSize);
- if (!isNumber(this.pageCount)) {
- this.pageCount = 0;
- }
- // fill-in model needed to render pages
- this.pages.length = 0;
- for (let i = 1; i <= this.pageCount; i++) {
- this.pages.push(i);
- }
- // set page within 1..max range
- this._setPageInRange(newPage);
- // apply maxSize if necessary
- if (this.maxSize > 0 && this.pageCount > this.maxSize) {
- let start = 0;
- let end = this.pageCount;
- // either paginating or rotating page numbers
- if (this.rotate) {
- [start, end] = this._applyRotation();
- }
- else {
- [start, end] = this._applyPagination();
- }
- this.pages = this.pages.slice(start, end);
- // adding ellipses
- this._applyEllipses(start, end);
- }
- }
- }
- NgbPagination.ɵfac = function NgbPagination_Factory(t) { return new (t || NgbPagination)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbPaginationConfig)); };
- NgbPagination.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbPagination, selectors: [["ngb-pagination"]], contentQueries: function NgbPagination_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPaginationEllipsis, true);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPaginationFirst, true);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPaginationLast, true);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPaginationNext, true);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPaginationNumber, true);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPaginationPrevious, true);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.tplEllipsis = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.tplFirst = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.tplLast = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.tplNext = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.tplNumber = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.tplPrevious = _t.first);
- } }, hostAttrs: ["role", "navigation"], inputs: { page: "page", disabled: "disabled", boundaryLinks: "boundaryLinks", directionLinks: "directionLinks", ellipses: "ellipses", maxSize: "maxSize", pageSize: "pageSize", rotate: "rotate", size: "size", collectionSize: "collectionSize" }, outputs: { pageChange: "pageChange" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], decls: 18, vars: 7, consts: function () { let i18n_36; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_pagination_first$$FESM2015_NG_BOOTSTRAP_JS__37 = goog.getMsg("\u00AB\u00AB");
- i18n_36 = MSG_EXTERNAL_ngb_pagination_first$$FESM2015_NG_BOOTSTRAP_JS__37;
- }
- else {
- i18n_36 = $localize `:@@ngb.pagination.first␟656506dfd46380956a655f919f1498d018f75ca0␟6867721956102594380:««`;
- } let i18n_38; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_pagination_previous$$FESM2015_NG_BOOTSTRAP_JS__39 = goog.getMsg("\u00AB");
- i18n_38 = MSG_EXTERNAL_ngb_pagination_previous$$FESM2015_NG_BOOTSTRAP_JS__39;
- }
- else {
- i18n_38 = $localize `:@@ngb.pagination.previous␟6e52b6ee77a4848d899dd21b591c6fd499e3aef3␟6479320895410098858:«`;
- } let i18n_40; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_pagination_next$$FESM2015_NG_BOOTSTRAP_JS__41 = goog.getMsg("\u00BB");
- i18n_40 = MSG_EXTERNAL_ngb_pagination_next$$FESM2015_NG_BOOTSTRAP_JS__41;
- }
- else {
- i18n_40 = $localize `:@@ngb.pagination.next␟ba9cbb4ff311464308a3627e4f1c3345d9fe6d7d␟5458177150283468089:»`;
- } let i18n_42; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_pagination_last$$FESM2015_NG_BOOTSTRAP_JS__43 = goog.getMsg("\u00BB\u00BB");
- i18n_42 = MSG_EXTERNAL_ngb_pagination_last$$FESM2015_NG_BOOTSTRAP_JS__43;
- }
- else {
- i18n_42 = $localize `:@@ngb.pagination.last␟49f27a460bc97e7e00be5b37098bfa79884fc7d9␟5277020320267646988:»»`;
- } let i18n_44; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_pagination_first_aria$$FESM2015_NG_BOOTSTRAP_JS__45 = goog.getMsg("First");
- i18n_44 = MSG_EXTERNAL_ngb_pagination_first_aria$$FESM2015_NG_BOOTSTRAP_JS__45;
- }
- else {
- i18n_44 = $localize `:@@ngb.pagination.first-aria␟f2f852318759c6396b5d3d17031d53817d7b38cc␟2241508602425256033:First`;
- } let i18n_47; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_pagination_previous_aria$$FESM2015_NG_BOOTSTRAP_JS__48 = goog.getMsg("Previous");
- i18n_47 = MSG_EXTERNAL_ngb_pagination_previous_aria$$FESM2015_NG_BOOTSTRAP_JS__48;
- }
- else {
- i18n_47 = $localize `:@@ngb.pagination.previous-aria␟680d5c75b7fd8d37961083608b9fcdc4167b4c43␟4452427314943113135:Previous`;
- } let i18n_52; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_pagination_next_aria$$FESM2015_NG_BOOTSTRAP_JS__53 = goog.getMsg("Next");
- i18n_52 = MSG_EXTERNAL_ngb_pagination_next_aria$$FESM2015_NG_BOOTSTRAP_JS__53;
- }
- else {
- i18n_52 = $localize `:@@ngb.pagination.next-aria␟f732c304c7433e5a83ffcd862c3dce709a0f4982␟3885497195825665706:Next`;
- } let i18n_54; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_pagination_last_aria$$FESM2015_NG_BOOTSTRAP_JS__55 = goog.getMsg("Last");
- i18n_54 = MSG_EXTERNAL_ngb_pagination_last_aria$$FESM2015_NG_BOOTSTRAP_JS__55;
- }
- else {
- i18n_54 = $localize `:@@ngb.pagination.last-aria␟5c729788ba138508aca1bec050b610f7bf81db3e␟4882268002141858767:Last`;
- } return [["first", ""], ["previous", ""], ["next", ""], ["last", ""], ["ellipsis", ""], ["defaultNumber", ""], ["class", "page-item", 3, "disabled", 4, "ngIf"], ["class", "page-item", 3, "active", "disabled", 4, "ngFor", "ngForOf"], ["aria-hidden", "true"], i18n_36, i18n_38, i18n_40, i18n_42, ["class", "sr-only", 4, "ngIf"], [1, "sr-only"], [1, "page-item"], ["aria-label", i18n_44, "href", "", 1, "page-link", 3, "click"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], ["aria-label", i18n_47, "href", "", 1, "page-link", 3, "click"], ["class", "page-link", "tabindex", "-1", "aria-disabled", "true", 4, "ngIf"], ["class", "page-link", "href", "", 3, "click", 4, "ngIf"], ["tabindex", "-1", "aria-disabled", "true", 1, "page-link"], ["href", "", 1, "page-link", 3, "click"], ["aria-label", i18n_52, "href", "", 1, "page-link", 3, "click"], ["aria-label", i18n_54, "href", "", 1, "page-link", 3, "click"]]; }, template: function NgbPagination_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbPagination_ng_template_0_Template, 2, 0, "ng-template", null, 0, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbPagination_ng_template_2_Template, 2, 0, "ng-template", null, 1, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, NgbPagination_ng_template_4_Template, 2, 0, "ng-template", null, 2, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](6, NgbPagination_ng_template_6_Template, 2, 0, "ng-template", null, 3, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](8, NgbPagination_ng_template_8_Template, 1, 0, "ng-template", null, 4, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](10, NgbPagination_ng_template_10_Template, 2, 2, "ng-template", null, 5, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](12, "ul");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](13, NgbPagination_li_13_Template, 3, 9, "li", 6);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](14, NgbPagination_li_14_Template, 3, 8, "li", 6);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](15, NgbPagination_li_15_Template, 3, 7, "li", 7);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](16, NgbPagination_li_16_Template, 3, 9, "li", 6);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](17, NgbPagination_li_17_Template, 3, 9, "li", 6);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](12);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("pagination" + (ctx.size ? " pagination-" + ctx.size : ""));
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.boundaryLinks);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.directionLinks);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.pages);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.directionLinks);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.boundaryLinks);
- } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]], encapsulation: 2, changeDetection: 0 });
- NgbPagination.ctorParameters = () => [
- { type: NgbPaginationConfig }
- ];
- NgbPagination.propDecorators = {
- tplEllipsis: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgbPaginationEllipsis, { static: false },] }],
- tplFirst: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgbPaginationFirst, { static: false },] }],
- tplLast: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgbPaginationLast, { static: false },] }],
- tplNext: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgbPaginationNext, { static: false },] }],
- tplNumber: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgbPaginationNumber, { static: false },] }],
- tplPrevious: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgbPaginationPrevious, { static: false },] }],
- disabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- boundaryLinks: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- directionLinks: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ellipses: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- rotate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- collectionSize: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- maxSize: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- page: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- pageSize: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- pageChange: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- size: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPagination, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngb-pagination',
- changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
- host: { 'role': 'navigation' },
- template: `
- <ng-template #first><span aria-hidden="true" i18n="@@ngb.pagination.first">««</span></ng-template>
- <ng-template #previous><span aria-hidden="true" i18n="@@ngb.pagination.previous">«</span></ng-template>
- <ng-template #next><span aria-hidden="true" i18n="@@ngb.pagination.next">»</span></ng-template>
- <ng-template #last><span aria-hidden="true" i18n="@@ngb.pagination.last">»»</span></ng-template>
- <ng-template #ellipsis>...</ng-template>
- <ng-template #defaultNumber let-page let-currentPage="currentPage">
- {{ page }}
- <span *ngIf="page === currentPage" class="sr-only">(current)</span>
- </ng-template>
- <ul [class]="'pagination' + (size ? ' pagination-' + size : '')">
- <li *ngIf="boundaryLinks" class="page-item"
- [class.disabled]="previousDisabled()">
- <a aria-label="First" i18n-aria-label="@@ngb.pagination.first-aria" class="page-link" href
- (click)="selectPage(1); $event.preventDefault()" [attr.tabindex]="previousDisabled() ? '-1' : null"
- [attr.aria-disabled]="previousDisabled() ? 'true' : null">
- <ng-template [ngTemplateOutlet]="tplFirst?.templateRef || first"
- [ngTemplateOutletContext]="{disabled: previousDisabled(), currentPage: page}"></ng-template>
- </a>
- </li>
- <li *ngIf="directionLinks" class="page-item"
- [class.disabled]="previousDisabled()">
- <a aria-label="Previous" i18n-aria-label="@@ngb.pagination.previous-aria" class="page-link" href
- (click)="selectPage(page-1); $event.preventDefault()" [attr.tabindex]="previousDisabled() ? '-1' : null"
- [attr.aria-disabled]="previousDisabled() ? 'true' : null">
- <ng-template [ngTemplateOutlet]="tplPrevious?.templateRef || previous"
- [ngTemplateOutletContext]="{disabled: previousDisabled()}"></ng-template>
- </a>
- </li>
- <li *ngFor="let pageNumber of pages" class="page-item" [class.active]="pageNumber === page"
- [class.disabled]="isEllipsis(pageNumber) || disabled" [attr.aria-current]="(pageNumber === page ? 'page' : null)">
- <a *ngIf="isEllipsis(pageNumber)" class="page-link" tabindex="-1" aria-disabled="true">
- <ng-template [ngTemplateOutlet]="tplEllipsis?.templateRef || ellipsis"
- [ngTemplateOutletContext]="{disabled: true, currentPage: page}"></ng-template>
- </a>
- <a *ngIf="!isEllipsis(pageNumber)" class="page-link" href (click)="selectPage(pageNumber); $event.preventDefault()"
- [attr.tabindex]="disabled ? '-1' : null" [attr.aria-disabled]="disabled ? 'true' : null">
- <ng-template [ngTemplateOutlet]="tplNumber?.templateRef || defaultNumber"
- [ngTemplateOutletContext]="{disabled: disabled, $implicit: pageNumber, currentPage: page}"></ng-template>
- </a>
- </li>
- <li *ngIf="directionLinks" class="page-item" [class.disabled]="nextDisabled()">
- <a aria-label="Next" i18n-aria-label="@@ngb.pagination.next-aria" class="page-link" href
- (click)="selectPage(page+1); $event.preventDefault()" [attr.tabindex]="nextDisabled() ? '-1' : null"
- [attr.aria-disabled]="nextDisabled() ? 'true' : null">
- <ng-template [ngTemplateOutlet]="tplNext?.templateRef || next"
- [ngTemplateOutletContext]="{disabled: nextDisabled(), currentPage: page}"></ng-template>
- </a>
- </li>
- <li *ngIf="boundaryLinks" class="page-item" [class.disabled]="nextDisabled()">
- <a aria-label="Last" i18n-aria-label="@@ngb.pagination.last-aria" class="page-link" href
- (click)="selectPage(pageCount); $event.preventDefault()" [attr.tabindex]="nextDisabled() ? '-1' : null"
- [attr.aria-disabled]="nextDisabled() ? 'true' : null">
- <ng-template [ngTemplateOutlet]="tplLast?.templateRef || last"
- [ngTemplateOutletContext]="{disabled: nextDisabled(), currentPage: page}"></ng-template>
- </a>
- </li>
- </ul>
- `
- }]
- }], function () { return [{ type: NgbPaginationConfig }]; }, { page: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], pageChange: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], disabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], boundaryLinks: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], directionLinks: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ellipses: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], maxSize: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], pageSize: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], rotate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], size: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], tplEllipsis: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgbPaginationEllipsis, { static: false }]
- }], tplFirst: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgbPaginationFirst, { static: false }]
- }], tplLast: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgbPaginationLast, { static: false }]
- }], tplNext: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgbPaginationNext, { static: false }]
- }], tplNumber: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgbPaginationNumber, { static: false }]
- }], tplPrevious: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgbPaginationPrevious, { static: false }]
- }], collectionSize: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- const DIRECTIVES = [
- NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber,
- NgbPaginationPrevious
- ];
- class NgbPaginationModule {
- }
- NgbPaginationModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbPaginationModule });
- NgbPaginationModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbPaginationModule_Factory(t) { return new (t || NgbPaginationModule)(); }, imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbPaginationModule, { declarations: function () { return [NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]; }, exports: function () { return [NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPaginationModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{ declarations: DIRECTIVES, exports: DIRECTIVES, imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]] }]
- }], null, null); })();
- class Trigger {
- constructor(open, close) {
- this.open = open;
- this.close = close;
- if (!close) {
- this.close = open;
- }
- }
- isManual() { return this.open === 'manual' || this.close === 'manual'; }
- }
- const DEFAULT_ALIASES = {
- 'hover': ['mouseenter', 'mouseleave'],
- 'focus': ['focusin', 'focusout'],
- };
- function parseTriggers(triggers, aliases = DEFAULT_ALIASES) {
- const trimmedTriggers = (triggers || '').trim();
- if (trimmedTriggers.length === 0) {
- return [];
- }
- const parsedTriggers = trimmedTriggers.split(/\s+/).map(trigger => trigger.split(':')).map((triggerPair) => {
- let alias = aliases[triggerPair[0]] || triggerPair;
- return new Trigger(alias[0], alias[1]);
- });
- const manualTriggers = parsedTriggers.filter(triggerPair => triggerPair.isManual());
- if (manualTriggers.length > 1) {
- throw 'Triggers parse error: only one manual trigger is allowed';
- }
- if (manualTriggers.length === 1 && parsedTriggers.length > 1) {
- throw 'Triggers parse error: manual trigger can\'t be mixed with other triggers';
- }
- return parsedTriggers;
- }
- function observeTriggers(renderer, nativeElement, triggers, isOpenedFn) {
- return new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"](subscriber => {
- const listeners = [];
- const openFn = () => subscriber.next(true);
- const closeFn = () => subscriber.next(false);
- const toggleFn = () => subscriber.next(!isOpenedFn());
- triggers.forEach((trigger) => {
- if (trigger.open === trigger.close) {
- listeners.push(renderer.listen(nativeElement, trigger.open, toggleFn));
- }
- else {
- listeners.push(renderer.listen(nativeElement, trigger.open, openFn), renderer.listen(nativeElement, trigger.close, closeFn));
- }
- });
- return () => { listeners.forEach(unsubscribeFn => unsubscribeFn()); };
- });
- }
- const delayOrNoop = (time) => time > 0 ? Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["delay"])(time) : (a) => a;
- const ɵ0$5 = delayOrNoop;
- function triggerDelay(openDelay, closeDelay, isOpenedFn) {
- return (input$) => {
- let pending = null;
- const filteredInput$ = input$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(open => ({ open })), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(event => {
- const currentlyOpen = isOpenedFn();
- if (currentlyOpen !== event.open && (!pending || pending.open === currentlyOpen)) {
- pending = event;
- return true;
- }
- if (pending && pending.open !== event.open) {
- pending = null;
- }
- return false;
- }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["share"])());
- const delayedOpen$ = filteredInput$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(event => event.open), delayOrNoop(openDelay));
- const delayedClose$ = filteredInput$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(event => !event.open), delayOrNoop(closeDelay));
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["merge"])(delayedOpen$, delayedClose$)
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(event => {
- if (event === pending) {
- pending = null;
- return event.open !== isOpenedFn();
- }
- return false;
- }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(event => event.open));
- };
- }
- function listenToTriggers(renderer, nativeElement, triggers, isOpenedFn, openFn, closeFn, openDelay = 0, closeDelay = 0) {
- const parsedTriggers = parseTriggers(triggers);
- if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) {
- return () => { };
- }
- const subscription = observeTriggers(renderer, nativeElement, parsedTriggers, isOpenedFn)
- .pipe(triggerDelay(openDelay, closeDelay, isOpenedFn))
- .subscribe(open => (open ? openFn() : closeFn()));
- return () => subscription.unsubscribe();
- }
- /**
- * A configuration service for the [`NgbPopover`](#/components/popover/api#NgbPopover) component.
- *
- * You can inject this service, typically in your root component, and customize the values of its properties in
- * order to provide default values for all the popovers used in the application.
- */
- class NgbPopoverConfig {
- constructor(ngbConfig) {
- this.autoClose = true;
- this.placement = 'auto';
- this.triggers = 'click';
- this.disablePopover = false;
- this.openDelay = 0;
- this.closeDelay = 0;
- this.animation = ngbConfig.animation;
- }
- }
- NgbPopoverConfig.ɵfac = function NgbPopoverConfig_Factory(t) { return new (t || NgbPopoverConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig)); };
- NgbPopoverConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbPopoverConfig_Factory() { return new NgbPopoverConfig(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(NgbConfig)); }, token: NgbPopoverConfig, providedIn: "root" });
- NgbPopoverConfig.ctorParameters = () => [
- { type: NgbConfig }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPopoverConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: NgbConfig }]; }, null); })();
- let nextId$3 = 0;
- class NgbPopoverWindow {
- isTitleTemplate() { return this.title instanceof _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]; }
- }
- NgbPopoverWindow.ɵfac = function NgbPopoverWindow_Factory(t) { return new (t || NgbPopoverWindow)(); };
- NgbPopoverWindow.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbPopoverWindow, selectors: [["ngb-popover-window"]], hostAttrs: ["role", "tooltip"], hostVars: 5, hostBindings: function NgbPopoverWindow_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("id", ctx.id);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("popover" + (ctx.popoverClass ? " " + ctx.popoverClass : ""));
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("fade", ctx.animation);
- } }, inputs: { animation: "animation", title: "title", id: "id", popoverClass: "popoverClass", context: "context" }, ngContentSelectors: _c5, decls: 4, vars: 1, consts: [[1, "arrow"], ["class", "popover-header", 4, "ngIf"], [1, "popover-body"], [1, "popover-header"], ["simpleTitle", ""], [3, "ngTemplateOutlet", "ngTemplateOutletContext"]], template: function NgbPopoverWindow_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbPopoverWindow_h3_1_Template, 4, 2, "h3", 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "div", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.title);
- } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]], styles: ["ngb-popover-window.bs-popover-bottom>.arrow,ngb-popover-window.bs-popover-top>.arrow{left:50%;margin-left:-.5rem}ngb-popover-window.bs-popover-bottom-left>.arrow,ngb-popover-window.bs-popover-top-left>.arrow{left:2em}ngb-popover-window.bs-popover-bottom-right>.arrow,ngb-popover-window.bs-popover-top-right>.arrow{left:auto;right:2em}ngb-popover-window.bs-popover-left>.arrow,ngb-popover-window.bs-popover-right>.arrow{margin-top:-.5rem;top:50%}ngb-popover-window.bs-popover-left-top>.arrow,ngb-popover-window.bs-popover-right-top>.arrow{top:.7em}ngb-popover-window.bs-popover-left-bottom>.arrow,ngb-popover-window.bs-popover-right-bottom>.arrow{bottom:.7em;top:auto}"], encapsulation: 2, changeDetection: 0 });
- NgbPopoverWindow.propDecorators = {
- animation: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- title: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- id: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- popoverClass: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- context: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPopoverWindow, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngb-popover-window',
- changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- host: {
- '[class]': '"popover" + (popoverClass ? " " + popoverClass : "")',
- '[class.fade]': 'animation',
- 'role': 'tooltip',
- '[id]': 'id'
- },
- template: `
- <div class="arrow"></div>
- <h3 class="popover-header" *ngIf="title">
- <ng-template #simpleTitle>{{title}}</ng-template>
- <ng-template [ngTemplateOutlet]="isTitleTemplate() ? $any(title) : simpleTitle" [ngTemplateOutletContext]="context"></ng-template>
- </h3>
- <div class="popover-body"><ng-content></ng-content></div>`,
- styles: ["ngb-popover-window.bs-popover-bottom>.arrow,ngb-popover-window.bs-popover-top>.arrow{left:50%;margin-left:-.5rem}ngb-popover-window.bs-popover-bottom-left>.arrow,ngb-popover-window.bs-popover-top-left>.arrow{left:2em}ngb-popover-window.bs-popover-bottom-right>.arrow,ngb-popover-window.bs-popover-top-right>.arrow{left:auto;right:2em}ngb-popover-window.bs-popover-left>.arrow,ngb-popover-window.bs-popover-right>.arrow{margin-top:-.5rem;top:50%}ngb-popover-window.bs-popover-left-top>.arrow,ngb-popover-window.bs-popover-right-top>.arrow{top:.7em}ngb-popover-window.bs-popover-left-bottom>.arrow,ngb-popover-window.bs-popover-right-bottom>.arrow{bottom:.7em;top:auto}"]
- }]
- }], null, { animation: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], title: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], id: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], popoverClass: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], context: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * A lightweight and extensible directive for fancy popover creation.
- */
- class NgbPopover {
- constructor(_elementRef, _renderer, injector, componentFactoryResolver, viewContainerRef, config, _ngZone, _document, _changeDetector, applicationRef) {
- this._elementRef = _elementRef;
- this._renderer = _renderer;
- this._ngZone = _ngZone;
- this._document = _document;
- this._changeDetector = _changeDetector;
- /**
- * An event emitted when the popover opening animation has finished. Contains no payload.
- */
- this.shown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An event emitted when the popover closing animation has finished. Contains no payload.
- *
- * At this point popover is not in the DOM anymore.
- */
- this.hidden = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this._ngbPopoverWindowId = `ngb-popover-${nextId$3++}`;
- this._windowRef = null;
- this.animation = config.animation;
- this.autoClose = config.autoClose;
- this.placement = config.placement;
- this.triggers = config.triggers;
- this.container = config.container;
- this.disablePopover = config.disablePopover;
- this.popoverClass = config.popoverClass;
- this.openDelay = config.openDelay;
- this.closeDelay = config.closeDelay;
- this._popupService = new PopupService(NgbPopoverWindow, injector, viewContainerRef, _renderer, this._ngZone, componentFactoryResolver, applicationRef);
- this._zoneSubscription = _ngZone.onStable.subscribe(() => {
- if (this._windowRef) {
- positionElements(this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement, this.container === 'body', 'bs-popover');
- }
- });
- }
- _isDisabled() {
- if (this.disablePopover) {
- return true;
- }
- if (!this.ngbPopover && !this.popoverTitle) {
- return true;
- }
- return false;
- }
- /**
- * Opens the popover.
- *
- * This is considered to be a "manual" triggering.
- * The `context` is an optional value to be injected into the popover template when it is created.
- */
- open(context) {
- if (!this._windowRef && !this._isDisabled()) {
- // this type assertion is safe because otherwise _isDisabled would return true
- const { windowRef, transition$ } = this._popupService.open(this.ngbPopover, context, this.animation);
- this._windowRef = windowRef;
- this._windowRef.instance.animation = this.animation;
- this._windowRef.instance.title = this.popoverTitle;
- this._windowRef.instance.context = context;
- this._windowRef.instance.popoverClass = this.popoverClass;
- this._windowRef.instance.id = this._ngbPopoverWindowId;
- this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbPopoverWindowId);
- if (this.container === 'body') {
- this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);
- }
- // We need to detect changes, because we don't know where .open() might be called from.
- // Ex. opening popover from one of lifecycle hooks that run after the CD
- // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception
- this._windowRef.changeDetectorRef.detectChanges();
- // We need to mark for check, because popover won't work inside the OnPush component.
- // Ex. when we use expression like `{{ popover.isOpen() : 'opened' : 'closed' }}`
- // inside the template of an OnPush component and we change the popover from
- // open -> closed, the expression in question won't be updated unless we explicitly
- // mark the parent component to be checked.
- this._windowRef.changeDetectorRef.markForCheck();
- ngbAutoClose(this._ngZone, this._document, this.autoClose, () => this.close(), this.hidden, [this._windowRef.location.nativeElement]);
- transition$.subscribe(() => this.shown.emit());
- }
- }
- /**
- * Closes the popover.
- *
- * This is considered to be a "manual" triggering of the popover.
- */
- close() {
- if (this._windowRef) {
- this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');
- this._popupService.close(this.animation).subscribe(() => {
- this._windowRef = null;
- this.hidden.emit();
- this._changeDetector.markForCheck();
- });
- }
- }
- /**
- * Toggles the popover.
- *
- * This is considered to be a "manual" triggering of the popover.
- */
- toggle() {
- if (this._windowRef) {
- this.close();
- }
- else {
- this.open();
- }
- }
- /**
- * Returns `true`, if the popover is currently shown.
- */
- isOpen() { return this._windowRef != null; }
- ngOnInit() {
- this._unregisterListenersFn = listenToTriggers(this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay);
- }
- ngOnChanges({ ngbPopover, popoverTitle, disablePopover, popoverClass }) {
- if (popoverClass && this.isOpen()) {
- this._windowRef.instance.popoverClass = popoverClass.currentValue;
- }
- // close popover if title and content become empty, or disablePopover set to true
- if ((ngbPopover || popoverTitle || disablePopover) && this._isDisabled()) {
- this.close();
- }
- }
- ngOnDestroy() {
- this.close();
- // This check is needed as it might happen that ngOnDestroy is called before ngOnInit
- // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199
- if (this._unregisterListenersFn) {
- this._unregisterListenersFn();
- }
- this._zoneSubscription.unsubscribe();
- }
- }
- NgbPopover.ɵfac = function NgbPopover_Factory(t) { return new (t || NgbPopover)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbPopoverConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"])); };
- NgbPopover.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbPopover, selectors: [["", "ngbPopover", ""]], inputs: { animation: "animation", autoClose: "autoClose", placement: "placement", triggers: "triggers", container: "container", disablePopover: "disablePopover", popoverClass: "popoverClass", openDelay: "openDelay", closeDelay: "closeDelay", ngbPopover: "ngbPopover", popoverTitle: "popoverTitle" }, outputs: { shown: "shown", hidden: "hidden" }, exportAs: ["ngbPopover"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- NgbPopover.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] },
- { type: NgbPopoverConfig },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"],] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"] }
- ];
- NgbPopover.propDecorators = {
- animation: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- autoClose: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ngbPopover: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- popoverTitle: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- placement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- triggers: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- container: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- disablePopover: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- popoverClass: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- openDelay: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- closeDelay: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- shown: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- hidden: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPopover, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngbPopover]', exportAs: 'ngbPopover' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] }, { type: NgbPopoverConfig }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"] }]; }, { shown: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], hidden: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], animation: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], autoClose: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], placement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], triggers: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], container: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], disablePopover: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], popoverClass: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], openDelay: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], closeDelay: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ngbPopover: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], popoverTitle: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class NgbPopoverModule {
- }
- NgbPopoverModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbPopoverModule });
- NgbPopoverModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbPopoverModule_Factory(t) { return new (t || NgbPopoverModule)(); }, imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbPopoverModule, { declarations: function () { return [NgbPopover, NgbPopoverWindow]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]; }, exports: function () { return [NgbPopover]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPopoverModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- declarations: [NgbPopover, NgbPopoverWindow],
- exports: [NgbPopover],
- imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]],
- entryComponents: [NgbPopoverWindow]
- }]
- }], null, null); })();
- /**
- * A configuration service for the [`NgbProgressbar`](#/components/progressbar/api#NgbProgressbar) component.
- *
- * You can inject this service, typically in your root component, and customize the values of its properties in
- * order to provide default values for all the progress bars used in the application.
- */
- class NgbProgressbarConfig {
- constructor() {
- this.max = 100;
- this.animated = false;
- this.striped = false;
- this.showValue = false;
- }
- }
- NgbProgressbarConfig.ɵfac = function NgbProgressbarConfig_Factory(t) { return new (t || NgbProgressbarConfig)(); };
- NgbProgressbarConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbProgressbarConfig_Factory() { return new NgbProgressbarConfig(); }, token: NgbProgressbarConfig, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbProgressbarConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return []; }, null); })();
- /**
- * A directive that provides feedback on the progress of a workflow or an action.
- */
- class NgbProgressbar {
- constructor(config) {
- /**
- * The current value for the progress bar.
- *
- * Should be in the `[0, max]` range.
- */
- this.value = 0;
- this.max = config.max;
- this.animated = config.animated;
- this.striped = config.striped;
- this.textType = config.textType;
- this.type = config.type;
- this.showValue = config.showValue;
- this.height = config.height;
- }
- /**
- * The maximal value to be displayed in the progress bar.
- *
- * Should be a positive number. Will default to 100 otherwise.
- */
- set max(max) {
- this._max = !isNumber(max) || max <= 0 ? 100 : max;
- }
- get max() { return this._max; }
- getValue() { return getValueInRange(this.value, this.max); }
- getPercentValue() { return 100 * this.getValue() / this.max; }
- }
- NgbProgressbar.ɵfac = function NgbProgressbar_Factory(t) { return new (t || NgbProgressbar)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbProgressbarConfig)); };
- NgbProgressbar.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbProgressbar, selectors: [["ngb-progressbar"]], hostAttrs: [1, "progress"], hostVars: 2, hostBindings: function NgbProgressbar_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("height", ctx.height);
- } }, inputs: { value: "value", max: "max", animated: "animated", striped: "striped", textType: "textType", type: "type", showValue: "showValue", height: "height" }, ngContentSelectors: _c5, decls: 3, vars: 11, consts: function () { let i18n_56; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_progressbar_value$$FESM2015_NG_BOOTSTRAP_JS__57 = goog.getMsg("{$interpolation}", { "interpolation": "\uFFFD0\uFFFD" });
- i18n_56 = MSG_EXTERNAL_ngb_progressbar_value$$FESM2015_NG_BOOTSTRAP_JS__57;
- }
- else {
- i18n_56 = $localize `:@@ngb.progressbar.value␟f8e9a947b9db4252c0e9905765338712f2fd032f␟3720830768741091151:${"\uFFFD0\uFFFD"}:INTERPOLATION:`;
- } return [["role", "progressbar", "aria-valuemin", "0"], [4, "ngIf"], i18n_56]; }, template: function NgbProgressbar_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbProgressbar_span_1_Template, 3, 3, "span", 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMapInterpolate4"]("progress-bar", ctx.type ? " bg-" + ctx.type : "", "", ctx.textType ? " text-" + ctx.textType : "", "\n ", ctx.animated ? " progress-bar-animated" : "", "", ctx.striped ? " progress-bar-striped" : "", "");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("width", ctx.getPercentValue(), "%");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-valuenow", ctx.getValue())("aria-valuemax", ctx.max);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.showValue);
- } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"]], pipes: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["PercentPipe"]], encapsulation: 2, changeDetection: 0 });
- NgbProgressbar.ctorParameters = () => [
- { type: NgbProgressbarConfig }
- ];
- NgbProgressbar.propDecorators = {
- max: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- animated: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- striped: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- showValue: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- textType: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- type: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- value: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- height: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"], args: ['style.height',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbProgressbar, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngb-progressbar',
- changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- host: { class: 'progress' },
- template: `
- <div class="progress-bar{{type ? ' bg-' + type : ''}}{{textType ? ' text-' + textType : ''}}
- {{animated ? ' progress-bar-animated' : ''}}{{striped ? ' progress-bar-striped' : ''}}"
- role="progressbar" [style.width.%]="getPercentValue()"
- [attr.aria-valuenow]="getValue()" aria-valuemin="0" [attr.aria-valuemax]="max">
- <span *ngIf="showValue" i18n="@@ngb.progressbar.value">{{getValue() / max | percent}}</span><ng-content></ng-content>
- </div>
- `
- }]
- }], function () { return [{ type: NgbProgressbarConfig }]; }, { value: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], max: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], animated: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], striped: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], textType: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], type: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], showValue: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], height: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
- args: ['style.height']
- }] }); })();
- class NgbProgressbarModule {
- }
- NgbProgressbarModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbProgressbarModule });
- NgbProgressbarModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbProgressbarModule_Factory(t) { return new (t || NgbProgressbarModule)(); }, imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbProgressbarModule, { declarations: function () { return [NgbProgressbar]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]; }, exports: function () { return [NgbProgressbar]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbProgressbarModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{ declarations: [NgbProgressbar], exports: [NgbProgressbar], imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]] }]
- }], null, null); })();
- /**
- * A configuration service for the [`NgbRating`](#/components/rating/api#NgbRating) component.
- *
- * You can inject this service, typically in your root component, and customize the values of its properties in
- * order to provide default values for all the ratings used in the application.
- */
- class NgbRatingConfig {
- constructor() {
- this.max = 10;
- this.readonly = false;
- this.resettable = false;
- }
- }
- NgbRatingConfig.ɵfac = function NgbRatingConfig_Factory(t) { return new (t || NgbRatingConfig)(); };
- NgbRatingConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbRatingConfig_Factory() { return new NgbRatingConfig(); }, token: NgbRatingConfig, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbRatingConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return []; }, null); })();
- const NGB_RATING_VALUE_ACCESSOR = {
- provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbRating),
- multi: true
- };
- /**
- * A directive that helps visualising and interacting with a star rating bar.
- */
- class NgbRating {
- constructor(config, _changeDetectorRef) {
- this._changeDetectorRef = _changeDetectorRef;
- this.contexts = [];
- this.disabled = false;
- /**
- * An event emitted when the user is hovering over a given rating.
- *
- * Event payload equals to the rating being hovered over.
- */
- this.hover = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An event emitted when the user stops hovering over a given rating.
- *
- * Event payload equals to the rating of the last item being hovered over.
- */
- this.leave = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An event emitted when the user selects a new rating.
- *
- * Event payload equals to the newly selected rating.
- */
- this.rateChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](true);
- this.onChange = (_) => { };
- this.onTouched = () => { };
- this.max = config.max;
- this.readonly = config.readonly;
- }
- ariaValueText() { return `${this.nextRate} out of ${this.max}`; }
- isInteractive() { return !this.readonly && !this.disabled; }
- enter(value) {
- if (this.isInteractive()) {
- this._updateState(value);
- }
- this.hover.emit(value);
- }
- handleBlur() { this.onTouched(); }
- handleClick(value) {
- if (this.isInteractive()) {
- this.update(this.resettable && this.rate === value ? 0 : value);
- }
- }
- handleKeyDown(event) {
- // tslint:disable-next-line:deprecation
- switch (event.which) {
- case Key.ArrowDown:
- case Key.ArrowLeft:
- this.update(this.rate - 1);
- break;
- case Key.ArrowUp:
- case Key.ArrowRight:
- this.update(this.rate + 1);
- break;
- case Key.Home:
- this.update(0);
- break;
- case Key.End:
- this.update(this.max);
- break;
- default:
- return;
- }
- // note 'return' in default case
- event.preventDefault();
- }
- ngOnChanges(changes) {
- if (changes['rate']) {
- this.update(this.rate);
- }
- }
- ngOnInit() {
- this.contexts = Array.from({ length: this.max }, (v, k) => ({ fill: 0, index: k }));
- this._updateState(this.rate);
- }
- registerOnChange(fn) { this.onChange = fn; }
- registerOnTouched(fn) { this.onTouched = fn; }
- reset() {
- this.leave.emit(this.nextRate);
- this._updateState(this.rate);
- }
- setDisabledState(isDisabled) { this.disabled = isDisabled; }
- update(value, internalChange = true) {
- const newRate = getValueInRange(value, this.max, 0);
- if (this.isInteractive() && this.rate !== newRate) {
- this.rate = newRate;
- this.rateChange.emit(this.rate);
- }
- if (internalChange) {
- this.onChange(this.rate);
- this.onTouched();
- }
- this._updateState(this.rate);
- }
- writeValue(value) {
- this.update(value, false);
- this._changeDetectorRef.markForCheck();
- }
- _updateState(nextValue) {
- this.nextRate = nextValue;
- this.contexts.forEach((context, index) => context.fill = Math.round(getValueInRange(nextValue - index, 1, 0) * 100));
- }
- }
- NgbRating.ɵfac = function NgbRating_Factory(t) { return new (t || NgbRating)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbRatingConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"])); };
- NgbRating.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbRating, selectors: [["ngb-rating"]], contentQueries: function NgbRating_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"], true);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.starTemplateFromContent = _t.first);
- } }, hostAttrs: ["role", "slider", "aria-valuemin", "0", 1, "d-inline-flex"], hostVars: 5, hostBindings: function NgbRating_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("blur", function NgbRating_blur_HostBindingHandler() { return ctx.handleBlur(); })("keydown", function NgbRating_keydown_HostBindingHandler($event) { return ctx.handleKeyDown($event); })("mouseleave", function NgbRating_mouseleave_HostBindingHandler() { return ctx.reset(); });
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("tabindex", ctx.disabled ? -1 : 0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-valuemax", ctx.max)("aria-valuenow", ctx.nextRate)("aria-valuetext", ctx.ariaValueText())("aria-disabled", ctx.readonly ? true : null);
- } }, inputs: { max: "max", readonly: "readonly", rate: "rate", resettable: "resettable", starTemplate: "starTemplate" }, outputs: { hover: "hover", leave: "leave", rateChange: "rateChange" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([NGB_RATING_VALUE_ACCESSOR]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], decls: 3, vars: 1, consts: [["t", ""], ["ngFor", "", 3, "ngForOf"], [1, "sr-only"], [3, "mouseenter", "click"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"]], template: function NgbRating_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbRating_ng_template_0_Template, 1, 1, "ng-template", null, 0, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbRating_ng_template_2_Template, 4, 5, "ng-template", 1);
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.contexts);
- } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]], encapsulation: 2, changeDetection: 0 });
- NgbRating.ctorParameters = () => [
- { type: NgbRatingConfig },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }
- ];
- NgbRating.propDecorators = {
- max: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- rate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- readonly: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- resettable: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- starTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- starTemplateFromContent: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"], { static: false },] }],
- hover: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- leave: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- rateChange: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbRating, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngb-rating',
- changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- host: {
- 'class': 'd-inline-flex',
- '[tabindex]': 'disabled ? -1 : 0',
- 'role': 'slider',
- 'aria-valuemin': '0',
- '[attr.aria-valuemax]': 'max',
- '[attr.aria-valuenow]': 'nextRate',
- '[attr.aria-valuetext]': 'ariaValueText()',
- '[attr.aria-disabled]': 'readonly ? true : null',
- '(blur)': 'handleBlur()',
- '(keydown)': 'handleKeyDown($event)',
- '(mouseleave)': 'reset()'
- },
- template: `
- <ng-template #t let-fill="fill">{{ fill === 100 ? '★' : '☆' }}</ng-template>
- <ng-template ngFor [ngForOf]="contexts" let-index="index">
- <span class="sr-only">({{ index < nextRate ? '*' : ' ' }})</span>
- <span (mouseenter)="enter(index + 1)" (click)="handleClick(index + 1)" [style.cursor]="isInteractive() ? 'pointer' : 'default'">
- <ng-template [ngTemplateOutlet]="starTemplate || starTemplateFromContent || t" [ngTemplateOutletContext]="contexts[index]">
- </ng-template>
- </span>
- </ng-template>
- `,
- providers: [NGB_RATING_VALUE_ACCESSOR]
- }]
- }], function () { return [{ type: NgbRatingConfig }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }]; }, { hover: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], leave: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], rateChange: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], max: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], readonly: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], rate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], resettable: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], starTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], starTemplateFromContent: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"], { static: false }]
- }] }); })();
- class NgbRatingModule {
- }
- NgbRatingModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbRatingModule });
- NgbRatingModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbRatingModule_Factory(t) { return new (t || NgbRatingModule)(); }, imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbRatingModule, { declarations: function () { return [NgbRating]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]; }, exports: function () { return [NgbRating]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbRatingModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{ declarations: [NgbRating], exports: [NgbRating], imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]] }]
- }], null, null); })();
- class NgbTime {
- constructor(hour, minute, second) {
- this.hour = toInteger(hour);
- this.minute = toInteger(minute);
- this.second = toInteger(second);
- }
- changeHour(step = 1) { this.updateHour((isNaN(this.hour) ? 0 : this.hour) + step); }
- updateHour(hour) {
- if (isNumber(hour)) {
- this.hour = (hour < 0 ? 24 + hour : hour) % 24;
- }
- else {
- this.hour = NaN;
- }
- }
- changeMinute(step = 1) { this.updateMinute((isNaN(this.minute) ? 0 : this.minute) + step); }
- updateMinute(minute) {
- if (isNumber(minute)) {
- this.minute = minute % 60 < 0 ? 60 + minute % 60 : minute % 60;
- this.changeHour(Math.floor(minute / 60));
- }
- else {
- this.minute = NaN;
- }
- }
- changeSecond(step = 1) { this.updateSecond((isNaN(this.second) ? 0 : this.second) + step); }
- updateSecond(second) {
- if (isNumber(second)) {
- this.second = second < 0 ? 60 + second % 60 : second % 60;
- this.changeMinute(Math.floor(second / 60));
- }
- else {
- this.second = NaN;
- }
- }
- isValid(checkSecs = true) {
- return isNumber(this.hour) && isNumber(this.minute) && (checkSecs ? isNumber(this.second) : true);
- }
- toString() { return `${this.hour || 0}:${this.minute || 0}:${this.second || 0}`; }
- }
- /**
- * A configuration service for the [`NgbTimepicker`](#/components/timepicker/api#NgbTimepicker) component.
- *
- * You can inject this service, typically in your root component, and customize the values of its properties in
- * order to provide default values for all the timepickers used in the application.
- */
- class NgbTimepickerConfig {
- constructor() {
- this.meridian = false;
- this.spinners = true;
- this.seconds = false;
- this.hourStep = 1;
- this.minuteStep = 1;
- this.secondStep = 1;
- this.disabled = false;
- this.readonlyInputs = false;
- this.size = 'medium';
- }
- }
- NgbTimepickerConfig.ɵfac = function NgbTimepickerConfig_Factory(t) { return new (t || NgbTimepickerConfig)(); };
- NgbTimepickerConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbTimepickerConfig_Factory() { return new NgbTimepickerConfig(); }, token: NgbTimepickerConfig, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTimepickerConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return []; }, null); })();
- function NGB_DATEPICKER_TIME_ADAPTER_FACTORY() {
- return new NgbTimeStructAdapter();
- }
- /**
- * An abstract service that does the conversion between the internal timepicker `NgbTimeStruct` model and
- * any provided user time model `T`, ex. a string, a native date, etc.
- *
- * The adapter is used **only** for conversion when binding timepicker to a form control,
- * ex. `[(ngModel)]="userTimeModel"`. Here `userTimeModel` can be of any type.
- *
- * The default timepicker implementation assumes we use `NgbTimeStruct` as a user model.
- *
- * See the [custom time adapter demo](#/components/timepicker/examples#adapter) for an example.
- *
- * @since 2.2.0
- */
- class NgbTimeAdapter {
- }
- NgbTimeAdapter.ɵfac = function NgbTimeAdapter_Factory(t) { return new (t || NgbTimeAdapter)(); };
- NgbTimeAdapter.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY, token: NgbTimeAdapter, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTimeAdapter, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY }]
- }], null, null); })();
- class NgbTimeStructAdapter extends NgbTimeAdapter {
- /**
- * Converts a NgbTimeStruct value into NgbTimeStruct value
- */
- fromModel(time) {
- return (time && isInteger(time.hour) && isInteger(time.minute)) ?
- { hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null } :
- null;
- }
- /**
- * Converts a NgbTimeStruct value into NgbTimeStruct value
- */
- toModel(time) {
- return (time && isInteger(time.hour) && isInteger(time.minute)) ?
- { hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null } :
- null;
- }
- }
- NgbTimeStructAdapter.ɵfac = function NgbTimeStructAdapter_Factory(t) { return ɵNgbTimeStructAdapter_BaseFactory(t || NgbTimeStructAdapter); };
- NgbTimeStructAdapter.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NgbTimeStructAdapter, factory: NgbTimeStructAdapter.ɵfac });
- const ɵNgbTimeStructAdapter_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbTimeStructAdapter);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTimeStructAdapter, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- function NGB_TIMEPICKER_I18N_FACTORY(locale) {
- return new NgbTimepickerI18nDefault(locale);
- }
- /**
- * Type of the service supplying day periods (for example, 'AM' and 'PM') to NgbTimepicker component.
- * The default implementation of this service honors the Angular locale, and uses the registered locale data,
- * as explained in the Angular i18n guide.
- */
- class NgbTimepickerI18n {
- }
- NgbTimepickerI18n.ɵfac = function NgbTimepickerI18n_Factory(t) { return new (t || NgbTimepickerI18n)(); };
- NgbTimepickerI18n.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbTimepickerI18n_Factory() { return NGB_TIMEPICKER_I18N_FACTORY(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"])); }, token: NgbTimepickerI18n, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTimepickerI18n, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root', useFactory: NGB_TIMEPICKER_I18N_FACTORY, deps: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]] }]
- }], null, null); })();
- class NgbTimepickerI18nDefault extends NgbTimepickerI18n {
- constructor(locale) {
- super();
- this._periods = Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["getLocaleDayPeriods"])(locale, _angular_common__WEBPACK_IMPORTED_MODULE_1__["FormStyle"].Standalone, _angular_common__WEBPACK_IMPORTED_MODULE_1__["TranslationWidth"].Narrow);
- }
- getMorningPeriod() { return this._periods[0]; }
- getAfternoonPeriod() { return this._periods[1]; }
- }
- NgbTimepickerI18nDefault.ɵfac = function NgbTimepickerI18nDefault_Factory(t) { return new (t || NgbTimepickerI18nDefault)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"])); };
- NgbTimepickerI18nDefault.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NgbTimepickerI18nDefault, factory: NgbTimepickerI18nDefault.ɵfac });
- NgbTimepickerI18nDefault.ctorParameters = () => [
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTimepickerI18nDefault, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
- }] }]; }, null); })();
- const FILTER_REGEX = /[^0-9]/g;
- const NGB_TIMEPICKER_VALUE_ACCESSOR = {
- provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbTimepicker),
- multi: true
- };
- /**
- * A directive that helps with wth picking hours, minutes and seconds.
- */
- class NgbTimepicker {
- constructor(_config, _ngbTimeAdapter, _cd, i18n) {
- this._config = _config;
- this._ngbTimeAdapter = _ngbTimeAdapter;
- this._cd = _cd;
- this.i18n = i18n;
- this.onChange = (_) => { };
- this.onTouched = () => { };
- this.meridian = _config.meridian;
- this.spinners = _config.spinners;
- this.seconds = _config.seconds;
- this.hourStep = _config.hourStep;
- this.minuteStep = _config.minuteStep;
- this.secondStep = _config.secondStep;
- this.disabled = _config.disabled;
- this.readonlyInputs = _config.readonlyInputs;
- this.size = _config.size;
- }
- /**
- * The number of hours to add/subtract when clicking hour spinners.
- */
- set hourStep(step) {
- this._hourStep = isInteger(step) ? step : this._config.hourStep;
- }
- get hourStep() { return this._hourStep; }
- /**
- * The number of minutes to add/subtract when clicking minute spinners.
- */
- set minuteStep(step) {
- this._minuteStep = isInteger(step) ? step : this._config.minuteStep;
- }
- get minuteStep() { return this._minuteStep; }
- /**
- * The number of seconds to add/subtract when clicking second spinners.
- */
- set secondStep(step) {
- this._secondStep = isInteger(step) ? step : this._config.secondStep;
- }
- get secondStep() { return this._secondStep; }
- writeValue(value) {
- const structValue = this._ngbTimeAdapter.fromModel(value);
- this.model = structValue ? new NgbTime(structValue.hour, structValue.minute, structValue.second) : new NgbTime();
- if (!this.seconds && (!structValue || !isNumber(structValue.second))) {
- this.model.second = 0;
- }
- this._cd.markForCheck();
- }
- registerOnChange(fn) { this.onChange = fn; }
- registerOnTouched(fn) { this.onTouched = fn; }
- setDisabledState(isDisabled) { this.disabled = isDisabled; }
- changeHour(step) {
- this.model.changeHour(step);
- this.propagateModelChange();
- }
- changeMinute(step) {
- this.model.changeMinute(step);
- this.propagateModelChange();
- }
- changeSecond(step) {
- this.model.changeSecond(step);
- this.propagateModelChange();
- }
- updateHour(newVal) {
- const isPM = this.model.hour >= 12;
- const enteredHour = toInteger(newVal);
- if (this.meridian && (isPM && enteredHour < 12 || !isPM && enteredHour === 12)) {
- this.model.updateHour(enteredHour + 12);
- }
- else {
- this.model.updateHour(enteredHour);
- }
- this.propagateModelChange();
- }
- updateMinute(newVal) {
- this.model.updateMinute(toInteger(newVal));
- this.propagateModelChange();
- }
- updateSecond(newVal) {
- this.model.updateSecond(toInteger(newVal));
- this.propagateModelChange();
- }
- toggleMeridian() {
- if (this.meridian) {
- this.changeHour(12);
- }
- }
- formatInput(input) { input.value = input.value.replace(FILTER_REGEX, ''); }
- formatHour(value) {
- if (isNumber(value)) {
- if (this.meridian) {
- return padNumber(value % 12 === 0 ? 12 : value % 12);
- }
- else {
- return padNumber(value % 24);
- }
- }
- else {
- return padNumber(NaN);
- }
- }
- formatMinSec(value) { return padNumber(isNumber(value) ? value : NaN); }
- get isSmallSize() { return this.size === 'small'; }
- get isLargeSize() { return this.size === 'large'; }
- ngOnChanges(changes) {
- if (changes['seconds'] && !this.seconds && this.model && !isNumber(this.model.second)) {
- this.model.second = 0;
- this.propagateModelChange(false);
- }
- }
- propagateModelChange(touched = true) {
- if (touched) {
- this.onTouched();
- }
- if (this.model.isValid(this.seconds)) {
- this.onChange(this._ngbTimeAdapter.toModel({ hour: this.model.hour, minute: this.model.minute, second: this.model.second }));
- }
- else {
- this.onChange(this._ngbTimeAdapter.toModel(null));
- }
- }
- }
- NgbTimepicker.ɵfac = function NgbTimepicker_Factory(t) { return new (t || NgbTimepicker)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbTimepickerConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbTimeAdapter), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbTimepickerI18n)); };
- NgbTimepicker.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbTimepicker, selectors: [["ngb-timepicker"]], inputs: { meridian: "meridian", spinners: "spinners", seconds: "seconds", hourStep: "hourStep", minuteStep: "minuteStep", secondStep: "secondStep", readonlyInputs: "readonlyInputs", size: "size" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([NGB_TIMEPICKER_VALUE_ACCESSOR]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], decls: 16, vars: 25, consts: function () { let i18n_58; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_timepicker_HH$$FESM2015_NG_BOOTSTRAP_JS_59 = goog.getMsg("HH");
- i18n_58 = MSG_EXTERNAL_ngb_timepicker_HH$$FESM2015_NG_BOOTSTRAP_JS_59;
- }
- else {
- i18n_58 = $localize `:@@ngb.timepicker.HH␟ce676ab1d6d98f85c836381cf100a4a91ef95a1f␟4043638465245303811:HH`;
- } let i18n_60; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_timepicker_hours$$FESM2015_NG_BOOTSTRAP_JS_61 = goog.getMsg("Hours");
- i18n_60 = MSG_EXTERNAL_ngb_timepicker_hours$$FESM2015_NG_BOOTSTRAP_JS_61;
- }
- else {
- i18n_60 = $localize `:@@ngb.timepicker.hours␟3bbce5fef7e1151da052a4e529453edb340e3912␟8070396816726827304:Hours`;
- } let i18n_62; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_timepicker_MM$$FESM2015_NG_BOOTSTRAP_JS_63 = goog.getMsg("MM");
- i18n_62 = MSG_EXTERNAL_ngb_timepicker_MM$$FESM2015_NG_BOOTSTRAP_JS_63;
- }
- else {
- i18n_62 = $localize `:@@ngb.timepicker.MM␟72c8edf6a50068a05bde70991e36b1e881f4ca54␟1647282246509919852:MM`;
- } let i18n_64; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_timepicker_minutes$$FESM2015_NG_BOOTSTRAP_JS_65 = goog.getMsg("Minutes");
- i18n_64 = MSG_EXTERNAL_ngb_timepicker_minutes$$FESM2015_NG_BOOTSTRAP_JS_65;
- }
- else {
- i18n_64 = $localize `:@@ngb.timepicker.minutes␟41e62daa962947c0d23ded0981975d1bddf0bf38␟5531237363767747080:Minutes`;
- } let i18n_66; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_timepicker_increment_hours$$FESM2015_NG_BOOTSTRAP_JS__67 = goog.getMsg("Increment hours");
- i18n_66 = MSG_EXTERNAL_ngb_timepicker_increment_hours$$FESM2015_NG_BOOTSTRAP_JS__67;
- }
- else {
- i18n_66 = $localize `:@@ngb.timepicker.increment-hours␟cb74bc1d625a6c1742f0d7d47306cf495780c218␟5939278348542933629:Increment hours`;
- } let i18n_68; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_timepicker_decrement_hours$$FESM2015_NG_BOOTSTRAP_JS__69 = goog.getMsg("Decrement hours");
- i18n_68 = MSG_EXTERNAL_ngb_timepicker_decrement_hours$$FESM2015_NG_BOOTSTRAP_JS__69;
- }
- else {
- i18n_68 = $localize `:@@ngb.timepicker.decrement-hours␟147c7a19429da7d999e247d22e33fee370b1691b␟3651829882940481818:Decrement hours`;
- } let i18n_70; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_timepicker_increment_minutes$$FESM2015_NG_BOOTSTRAP_JS__71 = goog.getMsg("Increment minutes");
- i18n_70 = MSG_EXTERNAL_ngb_timepicker_increment_minutes$$FESM2015_NG_BOOTSTRAP_JS__71;
- }
- else {
- i18n_70 = $localize `:@@ngb.timepicker.increment-minutes␟f5a4a3bc05e053f6732475d0e74875ec01c3a348␟180147720391025024:Increment minutes`;
- } let i18n_72; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_timepicker_decrement_minutes$$FESM2015_NG_BOOTSTRAP_JS__73 = goog.getMsg("Decrement minutes");
- i18n_72 = MSG_EXTERNAL_ngb_timepicker_decrement_minutes$$FESM2015_NG_BOOTSTRAP_JS__73;
- }
- else {
- i18n_72 = $localize `:@@ngb.timepicker.decrement-minutes␟c1a6899e529c096da5b660385d4e77fe1f7ad271␟7447789825403243588:Decrement minutes`;
- } let i18n_74; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_timepicker_SS$$FESM2015_NG_BOOTSTRAP_JS__75 = goog.getMsg("SS");
- i18n_74 = MSG_EXTERNAL_ngb_timepicker_SS$$FESM2015_NG_BOOTSTRAP_JS__75;
- }
- else {
- i18n_74 = $localize `:@@ngb.timepicker.SS␟ebe38d36a40a2383c5fefa9b4608ffbda08bd4a3␟3628127143071124194:SS`;
- } let i18n_76; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_timepicker_seconds$$FESM2015_NG_BOOTSTRAP_JS__77 = goog.getMsg("Seconds");
- i18n_76 = MSG_EXTERNAL_ngb_timepicker_seconds$$FESM2015_NG_BOOTSTRAP_JS__77;
- }
- else {
- i18n_76 = $localize `:@@ngb.timepicker.seconds␟4f2ed9e71a7c981db3e50ae2fedb28aff2ec4e6c␟8874012390997067175:Seconds`;
- } let i18n_78; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_timepicker_increment_seconds$$FESM2015_NG_BOOTSTRAP_JS___79 = goog.getMsg("Increment seconds");
- i18n_78 = MSG_EXTERNAL_ngb_timepicker_increment_seconds$$FESM2015_NG_BOOTSTRAP_JS___79;
- }
- else {
- i18n_78 = $localize `:@@ngb.timepicker.increment-seconds␟912322ecee7d659d04dcf494a70e22e49d334b26␟5364772110539092174:Increment seconds`;
- } let i18n_80; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_timepicker_decrement_seconds$$FESM2015_NG_BOOTSTRAP_JS___81 = goog.getMsg("Decrement seconds");
- i18n_80 = MSG_EXTERNAL_ngb_timepicker_decrement_seconds$$FESM2015_NG_BOOTSTRAP_JS___81;
- }
- else {
- i18n_80 = $localize `:@@ngb.timepicker.decrement-seconds␟5db47ac104294243a70eb9124fbea9d0004ddf69␟753633511487974857:Decrement seconds`;
- } let i18n_82; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_timepicker_PM$$FESM2015_NG_BOOTSTRAP_JS___83 = goog.getMsg("{$interpolation}", { "interpolation": "\uFFFD0\uFFFD" });
- i18n_82 = MSG_EXTERNAL_ngb_timepicker_PM$$FESM2015_NG_BOOTSTRAP_JS___83;
- }
- else {
- i18n_82 = $localize `:@@ngb.timepicker.PM␟8d6e691e10306c1b34c6b26805151aaea320ef7f␟3564199131264287502:${"\uFFFD0\uFFFD"}:INTERPOLATION:`;
- } let i18n_84; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_timepicker_AM$$FESM2015_NG_BOOTSTRAP_JS___85 = goog.getMsg("{$interpolation}", { "interpolation": "\uFFFD0\uFFFD" });
- i18n_84 = MSG_EXTERNAL_ngb_timepicker_AM$$FESM2015_NG_BOOTSTRAP_JS___85;
- }
- else {
- i18n_84 = $localize `:@@ngb.timepicker.AM␟69a1f176a93998876952adac57c3bc3863b6105e␟4592818992509942761:${"\uFFFD0\uFFFD"}:INTERPOLATION:`;
- } return [[3, "disabled"], [1, "ngb-tp"], [1, "ngb-tp-input-container", "ngb-tp-hour"], ["tabindex", "-1", "type", "button", "class", "btn btn-link", 3, "btn-sm", "btn-lg", "disabled", "click", 4, "ngIf"], ["type", "text", "maxlength", "2", "inputmode", "numeric", "placeholder", i18n_58, "aria-label", i18n_60, 1, "ngb-tp-input", "form-control", 3, "value", "readOnly", "disabled", "change", "input", "keydown.ArrowUp", "keydown.ArrowDown"], [1, "ngb-tp-spacer"], [1, "ngb-tp-input-container", "ngb-tp-minute"], ["type", "text", "maxlength", "2", "inputmode", "numeric", "placeholder", i18n_62, "aria-label", i18n_64, 1, "ngb-tp-input", "form-control", 3, "value", "readOnly", "disabled", "change", "input", "keydown.ArrowUp", "keydown.ArrowDown"], ["class", "ngb-tp-spacer", 4, "ngIf"], ["class", "ngb-tp-input-container ngb-tp-second", 4, "ngIf"], ["class", "ngb-tp-meridian", 4, "ngIf"], ["tabindex", "-1", "type", "button", 1, "btn", "btn-link", 3, "disabled", "click"], [1, "chevron", "ngb-tp-chevron"], [1, "sr-only"], i18n_66, [1, "chevron", "ngb-tp-chevron", "bottom"], i18n_68, i18n_70, i18n_72, [1, "ngb-tp-input-container", "ngb-tp-second"], ["type", "text", "maxlength", "2", "inputmode", "numeric", "placeholder", i18n_74, "aria-label", i18n_76, 1, "ngb-tp-input", "form-control", 3, "value", "readOnly", "disabled", "change", "input", "keydown.ArrowUp", "keydown.ArrowDown"], i18n_78, i18n_80, [1, "ngb-tp-meridian"], ["type", "button", 1, "btn", "btn-outline-primary", 3, "disabled", "click"], [4, "ngIf", "ngIfElse"], ["am", ""], i18n_82, i18n_84]; }, template: function NgbTimepicker_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "fieldset", 0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "div", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbTimepicker_button_3_Template, 4, 7, "button", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "input", 4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function NgbTimepicker_Template_input_change_4_listener($event) { return ctx.updateHour($event.target.value); })("input", function NgbTimepicker_Template_input_input_4_listener($event) { return ctx.formatInput($event.target); })("keydown.ArrowUp", function NgbTimepicker_Template_input_keydown_ArrowUp_4_listener($event) { ctx.changeHour(ctx.hourStep); return $event.preventDefault(); })("keydown.ArrowDown", function NgbTimepicker_Template_input_keydown_ArrowDown_4_listener($event) { ctx.changeHour(-ctx.hourStep); return $event.preventDefault(); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](5, NgbTimepicker_button_5_Template, 4, 7, "button", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "div", 5);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](7, ":");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](8, "div", 6);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](9, NgbTimepicker_button_9_Template, 4, 7, "button", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](10, "input", 7);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function NgbTimepicker_Template_input_change_10_listener($event) { return ctx.updateMinute($event.target.value); })("input", function NgbTimepicker_Template_input_input_10_listener($event) { return ctx.formatInput($event.target); })("keydown.ArrowUp", function NgbTimepicker_Template_input_keydown_ArrowUp_10_listener($event) { ctx.changeMinute(ctx.minuteStep); return $event.preventDefault(); })("keydown.ArrowDown", function NgbTimepicker_Template_input_keydown_ArrowDown_10_listener($event) { ctx.changeMinute(-ctx.minuteStep); return $event.preventDefault(); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](11, NgbTimepicker_button_11_Template, 4, 7, "button", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](12, NgbTimepicker_div_12_Template, 2, 0, "div", 8);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](13, NgbTimepicker_div_13_Template, 4, 9, "div", 9);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](14, NgbTimepicker_div_14_Template, 1, 0, "div", 8);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](15, NgbTimepicker_div_15_Template, 5, 9, "div", 10);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", ctx.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.spinners);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("form-control-sm", ctx.isSmallSize)("form-control-lg", ctx.isLargeSize);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("value", ctx.formatHour(ctx.model == null ? null : ctx.model.hour))("readOnly", ctx.readonlyInputs)("disabled", ctx.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.spinners);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.spinners);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("form-control-sm", ctx.isSmallSize)("form-control-lg", ctx.isLargeSize);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("value", ctx.formatMinSec(ctx.model == null ? null : ctx.model.minute))("readOnly", ctx.readonlyInputs)("disabled", ctx.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.spinners);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.seconds);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.seconds);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.meridian);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.meridian);
- } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"]], styles: ["ngb-timepicker{font-size:1rem}.ngb-tp{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.ngb-tp-input-container{width:4em}.ngb-tp-chevron:before{-webkit-transform:rotate(-45deg);border-style:solid;border-width:.29em .29em 0 0;content:\"\";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{-webkit-transform:rotate(135deg);top:-.3em;transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-meridian,.ngb-tp-minute,.ngb-tp-second{-ms-flex-align:center;-ms-flex-direction:column;-ms-flex-pack:distribute;align-items:center;display:-ms-flexbox;display:flex;flex-direction:column;justify-content:space-around}.ngb-tp-spacer{text-align:center;width:1em}"], encapsulation: 2 });
- NgbTimepicker.ctorParameters = () => [
- { type: NgbTimepickerConfig },
- { type: NgbTimeAdapter },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] },
- { type: NgbTimepickerI18n }
- ];
- NgbTimepicker.propDecorators = {
- meridian: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- spinners: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- seconds: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- hourStep: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- minuteStep: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- secondStep: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- readonlyInputs: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- size: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTimepicker, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngb-timepicker',
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- template: `
- <fieldset [disabled]="disabled" [class.disabled]="disabled">
- <div class="ngb-tp">
- <div class="ngb-tp-input-container ngb-tp-hour">
- <button *ngIf="spinners" tabindex="-1" type="button" (click)="changeHour(hourStep)"
- class="btn btn-link" [class.btn-sm]="isSmallSize" [class.btn-lg]="isLargeSize" [class.disabled]="disabled"
- [disabled]="disabled">
- <span class="chevron ngb-tp-chevron"></span>
- <span class="sr-only" i18n="@@ngb.timepicker.increment-hours">Increment hours</span>
- </button>
- <input type="text" class="ngb-tp-input form-control" [class.form-control-sm]="isSmallSize"
- [class.form-control-lg]="isLargeSize"
- maxlength="2" inputmode="numeric" placeholder="HH" i18n-placeholder="@@ngb.timepicker.HH"
- [value]="formatHour(model?.hour)" (change)="updateHour($any($event).target.value)"
- [readOnly]="readonlyInputs" [disabled]="disabled" aria-label="Hours" i18n-aria-label="@@ngb.timepicker.hours"
- (input)="formatInput($any($event).target)"
- (keydown.ArrowUp)="changeHour(hourStep); $event.preventDefault()"
- (keydown.ArrowDown)="changeHour(-hourStep); $event.preventDefault()">
- <button *ngIf="spinners" tabindex="-1" type="button" (click)="changeHour(-hourStep)"
- class="btn btn-link" [class.btn-sm]="isSmallSize" [class.btn-lg]="isLargeSize" [class.disabled]="disabled"
- [disabled]="disabled">
- <span class="chevron ngb-tp-chevron bottom"></span>
- <span class="sr-only" i18n="@@ngb.timepicker.decrement-hours">Decrement hours</span>
- </button>
- </div>
- <div class="ngb-tp-spacer">:</div>
- <div class="ngb-tp-input-container ngb-tp-minute">
- <button *ngIf="spinners" tabindex="-1" type="button" (click)="changeMinute(minuteStep)"
- class="btn btn-link" [class.btn-sm]="isSmallSize" [class.btn-lg]="isLargeSize" [class.disabled]="disabled"
- [disabled]="disabled">
- <span class="chevron ngb-tp-chevron"></span>
- <span class="sr-only" i18n="@@ngb.timepicker.increment-minutes">Increment minutes</span>
- </button>
- <input type="text" class="ngb-tp-input form-control" [class.form-control-sm]="isSmallSize" [class.form-control-lg]="isLargeSize"
- maxlength="2" inputmode="numeric" placeholder="MM" i18n-placeholder="@@ngb.timepicker.MM"
- [value]="formatMinSec(model?.minute)" (change)="updateMinute($any($event).target.value)"
- [readOnly]="readonlyInputs" [disabled]="disabled" aria-label="Minutes" i18n-aria-label="@@ngb.timepicker.minutes"
- (input)="formatInput($any($event).target)"
- (keydown.ArrowUp)="changeMinute(minuteStep); $event.preventDefault()"
- (keydown.ArrowDown)="changeMinute(-minuteStep); $event.preventDefault()">
- <button *ngIf="spinners" tabindex="-1" type="button" (click)="changeMinute(-minuteStep)"
- class="btn btn-link" [class.btn-sm]="isSmallSize" [class.btn-lg]="isLargeSize" [class.disabled]="disabled"
- [disabled]="disabled">
- <span class="chevron ngb-tp-chevron bottom"></span>
- <span class="sr-only" i18n="@@ngb.timepicker.decrement-minutes">Decrement minutes</span>
- </button>
- </div>
- <div *ngIf="seconds" class="ngb-tp-spacer">:</div>
- <div *ngIf="seconds" class="ngb-tp-input-container ngb-tp-second">
- <button *ngIf="spinners" tabindex="-1" type="button" (click)="changeSecond(secondStep)"
- class="btn btn-link" [class.btn-sm]="isSmallSize" [class.btn-lg]="isLargeSize" [class.disabled]="disabled"
- [disabled]="disabled">
- <span class="chevron ngb-tp-chevron"></span>
- <span class="sr-only" i18n="@@ngb.timepicker.increment-seconds">Increment seconds</span>
- </button>
- <input type="text" class="ngb-tp-input form-control" [class.form-control-sm]="isSmallSize" [class.form-control-lg]="isLargeSize"
- maxlength="2" inputmode="numeric" placeholder="SS" i18n-placeholder="@@ngb.timepicker.SS"
- [value]="formatMinSec(model?.second)" (change)="updateSecond($any($event).target.value)"
- [readOnly]="readonlyInputs" [disabled]="disabled" aria-label="Seconds" i18n-aria-label="@@ngb.timepicker.seconds"
- (input)="formatInput($any($event).target)"
- (keydown.ArrowUp)="changeSecond(secondStep); $event.preventDefault()"
- (keydown.ArrowDown)="changeSecond(-secondStep); $event.preventDefault()">
- <button *ngIf="spinners" tabindex="-1" type="button" (click)="changeSecond(-secondStep)"
- class="btn btn-link" [class.btn-sm]="isSmallSize" [class.btn-lg]="isLargeSize" [class.disabled]="disabled"
- [disabled]="disabled">
- <span class="chevron ngb-tp-chevron bottom"></span>
- <span class="sr-only" i18n="@@ngb.timepicker.decrement-seconds">Decrement seconds</span>
- </button>
- </div>
- <div *ngIf="meridian" class="ngb-tp-spacer"></div>
- <div *ngIf="meridian" class="ngb-tp-meridian">
- <button type="button" class="btn btn-outline-primary" [class.btn-sm]="isSmallSize" [class.btn-lg]="isLargeSize"
- [disabled]="disabled" [class.disabled]="disabled"
- (click)="toggleMeridian()">
- <ng-container *ngIf="model && model.hour >= 12; else am"
- i18n="@@ngb.timepicker.PM">{{ i18n.getAfternoonPeriod() }}</ng-container>
- <ng-template #am i18n="@@ngb.timepicker.AM">{{ i18n.getMorningPeriod() }}</ng-template>
- </button>
- </div>
- </div>
- </fieldset>
- `,
- providers: [NGB_TIMEPICKER_VALUE_ACCESSOR],
- styles: ["ngb-timepicker{font-size:1rem}.ngb-tp{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.ngb-tp-input-container{width:4em}.ngb-tp-chevron:before{-webkit-transform:rotate(-45deg);border-style:solid;border-width:.29em .29em 0 0;content:\"\";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{-webkit-transform:rotate(135deg);top:-.3em;transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-meridian,.ngb-tp-minute,.ngb-tp-second{-ms-flex-align:center;-ms-flex-direction:column;-ms-flex-pack:distribute;align-items:center;display:-ms-flexbox;display:flex;flex-direction:column;justify-content:space-around}.ngb-tp-spacer{text-align:center;width:1em}"]
- }]
- }], function () { return [{ type: NgbTimepickerConfig }, { type: NgbTimeAdapter }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }, { type: NgbTimepickerI18n }]; }, { meridian: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], spinners: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], seconds: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], hourStep: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], minuteStep: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], secondStep: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], readonlyInputs: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], size: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class NgbTimepickerModule {
- }
- NgbTimepickerModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbTimepickerModule });
- NgbTimepickerModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbTimepickerModule_Factory(t) { return new (t || NgbTimepickerModule)(); }, imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbTimepickerModule, { declarations: function () { return [NgbTimepicker]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]; }, exports: function () { return [NgbTimepicker]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTimepickerModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{ declarations: [NgbTimepicker], exports: [NgbTimepicker], imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]] }]
- }], null, null); })();
- /**
- * Configuration service for the NgbToast component. You can inject this service, typically in your root component,
- * and customize the values of its properties in order to provide default values for all the toasts used in the
- * application.
- *
- * @since 5.0.0
- */
- class NgbToastConfig {
- constructor(ngbConfig) {
- this.autohide = true;
- this.delay = 500;
- this.ariaLive = 'polite';
- this.animation = ngbConfig.animation;
- }
- }
- NgbToastConfig.ɵfac = function NgbToastConfig_Factory(t) { return new (t || NgbToastConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig)); };
- NgbToastConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbToastConfig_Factory() { return new NgbToastConfig(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(NgbConfig)); }, token: NgbToastConfig, providedIn: "root" });
- NgbToastConfig.ctorParameters = () => [
- { type: NgbConfig }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbToastConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: NgbConfig }]; }, null); })();
- const ngbToastFadeInTransition = ({ classList }) => {
- classList.remove('hide');
- classList.add('showing');
- return () => {
- classList.remove('showing');
- classList.add('show');
- };
- };
- const ngbToastFadeOutTransition = ({ classList }) => {
- classList.remove('show');
- return () => { classList.add('hide'); };
- };
- /**
- * This directive allows the usage of HTML markup or other directives
- * inside of the toast's header.
- *
- * @since 5.0.0
- */
- class NgbToastHeader {
- }
- NgbToastHeader.ɵfac = function NgbToastHeader_Factory(t) { return new (t || NgbToastHeader)(); };
- NgbToastHeader.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbToastHeader, selectors: [["", "ngbToastHeader", ""]] });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbToastHeader, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngbToastHeader]' }]
- }], null, null); })();
- /**
- * Toasts provide feedback messages as notifications to the user.
- * Goal is to mimic the push notifications available both on mobile and desktop operating systems.
- *
- * @since 5.0.0
- */
- class NgbToast {
- constructor(ariaLive, config, _zone, _element) {
- this.ariaLive = ariaLive;
- this._zone = _zone;
- this._element = _element;
- /**
- * A template like `<ng-template ngbToastHeader></ng-template>` can be
- * used in the projected content to allow markup usage.
- */
- this.contentHeaderTpl = null;
- /**
- * An event fired after the animation triggered by calling `.show()` method has finished.
- *
- * @since 8.0.0
- */
- this.shown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An event fired after the animation triggered by calling `.hide()` method has finished.
- *
- * It can only occur in 2 different scenarios:
- * - `autohide` timeout fires
- * - user clicks on a closing cross
- *
- * Additionally this output is purely informative. The toast won't be removed from DOM automatically, it's up
- * to the user to take care of that.
- *
- * @since 8.0.0
- */
- this.hidden = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- if (this.ariaLive == null) {
- this.ariaLive = config.ariaLive;
- }
- this.delay = config.delay;
- this.autohide = config.autohide;
- this.animation = config.animation;
- }
- ngAfterContentInit() {
- this._zone.onStable.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(() => {
- this._init();
- this.show();
- });
- }
- ngOnChanges(changes) {
- if ('autohide' in changes) {
- this._clearTimeout();
- this._init();
- }
- }
- /**
- * Triggers toast closing programmatically.
- *
- * The returned observable will emit and be completed once the closing transition has finished.
- * If the animations are turned off this happens synchronously.
- *
- * Alternatively you could listen or subscribe to the `(hidden)` output
- *
- * @since 8.0.0
- */
- hide() {
- this._clearTimeout();
- const transition = ngbRunTransition(this._element.nativeElement, ngbToastFadeOutTransition, { animation: this.animation, runningTransition: 'stop' });
- transition.subscribe(() => { this.hidden.emit(); });
- return transition;
- }
- /**
- * Triggers toast opening programmatically.
- *
- * The returned observable will emit and be completed once the opening transition has finished.
- * If the animations are turned off this happens synchronously.
- *
- * Alternatively you could listen or subscribe to the `(shown)` output
- *
- * @since 8.0.0
- */
- show() {
- const transition = ngbRunTransition(this._element.nativeElement, ngbToastFadeInTransition, {
- animation: this.animation,
- runningTransition: 'continue',
- });
- transition.subscribe(() => { this.shown.emit(); });
- return transition;
- }
- _init() {
- if (this.autohide && !this._timeoutID) {
- this._timeoutID = setTimeout(() => this.hide(), this.delay);
- }
- }
- _clearTimeout() {
- if (this._timeoutID) {
- clearTimeout(this._timeoutID);
- this._timeoutID = null;
- }
- }
- }
- NgbToast.ɵfac = function NgbToast_Factory(t) { return new (t || NgbToast)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinjectAttribute"]('aria-live'), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbToastConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- NgbToast.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbToast, selectors: [["ngb-toast"]], contentQueries: function NgbToast_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstaticContentQuery"](dirIndex, NgbToastHeader, true, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.contentHeaderTpl = _t.first);
- } }, hostAttrs: ["role", "alert", "aria-atomic", "true", 1, "toast"], hostVars: 3, hostBindings: function NgbToast_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-live", ctx.ariaLive);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("fade", ctx.animation);
- } }, inputs: { delay: "delay", autohide: "autohide", animation: "animation", header: "header" }, outputs: { shown: "shown", hidden: "hidden" }, exportAs: ["ngbToast"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], ngContentSelectors: _c5, decls: 5, vars: 1, consts: function () { let i18n_86; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
- const MSG_EXTERNAL_ngb_toast_close_aria$$FESM2015_NG_BOOTSTRAP_JS__87 = goog.getMsg("Close");
- i18n_86 = MSG_EXTERNAL_ngb_toast_close_aria$$FESM2015_NG_BOOTSTRAP_JS__87;
- }
- else {
- i18n_86 = $localize `:@@ngb.toast.close-aria␟f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8␟7819314041543176992:Close`;
- } return [["headerTpl", ""], [3, "ngIf"], [1, "toast-body"], [1, "mr-auto"], [1, "toast-header"], [3, "ngTemplateOutlet"], ["type", "button", "aria-label", i18n_86, 1, "close", 3, "click"], ["aria-hidden", "true"]]; }, template: function NgbToast_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbToast_ng_template_0_Template, 2, 1, "ng-template", null, 0, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbToast_ng_template_2_Template, 5, 1, "ng-template", 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "div", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.contentHeaderTpl || ctx.header);
- } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]], styles: [".ngb-toasts{margin:.5em;position:fixed;right:0;top:0;z-index:1200}ngb-toast{display:block}ngb-toast .toast-header .close{margin-bottom:.25rem;margin-left:auto}"], encapsulation: 2 });
- NgbToast.ctorParameters = () => [
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"], args: ['aria-live',] }] },
- { type: NgbToastConfig },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- NgbToast.propDecorators = {
- animation: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- delay: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- autohide: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- header: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- contentHeaderTpl: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgbToastHeader, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"], static: true },] }],
- shown: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- hidden: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbToast, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngb-toast',
- exportAs: 'ngbToast',
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- host: {
- 'role': 'alert',
- '[attr.aria-live]': 'ariaLive',
- 'aria-atomic': 'true',
- 'class': 'toast',
- '[class.fade]': 'animation'
- },
- template: `
- <ng-template #headerTpl>
- <strong class="mr-auto">{{header}}</strong>
- </ng-template>
- <ng-template [ngIf]="contentHeaderTpl || header">
- <div class="toast-header">
- <ng-template [ngTemplateOutlet]="contentHeaderTpl || headerTpl"></ng-template>
- <button type="button" class="close" aria-label="Close" i18n-aria-label="@@ngb.toast.close-aria" (click)="hide()">
- <span aria-hidden="true">×</span>
- </button>
- </div>
- </ng-template>
- <div class="toast-body">
- <ng-content></ng-content>
- </div>
- `,
- styles: [".ngb-toasts{margin:.5em;position:fixed;right:0;top:0;z-index:1200}ngb-toast{display:block}ngb-toast .toast-header .close{margin-bottom:.25rem;margin-left:auto}"]
- }]
- }], function () { return [{ type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"],
- args: ['aria-live']
- }] }, { type: NgbToastConfig }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, { contentHeaderTpl: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgbToastHeader, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"], static: true }]
- }], shown: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], hidden: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], delay: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], autohide: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], animation: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], header: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class NgbToastModule {
- }
- NgbToastModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbToastModule });
- NgbToastModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbToastModule_Factory(t) { return new (t || NgbToastModule)(); }, imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbToastModule, { declarations: function () { return [NgbToast, NgbToastHeader]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]; }, exports: function () { return [NgbToast, NgbToastHeader]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbToastModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{ declarations: [NgbToast, NgbToastHeader], imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]], exports: [NgbToast, NgbToastHeader] }]
- }], null, null); })();
- /**
- * A configuration service for the [`NgbTooltip`](#/components/tooltip/api#NgbTooltip) component.
- *
- * You can inject this service, typically in your root component, and customize the values of its properties in
- * order to provide default values for all the tooltips used in the application.
- */
- class NgbTooltipConfig {
- constructor(ngbConfig) {
- this.autoClose = true;
- this.placement = 'auto';
- this.triggers = 'hover focus';
- this.disableTooltip = false;
- this.openDelay = 0;
- this.closeDelay = 0;
- this.animation = ngbConfig.animation;
- }
- }
- NgbTooltipConfig.ɵfac = function NgbTooltipConfig_Factory(t) { return new (t || NgbTooltipConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig)); };
- NgbTooltipConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbTooltipConfig_Factory() { return new NgbTooltipConfig(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(NgbConfig)); }, token: NgbTooltipConfig, providedIn: "root" });
- NgbTooltipConfig.ctorParameters = () => [
- { type: NgbConfig }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTooltipConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: NgbConfig }]; }, null); })();
- let nextId$4 = 0;
- class NgbTooltipWindow {
- }
- NgbTooltipWindow.ɵfac = function NgbTooltipWindow_Factory(t) { return new (t || NgbTooltipWindow)(); };
- NgbTooltipWindow.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbTooltipWindow, selectors: [["ngb-tooltip-window"]], hostAttrs: ["role", "tooltip"], hostVars: 5, hostBindings: function NgbTooltipWindow_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("id", ctx.id);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("tooltip" + (ctx.tooltipClass ? " " + ctx.tooltipClass : ""));
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("fade", ctx.animation);
- } }, inputs: { animation: "animation", id: "id", tooltipClass: "tooltipClass" }, ngContentSelectors: _c5, decls: 3, vars: 0, consts: [[1, "arrow"], [1, "tooltip-inner"]], template: function NgbTooltipWindow_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }, styles: ["ngb-tooltip-window.bs-tooltip-bottom .arrow,ngb-tooltip-window.bs-tooltip-top .arrow{left:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-bottom-left .arrow,ngb-tooltip-window.bs-tooltip-top-left .arrow{left:1em}ngb-tooltip-window.bs-tooltip-bottom-right .arrow,ngb-tooltip-window.bs-tooltip-top-right .arrow{left:auto;right:.8rem}ngb-tooltip-window.bs-tooltip-left .arrow,ngb-tooltip-window.bs-tooltip-right .arrow{top:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-left-top .arrow,ngb-tooltip-window.bs-tooltip-right-top .arrow{top:.4rem}ngb-tooltip-window.bs-tooltip-left-bottom .arrow,ngb-tooltip-window.bs-tooltip-right-bottom .arrow{bottom:.4rem;top:auto}"], encapsulation: 2, changeDetection: 0 });
- NgbTooltipWindow.propDecorators = {
- animation: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- id: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- tooltipClass: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTooltipWindow, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngb-tooltip-window',
- changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- host: {
- '[class]': '"tooltip" + (tooltipClass ? " " + tooltipClass : "")',
- '[class.fade]': 'animation',
- 'role': 'tooltip',
- '[id]': 'id'
- },
- template: `<div class="arrow"></div><div class="tooltip-inner"><ng-content></ng-content></div>`,
- styles: ["ngb-tooltip-window.bs-tooltip-bottom .arrow,ngb-tooltip-window.bs-tooltip-top .arrow{left:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-bottom-left .arrow,ngb-tooltip-window.bs-tooltip-top-left .arrow{left:1em}ngb-tooltip-window.bs-tooltip-bottom-right .arrow,ngb-tooltip-window.bs-tooltip-top-right .arrow{left:auto;right:.8rem}ngb-tooltip-window.bs-tooltip-left .arrow,ngb-tooltip-window.bs-tooltip-right .arrow{top:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-left-top .arrow,ngb-tooltip-window.bs-tooltip-right-top .arrow{top:.4rem}ngb-tooltip-window.bs-tooltip-left-bottom .arrow,ngb-tooltip-window.bs-tooltip-right-bottom .arrow{bottom:.4rem;top:auto}"]
- }]
- }], null, { animation: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], id: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], tooltipClass: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * A lightweight and extensible directive for fancy tooltip creation.
- */
- class NgbTooltip {
- constructor(_elementRef, _renderer, injector, componentFactoryResolver, viewContainerRef, config, _ngZone, _document, _changeDetector, applicationRef) {
- this._elementRef = _elementRef;
- this._renderer = _renderer;
- this._ngZone = _ngZone;
- this._document = _document;
- this._changeDetector = _changeDetector;
- /**
- * An event emitted when the tooltip opening animation has finished. Contains no payload.
- */
- this.shown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An event emitted when the tooltip closing animation has finished. Contains no payload.
- */
- this.hidden = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this._ngbTooltipWindowId = `ngb-tooltip-${nextId$4++}`;
- this._windowRef = null;
- this.animation = config.animation;
- this.autoClose = config.autoClose;
- this.placement = config.placement;
- this.triggers = config.triggers;
- this.container = config.container;
- this.disableTooltip = config.disableTooltip;
- this.tooltipClass = config.tooltipClass;
- this.openDelay = config.openDelay;
- this.closeDelay = config.closeDelay;
- this._popupService = new PopupService(NgbTooltipWindow, injector, viewContainerRef, _renderer, this._ngZone, componentFactoryResolver, applicationRef);
- this._zoneSubscription = _ngZone.onStable.subscribe(() => {
- if (this._windowRef) {
- positionElements(this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement, this.container === 'body', 'bs-tooltip');
- }
- });
- }
- /**
- * The string content or a `TemplateRef` for the content to be displayed in the tooltip.
- *
- * If the content if falsy, the tooltip won't open.
- */
- set ngbTooltip(value) {
- this._ngbTooltip = value;
- if (!value && this._windowRef) {
- this.close();
- }
- }
- get ngbTooltip() { return this._ngbTooltip; }
- /**
- * Opens the tooltip.
- *
- * This is considered to be a "manual" triggering.
- * The `context` is an optional value to be injected into the tooltip template when it is created.
- */
- open(context) {
- if (!this._windowRef && this._ngbTooltip && !this.disableTooltip) {
- const { windowRef, transition$ } = this._popupService.open(this._ngbTooltip, context, this.animation);
- this._windowRef = windowRef;
- this._windowRef.instance.animation = this.animation;
- this._windowRef.instance.tooltipClass = this.tooltipClass;
- this._windowRef.instance.id = this._ngbTooltipWindowId;
- this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbTooltipWindowId);
- if (this.container === 'body') {
- this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);
- }
- // We need to detect changes, because we don't know where .open() might be called from.
- // Ex. opening tooltip from one of lifecycle hooks that run after the CD
- // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception
- this._windowRef.changeDetectorRef.detectChanges();
- // We need to mark for check, because tooltip won't work inside the OnPush component.
- // Ex. when we use expression like `{{ tooltip.isOpen() : 'opened' : 'closed' }}`
- // inside the template of an OnPush component and we change the tooltip from
- // open -> closed, the expression in question won't be updated unless we explicitly
- // mark the parent component to be checked.
- this._windowRef.changeDetectorRef.markForCheck();
- ngbAutoClose(this._ngZone, this._document, this.autoClose, () => this.close(), this.hidden, [this._windowRef.location.nativeElement]);
- transition$.subscribe(() => this.shown.emit());
- }
- }
- /**
- * Closes the tooltip.
- *
- * This is considered to be a "manual" triggering of the tooltip.
- */
- close() {
- if (this._windowRef != null) {
- this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');
- this._popupService.close(this.animation).subscribe(() => {
- this._windowRef = null;
- this.hidden.emit();
- this._changeDetector.markForCheck();
- });
- }
- }
- /**
- * Toggles the tooltip.
- *
- * This is considered to be a "manual" triggering of the tooltip.
- */
- toggle() {
- if (this._windowRef) {
- this.close();
- }
- else {
- this.open();
- }
- }
- /**
- * Returns `true`, if the popover is currently shown.
- */
- isOpen() { return this._windowRef != null; }
- ngOnInit() {
- this._unregisterListenersFn = listenToTriggers(this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay);
- }
- ngOnChanges({ tooltipClass }) {
- if (tooltipClass && this.isOpen()) {
- this._windowRef.instance.tooltipClass = tooltipClass.currentValue;
- }
- }
- ngOnDestroy() {
- this.close();
- // This check is needed as it might happen that ngOnDestroy is called before ngOnInit
- // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199
- if (this._unregisterListenersFn) {
- this._unregisterListenersFn();
- }
- this._zoneSubscription.unsubscribe();
- }
- }
- NgbTooltip.ɵfac = function NgbTooltip_Factory(t) { return new (t || NgbTooltip)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbTooltipConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"])); };
- NgbTooltip.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbTooltip, selectors: [["", "ngbTooltip", ""]], inputs: { animation: "animation", autoClose: "autoClose", placement: "placement", triggers: "triggers", container: "container", disableTooltip: "disableTooltip", tooltipClass: "tooltipClass", openDelay: "openDelay", closeDelay: "closeDelay", ngbTooltip: "ngbTooltip" }, outputs: { shown: "shown", hidden: "hidden" }, exportAs: ["ngbTooltip"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- NgbTooltip.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] },
- { type: NgbTooltipConfig },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"],] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"] }
- ];
- NgbTooltip.propDecorators = {
- animation: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- autoClose: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- placement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- triggers: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- container: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- disableTooltip: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- tooltipClass: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- openDelay: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- closeDelay: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- shown: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- hidden: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- ngbTooltip: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTooltip, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngbTooltip]', exportAs: 'ngbTooltip' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] }, { type: NgbTooltipConfig }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"] }]; }, { shown: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], hidden: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], animation: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], autoClose: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], placement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], triggers: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], container: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], disableTooltip: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], tooltipClass: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], openDelay: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], closeDelay: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ngbTooltip: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class NgbTooltipModule {
- }
- NgbTooltipModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbTooltipModule });
- NgbTooltipModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbTooltipModule_Factory(t) { return new (t || NgbTooltipModule)(); } });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbTooltipModule, { declarations: [NgbTooltip, NgbTooltipWindow], exports: [NgbTooltip] }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTooltipModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{ declarations: [NgbTooltip, NgbTooltipWindow], exports: [NgbTooltip], entryComponents: [NgbTooltipWindow] }]
- }], null, null); })();
- /**
- * A component that helps with text highlighting.
- *
- * If splits the `result` text into parts that contain the searched `term` and generates the HTML markup to simplify
- * highlighting:
- *
- * Ex. `result="Alaska"` and `term="as"` will produce `Al<span class="ngb-highlight">as</span>ka`.
- */
- class NgbHighlight {
- constructor() {
- /**
- * The CSS class for `<span>` elements wrapping the `term` inside the `result`.
- */
- this.highlightClass = 'ngb-highlight';
- }
- ngOnChanges(changes) {
- const result = toString(this.result);
- const terms = Array.isArray(this.term) ? this.term : [this.term];
- const escapedTerms = terms.map(term => regExpEscape(toString(term))).filter(term => term);
- this.parts = escapedTerms.length ? result.split(new RegExp(`(${escapedTerms.join('|')})`, 'gmi')) : [result];
- }
- }
- NgbHighlight.ɵfac = function NgbHighlight_Factory(t) { return new (t || NgbHighlight)(); };
- NgbHighlight.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbHighlight, selectors: [["ngb-highlight"]], inputs: { highlightClass: "highlightClass", result: "result", term: "term" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], decls: 1, vars: 1, consts: [["ngFor", "", 3, "ngForOf"], [3, "class", 4, "ngIf", "ngIfElse"], ["even", ""]], template: function NgbHighlight_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbHighlight_ng_template_0_Template, 3, 2, "ng-template", 0);
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.parts);
- } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"]], styles: [".ngb-highlight{font-weight:700}"], encapsulation: 2, changeDetection: 0 });
- NgbHighlight.propDecorators = {
- highlightClass: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- result: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- term: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbHighlight, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngb-highlight',
- changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- template: `<ng-template ngFor [ngForOf]="parts" let-part let-isOdd="odd">` +
- `<span *ngIf="isOdd; else even" [class]="highlightClass">{{part}}</span><ng-template #even>{{part}}</ng-template>` +
- `</ng-template>`,
- styles: [".ngb-highlight{font-weight:700}"]
- }]
- }], function () { return []; }, { highlightClass: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], result: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], term: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class NgbTypeaheadWindow {
- constructor() {
- this.activeIdx = 0;
- /**
- * Flag indicating if the first row should be active initially
- */
- this.focusFirst = true;
- /**
- * A function used to format a given result before display. This function should return a formatted string without any
- * HTML markup
- */
- this.formatter = toString;
- /**
- * Event raised when user selects a particular result row
- */
- this.selectEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.activeChangeEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- }
- hasActive() { return this.activeIdx > -1 && this.activeIdx < this.results.length; }
- getActive() { return this.results[this.activeIdx]; }
- markActive(activeIdx) {
- this.activeIdx = activeIdx;
- this._activeChanged();
- }
- next() {
- if (this.activeIdx === this.results.length - 1) {
- this.activeIdx = this.focusFirst ? (this.activeIdx + 1) % this.results.length : -1;
- }
- else {
- this.activeIdx++;
- }
- this._activeChanged();
- }
- prev() {
- if (this.activeIdx < 0) {
- this.activeIdx = this.results.length - 1;
- }
- else if (this.activeIdx === 0) {
- this.activeIdx = this.focusFirst ? this.results.length - 1 : -1;
- }
- else {
- this.activeIdx--;
- }
- this._activeChanged();
- }
- resetActive() {
- this.activeIdx = this.focusFirst ? 0 : -1;
- this._activeChanged();
- }
- select(item) { this.selectEvent.emit(item); }
- ngOnInit() { this.resetActive(); }
- _activeChanged() {
- this.activeChangeEvent.emit(this.activeIdx >= 0 ? this.id + '-' + this.activeIdx : undefined);
- }
- }
- NgbTypeaheadWindow.ɵfac = function NgbTypeaheadWindow_Factory(t) { return new (t || NgbTypeaheadWindow)(); };
- NgbTypeaheadWindow.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgbTypeaheadWindow, selectors: [["ngb-typeahead-window"]], hostAttrs: ["role", "listbox", 1, "dropdown-menu", "show"], hostVars: 1, hostBindings: function NgbTypeaheadWindow_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mousedown", function NgbTypeaheadWindow_mousedown_HostBindingHandler($event) { return $event.preventDefault(); });
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("id", ctx.id);
- } }, inputs: { focusFirst: "focusFirst", formatter: "formatter", id: "id", results: "results", term: "term", resultTemplate: "resultTemplate" }, outputs: { selectEvent: "select", activeChangeEvent: "activeChange" }, exportAs: ["ngbTypeaheadWindow"], decls: 3, vars: 1, consts: [["rt", ""], ["ngFor", "", 3, "ngForOf"], [3, "result", "term"], ["type", "button", "role", "option", 1, "dropdown-item", 3, "id", "mouseenter", "click"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"]], template: function NgbTypeaheadWindow_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbTypeaheadWindow_ng_template_0_Template, 1, 2, "ng-template", null, 0, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbTypeaheadWindow_ng_template_2_Template, 2, 9, "ng-template", 1);
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.results);
- } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], NgbHighlight, _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]], encapsulation: 2 });
- NgbTypeaheadWindow.propDecorators = {
- id: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- focusFirst: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- results: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- term: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- formatter: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- resultTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- selectEvent: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['select',] }],
- activeChangeEvent: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['activeChange',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTypeaheadWindow, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngb-typeahead-window',
- exportAs: 'ngbTypeaheadWindow',
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- host: { '(mousedown)': '$event.preventDefault()', 'class': 'dropdown-menu show', 'role': 'listbox', '[id]': 'id' },
- template: `
- <ng-template #rt let-result="result" let-term="term" let-formatter="formatter">
- <ngb-highlight [result]="formatter(result)" [term]="term"></ngb-highlight>
- </ng-template>
- <ng-template ngFor [ngForOf]="results" let-result let-idx="index">
- <button type="button" class="dropdown-item" role="option"
- [id]="id + '-' + idx"
- [class.active]="idx === activeIdx"
- (mouseenter)="markActive(idx)"
- (click)="select(result)">
- <ng-template [ngTemplateOutlet]="resultTemplate || rt"
- [ngTemplateOutletContext]="{result: result, term: term, formatter: formatter}"></ng-template>
- </button>
- </ng-template>
- `
- }]
- }], function () { return []; }, { focusFirst: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], formatter: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], selectEvent: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['select']
- }], activeChangeEvent: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['activeChange']
- }], id: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], results: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], term: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], resultTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- const ARIA_LIVE_DELAY = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('live announcer delay', { providedIn: 'root', factory: ARIA_LIVE_DELAY_FACTORY });
- function ARIA_LIVE_DELAY_FACTORY() {
- return 100;
- }
- function getLiveElement(document, lazyCreate = false) {
- let element = document.body.querySelector('#ngb-live');
- if (element == null && lazyCreate) {
- element = document.createElement('div');
- element.setAttribute('id', 'ngb-live');
- element.setAttribute('aria-live', 'polite');
- element.setAttribute('aria-atomic', 'true');
- element.classList.add('sr-only');
- document.body.appendChild(element);
- }
- return element;
- }
- class Live {
- constructor(_document, _delay) {
- this._document = _document;
- this._delay = _delay;
- }
- ngOnDestroy() {
- const element = getLiveElement(this._document);
- if (element) {
- // if exists, it will always be attached to the <body>
- element.parentElement.removeChild(element);
- }
- }
- say(message) {
- const element = getLiveElement(this._document, true);
- const delay = this._delay;
- if (element != null) {
- element.textContent = '';
- const setText = () => element.textContent = message;
- if (delay === null) {
- setText();
- }
- else {
- setTimeout(setText, delay);
- }
- }
- }
- }
- Live.ɵfac = function Live_Factory(t) { return new (t || Live)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](ARIA_LIVE_DELAY)); };
- Live.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function Live_Factory() { return new Live(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(ARIA_LIVE_DELAY)); }, token: Live, providedIn: "root" });
- Live.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"],] }] },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [ARIA_LIVE_DELAY,] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Live, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
- }] }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [ARIA_LIVE_DELAY]
- }] }]; }, null); })();
- /**
- * A configuration service for the [`NgbTypeahead`](#/components/typeahead/api#NgbTypeahead) component.
- *
- * You can inject this service, typically in your root component, and customize the values of its properties in
- * order to provide default values for all the typeaheads used in the application.
- */
- class NgbTypeaheadConfig {
- constructor() {
- this.editable = true;
- this.focusFirst = true;
- this.showHint = false;
- this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];
- }
- }
- NgbTypeaheadConfig.ɵfac = function NgbTypeaheadConfig_Factory(t) { return new (t || NgbTypeaheadConfig)(); };
- NgbTypeaheadConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgbTypeaheadConfig_Factory() { return new NgbTypeaheadConfig(); }, token: NgbTypeaheadConfig, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTypeaheadConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return []; }, null); })();
- const NGB_TYPEAHEAD_VALUE_ACCESSOR = {
- provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgbTypeahead),
- multi: true
- };
- let nextWindowId = 0;
- /**
- * A directive providing a simple way of creating powerful typeaheads from any text input.
- */
- class NgbTypeahead {
- constructor(_elementRef, viewContainerRef, _renderer, injector, componentFactoryResolver, config, ngZone, _live, _document, _ngZone, _changeDetector, applicationRef) {
- this._elementRef = _elementRef;
- this._renderer = _renderer;
- this._live = _live;
- this._document = _document;
- this._ngZone = _ngZone;
- this._changeDetector = _changeDetector;
- this._subscription = null;
- this._closed$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- this._inputValueBackup = null;
- this._windowRef = null;
- /**
- * The value for the `autocomplete` attribute for the `<input>` element.
- *
- * Defaults to `"off"` to disable the native browser autocomplete, but you can override it if necessary.
- *
- * @since 2.1.0
- */
- this.autocomplete = 'off';
- /**
- * The preferred placement of the typeahead.
- *
- * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`,
- * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`,
- * `"right-bottom"`
- *
- * Accepts an array of strings or a string with space separated possible values.
- *
- * The default order of preference is `"bottom-left bottom-right top-left top-right"`
- *
- * Please see the [positioning overview](#/positioning) for more details.
- */
- this.placement = 'bottom-left';
- /**
- * An event emitted right before an item is selected from the result list.
- *
- * Event payload is of type [`NgbTypeaheadSelectItemEvent`](#/components/typeahead/api#NgbTypeaheadSelectItemEvent).
- */
- this.selectItem = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.activeDescendant = null;
- this.popupId = `ngb-typeahead-${nextWindowId++}`;
- this._onTouched = () => { };
- this._onChange = (_) => { };
- this.container = config.container;
- this.editable = config.editable;
- this.focusFirst = config.focusFirst;
- this.showHint = config.showHint;
- this.placement = config.placement;
- this._valueChanges = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(_elementRef.nativeElement, 'input')
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])($event => $event.target.value));
- this._resubscribeTypeahead = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](null);
- this._popupService = new PopupService(NgbTypeaheadWindow, injector, viewContainerRef, _renderer, this._ngZone, componentFactoryResolver, applicationRef);
- this._zoneSubscription = ngZone.onStable.subscribe(() => {
- if (this.isPopupOpen()) {
- positionElements(this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement, this.container === 'body');
- }
- });
- }
- ngOnInit() {
- const inputValues$ = this._valueChanges.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(value => {
- this._inputValueBackup = this.showHint ? value : null;
- this._onChange(this.editable ? value : undefined);
- }));
- const results$ = inputValues$.pipe(this.ngbTypeahead);
- const userInput$ = this._resubscribeTypeahead.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(() => results$));
- this._subscription = this._subscribeToUserInput(userInput$);
- }
- ngOnDestroy() {
- this._closePopup();
- this._unsubscribeFromUserInput();
- this._zoneSubscription.unsubscribe();
- }
- registerOnChange(fn) { this._onChange = fn; }
- registerOnTouched(fn) { this._onTouched = fn; }
- writeValue(value) {
- this._writeInputValue(this._formatItemForInput(value));
- if (this.showHint) {
- this._inputValueBackup = value;
- }
- }
- setDisabledState(isDisabled) {
- this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
- }
- /**
- * Dismisses typeahead popup window
- */
- dismissPopup() {
- if (this.isPopupOpen()) {
- this._resubscribeTypeahead.next(null);
- this._closePopup();
- if (this.showHint && this._inputValueBackup !== null) {
- this._writeInputValue(this._inputValueBackup);
- }
- this._changeDetector.markForCheck();
- }
- }
- /**
- * Returns true if the typeahead popup window is displayed
- */
- isPopupOpen() { return this._windowRef != null; }
- handleBlur() {
- this._resubscribeTypeahead.next(null);
- this._onTouched();
- }
- handleKeyDown(event) {
- if (!this.isPopupOpen()) {
- return;
- }
- // tslint:disable-next-line:deprecation
- switch (event.which) {
- case Key.ArrowDown:
- event.preventDefault();
- this._windowRef.instance.next();
- this._showHint();
- break;
- case Key.ArrowUp:
- event.preventDefault();
- this._windowRef.instance.prev();
- this._showHint();
- break;
- case Key.Enter:
- case Key.Tab:
- const result = this._windowRef.instance.getActive();
- if (isDefined(result)) {
- event.preventDefault();
- event.stopPropagation();
- this._selectResult(result);
- }
- this._closePopup();
- break;
- }
- }
- _openPopup() {
- if (!this.isPopupOpen()) {
- this._inputValueBackup = this._elementRef.nativeElement.value;
- const { windowRef } = this._popupService.open();
- this._windowRef = windowRef;
- this._windowRef.instance.id = this.popupId;
- this._windowRef.instance.selectEvent.subscribe((result) => this._selectResultClosePopup(result));
- this._windowRef.instance.activeChangeEvent.subscribe((activeId) => this.activeDescendant = activeId);
- if (this.container === 'body') {
- this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);
- }
- this._changeDetector.markForCheck();
- ngbAutoClose(this._ngZone, this._document, 'outside', () => this.dismissPopup(), this._closed$, [this._elementRef.nativeElement, this._windowRef.location.nativeElement]);
- }
- }
- _closePopup() {
- this._popupService.close().subscribe(() => {
- this._closed$.next();
- this._windowRef = null;
- this.activeDescendant = null;
- });
- }
- _selectResult(result) {
- let defaultPrevented = false;
- this.selectItem.emit({ item: result, preventDefault: () => { defaultPrevented = true; } });
- this._resubscribeTypeahead.next(null);
- if (!defaultPrevented) {
- this.writeValue(result);
- this._onChange(result);
- }
- }
- _selectResultClosePopup(result) {
- this._selectResult(result);
- this._closePopup();
- }
- _showHint() {
- var _a;
- if (this.showHint && ((_a = this._windowRef) === null || _a === void 0 ? void 0 : _a.instance.hasActive()) && this._inputValueBackup != null) {
- const userInputLowerCase = this._inputValueBackup.toLowerCase();
- const formattedVal = this._formatItemForInput(this._windowRef.instance.getActive());
- if (userInputLowerCase === formattedVal.substr(0, this._inputValueBackup.length).toLowerCase()) {
- this._writeInputValue(this._inputValueBackup + formattedVal.substr(this._inputValueBackup.length));
- this._elementRef.nativeElement['setSelectionRange'].apply(this._elementRef.nativeElement, [this._inputValueBackup.length, formattedVal.length]);
- }
- else {
- this._writeInputValue(formattedVal);
- }
- }
- }
- _formatItemForInput(item) {
- return item != null && this.inputFormatter ? this.inputFormatter(item) : toString(item);
- }
- _writeInputValue(value) {
- this._renderer.setProperty(this._elementRef.nativeElement, 'value', toString(value));
- }
- _subscribeToUserInput(userInput$) {
- return userInput$.subscribe((results) => {
- if (!results || results.length === 0) {
- this._closePopup();
- }
- else {
- this._openPopup();
- this._windowRef.instance.focusFirst = this.focusFirst;
- this._windowRef.instance.results = results;
- this._windowRef.instance.term = this._elementRef.nativeElement.value;
- if (this.resultFormatter) {
- this._windowRef.instance.formatter = this.resultFormatter;
- }
- if (this.resultTemplate) {
- this._windowRef.instance.resultTemplate = this.resultTemplate;
- }
- this._windowRef.instance.resetActive();
- // The observable stream we are subscribing to might have async steps
- // and if a component containing typeahead is using the OnPush strategy
- // the change detection turn wouldn't be invoked automatically.
- this._windowRef.changeDetectorRef.detectChanges();
- this._showHint();
- }
- // live announcer
- const count = results ? results.length : 0;
- this._live.say(count === 0 ? 'No results available' : `${count} result${count === 1 ? '' : 's'} available`);
- });
- }
- _unsubscribeFromUserInput() {
- if (this._subscription) {
- this._subscription.unsubscribe();
- }
- this._subscription = null;
- }
- }
- NgbTypeahead.ɵfac = function NgbTypeahead_Factory(t) { return new (t || NgbTypeahead)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbTypeaheadConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](Live), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"])); };
- NgbTypeahead.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgbTypeahead, selectors: [["input", "ngbTypeahead", ""]], hostAttrs: ["autocapitalize", "off", "autocorrect", "off", "role", "combobox", "aria-multiline", "false"], hostVars: 7, hostBindings: function NgbTypeahead_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("blur", function NgbTypeahead_blur_HostBindingHandler() { return ctx.handleBlur(); })("keydown", function NgbTypeahead_keydown_HostBindingHandler($event) { return ctx.handleKeyDown($event); });
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("autocomplete", ctx.autocomplete);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-autocomplete", ctx.showHint ? "both" : "list")("aria-activedescendant", ctx.activeDescendant)("aria-owns", ctx.isPopupOpen() ? ctx.popupId : null)("aria-expanded", ctx.isPopupOpen());
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("open", ctx.isPopupOpen());
- } }, inputs: { autocomplete: "autocomplete", placement: "placement", container: "container", editable: "editable", focusFirst: "focusFirst", showHint: "showHint", inputFormatter: "inputFormatter", ngbTypeahead: "ngbTypeahead", resultFormatter: "resultFormatter", resultTemplate: "resultTemplate" }, outputs: { selectItem: "selectItem" }, exportAs: ["ngbTypeahead"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([NGB_TYPEAHEAD_VALUE_ACCESSOR])] });
- NgbTypeahead.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"] },
- { type: NgbTypeaheadConfig },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] },
- { type: Live },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"],] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"] }
- ];
- NgbTypeahead.propDecorators = {
- autocomplete: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- container: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- editable: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- focusFirst: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- inputFormatter: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ngbTypeahead: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- resultFormatter: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- resultTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- showHint: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- placement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- selectItem: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTypeahead, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: 'input[ngbTypeahead]',
- exportAs: 'ngbTypeahead',
- host: {
- '(blur)': 'handleBlur()',
- '[class.open]': 'isPopupOpen()',
- '(keydown)': 'handleKeyDown($event)',
- '[autocomplete]': 'autocomplete',
- 'autocapitalize': 'off',
- 'autocorrect': 'off',
- 'role': 'combobox',
- 'aria-multiline': 'false',
- '[attr.aria-autocomplete]': 'showHint ? "both" : "list"',
- '[attr.aria-activedescendant]': 'activeDescendant',
- '[attr.aria-owns]': 'isPopupOpen() ? popupId : null',
- '[attr.aria-expanded]': 'isPopupOpen()'
- },
- providers: [NGB_TYPEAHEAD_VALUE_ACCESSOR]
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"] }, { type: NgbTypeaheadConfig }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }, { type: Live }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"] }]; }, { autocomplete: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], placement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], selectItem: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], container: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], editable: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], focusFirst: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], showHint: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], inputFormatter: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ngbTypeahead: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], resultFormatter: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], resultTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class NgbTypeaheadModule {
- }
- NgbTypeaheadModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbTypeaheadModule });
- NgbTypeaheadModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbTypeaheadModule_Factory(t) { return new (t || NgbTypeaheadModule)(); }, imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbTypeaheadModule, { declarations: function () { return [NgbTypeahead, NgbHighlight, NgbTypeaheadWindow]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]; }, exports: function () { return [NgbTypeahead, NgbHighlight]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTypeaheadModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- declarations: [NgbTypeahead, NgbHighlight, NgbTypeaheadWindow],
- exports: [NgbTypeahead, NgbHighlight],
- imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]],
- entryComponents: [NgbTypeaheadWindow]
- }]
- }], null, null); })();
- const NGB_MODULES = [
- NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule,
- NgbDropdownModule, NgbModalModule, NgbNavModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule,
- NgbRatingModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule
- ];
- class NgbModule {
- }
- NgbModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgbModule });
- NgbModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgbModule_Factory(t) { return new (t || NgbModule)(); }, imports: [NGB_MODULES, NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule, NgbDropdownModule, NgbModalModule, NgbNavModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbModule, { imports: [NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule, NgbDropdownModule, NgbModalModule, NgbNavModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule], exports: [NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule, NgbDropdownModule, NgbModalModule, NgbNavModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule] }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{ imports: NGB_MODULES, exports: NGB_MODULES }]
- }], null, null); })();
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=ng-bootstrap.js.map
- /***/ }),
- /***/ "1uah":
- /*!***************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/zip.js ***!
- \***************************************************************/
- /*! exports provided: zip, ZipOperator, ZipSubscriber */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return zip; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ZipOperator", function() { return ZipOperator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ZipSubscriber", function() { return ZipSubscriber; });
- /* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fromArray */ "yCtX");
- /* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/isArray */ "DH7j");
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- /* harmony import */ var _internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../internal/symbol/iterator */ "Lhse");
- function zip(...observables) {
- const resultSelector = observables[observables.length - 1];
- if (typeof resultSelector === 'function') {
- observables.pop();
- }
- return Object(_fromArray__WEBPACK_IMPORTED_MODULE_0__["fromArray"])(observables, undefined).lift(new ZipOperator(resultSelector));
- }
- class ZipOperator {
- constructor(resultSelector) {
- this.resultSelector = resultSelector;
- }
- call(subscriber, source) {
- return source.subscribe(new ZipSubscriber(subscriber, this.resultSelector));
- }
- }
- class ZipSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_2__["Subscriber"] {
- constructor(destination, resultSelector, values = Object.create(null)) {
- super(destination);
- this.iterators = [];
- this.active = 0;
- this.resultSelector = (typeof resultSelector === 'function') ? resultSelector : null;
- this.values = values;
- }
- _next(value) {
- const iterators = this.iterators;
- if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(value)) {
- iterators.push(new StaticArrayIterator(value));
- }
- else if (typeof value[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_5__["iterator"]] === 'function') {
- iterators.push(new StaticIterator(value[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_5__["iterator"]]()));
- }
- else {
- iterators.push(new ZipBufferIterator(this.destination, this, value));
- }
- }
- _complete() {
- const iterators = this.iterators;
- const len = iterators.length;
- this.unsubscribe();
- if (len === 0) {
- this.destination.complete();
- return;
- }
- this.active = len;
- for (let i = 0; i < len; i++) {
- let iterator = iterators[i];
- if (iterator.stillUnsubscribed) {
- const destination = this.destination;
- destination.add(iterator.subscribe(iterator, i));
- }
- else {
- this.active--;
- }
- }
- }
- notifyInactive() {
- this.active--;
- if (this.active === 0) {
- this.destination.complete();
- }
- }
- checkIterators() {
- const iterators = this.iterators;
- const len = iterators.length;
- const destination = this.destination;
- for (let i = 0; i < len; i++) {
- let iterator = iterators[i];
- if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) {
- return;
- }
- }
- let shouldComplete = false;
- const args = [];
- for (let i = 0; i < len; i++) {
- let iterator = iterators[i];
- let result = iterator.next();
- if (iterator.hasCompleted()) {
- shouldComplete = true;
- }
- if (result.done) {
- destination.complete();
- return;
- }
- args.push(result.value);
- }
- if (this.resultSelector) {
- this._tryresultSelector(args);
- }
- else {
- destination.next(args);
- }
- if (shouldComplete) {
- destination.complete();
- }
- }
- _tryresultSelector(args) {
- let result;
- try {
- result = this.resultSelector.apply(this, args);
- }
- catch (err) {
- this.destination.error(err);
- return;
- }
- this.destination.next(result);
- }
- }
- class StaticIterator {
- constructor(iterator) {
- this.iterator = iterator;
- this.nextResult = iterator.next();
- }
- hasValue() {
- return true;
- }
- next() {
- const result = this.nextResult;
- this.nextResult = this.iterator.next();
- return result;
- }
- hasCompleted() {
- const nextResult = this.nextResult;
- return nextResult && nextResult.done;
- }
- }
- class StaticArrayIterator {
- constructor(array) {
- this.array = array;
- this.index = 0;
- this.length = 0;
- this.length = array.length;
- }
- [_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_5__["iterator"]]() {
- return this;
- }
- next(value) {
- const i = this.index++;
- const array = this.array;
- return i < this.length ? { value: array[i], done: false } : { value: null, done: true };
- }
- hasValue() {
- return this.array.length > this.index;
- }
- hasCompleted() {
- return this.array.length === this.index;
- }
- }
- class ZipBufferIterator extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"] {
- constructor(destination, parent, observable) {
- super(destination);
- this.parent = parent;
- this.observable = observable;
- this.stillUnsubscribed = true;
- this.buffer = [];
- this.isComplete = false;
- }
- [_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_5__["iterator"]]() {
- return this;
- }
- next() {
- const buffer = this.buffer;
- if (buffer.length === 0 && this.isComplete) {
- return { value: null, done: true };
- }
- else {
- return { value: buffer.shift(), done: false };
- }
- }
- hasValue() {
- return this.buffer.length > 0;
- }
- hasCompleted() {
- return this.buffer.length === 0 && this.isComplete;
- }
- notifyComplete() {
- if (this.buffer.length > 0) {
- this.isComplete = true;
- this.parent.notifyInactive();
- }
- else {
- this.destination.complete();
- }
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.buffer.push(innerValue);
- this.parent.checkIterators();
- }
- subscribe(value, index) {
- return Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(this, this.observable, this, index);
- }
- }
- //# sourceMappingURL=zip.js.map
- /***/ }),
- /***/ "2QA8":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/symbol/rxSubscriber.js ***!
- \********************************************************************/
- /*! exports provided: rxSubscriber, $$rxSubscriber */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rxSubscriber", function() { return rxSubscriber; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$$rxSubscriber", function() { return $$rxSubscriber; });
- const rxSubscriber = (() => typeof Symbol === 'function'
- ? Symbol('rxSubscriber')
- : '@@rxSubscriber_' + Math.random())();
- const $$rxSubscriber = rxSubscriber;
- //# sourceMappingURL=rxSubscriber.js.map
- /***/ }),
- /***/ "2QGa":
- /*!*********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/partition.js ***!
- \*********************************************************************/
- /*! exports provided: partition */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return partition; });
- /* harmony import */ var _util_not__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/not */ "F97/");
- /* harmony import */ var _util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/subscribeTo */ "SeVD");
- /* harmony import */ var _operators_filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../operators/filter */ "pLZG");
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Observable */ "HDdC");
- function partition(source, predicate, thisArg) {
- return [
- Object(_operators_filter__WEBPACK_IMPORTED_MODULE_2__["filter"])(predicate, thisArg)(new _Observable__WEBPACK_IMPORTED_MODULE_3__["Observable"](Object(_util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__["subscribeTo"])(source))),
- Object(_operators_filter__WEBPACK_IMPORTED_MODULE_2__["filter"])(Object(_util_not__WEBPACK_IMPORTED_MODULE_0__["not"])(predicate, thisArg))(new _Observable__WEBPACK_IMPORTED_MODULE_3__["Observable"](Object(_util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__["subscribeTo"])(source)))
- ];
- }
- //# sourceMappingURL=partition.js.map
- /***/ }),
- /***/ "2Vo4":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/BehaviorSubject.js ***!
- \****************************************************************/
- /*! exports provided: BehaviorSubject */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BehaviorSubject", function() { return BehaviorSubject; });
- /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Subject */ "XNiG");
- /* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/ObjectUnsubscribedError */ "9ppp");
- class BehaviorSubject extends _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"] {
- constructor(_value) {
- super();
- this._value = _value;
- }
- get value() {
- return this.getValue();
- }
- _subscribe(subscriber) {
- const subscription = super._subscribe(subscriber);
- if (subscription && !subscription.closed) {
- subscriber.next(this._value);
- }
- return subscription;
- }
- getValue() {
- if (this.hasError) {
- throw this.thrownError;
- }
- else if (this.closed) {
- throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_1__["ObjectUnsubscribedError"]();
- }
- else {
- return this._value;
- }
- }
- next(value) {
- super.next(this._value = value);
- }
- }
- //# sourceMappingURL=BehaviorSubject.js.map
- /***/ }),
- /***/ "2fFW":
- /*!*******************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/config.js ***!
- \*******************************************************/
- /*! exports provided: config */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "config", function() { return config; });
- let _enable_super_gross_mode_that_will_cause_bad_things = false;
- const config = {
- Promise: undefined,
- set useDeprecatedSynchronousErrorHandling(value) {
- if (value) {
- const error = new Error();
- console.warn('DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n' + error.stack);
- }
- else if (_enable_super_gross_mode_that_will_cause_bad_things) {
- console.log('RxJS: Back to a better error behavior. Thank you. <3');
- }
- _enable_super_gross_mode_that_will_cause_bad_things = value;
- },
- get useDeprecatedSynchronousErrorHandling() {
- return _enable_super_gross_mode_that_will_cause_bad_things;
- },
- };
- //# sourceMappingURL=config.js.map
- /***/ }),
- /***/ "32Ea":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/skipWhile.js ***!
- \********************************************************************/
- /*! exports provided: skipWhile */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skipWhile", function() { return skipWhile; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function skipWhile(predicate) {
- return (source) => source.lift(new SkipWhileOperator(predicate));
- }
- class SkipWhileOperator {
- constructor(predicate) {
- this.predicate = predicate;
- }
- call(subscriber, source) {
- return source.subscribe(new SkipWhileSubscriber(subscriber, this.predicate));
- }
- }
- class SkipWhileSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, predicate) {
- super(destination);
- this.predicate = predicate;
- this.skipping = true;
- this.index = 0;
- }
- _next(value) {
- const destination = this.destination;
- if (this.skipping) {
- this.tryCallPredicate(value);
- }
- if (!this.skipping) {
- destination.next(value);
- }
- }
- tryCallPredicate(value) {
- try {
- const result = this.predicate(value, this.index++);
- this.skipping = Boolean(result);
- }
- catch (err) {
- this.destination.error(err);
- }
- }
- }
- //# sourceMappingURL=skipWhile.js.map
- /***/ }),
- /***/ "3E0/":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/delay.js ***!
- \****************************************************************/
- /*! exports provided: delay */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "delay", function() { return delay; });
- /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scheduler/async */ "D0XW");
- /* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/isDate */ "mlxB");
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Notification */ "WMd4");
- function delay(delay, scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"]) {
- const absoluteDelay = Object(_util_isDate__WEBPACK_IMPORTED_MODULE_1__["isDate"])(delay);
- const delayFor = absoluteDelay ? (+delay - scheduler.now()) : Math.abs(delay);
- return (source) => source.lift(new DelayOperator(delayFor, scheduler));
- }
- class DelayOperator {
- constructor(delay, scheduler) {
- this.delay = delay;
- this.scheduler = scheduler;
- }
- call(subscriber, source) {
- return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler));
- }
- }
- class DelaySubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_2__["Subscriber"] {
- constructor(destination, delay, scheduler) {
- super(destination);
- this.delay = delay;
- this.scheduler = scheduler;
- this.queue = [];
- this.active = false;
- this.errored = false;
- }
- static dispatch(state) {
- const source = state.source;
- const queue = source.queue;
- const scheduler = state.scheduler;
- const destination = state.destination;
- while (queue.length > 0 && (queue[0].time - scheduler.now()) <= 0) {
- queue.shift().notification.observe(destination);
- }
- if (queue.length > 0) {
- const delay = Math.max(0, queue[0].time - scheduler.now());
- this.schedule(state, delay);
- }
- else {
- this.unsubscribe();
- source.active = false;
- }
- }
- _schedule(scheduler) {
- this.active = true;
- const destination = this.destination;
- destination.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {
- source: this, destination: this.destination, scheduler: scheduler
- }));
- }
- scheduleNotification(notification) {
- if (this.errored === true) {
- return;
- }
- const scheduler = this.scheduler;
- const message = new DelayMessage(scheduler.now() + this.delay, notification);
- this.queue.push(message);
- if (this.active === false) {
- this._schedule(scheduler);
- }
- }
- _next(value) {
- this.scheduleNotification(_Notification__WEBPACK_IMPORTED_MODULE_3__["Notification"].createNext(value));
- }
- _error(err) {
- this.errored = true;
- this.queue = [];
- this.destination.error(err);
- this.unsubscribe();
- }
- _complete() {
- this.scheduleNotification(_Notification__WEBPACK_IMPORTED_MODULE_3__["Notification"].createComplete());
- this.unsubscribe();
- }
- }
- class DelayMessage {
- constructor(time, notification) {
- this.time = time;
- this.notification = notification;
- }
- }
- //# sourceMappingURL=delay.js.map
- /***/ }),
- /***/ "3N8a":
- /*!**********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduler/AsyncAction.js ***!
- \**********************************************************************/
- /*! exports provided: AsyncAction */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsyncAction", function() { return AsyncAction; });
- /* harmony import */ var _Action__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Action */ "7ve7");
- class AsyncAction extends _Action__WEBPACK_IMPORTED_MODULE_0__["Action"] {
- constructor(scheduler, work) {
- super(scheduler, work);
- this.scheduler = scheduler;
- this.work = work;
- this.pending = false;
- }
- schedule(state, delay = 0) {
- if (this.closed) {
- return this;
- }
- this.state = state;
- const id = this.id;
- const scheduler = this.scheduler;
- if (id != null) {
- this.id = this.recycleAsyncId(scheduler, id, delay);
- }
- this.pending = true;
- this.delay = delay;
- this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);
- return this;
- }
- requestAsyncId(scheduler, id, delay = 0) {
- return setInterval(scheduler.flush.bind(scheduler, this), delay);
- }
- recycleAsyncId(scheduler, id, delay = 0) {
- if (delay !== null && this.delay === delay && this.pending === false) {
- return id;
- }
- clearInterval(id);
- return undefined;
- }
- execute(state, delay) {
- if (this.closed) {
- return new Error('executing a cancelled action');
- }
- this.pending = false;
- const error = this._execute(state, delay);
- if (error) {
- return error;
- }
- else if (this.pending === false && this.id != null) {
- this.id = this.recycleAsyncId(this.scheduler, this.id, null);
- }
- }
- _execute(state, delay) {
- let errored = false;
- let errorValue = undefined;
- try {
- this.work(state);
- }
- catch (e) {
- errored = true;
- errorValue = !!e && e || new Error(e);
- }
- if (errored) {
- this.unsubscribe();
- return errorValue;
- }
- }
- _unsubscribe() {
- const id = this.id;
- const scheduler = this.scheduler;
- const actions = scheduler.actions;
- const index = actions.indexOf(this);
- this.work = null;
- this.state = null;
- this.pending = false;
- this.scheduler = null;
- if (index !== -1) {
- actions.splice(index, 1);
- }
- if (id != null) {
- this.id = this.recycleAsyncId(scheduler, id, null);
- }
- this.delay = null;
- }
- }
- //# sourceMappingURL=AsyncAction.js.map
- /***/ }),
- /***/ "3Pt+":
- /*!********************************************************************!*\
- !*** ./node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js ***!
- \********************************************************************/
- /*! exports provided: AbstractControl, AbstractControlDirective, AbstractFormGroupDirective, COMPOSITION_BUFFER_MODE, CheckboxControlValueAccessor, CheckboxRequiredValidator, ControlContainer, DefaultValueAccessor, EmailValidator, FormArray, FormArrayName, FormBuilder, FormControl, FormControlDirective, FormControlName, FormGroup, FormGroupDirective, FormGroupName, FormsModule, MaxLengthValidator, MinLengthValidator, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgControlStatus, NgControlStatusGroup, NgForm, NgModel, NgModelGroup, NgSelectOption, NumberValueAccessor, PatternValidator, RadioControlValueAccessor, RangeValueAccessor, ReactiveFormsModule, RequiredValidator, SelectControlValueAccessor, SelectMultipleControlValueAccessor, VERSION, Validators, ɵInternalFormsSharedModule, ɵNgNoValidate, ɵNgSelectMultipleOption, ɵangular_packages_forms_forms_a, ɵangular_packages_forms_forms_b, ɵangular_packages_forms_forms_ba, ɵangular_packages_forms_forms_bb, ɵangular_packages_forms_forms_bc, ɵangular_packages_forms_forms_bd, ɵangular_packages_forms_forms_be, ɵangular_packages_forms_forms_c, ɵangular_packages_forms_forms_d, ɵangular_packages_forms_forms_e, ɵangular_packages_forms_forms_f, ɵangular_packages_forms_forms_g, ɵangular_packages_forms_forms_h, ɵangular_packages_forms_forms_i, ɵangular_packages_forms_forms_j, ɵangular_packages_forms_forms_k, ɵangular_packages_forms_forms_l, ɵangular_packages_forms_forms_m, ɵangular_packages_forms_forms_n, ɵangular_packages_forms_forms_o, ɵangular_packages_forms_forms_p, ɵangular_packages_forms_forms_q, ɵangular_packages_forms_forms_r, ɵangular_packages_forms_forms_s, ɵangular_packages_forms_forms_t, ɵangular_packages_forms_forms_u, ɵangular_packages_forms_forms_v, ɵangular_packages_forms_forms_w, ɵangular_packages_forms_forms_x, ɵangular_packages_forms_forms_y, ɵangular_packages_forms_forms_z */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AbstractControl", function() { return AbstractControl; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AbstractControlDirective", function() { return AbstractControlDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AbstractFormGroupDirective", function() { return AbstractFormGroupDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "COMPOSITION_BUFFER_MODE", function() { return COMPOSITION_BUFFER_MODE; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CheckboxControlValueAccessor", function() { return CheckboxControlValueAccessor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CheckboxRequiredValidator", function() { return CheckboxRequiredValidator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ControlContainer", function() { return ControlContainer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DefaultValueAccessor", function() { return DefaultValueAccessor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EmailValidator", function() { return EmailValidator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormArray", function() { return FormArray; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormArrayName", function() { return FormArrayName; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormBuilder", function() { return FormBuilder; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormControl", function() { return FormControl; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormControlDirective", function() { return FormControlDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormControlName", function() { return FormControlName; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormGroup", function() { return FormGroup; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormGroupDirective", function() { return FormGroupDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormGroupName", function() { return FormGroupName; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormsModule", function() { return FormsModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MaxLengthValidator", function() { return MaxLengthValidator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MinLengthValidator", function() { return MinLengthValidator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NG_ASYNC_VALIDATORS", function() { return NG_ASYNC_VALIDATORS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NG_VALIDATORS", function() { return NG_VALIDATORS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NG_VALUE_ACCESSOR", function() { return NG_VALUE_ACCESSOR; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgControl", function() { return NgControl; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgControlStatus", function() { return NgControlStatus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgControlStatusGroup", function() { return NgControlStatusGroup; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgForm", function() { return NgForm; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgModel", function() { return NgModel; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgModelGroup", function() { return NgModelGroup; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgSelectOption", function() { return NgSelectOption; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NumberValueAccessor", function() { return NumberValueAccessor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PatternValidator", function() { return PatternValidator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RadioControlValueAccessor", function() { return RadioControlValueAccessor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RangeValueAccessor", function() { return RangeValueAccessor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ReactiveFormsModule", function() { return ReactiveFormsModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RequiredValidator", function() { return RequiredValidator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SelectControlValueAccessor", function() { return SelectControlValueAccessor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SelectMultipleControlValueAccessor", function() { return SelectMultipleControlValueAccessor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VERSION", function() { return VERSION; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Validators", function() { return Validators; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵInternalFormsSharedModule", function() { return ɵInternalFormsSharedModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵNgNoValidate", function() { return ɵNgNoValidate; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵNgSelectMultipleOption", function() { return ɵNgSelectMultipleOption; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_a", function() { return SHARED_FORM_DIRECTIVES; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_b", function() { return TEMPLATE_DRIVEN_DIRECTIVES; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_ba", function() { return CHECKBOX_REQUIRED_VALIDATOR; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_bb", function() { return EMAIL_VALIDATOR; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_bc", function() { return MIN_LENGTH_VALIDATOR; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_bd", function() { return MAX_LENGTH_VALIDATOR; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_be", function() { return PATTERN_VALIDATOR; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_c", function() { return REACTIVE_DRIVEN_DIRECTIVES; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_d", function() { return ɵInternalFormsSharedModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_e", function() { return CHECKBOX_VALUE_ACCESSOR; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_f", function() { return DEFAULT_VALUE_ACCESSOR; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_g", function() { return AbstractControlStatus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_h", function() { return ngControlStatusHost; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_i", function() { return formDirectiveProvider; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_j", function() { return formControlBinding; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_k", function() { return modelGroupProvider; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_l", function() { return NUMBER_VALUE_ACCESSOR; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_m", function() { return RADIO_VALUE_ACCESSOR; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_n", function() { return RadioControlRegistry; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_o", function() { return RANGE_VALUE_ACCESSOR; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_p", function() { return NG_MODEL_WITH_FORM_CONTROL_WARNING; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_q", function() { return formControlBinding$1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_r", function() { return controlNameBinding; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_s", function() { return formDirectiveProvider$1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_t", function() { return formGroupNameProvider; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_u", function() { return formArrayNameProvider; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_v", function() { return SELECT_VALUE_ACCESSOR; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_w", function() { return SELECT_MULTIPLE_VALUE_ACCESSOR; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_x", function() { return ɵNgSelectMultipleOption; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_y", function() { return ɵNgNoValidate; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_z", function() { return REQUIRED_VALIDATOR; });
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ "ofXK");
- /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ "qCKp");
- /* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ "kU1M");
- /**
- * @license Angular v11.0.4
- * (c) 2010-2020 Google LLC. https://angular.io/
- * License: MIT
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Used to provide a `ControlValueAccessor` for form controls.
- *
- * See `DefaultValueAccessor` for how to implement one.
- *
- * @publicApi
- */
- const NG_VALUE_ACCESSOR = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('NgValueAccessor');
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const CHECKBOX_VALUE_ACCESSOR = {
- provide: NG_VALUE_ACCESSOR,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => CheckboxControlValueAccessor),
- multi: true,
- };
- /**
- * @description
- * A `ControlValueAccessor` for writing a value and listening to changes on a checkbox input
- * element.
- *
- * @usageNotes
- *
- * ### Using a checkbox with a reactive form.
- *
- * The following example shows how to use a checkbox with a reactive form.
- *
- * ```ts
- * const rememberLoginControl = new FormControl();
- * ```
- *
- * ```
- * <input type="checkbox" [formControl]="rememberLoginControl">
- * ```
- *
- * @ngModule ReactiveFormsModule
- * @ngModule FormsModule
- * @publicApi
- */
- class CheckboxControlValueAccessor {
- constructor(_renderer, _elementRef) {
- this._renderer = _renderer;
- this._elementRef = _elementRef;
- /**
- * The registered callback function called when a change event occurs on the input element.
- * @nodoc
- */
- this.onChange = (_) => { };
- /**
- * The registered callback function called when a blur event occurs on the input element.
- * @nodoc
- */
- this.onTouched = () => { };
- }
- /**
- * Sets the "checked" property on the input element.
- * @nodoc
- */
- writeValue(value) {
- this._renderer.setProperty(this._elementRef.nativeElement, 'checked', value);
- }
- /**
- * Registers a function called when the control value changes.
- * @nodoc
- */
- registerOnChange(fn) {
- this.onChange = fn;
- }
- /**
- * Registers a function called when the control is touched.
- * @nodoc
- */
- registerOnTouched(fn) {
- this.onTouched = fn;
- }
- /**
- * Sets the "disabled" property on the input element.
- * @nodoc
- */
- setDisabledState(isDisabled) {
- this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
- }
- }
- CheckboxControlValueAccessor.ɵfac = function CheckboxControlValueAccessor_Factory(t) { return new (t || CheckboxControlValueAccessor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- CheckboxControlValueAccessor.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: CheckboxControlValueAccessor, selectors: [["input", "type", "checkbox", "formControlName", ""], ["input", "type", "checkbox", "formControl", ""], ["input", "type", "checkbox", "ngModel", ""]], hostBindings: function CheckboxControlValueAccessor_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function CheckboxControlValueAccessor_change_HostBindingHandler($event) { return ctx.onChange($event.target.checked); })("blur", function CheckboxControlValueAccessor_blur_HostBindingHandler() { return ctx.onTouched(); });
- } }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([CHECKBOX_VALUE_ACCESSOR])] });
- CheckboxControlValueAccessor.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CheckboxControlValueAccessor, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',
- host: { '(change)': 'onChange($event.target.checked)', '(blur)': 'onTouched()' },
- providers: [CHECKBOX_VALUE_ACCESSOR]
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const DEFAULT_VALUE_ACCESSOR = {
- provide: NG_VALUE_ACCESSOR,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => DefaultValueAccessor),
- multi: true
- };
- /**
- * We must check whether the agent is Android because composition events
- * behave differently between iOS and Android.
- */
- function _isAndroid() {
- const userAgent = Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["ɵgetDOM"])() ? Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["ɵgetDOM"])().getUserAgent() : '';
- return /android (\d+)/.test(userAgent.toLowerCase());
- }
- /**
- * @description
- * Provide this token to control if form directives buffer IME input until
- * the "compositionend" event occurs.
- * @publicApi
- */
- const COMPOSITION_BUFFER_MODE = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('CompositionEventMode');
- /**
- * @description
- *
- * {@searchKeywords ngDefaultControl}
- *
- * The default `ControlValueAccessor` for writing a value and listening to changes on input
- * elements. The accessor is used by the `FormControlDirective`, `FormControlName`, and
- * `NgModel` directives.
- *
- * @usageNotes
- *
- * ### Using the default value accessor
- *
- * The following example shows how to use an input element that activates the default value accessor
- * (in this case, a text field).
- *
- * ```ts
- * const firstNameControl = new FormControl();
- * ```
- *
- * ```
- * <input type="text" [formControl]="firstNameControl">
- * ```
- *
- * This value accessor is used by default for `<input type="text">` and `<textarea>` elements, but
- * you could also use it for custom components that have similar behavior and do not require special
- * processing. In order to attach the default value accessor to a custom element, add the
- * `ngDefaultControl` attribute as shown below.
- *
- * ```
- * <custom-input-component ngDefaultControl [(ngModel)]="value"></custom-input-component>
- * ```
- *
- * @ngModule ReactiveFormsModule
- * @ngModule FormsModule
- * @publicApi
- */
- class DefaultValueAccessor {
- constructor(_renderer, _elementRef, _compositionMode) {
- this._renderer = _renderer;
- this._elementRef = _elementRef;
- this._compositionMode = _compositionMode;
- /**
- * The registered callback function called when an input event occurs on the input element.
- * @nodoc
- */
- this.onChange = (_) => { };
- /**
- * The registered callback function called when a blur event occurs on the input element.
- * @nodoc
- */
- this.onTouched = () => { };
- /** Whether the user is creating a composition string (IME events). */
- this._composing = false;
- if (this._compositionMode == null) {
- this._compositionMode = !_isAndroid();
- }
- }
- /**
- * Sets the "value" property on the input element.
- * @nodoc
- */
- writeValue(value) {
- const normalizedValue = value == null ? '' : value;
- this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);
- }
- /**
- * Registers a function called when the control value changes.
- * @nodoc
- */
- registerOnChange(fn) {
- this.onChange = fn;
- }
- /**
- * Registers a function called when the control is touched.
- * @nodoc
- */
- registerOnTouched(fn) {
- this.onTouched = fn;
- }
- /**
- * Sets the "disabled" property on the input element.
- * @nodoc
- */
- setDisabledState(isDisabled) {
- this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
- }
- /** @internal */
- _handleInput(value) {
- if (!this._compositionMode || (this._compositionMode && !this._composing)) {
- this.onChange(value);
- }
- }
- /** @internal */
- _compositionStart() {
- this._composing = true;
- }
- /** @internal */
- _compositionEnd(value) {
- this._composing = false;
- this._compositionMode && this.onChange(value);
- }
- }
- DefaultValueAccessor.ɵfac = function DefaultValueAccessor_Factory(t) { return new (t || DefaultValueAccessor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](COMPOSITION_BUFFER_MODE, 8)); };
- DefaultValueAccessor.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: DefaultValueAccessor, selectors: [["input", "formControlName", "", 3, "type", "checkbox"], ["textarea", "formControlName", ""], ["input", "formControl", "", 3, "type", "checkbox"], ["textarea", "formControl", ""], ["input", "ngModel", "", 3, "type", "checkbox"], ["textarea", "ngModel", ""], ["", "ngDefaultControl", ""]], hostBindings: function DefaultValueAccessor_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("input", function DefaultValueAccessor_input_HostBindingHandler($event) { return ctx._handleInput($event.target.value); })("blur", function DefaultValueAccessor_blur_HostBindingHandler() { return ctx.onTouched(); })("compositionstart", function DefaultValueAccessor_compositionstart_HostBindingHandler() { return ctx._compositionStart(); })("compositionend", function DefaultValueAccessor_compositionend_HostBindingHandler($event) { return ctx._compositionEnd($event.target.value); });
- } }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([DEFAULT_VALUE_ACCESSOR])] });
- DefaultValueAccessor.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: Boolean, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [COMPOSITION_BUFFER_MODE,] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DefaultValueAccessor, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: 'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',
- // TODO: vsavkin replace the above selector with the one below it once
- // https://github.com/angular/angular/issues/3011 is implemented
- // selector: '[ngModel],[formControl],[formControlName]',
- host: {
- '(input)': '$any(this)._handleInput($event.target.value)',
- '(blur)': 'onTouched()',
- '(compositionstart)': '$any(this)._compositionStart()',
- '(compositionend)': '$any(this)._compositionEnd($event.target.value)'
- },
- providers: [DEFAULT_VALUE_ACCESSOR]
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: Boolean, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [COMPOSITION_BUFFER_MODE]
- }] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function isEmptyInputValue(value) {
- // we don't check for string here so it also works with arrays
- return value == null || value.length === 0;
- }
- function hasValidLength(value) {
- // non-strict comparison is intentional, to check for both `null` and `undefined` values
- return value != null && typeof value.length === 'number';
- }
- /**
- * @description
- * An `InjectionToken` for registering additional synchronous validators used with
- * `AbstractControl`s.
- *
- * @see `NG_ASYNC_VALIDATORS`
- *
- * @usageNotes
- *
- * ### Providing a custom validator
- *
- * The following example registers a custom validator directive. Adding the validator to the
- * existing collection of validators requires the `multi: true` option.
- *
- * ```typescript
- * @Directive({
- * selector: '[customValidator]',
- * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]
- * })
- * class CustomValidatorDirective implements Validator {
- * validate(control: AbstractControl): ValidationErrors | null {
- * return { 'custom': true };
- * }
- * }
- * ```
- *
- * @publicApi
- */
- const NG_VALIDATORS = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('NgValidators');
- /**
- * @description
- * An `InjectionToken` for registering additional asynchronous validators used with
- * `AbstractControl`s.
- *
- * @see `NG_VALIDATORS`
- *
- * @publicApi
- */
- const NG_ASYNC_VALIDATORS = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('NgAsyncValidators');
- /**
- * A regular expression that matches valid e-mail addresses.
- *
- * At a high level, this regexp matches e-mail addresses of the format `local-part@tld`, where:
- * - `local-part` consists of one or more of the allowed characters (alphanumeric and some
- * punctuation symbols).
- * - `local-part` cannot begin or end with a period (`.`).
- * - `local-part` cannot be longer than 64 characters.
- * - `tld` consists of one or more `labels` separated by periods (`.`). For example `localhost` or
- * `foo.com`.
- * - A `label` consists of one or more of the allowed characters (alphanumeric, dashes (`-`) and
- * periods (`.`)).
- * - A `label` cannot begin or end with a dash (`-`) or a period (`.`).
- * - A `label` cannot be longer than 63 characters.
- * - The whole address cannot be longer than 254 characters.
- *
- * ## Implementation background
- *
- * This regexp was ported over from AngularJS (see there for git history):
- * https://github.com/angular/angular.js/blob/c133ef836/src/ng/directive/input.js#L27
- * It is based on the
- * [WHATWG version](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address) with
- * some enhancements to incorporate more RFC rules (such as rules related to domain names and the
- * lengths of different parts of the address). The main differences from the WHATWG version are:
- * - Disallow `local-part` to begin or end with a period (`.`).
- * - Disallow `local-part` length to exceed 64 characters.
- * - Disallow total address length to exceed 254 characters.
- *
- * See [this commit](https://github.com/angular/angular.js/commit/f3f5cf72e) for more details.
- */
- const EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
- /**
- * @description
- * Provides a set of built-in validators that can be used by form controls.
- *
- * A validator is a function that processes a `FormControl` or collection of
- * controls and returns an error map or null. A null map means that validation has passed.
- *
- * @see [Form Validation](/guide/form-validation)
- *
- * @publicApi
- */
- class Validators {
- /**
- * @description
- * Validator that requires the control's value to be greater than or equal to the provided number.
- * The validator exists only as a function and not as a directive.
- *
- * @usageNotes
- *
- * ### Validate against a minimum of 3
- *
- * ```typescript
- * const control = new FormControl(2, Validators.min(3));
- *
- * console.log(control.errors); // {min: {min: 3, actual: 2}}
- * ```
- *
- * @returns A validator function that returns an error map with the
- * `min` property if the validation check fails, otherwise `null`.
- *
- * @see `updateValueAndValidity()`
- *
- */
- static min(min) {
- return (control) => {
- if (isEmptyInputValue(control.value) || isEmptyInputValue(min)) {
- return null; // don't validate empty values to allow optional controls
- }
- const value = parseFloat(control.value);
- // Controls with NaN values after parsing should be treated as not having a
- // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min
- return !isNaN(value) && value < min ? { 'min': { 'min': min, 'actual': control.value } } : null;
- };
- }
- /**
- * @description
- * Validator that requires the control's value to be less than or equal to the provided number.
- * The validator exists only as a function and not as a directive.
- *
- * @usageNotes
- *
- * ### Validate against a maximum of 15
- *
- * ```typescript
- * const control = new FormControl(16, Validators.max(15));
- *
- * console.log(control.errors); // {max: {max: 15, actual: 16}}
- * ```
- *
- * @returns A validator function that returns an error map with the
- * `max` property if the validation check fails, otherwise `null`.
- *
- * @see `updateValueAndValidity()`
- *
- */
- static max(max) {
- return (control) => {
- if (isEmptyInputValue(control.value) || isEmptyInputValue(max)) {
- return null; // don't validate empty values to allow optional controls
- }
- const value = parseFloat(control.value);
- // Controls with NaN values after parsing should be treated as not having a
- // maximum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-max
- return !isNaN(value) && value > max ? { 'max': { 'max': max, 'actual': control.value } } : null;
- };
- }
- /**
- * @description
- * Validator that requires the control have a non-empty value.
- *
- * @usageNotes
- *
- * ### Validate that the field is non-empty
- *
- * ```typescript
- * const control = new FormControl('', Validators.required);
- *
- * console.log(control.errors); // {required: true}
- * ```
- *
- * @returns An error map with the `required` property
- * if the validation check fails, otherwise `null`.
- *
- * @see `updateValueAndValidity()`
- *
- */
- static required(control) {
- return isEmptyInputValue(control.value) ? { 'required': true } : null;
- }
- /**
- * @description
- * Validator that requires the control's value be true. This validator is commonly
- * used for required checkboxes.
- *
- * @usageNotes
- *
- * ### Validate that the field value is true
- *
- * ```typescript
- * const control = new FormControl('', Validators.requiredTrue);
- *
- * console.log(control.errors); // {required: true}
- * ```
- *
- * @returns An error map that contains the `required` property
- * set to `true` if the validation check fails, otherwise `null`.
- *
- * @see `updateValueAndValidity()`
- *
- */
- static requiredTrue(control) {
- return control.value === true ? null : { 'required': true };
- }
- /**
- * @description
- * Validator that requires the control's value pass an email validation test.
- *
- * Tests the value using a [regular
- * expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)
- * pattern suitable for common usecases. The pattern is based on the definition of a valid email
- * address in the [WHATWG HTML
- * specification](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address) with
- * some enhancements to incorporate more RFC rules (such as rules related to domain names and the
- * lengths of different parts of the address).
- *
- * The differences from the WHATWG version include:
- * - Disallow `local-part` (the part before the `@` symbol) to begin or end with a period (`.`).
- * - Disallow `local-part` to be longer than 64 characters.
- * - Disallow the whole address to be longer than 254 characters.
- *
- * If this pattern does not satisfy your business needs, you can use `Validators.pattern()` to
- * validate the value against a different pattern.
- *
- * @usageNotes
- *
- * ### Validate that the field matches a valid email pattern
- *
- * ```typescript
- * const control = new FormControl('bad@', Validators.email);
- *
- * console.log(control.errors); // {email: true}
- * ```
- *
- * @returns An error map with the `email` property
- * if the validation check fails, otherwise `null`.
- *
- * @see `updateValueAndValidity()`
- *
- */
- static email(control) {
- if (isEmptyInputValue(control.value)) {
- return null; // don't validate empty values to allow optional controls
- }
- return EMAIL_REGEXP.test(control.value) ? null : { 'email': true };
- }
- /**
- * @description
- * Validator that requires the length of the control's value to be greater than or equal
- * to the provided minimum length. This validator is also provided by default if you use the
- * the HTML5 `minlength` attribute. Note that the `minLength` validator is intended to be used
- * only for types that have a numeric `length` property, such as strings or arrays. The
- * `minLength` validator logic is also not invoked for values when their `length` property is 0
- * (for example in case of an empty string or an empty array), to support optional controls. You
- * can use the standard `required` validator if empty values should not be considered valid.
- *
- * @usageNotes
- *
- * ### Validate that the field has a minimum of 3 characters
- *
- * ```typescript
- * const control = new FormControl('ng', Validators.minLength(3));
- *
- * console.log(control.errors); // {minlength: {requiredLength: 3, actualLength: 2}}
- * ```
- *
- * ```html
- * <input minlength="5">
- * ```
- *
- * @returns A validator function that returns an error map with the
- * `minlength` if the validation check fails, otherwise `null`.
- *
- * @see `updateValueAndValidity()`
- *
- */
- static minLength(minLength) {
- return (control) => {
- if (isEmptyInputValue(control.value) || !hasValidLength(control.value)) {
- // don't validate empty values to allow optional controls
- // don't validate values without `length` property
- return null;
- }
- return control.value.length < minLength ?
- { 'minlength': { 'requiredLength': minLength, 'actualLength': control.value.length } } :
- null;
- };
- }
- /**
- * @description
- * Validator that requires the length of the control's value to be less than or equal
- * to the provided maximum length. This validator is also provided by default if you use the
- * the HTML5 `maxlength` attribute. Note that the `maxLength` validator is intended to be used
- * only for types that have a numeric `length` property, such as strings or arrays.
- *
- * @usageNotes
- *
- * ### Validate that the field has maximum of 5 characters
- *
- * ```typescript
- * const control = new FormControl('Angular', Validators.maxLength(5));
- *
- * console.log(control.errors); // {maxlength: {requiredLength: 5, actualLength: 7}}
- * ```
- *
- * ```html
- * <input maxlength="5">
- * ```
- *
- * @returns A validator function that returns an error map with the
- * `maxlength` property if the validation check fails, otherwise `null`.
- *
- * @see `updateValueAndValidity()`
- *
- */
- static maxLength(maxLength) {
- return (control) => {
- return hasValidLength(control.value) && control.value.length > maxLength ?
- { 'maxlength': { 'requiredLength': maxLength, 'actualLength': control.value.length } } :
- null;
- };
- }
- /**
- * @description
- * Validator that requires the control's value to match a regex pattern. This validator is also
- * provided by default if you use the HTML5 `pattern` attribute.
- *
- * @usageNotes
- *
- * ### Validate that the field only contains letters or spaces
- *
- * ```typescript
- * const control = new FormControl('1', Validators.pattern('[a-zA-Z ]*'));
- *
- * console.log(control.errors); // {pattern: {requiredPattern: '^[a-zA-Z ]*$', actualValue: '1'}}
- * ```
- *
- * ```html
- * <input pattern="[a-zA-Z ]*">
- * ```
- *
- * ### Pattern matching with the global or sticky flag
- *
- * `RegExp` objects created with the `g` or `y` flags that are passed into `Validators.pattern`
- * can produce different results on the same input when validations are run consecutively. This is
- * due to how the behavior of `RegExp.prototype.test` is
- * specified in [ECMA-262](https://tc39.es/ecma262/#sec-regexpbuiltinexec)
- * (`RegExp` preserves the index of the last match when the global or sticky flag is used).
- * Due to this behavior, it is recommended that when using
- * `Validators.pattern` you **do not** pass in a `RegExp` object with either the global or sticky
- * flag enabled.
- *
- * ```typescript
- * // Not recommended (since the `g` flag is used)
- * const controlOne = new FormControl('1', Validators.pattern(/foo/g));
- *
- * // Good
- * const controlTwo = new FormControl('1', Validators.pattern(/foo/));
- * ```
- *
- * @param pattern A regular expression to be used as is to test the values, or a string.
- * If a string is passed, the `^` character is prepended and the `$` character is
- * appended to the provided string (if not already present), and the resulting regular
- * expression is used to test the values.
- *
- * @returns A validator function that returns an error map with the
- * `pattern` property if the validation check fails, otherwise `null`.
- *
- * @see `updateValueAndValidity()`
- *
- */
- static pattern(pattern) {
- if (!pattern)
- return Validators.nullValidator;
- let regex;
- let regexStr;
- if (typeof pattern === 'string') {
- regexStr = '';
- if (pattern.charAt(0) !== '^')
- regexStr += '^';
- regexStr += pattern;
- if (pattern.charAt(pattern.length - 1) !== '$')
- regexStr += '$';
- regex = new RegExp(regexStr);
- }
- else {
- regexStr = pattern.toString();
- regex = pattern;
- }
- return (control) => {
- if (isEmptyInputValue(control.value)) {
- return null; // don't validate empty values to allow optional controls
- }
- const value = control.value;
- return regex.test(value) ? null :
- { 'pattern': { 'requiredPattern': regexStr, 'actualValue': value } };
- };
- }
- /**
- * @description
- * Validator that performs no operation.
- *
- * @see `updateValueAndValidity()`
- *
- */
- static nullValidator(control) {
- return null;
- }
- static compose(validators) {
- if (!validators)
- return null;
- const presentValidators = validators.filter(isPresent);
- if (presentValidators.length == 0)
- return null;
- return function (control) {
- return mergeErrors(executeValidators(control, presentValidators));
- };
- }
- /**
- * @description
- * Compose multiple async validators into a single function that returns the union
- * of the individual error objects for the provided control.
- *
- * @returns A validator function that returns an error map with the
- * merged error objects of the async validators if the validation check fails, otherwise `null`.
- *
- * @see `updateValueAndValidity()`
- *
- */
- static composeAsync(validators) {
- if (!validators)
- return null;
- const presentValidators = validators.filter(isPresent);
- if (presentValidators.length == 0)
- return null;
- return function (control) {
- const observables = executeValidators(control, presentValidators).map(toObservable);
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["forkJoin"])(observables).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(mergeErrors));
- };
- }
- }
- function isPresent(o) {
- return o != null;
- }
- function toObservable(r) {
- const obs = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵisPromise"])(r) ? Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(r) : r;
- if (!(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵisObservable"])(obs)) && (typeof ngDevMode === 'undefined' || ngDevMode)) {
- throw new Error(`Expected validator to return Promise or Observable.`);
- }
- return obs;
- }
- function mergeErrors(arrayOfErrors) {
- let res = {};
- // Not using Array.reduce here due to a Chrome 80 bug
- // https://bugs.chromium.org/p/chromium/issues/detail?id=1049982
- arrayOfErrors.forEach((errors) => {
- res = errors != null ? Object.assign(Object.assign({}, res), errors) : res;
- });
- return Object.keys(res).length === 0 ? null : res;
- }
- function executeValidators(control, validators) {
- return validators.map(validator => validator(control));
- }
- function isValidatorFn(validator) {
- return !validator.validate;
- }
- /**
- * Given the list of validators that may contain both functions as well as classes, return the list
- * of validator functions (convert validator classes into validator functions). This is needed to
- * have consistent structure in validators list before composing them.
- *
- * @param validators The set of validators that may contain validators both in plain function form
- * as well as represented as a validator class.
- */
- function normalizeValidators(validators) {
- return validators.map(validator => {
- return isValidatorFn(validator) ?
- validator :
- ((c) => validator.validate(c));
- });
- }
- /**
- * Merges synchronous validators into a single validator function (combined using
- * `Validators.compose`).
- */
- function composeValidators(validators) {
- return validators != null ? Validators.compose(normalizeValidators(validators)) :
- null;
- }
- /**
- * Merges asynchronous validators into a single validator function (combined using
- * `Validators.composeAsync`).
- */
- function composeAsyncValidators(validators) {
- return validators != null ?
- Validators.composeAsync(normalizeValidators(validators)) :
- null;
- }
- /**
- * Merges raw control validators with a given directive validator and returns the combined list of
- * validators as an array.
- */
- function mergeValidators(controlValidators, dirValidator) {
- if (controlValidators === null)
- return [dirValidator];
- return Array.isArray(controlValidators) ? [...controlValidators, dirValidator] :
- [controlValidators, dirValidator];
- }
- /**
- * Retrieves the list of raw synchronous validators attached to a given control.
- */
- function getControlValidators(control) {
- return control._rawValidators;
- }
- /**
- * Retrieves the list of raw asynchronous validators attached to a given control.
- */
- function getControlAsyncValidators(control) {
- return control._rawAsyncValidators;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @description
- * Base class for control directives.
- *
- * This class is only used internally in the `ReactiveFormsModule` and the `FormsModule`.
- *
- * @publicApi
- */
- class AbstractControlDirective {
- constructor() {
- /**
- * Set of synchronous validators as they were provided while calling `setValidators` function.
- * @internal
- */
- this._rawValidators = [];
- /**
- * Set of asynchronous validators as they were provided while calling `setAsyncValidators`
- * function.
- * @internal
- */
- this._rawAsyncValidators = [];
- /*
- * The set of callbacks to be invoked when directive instance is being destroyed.
- */
- this._onDestroyCallbacks = [];
- }
- /**
- * @description
- * Reports the value of the control if it is present, otherwise null.
- */
- get value() {
- return this.control ? this.control.value : null;
- }
- /**
- * @description
- * Reports whether the control is valid. A control is considered valid if no
- * validation errors exist with the current value.
- * If the control is not present, null is returned.
- */
- get valid() {
- return this.control ? this.control.valid : null;
- }
- /**
- * @description
- * Reports whether the control is invalid, meaning that an error exists in the input value.
- * If the control is not present, null is returned.
- */
- get invalid() {
- return this.control ? this.control.invalid : null;
- }
- /**
- * @description
- * Reports whether a control is pending, meaning that that async validation is occurring and
- * errors are not yet available for the input value. If the control is not present, null is
- * returned.
- */
- get pending() {
- return this.control ? this.control.pending : null;
- }
- /**
- * @description
- * Reports whether the control is disabled, meaning that the control is disabled
- * in the UI and is exempt from validation checks and excluded from aggregate
- * values of ancestor controls. If the control is not present, null is returned.
- */
- get disabled() {
- return this.control ? this.control.disabled : null;
- }
- /**
- * @description
- * Reports whether the control is enabled, meaning that the control is included in ancestor
- * calculations of validity or value. If the control is not present, null is returned.
- */
- get enabled() {
- return this.control ? this.control.enabled : null;
- }
- /**
- * @description
- * Reports the control's validation errors. If the control is not present, null is returned.
- */
- get errors() {
- return this.control ? this.control.errors : null;
- }
- /**
- * @description
- * Reports whether the control is pristine, meaning that the user has not yet changed
- * the value in the UI. If the control is not present, null is returned.
- */
- get pristine() {
- return this.control ? this.control.pristine : null;
- }
- /**
- * @description
- * Reports whether the control is dirty, meaning that the user has changed
- * the value in the UI. If the control is not present, null is returned.
- */
- get dirty() {
- return this.control ? this.control.dirty : null;
- }
- /**
- * @description
- * Reports whether the control is touched, meaning that the user has triggered
- * a `blur` event on it. If the control is not present, null is returned.
- */
- get touched() {
- return this.control ? this.control.touched : null;
- }
- /**
- * @description
- * Reports the validation status of the control. Possible values include:
- * 'VALID', 'INVALID', 'DISABLED', and 'PENDING'.
- * If the control is not present, null is returned.
- */
- get status() {
- return this.control ? this.control.status : null;
- }
- /**
- * @description
- * Reports whether the control is untouched, meaning that the user has not yet triggered
- * a `blur` event on it. If the control is not present, null is returned.
- */
- get untouched() {
- return this.control ? this.control.untouched : null;
- }
- /**
- * @description
- * Returns a multicasting observable that emits a validation status whenever it is
- * calculated for the control. If the control is not present, null is returned.
- */
- get statusChanges() {
- return this.control ? this.control.statusChanges : null;
- }
- /**
- * @description
- * Returns a multicasting observable of value changes for the control that emits every time the
- * value of the control changes in the UI or programmatically.
- * If the control is not present, null is returned.
- */
- get valueChanges() {
- return this.control ? this.control.valueChanges : null;
- }
- /**
- * @description
- * Returns an array that represents the path from the top-level form to this control.
- * Each index is the string name of the control on that level.
- */
- get path() {
- return null;
- }
- /**
- * Sets synchronous validators for this directive.
- * @internal
- */
- _setValidators(validators) {
- this._rawValidators = validators || [];
- this._composedValidatorFn = composeValidators(this._rawValidators);
- }
- /**
- * Sets asynchronous validators for this directive.
- * @internal
- */
- _setAsyncValidators(validators) {
- this._rawAsyncValidators = validators || [];
- this._composedAsyncValidatorFn = composeAsyncValidators(this._rawAsyncValidators);
- }
- /**
- * @description
- * Synchronous validator function composed of all the synchronous validators registered with this
- * directive.
- */
- get validator() {
- return this._composedValidatorFn || null;
- }
- /**
- * @description
- * Asynchronous validator function composed of all the asynchronous validators registered with
- * this directive.
- */
- get asyncValidator() {
- return this._composedAsyncValidatorFn || null;
- }
- /**
- * Internal function to register callbacks that should be invoked
- * when directive instance is being destroyed.
- * @internal
- */
- _registerOnDestroy(fn) {
- this._onDestroyCallbacks.push(fn);
- }
- /**
- * Internal function to invoke all registered "on destroy" callbacks.
- * Note: calling this function also clears the list of callbacks.
- * @internal
- */
- _invokeOnDestroyCallbacks() {
- this._onDestroyCallbacks.forEach(fn => fn());
- this._onDestroyCallbacks = [];
- }
- /**
- * @description
- * Resets the control with the provided value if the control is present.
- */
- reset(value = undefined) {
- if (this.control)
- this.control.reset(value);
- }
- /**
- * @description
- * Reports whether the control with the given path has the error specified.
- *
- * @param errorCode The code of the error to check
- * @param path A list of control names that designates how to move from the current control
- * to the control that should be queried for errors.
- *
- * @usageNotes
- * For example, for the following `FormGroup`:
- *
- * ```
- * form = new FormGroup({
- * address: new FormGroup({ street: new FormControl() })
- * });
- * ```
- *
- * The path to the 'street' control from the root form would be 'address' -> 'street'.
- *
- * It can be provided to this method in one of two formats:
- *
- * 1. An array of string control names, e.g. `['address', 'street']`
- * 1. A period-delimited list of control names in one string, e.g. `'address.street'`
- *
- * If no path is given, this method checks for the error on the current control.
- *
- * @returns whether the given error is present in the control at the given path.
- *
- * If the control is not present, false is returned.
- */
- hasError(errorCode, path) {
- return this.control ? this.control.hasError(errorCode, path) : false;
- }
- /**
- * @description
- * Reports error data for the control with the given path.
- *
- * @param errorCode The code of the error to check
- * @param path A list of control names that designates how to move from the current control
- * to the control that should be queried for errors.
- *
- * @usageNotes
- * For example, for the following `FormGroup`:
- *
- * ```
- * form = new FormGroup({
- * address: new FormGroup({ street: new FormControl() })
- * });
- * ```
- *
- * The path to the 'street' control from the root form would be 'address' -> 'street'.
- *
- * It can be provided to this method in one of two formats:
- *
- * 1. An array of string control names, e.g. `['address', 'street']`
- * 1. A period-delimited list of control names in one string, e.g. `'address.street'`
- *
- * @returns error data for that particular error. If the control or error is not present,
- * null is returned.
- */
- getError(errorCode, path) {
- return this.control ? this.control.getError(errorCode, path) : null;
- }
- }
- AbstractControlDirective.ɵfac = function AbstractControlDirective_Factory(t) { return new (t || AbstractControlDirective)(); };
- AbstractControlDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: AbstractControlDirective });
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @description
- * A base class for directives that contain multiple registered instances of `NgControl`.
- * Only used by the forms module.
- *
- * @publicApi
- */
- class ControlContainer extends AbstractControlDirective {
- /**
- * @description
- * The top-level form directive for the control.
- */
- get formDirective() {
- return null;
- }
- /**
- * @description
- * The path to this group.
- */
- get path() {
- return null;
- }
- }
- ControlContainer.ɵfac = function ControlContainer_Factory(t) { return ɵControlContainer_BaseFactory(t || ControlContainer); };
- ControlContainer.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: ControlContainer, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]] });
- const ɵControlContainer_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](ControlContainer);
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @description
- * A base class that all `FormControl`-based directives extend. It binds a `FormControl`
- * object to a DOM element.
- *
- * @publicApi
- */
- class NgControl extends AbstractControlDirective {
- constructor() {
- super(...arguments);
- /**
- * @description
- * The parent form for the control.
- *
- * @internal
- */
- this._parent = null;
- /**
- * @description
- * The name for the control
- */
- this.name = null;
- /**
- * @description
- * The value accessor for the control
- */
- this.valueAccessor = null;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class AbstractControlStatus {
- constructor(cd) {
- this._cd = cd;
- }
- get ngClassUntouched() {
- return this._cd.control ? this._cd.control.untouched : false;
- }
- get ngClassTouched() {
- return this._cd.control ? this._cd.control.touched : false;
- }
- get ngClassPristine() {
- return this._cd.control ? this._cd.control.pristine : false;
- }
- get ngClassDirty() {
- return this._cd.control ? this._cd.control.dirty : false;
- }
- get ngClassValid() {
- return this._cd.control ? this._cd.control.valid : false;
- }
- get ngClassInvalid() {
- return this._cd.control ? this._cd.control.invalid : false;
- }
- get ngClassPending() {
- return this._cd.control ? this._cd.control.pending : false;
- }
- }
- const ngControlStatusHost = {
- '[class.ng-untouched]': 'ngClassUntouched',
- '[class.ng-touched]': 'ngClassTouched',
- '[class.ng-pristine]': 'ngClassPristine',
- '[class.ng-dirty]': 'ngClassDirty',
- '[class.ng-valid]': 'ngClassValid',
- '[class.ng-invalid]': 'ngClassInvalid',
- '[class.ng-pending]': 'ngClassPending',
- };
- /**
- * @description
- * Directive automatically applied to Angular form controls that sets CSS classes
- * based on control status.
- *
- * @usageNotes
- *
- * ### CSS classes applied
- *
- * The following classes are applied as the properties become true:
- *
- * * ng-valid
- * * ng-invalid
- * * ng-pending
- * * ng-pristine
- * * ng-dirty
- * * ng-untouched
- * * ng-touched
- *
- * @ngModule ReactiveFormsModule
- * @ngModule FormsModule
- * @publicApi
- */
- class NgControlStatus extends AbstractControlStatus {
- constructor(cd) {
- super(cd);
- }
- }
- NgControlStatus.ɵfac = function NgControlStatus_Factory(t) { return new (t || NgControlStatus)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgControl, 2)); };
- NgControlStatus.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgControlStatus, selectors: [["", "formControlName", ""], ["", "ngModel", ""], ["", "formControl", ""]], hostVars: 14, hostBindings: function NgControlStatus_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("ng-untouched", ctx.ngClassUntouched)("ng-touched", ctx.ngClassTouched)("ng-pristine", ctx.ngClassPristine)("ng-dirty", ctx.ngClassDirty)("ng-valid", ctx.ngClassValid)("ng-invalid", ctx.ngClassInvalid)("ng-pending", ctx.ngClassPending);
- } }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]] });
- NgControlStatus.ctorParameters = () => [
- { type: NgControl, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgControlStatus, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[formControlName],[ngModel],[formControl]', host: ngControlStatusHost }]
- }], function () { return [{ type: NgControl, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }] }]; }, null); })();
- /**
- * @description
- * Directive automatically applied to Angular form groups that sets CSS classes
- * based on control status (valid/invalid/dirty/etc).
- *
- * @see `NgControlStatus`
- *
- * @ngModule ReactiveFormsModule
- * @ngModule FormsModule
- * @publicApi
- */
- class NgControlStatusGroup extends AbstractControlStatus {
- constructor(cd) {
- super(cd);
- }
- }
- NgControlStatusGroup.ɵfac = function NgControlStatusGroup_Factory(t) { return new (t || NgControlStatusGroup)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ControlContainer, 2)); };
- NgControlStatusGroup.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgControlStatusGroup, selectors: [["", "formGroupName", ""], ["", "formArrayName", ""], ["", "ngModelGroup", ""], ["", "formGroup", ""], ["form", 3, "ngNoForm", ""], ["", "ngForm", ""]], hostVars: 14, hostBindings: function NgControlStatusGroup_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("ng-untouched", ctx.ngClassUntouched)("ng-touched", ctx.ngClassTouched)("ng-pristine", ctx.ngClassPristine)("ng-dirty", ctx.ngClassDirty)("ng-valid", ctx.ngClassValid)("ng-invalid", ctx.ngClassInvalid)("ng-pending", ctx.ngClassPending);
- } }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]] });
- NgControlStatusGroup.ctorParameters = () => [
- { type: ControlContainer, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgControlStatusGroup, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]',
- host: ngControlStatusHost
- }]
- }], function () { return [{ type: ControlContainer, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const NUMBER_VALUE_ACCESSOR = {
- provide: NG_VALUE_ACCESSOR,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NumberValueAccessor),
- multi: true
- };
- /**
- * @description
- * The `ControlValueAccessor` for writing a number value and listening to number input changes.
- * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`
- * directives.
- *
- * @usageNotes
- *
- * ### Using a number input with a reactive form.
- *
- * The following example shows how to use a number input with a reactive form.
- *
- * ```ts
- * const totalCountControl = new FormControl();
- * ```
- *
- * ```
- * <input type="number" [formControl]="totalCountControl">
- * ```
- *
- * @ngModule ReactiveFormsModule
- * @ngModule FormsModule
- * @publicApi
- */
- class NumberValueAccessor {
- constructor(_renderer, _elementRef) {
- this._renderer = _renderer;
- this._elementRef = _elementRef;
- /**
- * The registered callback function called when a change or input event occurs on the input
- * element.
- * @nodoc
- */
- this.onChange = (_) => { };
- /**
- * The registered callback function called when a blur event occurs on the input element.
- * @nodoc
- */
- this.onTouched = () => { };
- }
- /**
- * Sets the "value" property on the input element.
- * @nodoc
- */
- writeValue(value) {
- // The value needs to be normalized for IE9, otherwise it is set to 'null' when null
- const normalizedValue = value == null ? '' : value;
- this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);
- }
- /**
- * Registers a function called when the control value changes.
- * @nodoc
- */
- registerOnChange(fn) {
- this.onChange = (value) => {
- fn(value == '' ? null : parseFloat(value));
- };
- }
- /**
- * Registers a function called when the control is touched.
- * @nodoc
- */
- registerOnTouched(fn) {
- this.onTouched = fn;
- }
- /**
- * Sets the "disabled" property on the input element.
- * @nodoc
- */
- setDisabledState(isDisabled) {
- this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
- }
- }
- NumberValueAccessor.ɵfac = function NumberValueAccessor_Factory(t) { return new (t || NumberValueAccessor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- NumberValueAccessor.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NumberValueAccessor, selectors: [["input", "type", "number", "formControlName", ""], ["input", "type", "number", "formControl", ""], ["input", "type", "number", "ngModel", ""]], hostBindings: function NumberValueAccessor_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("input", function NumberValueAccessor_input_HostBindingHandler($event) { return ctx.onChange($event.target.value); })("blur", function NumberValueAccessor_blur_HostBindingHandler() { return ctx.onTouched(); });
- } }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([NUMBER_VALUE_ACCESSOR])] });
- NumberValueAccessor.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NumberValueAccessor, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: 'input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]',
- host: { '(input)': 'onChange($event.target.value)', '(blur)': 'onTouched()' },
- providers: [NUMBER_VALUE_ACCESSOR]
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const RADIO_VALUE_ACCESSOR = {
- provide: NG_VALUE_ACCESSOR,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => RadioControlValueAccessor),
- multi: true
- };
- function throwNameError() {
- throw new Error(`
- If you define both a name and a formControlName attribute on your radio button, their values
- must match. Ex: <input type="radio" formControlName="food" name="food">
- `);
- }
- /**
- * @description
- * Class used by Angular to track radio buttons. For internal use only.
- */
- class RadioControlRegistry {
- constructor() {
- this._accessors = [];
- }
- /**
- * @description
- * Adds a control to the internal registry. For internal use only.
- */
- add(control, accessor) {
- this._accessors.push([control, accessor]);
- }
- /**
- * @description
- * Removes a control from the internal registry. For internal use only.
- */
- remove(accessor) {
- for (let i = this._accessors.length - 1; i >= 0; --i) {
- if (this._accessors[i][1] === accessor) {
- this._accessors.splice(i, 1);
- return;
- }
- }
- }
- /**
- * @description
- * Selects a radio button. For internal use only.
- */
- select(accessor) {
- this._accessors.forEach((c) => {
- if (this._isSameGroup(c, accessor) && c[1] !== accessor) {
- c[1].fireUncheck(accessor.value);
- }
- });
- }
- _isSameGroup(controlPair, accessor) {
- if (!controlPair[0].control)
- return false;
- return controlPair[0]._parent === accessor._control._parent &&
- controlPair[1].name === accessor.name;
- }
- }
- RadioControlRegistry.ɵfac = function RadioControlRegistry_Factory(t) { return new (t || RadioControlRegistry)(); };
- RadioControlRegistry.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: RadioControlRegistry, factory: RadioControlRegistry.ɵfac });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](RadioControlRegistry, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return []; }, null); })();
- /**
- * @description
- * The `ControlValueAccessor` for writing radio control values and listening to radio control
- * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and
- * `NgModel` directives.
- *
- * @usageNotes
- *
- * ### Using radio buttons with reactive form directives
- *
- * The follow example shows how to use radio buttons in a reactive form. When using radio buttons in
- * a reactive form, radio buttons in the same group should have the same `formControlName`.
- * Providing a `name` attribute is optional.
- *
- * {@example forms/ts/reactiveRadioButtons/reactive_radio_button_example.ts region='Reactive'}
- *
- * @ngModule ReactiveFormsModule
- * @ngModule FormsModule
- * @publicApi
- */
- class RadioControlValueAccessor {
- constructor(_renderer, _elementRef, _registry, _injector) {
- this._renderer = _renderer;
- this._elementRef = _elementRef;
- this._registry = _registry;
- this._injector = _injector;
- /**
- * The registered callback function called when a change event occurs on the input element.
- * @nodoc
- */
- this.onChange = () => { };
- /**
- * The registered callback function called when a blur event occurs on the input element.
- * @nodoc
- */
- this.onTouched = () => { };
- }
- /** @nodoc */
- ngOnInit() {
- this._control = this._injector.get(NgControl);
- this._checkName();
- this._registry.add(this._control, this);
- }
- /** @nodoc */
- ngOnDestroy() {
- this._registry.remove(this);
- }
- /**
- * Sets the "checked" property value on the radio input element.
- * @nodoc
- */
- writeValue(value) {
- this._state = value === this.value;
- this._renderer.setProperty(this._elementRef.nativeElement, 'checked', this._state);
- }
- /**
- * Registers a function called when the control value changes.
- * @nodoc
- */
- registerOnChange(fn) {
- this._fn = fn;
- this.onChange = () => {
- fn(this.value);
- this._registry.select(this);
- };
- }
- /**
- * Sets the "value" on the radio input element and unchecks it.
- *
- * @param value
- */
- fireUncheck(value) {
- this.writeValue(value);
- }
- /**
- * Registers a function called when the control is touched.
- * @nodoc
- */
- registerOnTouched(fn) {
- this.onTouched = fn;
- }
- /**
- * Sets the "disabled" property on the input element.
- * @nodoc
- */
- setDisabledState(isDisabled) {
- this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
- }
- _checkName() {
- if (this.name && this.formControlName && this.name !== this.formControlName &&
- (typeof ngDevMode === 'undefined' || ngDevMode)) {
- throwNameError();
- }
- if (!this.name && this.formControlName)
- this.name = this.formControlName;
- }
- }
- RadioControlValueAccessor.ɵfac = function RadioControlValueAccessor_Factory(t) { return new (t || RadioControlValueAccessor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](RadioControlRegistry), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"])); };
- RadioControlValueAccessor.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: RadioControlValueAccessor, selectors: [["input", "type", "radio", "formControlName", ""], ["input", "type", "radio", "formControl", ""], ["input", "type", "radio", "ngModel", ""]], hostBindings: function RadioControlValueAccessor_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function RadioControlValueAccessor_change_HostBindingHandler() { return ctx.onChange(); })("blur", function RadioControlValueAccessor_blur_HostBindingHandler() { return ctx.onTouched(); });
- } }, inputs: { name: "name", formControlName: "formControlName", value: "value" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([RADIO_VALUE_ACCESSOR])] });
- RadioControlValueAccessor.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: RadioControlRegistry },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] }
- ];
- RadioControlValueAccessor.propDecorators = {
- name: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- formControlName: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- value: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](RadioControlValueAccessor, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: 'input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]',
- host: { '(change)': 'onChange()', '(blur)': 'onTouched()' },
- providers: [RADIO_VALUE_ACCESSOR]
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: RadioControlRegistry }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] }]; }, { name: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], formControlName: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], value: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const RANGE_VALUE_ACCESSOR = {
- provide: NG_VALUE_ACCESSOR,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => RangeValueAccessor),
- multi: true
- };
- /**
- * @description
- * The `ControlValueAccessor` for writing a range value and listening to range input changes.
- * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`
- * directives.
- *
- * @usageNotes
- *
- * ### Using a range input with a reactive form
- *
- * The following example shows how to use a range input with a reactive form.
- *
- * ```ts
- * const ageControl = new FormControl();
- * ```
- *
- * ```
- * <input type="range" [formControl]="ageControl">
- * ```
- *
- * @ngModule ReactiveFormsModule
- * @ngModule FormsModule
- * @publicApi
- */
- class RangeValueAccessor {
- constructor(_renderer, _elementRef) {
- this._renderer = _renderer;
- this._elementRef = _elementRef;
- /**
- * The registered callback function called when a change or input event occurs on the input
- * element.
- * @nodoc
- */
- this.onChange = (_) => { };
- /**
- * The registered callback function called when a blur event occurs on the input element.
- * @nodoc
- */
- this.onTouched = () => { };
- }
- /**
- * Sets the "value" property on the input element.
- * @nodoc
- */
- writeValue(value) {
- this._renderer.setProperty(this._elementRef.nativeElement, 'value', parseFloat(value));
- }
- /**
- * Registers a function called when the control value changes.
- * @nodoc
- */
- registerOnChange(fn) {
- this.onChange = (value) => {
- fn(value == '' ? null : parseFloat(value));
- };
- }
- /**
- * Registers a function called when the control is touched.
- * @nodoc
- */
- registerOnTouched(fn) {
- this.onTouched = fn;
- }
- /**
- * Sets the "disabled" property on the range input element.
- * @nodoc
- */
- setDisabledState(isDisabled) {
- this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
- }
- }
- RangeValueAccessor.ɵfac = function RangeValueAccessor_Factory(t) { return new (t || RangeValueAccessor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- RangeValueAccessor.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: RangeValueAccessor, selectors: [["input", "type", "range", "formControlName", ""], ["input", "type", "range", "formControl", ""], ["input", "type", "range", "ngModel", ""]], hostBindings: function RangeValueAccessor_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function RangeValueAccessor_change_HostBindingHandler($event) { return ctx.onChange($event.target.value); })("input", function RangeValueAccessor_input_HostBindingHandler($event) { return ctx.onChange($event.target.value); })("blur", function RangeValueAccessor_blur_HostBindingHandler() { return ctx.onTouched(); });
- } }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([RANGE_VALUE_ACCESSOR])] });
- RangeValueAccessor.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](RangeValueAccessor, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: 'input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]',
- host: {
- '(change)': 'onChange($event.target.value)',
- '(input)': 'onChange($event.target.value)',
- '(blur)': 'onTouched()'
- },
- providers: [RANGE_VALUE_ACCESSOR]
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const FormErrorExamples = {
- formControlName: `
- <div [formGroup]="myGroup">
- <input formControlName="firstName">
- </div>
- In your class:
- this.myGroup = new FormGroup({
- firstName: new FormControl()
- });`,
- formGroupName: `
- <div [formGroup]="myGroup">
- <div formGroupName="person">
- <input formControlName="firstName">
- </div>
- </div>
- In your class:
- this.myGroup = new FormGroup({
- person: new FormGroup({ firstName: new FormControl() })
- });`,
- formArrayName: `
- <div [formGroup]="myGroup">
- <div formArrayName="cities">
- <div *ngFor="let city of cityArray.controls; index as i">
- <input [formControlName]="i">
- </div>
- </div>
- </div>
- In your class:
- this.cityArray = new FormArray([new FormControl('SF')]);
- this.myGroup = new FormGroup({
- cities: this.cityArray
- });`,
- ngModelGroup: `
- <form>
- <div ngModelGroup="person">
- <input [(ngModel)]="person.name" name="firstName">
- </div>
- </form>`,
- ngModelWithFormGroup: `
- <div [formGroup]="myGroup">
- <input formControlName="firstName">
- <input [(ngModel)]="showMoreControls" [ngModelOptions]="{standalone: true}">
- </div>
- `
- };
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class ReactiveErrors {
- static controlParentException() {
- throw new Error(`formControlName must be used with a parent formGroup directive. You'll want to add a formGroup
- directive and pass it an existing FormGroup instance (you can create one in your class).
- Example:
- ${FormErrorExamples.formControlName}`);
- }
- static ngModelGroupException() {
- throw new Error(`formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents
- that also have a "form" prefix: formGroupName, formArrayName, or formGroup.
- Option 1: Update the parent to be formGroupName (reactive form strategy)
- ${FormErrorExamples.formGroupName}
- Option 2: Use ngModel instead of formControlName (template-driven strategy)
- ${FormErrorExamples.ngModelGroup}`);
- }
- static missingFormException() {
- throw new Error(`formGroup expects a FormGroup instance. Please pass one in.
- Example:
- ${FormErrorExamples.formControlName}`);
- }
- static groupParentException() {
- throw new Error(`formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup
- directive and pass it an existing FormGroup instance (you can create one in your class).
- Example:
- ${FormErrorExamples.formGroupName}`);
- }
- static arrayParentException() {
- throw new Error(`formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup
- directive and pass it an existing FormGroup instance (you can create one in your class).
- Example:
- ${FormErrorExamples.formArrayName}`);
- }
- static disabledAttrWarning() {
- console.warn(`
- It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true
- when you set up this control in your component class, the disabled attribute will actually be set in the DOM for
- you. We recommend using this approach to avoid 'changed after checked' errors.
- Example:
- form = new FormGroup({
- first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),
- last: new FormControl('Drew', Validators.required)
- });
- `);
- }
- static ngModelWarning(directiveName) {
- console.warn(`
- It looks like you're using ngModel on the same form field as ${directiveName}.
- Support for using the ngModel input property and ngModelChange event with
- reactive form directives has been deprecated in Angular v6 and will be removed
- in a future version of Angular.
- For more information on this, see our API docs here:
- https://angular.io/api/forms/${directiveName === 'formControl' ? 'FormControlDirective' :
- 'FormControlName'}#use-with-ngmodel
- `);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const SELECT_VALUE_ACCESSOR = {
- provide: NG_VALUE_ACCESSOR,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => SelectControlValueAccessor),
- multi: true
- };
- function _buildValueString(id, value) {
- if (id == null)
- return `${value}`;
- if (value && typeof value === 'object')
- value = 'Object';
- return `${id}: ${value}`.slice(0, 50);
- }
- function _extractId(valueString) {
- return valueString.split(':')[0];
- }
- /**
- * @description
- * The `ControlValueAccessor` for writing select control values and listening to select control
- * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and
- * `NgModel` directives.
- *
- * @usageNotes
- *
- * ### Using select controls in a reactive form
- *
- * The following examples show how to use a select control in a reactive form.
- *
- * {@example forms/ts/reactiveSelectControl/reactive_select_control_example.ts region='Component'}
- *
- * ### Using select controls in a template-driven form
- *
- * To use a select in a template-driven form, simply add an `ngModel` and a `name`
- * attribute to the main `<select>` tag.
- *
- * {@example forms/ts/selectControl/select_control_example.ts region='Component'}
- *
- * ### Customizing option selection
- *
- * Angular uses object identity to select option. It's possible for the identities of items
- * to change while the data does not. This can happen, for example, if the items are produced
- * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the
- * second response will produce objects with different identities.
- *
- * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.
- * `compareWith` takes a **function** which has two arguments: `option1` and `option2`.
- * If `compareWith` is given, Angular selects option by the return value of the function.
- *
- * ```ts
- * const selectedCountriesControl = new FormControl();
- * ```
- *
- * ```
- * <select [compareWith]="compareFn" [formControl]="selectedCountriesControl">
- * <option *ngFor="let country of countries" [ngValue]="country">
- * {{country.name}}
- * </option>
- * </select>
- *
- * compareFn(c1: Country, c2: Country): boolean {
- * return c1 && c2 ? c1.id === c2.id : c1 === c2;
- * }
- * ```
- *
- * **Note:** We listen to the 'change' event because 'input' events aren't fired
- * for selects in Firefox and IE:
- * https://bugzilla.mozilla.org/show_bug.cgi?id=1024350
- * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4660045/
- *
- * @ngModule ReactiveFormsModule
- * @ngModule FormsModule
- * @publicApi
- */
- class SelectControlValueAccessor {
- constructor(_renderer, _elementRef) {
- this._renderer = _renderer;
- this._elementRef = _elementRef;
- /** @internal */
- this._optionMap = new Map();
- /** @internal */
- this._idCounter = 0;
- /**
- * The registered callback function called when a change event occurs on the input element.
- * @nodoc
- */
- this.onChange = (_) => { };
- /**
- * The registered callback function called when a blur event occurs on the input element.
- * @nodoc
- */
- this.onTouched = () => { };
- this._compareWith = Object.is;
- }
- /**
- * @description
- * Tracks the option comparison algorithm for tracking identities when
- * checking for changes.
- */
- set compareWith(fn) {
- if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {
- throw new Error(`compareWith must be a function, but received ${JSON.stringify(fn)}`);
- }
- this._compareWith = fn;
- }
- /**
- * Sets the "value" property on the input element. The "selectedIndex"
- * property is also set if an ID is provided on the option element.
- * @nodoc
- */
- writeValue(value) {
- this.value = value;
- const id = this._getOptionId(value);
- if (id == null) {
- this._renderer.setProperty(this._elementRef.nativeElement, 'selectedIndex', -1);
- }
- const valueString = _buildValueString(id, value);
- this._renderer.setProperty(this._elementRef.nativeElement, 'value', valueString);
- }
- /**
- * Registers a function called when the control value changes.
- * @nodoc
- */
- registerOnChange(fn) {
- this.onChange = (valueString) => {
- this.value = this._getOptionValue(valueString);
- fn(this.value);
- };
- }
- /**
- * Registers a function called when the control is touched.
- * @nodoc
- */
- registerOnTouched(fn) {
- this.onTouched = fn;
- }
- /**
- * Sets the "disabled" property on the select input element.
- * @nodoc
- */
- setDisabledState(isDisabled) {
- this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
- }
- /** @internal */
- _registerOption() {
- return (this._idCounter++).toString();
- }
- /** @internal */
- _getOptionId(value) {
- for (const id of Array.from(this._optionMap.keys())) {
- if (this._compareWith(this._optionMap.get(id), value))
- return id;
- }
- return null;
- }
- /** @internal */
- _getOptionValue(valueString) {
- const id = _extractId(valueString);
- return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;
- }
- }
- SelectControlValueAccessor.ɵfac = function SelectControlValueAccessor_Factory(t) { return new (t || SelectControlValueAccessor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- SelectControlValueAccessor.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: SelectControlValueAccessor, selectors: [["select", "formControlName", "", 3, "multiple", ""], ["select", "formControl", "", 3, "multiple", ""], ["select", "ngModel", "", 3, "multiple", ""]], hostBindings: function SelectControlValueAccessor_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function SelectControlValueAccessor_change_HostBindingHandler($event) { return ctx.onChange($event.target.value); })("blur", function SelectControlValueAccessor_blur_HostBindingHandler() { return ctx.onTouched(); });
- } }, inputs: { compareWith: "compareWith" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([SELECT_VALUE_ACCESSOR])] });
- SelectControlValueAccessor.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- SelectControlValueAccessor.propDecorators = {
- compareWith: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](SelectControlValueAccessor, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: 'select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]',
- host: { '(change)': 'onChange($event.target.value)', '(blur)': 'onTouched()' },
- providers: [SELECT_VALUE_ACCESSOR]
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, { compareWith: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * @description
- * Marks `<option>` as dynamic, so Angular can be notified when options change.
- *
- * @see `SelectControlValueAccessor`
- *
- * @ngModule ReactiveFormsModule
- * @ngModule FormsModule
- * @publicApi
- */
- class NgSelectOption {
- constructor(_element, _renderer, _select) {
- this._element = _element;
- this._renderer = _renderer;
- this._select = _select;
- if (this._select)
- this.id = this._select._registerOption();
- }
- /**
- * @description
- * Tracks the value bound to the option element. Unlike the value binding,
- * ngValue supports binding to objects.
- */
- set ngValue(value) {
- if (this._select == null)
- return;
- this._select._optionMap.set(this.id, value);
- this._setElementValue(_buildValueString(this.id, value));
- this._select.writeValue(this._select.value);
- }
- /**
- * @description
- * Tracks simple string values bound to the option element.
- * For objects, use the `ngValue` input binding.
- */
- set value(value) {
- this._setElementValue(value);
- if (this._select)
- this._select.writeValue(this._select.value);
- }
- /** @internal */
- _setElementValue(value) {
- this._renderer.setProperty(this._element.nativeElement, 'value', value);
- }
- /** @nodoc */
- ngOnDestroy() {
- if (this._select) {
- this._select._optionMap.delete(this.id);
- this._select.writeValue(this._select.value);
- }
- }
- }
- NgSelectOption.ɵfac = function NgSelectOption_Factory(t) { return new (t || NgSelectOption)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](SelectControlValueAccessor, 9)); };
- NgSelectOption.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgSelectOption, selectors: [["option"]], inputs: { ngValue: "ngValue", value: "value" } });
- NgSelectOption.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: SelectControlValueAccessor, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"] }] }
- ];
- NgSelectOption.propDecorators = {
- ngValue: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['ngValue',] }],
- value: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['value',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgSelectOption, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: 'option' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: SelectControlValueAccessor, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
- }] }]; }, { ngValue: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['ngValue']
- }], value: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['value']
- }] }); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const SELECT_MULTIPLE_VALUE_ACCESSOR = {
- provide: NG_VALUE_ACCESSOR,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => SelectMultipleControlValueAccessor),
- multi: true
- };
- function _buildValueString$1(id, value) {
- if (id == null)
- return `${value}`;
- if (typeof value === 'string')
- value = `'${value}'`;
- if (value && typeof value === 'object')
- value = 'Object';
- return `${id}: ${value}`.slice(0, 50);
- }
- function _extractId$1(valueString) {
- return valueString.split(':')[0];
- }
- /** Mock interface for HTMLCollection */
- class HTMLCollection {
- }
- /**
- * @description
- * The `ControlValueAccessor` for writing multi-select control values and listening to multi-select
- * control changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and
- * `NgModel` directives.
- *
- * @see `SelectControlValueAccessor`
- *
- * @usageNotes
- *
- * ### Using a multi-select control
- *
- * The follow example shows you how to use a multi-select control with a reactive form.
- *
- * ```ts
- * const countryControl = new FormControl();
- * ```
- *
- * ```
- * <select multiple name="countries" [formControl]="countryControl">
- * <option *ngFor="let country of countries" [ngValue]="country">
- * {{ country.name }}
- * </option>
- * </select>
- * ```
- *
- * ### Customizing option selection
- *
- * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.
- * See the `SelectControlValueAccessor` for usage.
- *
- * @ngModule ReactiveFormsModule
- * @ngModule FormsModule
- * @publicApi
- */
- class SelectMultipleControlValueAccessor {
- constructor(_renderer, _elementRef) {
- this._renderer = _renderer;
- this._elementRef = _elementRef;
- /** @internal */
- this._optionMap = new Map();
- /** @internal */
- this._idCounter = 0;
- /**
- * The registered callback function called when a change event occurs on the input element.
- * @nodoc
- */
- this.onChange = (_) => { };
- /**
- * The registered callback function called when a blur event occurs on the input element.
- * @nodoc
- */
- this.onTouched = () => { };
- this._compareWith = Object.is;
- }
- /**
- * @description
- * Tracks the option comparison algorithm for tracking identities when
- * checking for changes.
- */
- set compareWith(fn) {
- if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {
- throw new Error(`compareWith must be a function, but received ${JSON.stringify(fn)}`);
- }
- this._compareWith = fn;
- }
- /**
- * Sets the "value" property on one or of more of the select's options.
- * @nodoc
- */
- writeValue(value) {
- this.value = value;
- let optionSelectedStateSetter;
- if (Array.isArray(value)) {
- // convert values to ids
- const ids = value.map((v) => this._getOptionId(v));
- optionSelectedStateSetter = (opt, o) => {
- opt._setSelected(ids.indexOf(o.toString()) > -1);
- };
- }
- else {
- optionSelectedStateSetter = (opt, o) => {
- opt._setSelected(false);
- };
- }
- this._optionMap.forEach(optionSelectedStateSetter);
- }
- /**
- * Registers a function called when the control value changes
- * and writes an array of the selected options.
- * @nodoc
- */
- registerOnChange(fn) {
- this.onChange = (_) => {
- const selected = [];
- if (_.selectedOptions !== undefined) {
- const options = _.selectedOptions;
- for (let i = 0; i < options.length; i++) {
- const opt = options.item(i);
- const val = this._getOptionValue(opt.value);
- selected.push(val);
- }
- }
- // Degrade on IE
- else {
- const options = _.options;
- for (let i = 0; i < options.length; i++) {
- const opt = options.item(i);
- if (opt.selected) {
- const val = this._getOptionValue(opt.value);
- selected.push(val);
- }
- }
- }
- this.value = selected;
- fn(selected);
- };
- }
- /**
- * Registers a function called when the control is touched.
- * @nodoc
- */
- registerOnTouched(fn) {
- this.onTouched = fn;
- }
- /**
- * Sets the "disabled" property on the select input element.
- * @nodoc
- */
- setDisabledState(isDisabled) {
- this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
- }
- /** @internal */
- _registerOption(value) {
- const id = (this._idCounter++).toString();
- this._optionMap.set(id, value);
- return id;
- }
- /** @internal */
- _getOptionId(value) {
- for (const id of Array.from(this._optionMap.keys())) {
- if (this._compareWith(this._optionMap.get(id)._value, value))
- return id;
- }
- return null;
- }
- /** @internal */
- _getOptionValue(valueString) {
- const id = _extractId$1(valueString);
- return this._optionMap.has(id) ? this._optionMap.get(id)._value : valueString;
- }
- }
- SelectMultipleControlValueAccessor.ɵfac = function SelectMultipleControlValueAccessor_Factory(t) { return new (t || SelectMultipleControlValueAccessor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- SelectMultipleControlValueAccessor.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: SelectMultipleControlValueAccessor, selectors: [["select", "multiple", "", "formControlName", ""], ["select", "multiple", "", "formControl", ""], ["select", "multiple", "", "ngModel", ""]], hostBindings: function SelectMultipleControlValueAccessor_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function SelectMultipleControlValueAccessor_change_HostBindingHandler($event) { return ctx.onChange($event.target); })("blur", function SelectMultipleControlValueAccessor_blur_HostBindingHandler() { return ctx.onTouched(); });
- } }, inputs: { compareWith: "compareWith" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([SELECT_MULTIPLE_VALUE_ACCESSOR])] });
- SelectMultipleControlValueAccessor.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- SelectMultipleControlValueAccessor.propDecorators = {
- compareWith: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](SelectMultipleControlValueAccessor, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: 'select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]',
- host: { '(change)': 'onChange($event.target)', '(blur)': 'onTouched()' },
- providers: [SELECT_MULTIPLE_VALUE_ACCESSOR]
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, { compareWith: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * @description
- * Marks `<option>` as dynamic, so Angular can be notified when options change.
- *
- * @see `SelectMultipleControlValueAccessor`
- *
- * @ngModule ReactiveFormsModule
- * @ngModule FormsModule
- * @publicApi
- */
- class ɵNgSelectMultipleOption {
- constructor(_element, _renderer, _select) {
- this._element = _element;
- this._renderer = _renderer;
- this._select = _select;
- if (this._select) {
- this.id = this._select._registerOption(this);
- }
- }
- /**
- * @description
- * Tracks the value bound to the option element. Unlike the value binding,
- * ngValue supports binding to objects.
- */
- set ngValue(value) {
- if (this._select == null)
- return;
- this._value = value;
- this._setElementValue(_buildValueString$1(this.id, value));
- this._select.writeValue(this._select.value);
- }
- /**
- * @description
- * Tracks simple string values bound to the option element.
- * For objects, use the `ngValue` input binding.
- */
- set value(value) {
- if (this._select) {
- this._value = value;
- this._setElementValue(_buildValueString$1(this.id, value));
- this._select.writeValue(this._select.value);
- }
- else {
- this._setElementValue(value);
- }
- }
- /** @internal */
- _setElementValue(value) {
- this._renderer.setProperty(this._element.nativeElement, 'value', value);
- }
- /** @internal */
- _setSelected(selected) {
- this._renderer.setProperty(this._element.nativeElement, 'selected', selected);
- }
- /** @nodoc */
- ngOnDestroy() {
- if (this._select) {
- this._select._optionMap.delete(this.id);
- this._select.writeValue(this._select.value);
- }
- }
- }
- ɵNgSelectMultipleOption.ɵfac = function ɵNgSelectMultipleOption_Factory(t) { return new (t || ɵNgSelectMultipleOption)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](SelectMultipleControlValueAccessor, 9)); };
- ɵNgSelectMultipleOption.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: ɵNgSelectMultipleOption, selectors: [["option"]], inputs: { ngValue: "ngValue", value: "value" } });
- ɵNgSelectMultipleOption.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: SelectMultipleControlValueAccessor, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"] }] }
- ];
- ɵNgSelectMultipleOption.propDecorators = {
- ngValue: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['ngValue',] }],
- value: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['value',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ɵNgSelectMultipleOption, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: 'option' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: SelectMultipleControlValueAccessor, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
- }] }]; }, { ngValue: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['ngValue']
- }], value: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['value']
- }] }); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function controlPath(name, parent) {
- return [...parent.path, name];
- }
- function setUpControl(control, dir) {
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
- if (!control)
- _throwError(dir, 'Cannot find control with');
- if (!dir.valueAccessor)
- _throwError(dir, 'No value accessor for form control with');
- }
- setUpValidators(control, dir, /* handleOnValidatorChange */ true);
- dir.valueAccessor.writeValue(control.value);
- setUpViewChangePipeline(control, dir);
- setUpModelChangePipeline(control, dir);
- setUpBlurPipeline(control, dir);
- setUpDisabledChangeHandler(control, dir);
- }
- function cleanUpControl(control, dir) {
- const noop = () => {
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
- _noControlError(dir);
- }
- };
- dir.valueAccessor.registerOnChange(noop);
- dir.valueAccessor.registerOnTouched(noop);
- cleanUpValidators(control, dir, /* handleOnValidatorChange */ true);
- if (control) {
- dir._invokeOnDestroyCallbacks();
- control._registerOnCollectionChange(() => { });
- }
- }
- function registerOnValidatorChange(validators, onChange) {
- validators.forEach((validator) => {
- if (validator.registerOnValidatorChange)
- validator.registerOnValidatorChange(onChange);
- });
- }
- /**
- * Sets up disabled change handler function on a given form control if ControlValueAccessor
- * associated with a given directive instance supports the `setDisabledState` call.
- *
- * @param control Form control where disabled change handler should be setup.
- * @param dir Corresponding directive instance associated with this control.
- */
- function setUpDisabledChangeHandler(control, dir) {
- if (dir.valueAccessor.setDisabledState) {
- const onDisabledChange = (isDisabled) => {
- dir.valueAccessor.setDisabledState(isDisabled);
- };
- control.registerOnDisabledChange(onDisabledChange);
- // Register a callback function to cleanup disabled change handler
- // from a control instance when a directive is destroyed.
- dir._registerOnDestroy(() => {
- control._unregisterOnDisabledChange(onDisabledChange);
- });
- }
- }
- /**
- * Sets up sync and async directive validators on provided form control.
- * This function merges validators from the directive into the validators of the control.
- *
- * @param control Form control where directive validators should be setup.
- * @param dir Directive instance that contains validators to be setup.
- * @param handleOnValidatorChange Flag that determines whether directive validators should be setup
- * to handle validator input change.
- */
- function setUpValidators(control, dir, handleOnValidatorChange) {
- const validators = getControlValidators(control);
- if (dir.validator !== null) {
- control.setValidators(mergeValidators(validators, dir.validator));
- }
- else if (typeof validators === 'function') {
- // If sync validators are represented by a single validator function, we force the
- // `Validators.compose` call to happen by executing the `setValidators` function with
- // an array that contains that function. We need this to avoid possible discrepancies in
- // validators behavior, so sync validators are always processed by the `Validators.compose`.
- // Note: we should consider moving this logic inside the `setValidators` function itself, so we
- // have consistent behavior on AbstractControl API level. The same applies to the async
- // validators logic below.
- control.setValidators([validators]);
- }
- const asyncValidators = getControlAsyncValidators(control);
- if (dir.asyncValidator !== null) {
- control.setAsyncValidators(mergeValidators(asyncValidators, dir.asyncValidator));
- }
- else if (typeof asyncValidators === 'function') {
- control.setAsyncValidators([asyncValidators]);
- }
- // Re-run validation when validator binding changes, e.g. minlength=3 -> minlength=4
- if (handleOnValidatorChange) {
- const onValidatorChange = () => control.updateValueAndValidity();
- registerOnValidatorChange(dir._rawValidators, onValidatorChange);
- registerOnValidatorChange(dir._rawAsyncValidators, onValidatorChange);
- }
- }
- /**
- * Cleans up sync and async directive validators on provided form control.
- * This function reverts the setup performed by the `setUpValidators` function, i.e.
- * removes directive-specific validators from a given control instance.
- *
- * @param control Form control from where directive validators should be removed.
- * @param dir Directive instance that contains validators to be removed.
- * @param handleOnValidatorChange Flag that determines whether directive validators should also be
- * cleaned up to stop handling validator input change (if previously configured to do so).
- */
- function cleanUpValidators(control, dir, handleOnValidatorChange) {
- if (control !== null) {
- if (dir.validator !== null) {
- const validators = getControlValidators(control);
- if (Array.isArray(validators) && validators.length > 0) {
- // Filter out directive validator function.
- control.setValidators(validators.filter(validator => validator !== dir.validator));
- }
- }
- if (dir.asyncValidator !== null) {
- const asyncValidators = getControlAsyncValidators(control);
- if (Array.isArray(asyncValidators) && asyncValidators.length > 0) {
- // Filter out directive async validator function.
- control.setAsyncValidators(asyncValidators.filter(asyncValidator => asyncValidator !== dir.asyncValidator));
- }
- }
- }
- if (handleOnValidatorChange) {
- // Clear onValidatorChange callbacks by providing a noop function.
- const noop = () => { };
- registerOnValidatorChange(dir._rawValidators, noop);
- registerOnValidatorChange(dir._rawAsyncValidators, noop);
- }
- }
- function setUpViewChangePipeline(control, dir) {
- dir.valueAccessor.registerOnChange((newValue) => {
- control._pendingValue = newValue;
- control._pendingChange = true;
- control._pendingDirty = true;
- if (control.updateOn === 'change')
- updateControl(control, dir);
- });
- }
- function setUpBlurPipeline(control, dir) {
- dir.valueAccessor.registerOnTouched(() => {
- control._pendingTouched = true;
- if (control.updateOn === 'blur' && control._pendingChange)
- updateControl(control, dir);
- if (control.updateOn !== 'submit')
- control.markAsTouched();
- });
- }
- function updateControl(control, dir) {
- if (control._pendingDirty)
- control.markAsDirty();
- control.setValue(control._pendingValue, { emitModelToViewChange: false });
- dir.viewToModelUpdate(control._pendingValue);
- control._pendingChange = false;
- }
- function setUpModelChangePipeline(control, dir) {
- const onChange = (newValue, emitModelEvent) => {
- // control -> view
- dir.valueAccessor.writeValue(newValue);
- // control -> ngModel
- if (emitModelEvent)
- dir.viewToModelUpdate(newValue);
- };
- control.registerOnChange(onChange);
- // Register a callback function to cleanup onChange handler
- // from a control instance when a directive is destroyed.
- dir._registerOnDestroy(() => {
- control._unregisterOnChange(onChange);
- });
- }
- function setUpFormContainer(control, dir) {
- if (control == null && (typeof ngDevMode === 'undefined' || ngDevMode))
- _throwError(dir, 'Cannot find control with');
- setUpValidators(control, dir, /* handleOnValidatorChange */ false);
- }
- function _noControlError(dir) {
- return _throwError(dir, 'There is no FormControl instance attached to form control element with');
- }
- function _throwError(dir, message) {
- let messageEnd;
- if (dir.path.length > 1) {
- messageEnd = `path: '${dir.path.join(' -> ')}'`;
- }
- else if (dir.path[0]) {
- messageEnd = `name: '${dir.path}'`;
- }
- else {
- messageEnd = 'unspecified name attribute';
- }
- throw new Error(`${message} ${messageEnd}`);
- }
- function isPropertyUpdated(changes, viewModel) {
- if (!changes.hasOwnProperty('model'))
- return false;
- const change = changes['model'];
- if (change.isFirstChange())
- return true;
- return !Object.is(viewModel, change.currentValue);
- }
- const BUILTIN_ACCESSORS = [
- CheckboxControlValueAccessor,
- RangeValueAccessor,
- NumberValueAccessor,
- SelectControlValueAccessor,
- SelectMultipleControlValueAccessor,
- RadioControlValueAccessor,
- ];
- function isBuiltInAccessor(valueAccessor) {
- return BUILTIN_ACCESSORS.some(a => valueAccessor.constructor === a);
- }
- function syncPendingControls(form, directives) {
- form._syncPendingControls();
- directives.forEach(dir => {
- const control = dir.control;
- if (control.updateOn === 'submit' && control._pendingChange) {
- dir.viewToModelUpdate(control._pendingValue);
- control._pendingChange = false;
- }
- });
- }
- // TODO: vsavkin remove it once https://github.com/angular/angular/issues/3011 is implemented
- function selectValueAccessor(dir, valueAccessors) {
- if (!valueAccessors)
- return null;
- if (!Array.isArray(valueAccessors) && (typeof ngDevMode === 'undefined' || ngDevMode))
- _throwError(dir, 'Value accessor was not provided as an array for form control with');
- let defaultAccessor = undefined;
- let builtinAccessor = undefined;
- let customAccessor = undefined;
- valueAccessors.forEach((v) => {
- if (v.constructor === DefaultValueAccessor) {
- defaultAccessor = v;
- }
- else if (isBuiltInAccessor(v)) {
- if (builtinAccessor && (typeof ngDevMode === 'undefined' || ngDevMode))
- _throwError(dir, 'More than one built-in value accessor matches form control with');
- builtinAccessor = v;
- }
- else {
- if (customAccessor && (typeof ngDevMode === 'undefined' || ngDevMode))
- _throwError(dir, 'More than one custom value accessor matches form control with');
- customAccessor = v;
- }
- });
- if (customAccessor)
- return customAccessor;
- if (builtinAccessor)
- return builtinAccessor;
- if (defaultAccessor)
- return defaultAccessor;
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
- _throwError(dir, 'No valid value accessor for form control with');
- }
- return null;
- }
- function removeListItem(list, el) {
- const index = list.indexOf(el);
- if (index > -1)
- list.splice(index, 1);
- }
- // TODO(kara): remove after deprecation period
- function _ngModelWarning(name, type, instance, warningConfig) {
- if (warningConfig === 'never')
- return;
- if (((warningConfig === null || warningConfig === 'once') && !type._ngModelWarningSentOnce) ||
- (warningConfig === 'always' && !instance._ngModelWarningSent)) {
- ReactiveErrors.ngModelWarning(name);
- type._ngModelWarningSentOnce = true;
- instance._ngModelWarningSent = true;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Reports that a FormControl is valid, meaning that no errors exist in the input value.
- *
- * @see `status`
- */
- const VALID = 'VALID';
- /**
- * Reports that a FormControl is invalid, meaning that an error exists in the input value.
- *
- * @see `status`
- */
- const INVALID = 'INVALID';
- /**
- * Reports that a FormControl is pending, meaning that that async validation is occurring and
- * errors are not yet available for the input value.
- *
- * @see `markAsPending`
- * @see `status`
- */
- const PENDING = 'PENDING';
- /**
- * Reports that a FormControl is disabled, meaning that the control is exempt from ancestor
- * calculations of validity or value.
- *
- * @see `markAsDisabled`
- * @see `status`
- */
- const DISABLED = 'DISABLED';
- function _find(control, path, delimiter) {
- if (path == null)
- return null;
- if (!Array.isArray(path)) {
- path = path.split(delimiter);
- }
- if (Array.isArray(path) && path.length === 0)
- return null;
- // Not using Array.reduce here due to a Chrome 80 bug
- // https://bugs.chromium.org/p/chromium/issues/detail?id=1049982
- let controlToFind = control;
- path.forEach((name) => {
- if (controlToFind instanceof FormGroup) {
- controlToFind = controlToFind.controls.hasOwnProperty(name) ?
- controlToFind.controls[name] :
- null;
- }
- else if (controlToFind instanceof FormArray) {
- controlToFind = controlToFind.at(name) || null;
- }
- else {
- controlToFind = null;
- }
- });
- return controlToFind;
- }
- /**
- * Gets validators from either an options object or given validators.
- */
- function pickValidators(validatorOrOpts) {
- return (isOptionsObj(validatorOrOpts) ? validatorOrOpts.validators : validatorOrOpts) || null;
- }
- /**
- * Creates validator function by combining provided validators.
- */
- function coerceToValidator(validator) {
- return Array.isArray(validator) ? composeValidators(validator) : validator || null;
- }
- /**
- * Gets async validators from either an options object or given validators.
- */
- function pickAsyncValidators(asyncValidator, validatorOrOpts) {
- return (isOptionsObj(validatorOrOpts) ? validatorOrOpts.asyncValidators : asyncValidator) || null;
- }
- /**
- * Creates async validator function by combining provided async validators.
- */
- function coerceToAsyncValidator(asyncValidator) {
- return Array.isArray(asyncValidator) ? composeAsyncValidators(asyncValidator) :
- asyncValidator || null;
- }
- function isOptionsObj(validatorOrOpts) {
- return validatorOrOpts != null && !Array.isArray(validatorOrOpts) &&
- typeof validatorOrOpts === 'object';
- }
- /**
- * This is the base class for `FormControl`, `FormGroup`, and `FormArray`.
- *
- * It provides some of the shared behavior that all controls and groups of controls have, like
- * running validators, calculating status, and resetting state. It also defines the properties
- * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be
- * instantiated directly.
- *
- * @see [Forms Guide](/guide/forms)
- * @see [Reactive Forms Guide](/guide/reactive-forms)
- * @see [Dynamic Forms Guide](/guide/dynamic-form)
- *
- * @publicApi
- */
- class AbstractControl {
- /**
- * Initialize the AbstractControl instance.
- *
- * @param validators The function or array of functions that is used to determine the validity of
- * this control synchronously.
- * @param asyncValidators The function or array of functions that is used to determine validity of
- * this control asynchronously.
- */
- constructor(validators, asyncValidators) {
- /**
- * Indicates that a control has its own pending asynchronous validation in progress.
- *
- * @internal
- */
- this._hasOwnPendingAsyncValidator = false;
- /** @internal */
- this._onCollectionChange = () => { };
- this._parent = null;
- /**
- * A control is `pristine` if the user has not yet changed
- * the value in the UI.
- *
- * @returns True if the user has not yet changed the value in the UI; compare `dirty`.
- * Programmatic changes to a control's value do not mark it dirty.
- */
- this.pristine = true;
- /**
- * True if the control is marked as `touched`.
- *
- * A control is marked `touched` once the user has triggered
- * a `blur` event on it.
- */
- this.touched = false;
- /** @internal */
- this._onDisabledChange = [];
- this._rawValidators = validators;
- this._rawAsyncValidators = asyncValidators;
- this._composedValidatorFn = coerceToValidator(this._rawValidators);
- this._composedAsyncValidatorFn = coerceToAsyncValidator(this._rawAsyncValidators);
- }
- /**
- * The function that is used to determine the validity of this control synchronously.
- */
- get validator() {
- return this._composedValidatorFn;
- }
- set validator(validatorFn) {
- this._rawValidators = this._composedValidatorFn = validatorFn;
- }
- /**
- * The function that is used to determine the validity of this control asynchronously.
- */
- get asyncValidator() {
- return this._composedAsyncValidatorFn;
- }
- set asyncValidator(asyncValidatorFn) {
- this._rawAsyncValidators = this._composedAsyncValidatorFn = asyncValidatorFn;
- }
- /**
- * The parent control.
- */
- get parent() {
- return this._parent;
- }
- /**
- * A control is `valid` when its `status` is `VALID`.
- *
- * @see {@link AbstractControl.status}
- *
- * @returns True if the control has passed all of its validation tests,
- * false otherwise.
- */
- get valid() {
- return this.status === VALID;
- }
- /**
- * A control is `invalid` when its `status` is `INVALID`.
- *
- * @see {@link AbstractControl.status}
- *
- * @returns True if this control has failed one or more of its validation checks,
- * false otherwise.
- */
- get invalid() {
- return this.status === INVALID;
- }
- /**
- * A control is `pending` when its `status` is `PENDING`.
- *
- * @see {@link AbstractControl.status}
- *
- * @returns True if this control is in the process of conducting a validation check,
- * false otherwise.
- */
- get pending() {
- return this.status == PENDING;
- }
- /**
- * A control is `disabled` when its `status` is `DISABLED`.
- *
- * Disabled controls are exempt from validation checks and
- * are not included in the aggregate value of their ancestor
- * controls.
- *
- * @see {@link AbstractControl.status}
- *
- * @returns True if the control is disabled, false otherwise.
- */
- get disabled() {
- return this.status === DISABLED;
- }
- /**
- * A control is `enabled` as long as its `status` is not `DISABLED`.
- *
- * @returns True if the control has any status other than 'DISABLED',
- * false if the status is 'DISABLED'.
- *
- * @see {@link AbstractControl.status}
- *
- */
- get enabled() {
- return this.status !== DISABLED;
- }
- /**
- * A control is `dirty` if the user has changed the value
- * in the UI.
- *
- * @returns True if the user has changed the value of this control in the UI; compare `pristine`.
- * Programmatic changes to a control's value do not mark it dirty.
- */
- get dirty() {
- return !this.pristine;
- }
- /**
- * True if the control has not been marked as touched
- *
- * A control is `untouched` if the user has not yet triggered
- * a `blur` event on it.
- */
- get untouched() {
- return !this.touched;
- }
- /**
- * Reports the update strategy of the `AbstractControl` (meaning
- * the event on which the control updates itself).
- * Possible values: `'change'` | `'blur'` | `'submit'`
- * Default value: `'change'`
- */
- get updateOn() {
- return this._updateOn ? this._updateOn : (this.parent ? this.parent.updateOn : 'change');
- }
- /**
- * Sets the synchronous validators that are active on this control. Calling
- * this overwrites any existing sync validators.
- *
- * When you add or remove a validator at run time, you must call
- * `updateValueAndValidity()` for the new validation to take effect.
- *
- */
- setValidators(newValidator) {
- this._rawValidators = newValidator;
- this._composedValidatorFn = coerceToValidator(newValidator);
- }
- /**
- * Sets the async validators that are active on this control. Calling this
- * overwrites any existing async validators.
- *
- * When you add or remove a validator at run time, you must call
- * `updateValueAndValidity()` for the new validation to take effect.
- *
- */
- setAsyncValidators(newValidator) {
- this._rawAsyncValidators = newValidator;
- this._composedAsyncValidatorFn = coerceToAsyncValidator(newValidator);
- }
- /**
- * Empties out the sync validator list.
- *
- * When you add or remove a validator at run time, you must call
- * `updateValueAndValidity()` for the new validation to take effect.
- *
- */
- clearValidators() {
- this.validator = null;
- }
- /**
- * Empties out the async validator list.
- *
- * When you add or remove a validator at run time, you must call
- * `updateValueAndValidity()` for the new validation to take effect.
- *
- */
- clearAsyncValidators() {
- this.asyncValidator = null;
- }
- /**
- * Marks the control as `touched`. A control is touched by focus and
- * blur events that do not change the value.
- *
- * @see `markAsUntouched()`
- * @see `markAsDirty()`
- * @see `markAsPristine()`
- *
- * @param opts Configuration options that determine how the control propagates changes
- * and emits events after marking is applied.
- * * `onlySelf`: When true, mark only this control. When false or not supplied,
- * marks all direct ancestors. Default is false.
- */
- markAsTouched(opts = {}) {
- this.touched = true;
- if (this._parent && !opts.onlySelf) {
- this._parent.markAsTouched(opts);
- }
- }
- /**
- * Marks the control and all its descendant controls as `touched`.
- * @see `markAsTouched()`
- */
- markAllAsTouched() {
- this.markAsTouched({ onlySelf: true });
- this._forEachChild((control) => control.markAllAsTouched());
- }
- /**
- * Marks the control as `untouched`.
- *
- * If the control has any children, also marks all children as `untouched`
- * and recalculates the `touched` status of all parent controls.
- *
- * @see `markAsTouched()`
- * @see `markAsDirty()`
- * @see `markAsPristine()`
- *
- * @param opts Configuration options that determine how the control propagates changes
- * and emits events after the marking is applied.
- * * `onlySelf`: When true, mark only this control. When false or not supplied,
- * marks all direct ancestors. Default is false.
- */
- markAsUntouched(opts = {}) {
- this.touched = false;
- this._pendingTouched = false;
- this._forEachChild((control) => {
- control.markAsUntouched({ onlySelf: true });
- });
- if (this._parent && !opts.onlySelf) {
- this._parent._updateTouched(opts);
- }
- }
- /**
- * Marks the control as `dirty`. A control becomes dirty when
- * the control's value is changed through the UI; compare `markAsTouched`.
- *
- * @see `markAsTouched()`
- * @see `markAsUntouched()`
- * @see `markAsPristine()`
- *
- * @param opts Configuration options that determine how the control propagates changes
- * and emits events after marking is applied.
- * * `onlySelf`: When true, mark only this control. When false or not supplied,
- * marks all direct ancestors. Default is false.
- */
- markAsDirty(opts = {}) {
- this.pristine = false;
- if (this._parent && !opts.onlySelf) {
- this._parent.markAsDirty(opts);
- }
- }
- /**
- * Marks the control as `pristine`.
- *
- * If the control has any children, marks all children as `pristine`,
- * and recalculates the `pristine` status of all parent
- * controls.
- *
- * @see `markAsTouched()`
- * @see `markAsUntouched()`
- * @see `markAsDirty()`
- *
- * @param opts Configuration options that determine how the control emits events after
- * marking is applied.
- * * `onlySelf`: When true, mark only this control. When false or not supplied,
- * marks all direct ancestors. Default is false.
- */
- markAsPristine(opts = {}) {
- this.pristine = true;
- this._pendingDirty = false;
- this._forEachChild((control) => {
- control.markAsPristine({ onlySelf: true });
- });
- if (this._parent && !opts.onlySelf) {
- this._parent._updatePristine(opts);
- }
- }
- /**
- * Marks the control as `pending`.
- *
- * A control is pending while the control performs async validation.
- *
- * @see {@link AbstractControl.status}
- *
- * @param opts Configuration options that determine how the control propagates changes and
- * emits events after marking is applied.
- * * `onlySelf`: When true, mark only this control. When false or not supplied,
- * marks all direct ancestors. Default is false.
- * * `emitEvent`: When true or not supplied (the default), the `statusChanges`
- * observable emits an event with the latest status the control is marked pending.
- * When false, no events are emitted.
- *
- */
- markAsPending(opts = {}) {
- this.status = PENDING;
- if (opts.emitEvent !== false) {
- this.statusChanges.emit(this.status);
- }
- if (this._parent && !opts.onlySelf) {
- this._parent.markAsPending(opts);
- }
- }
- /**
- * Disables the control. This means the control is exempt from validation checks and
- * excluded from the aggregate value of any parent. Its status is `DISABLED`.
- *
- * If the control has children, all children are also disabled.
- *
- * @see {@link AbstractControl.status}
- *
- * @param opts Configuration options that determine how the control propagates
- * changes and emits events after the control is disabled.
- * * `onlySelf`: When true, mark only this control. When false or not supplied,
- * marks all direct ancestors. Default is false.
- * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
- * `valueChanges`
- * observables emit events with the latest status and value when the control is disabled.
- * When false, no events are emitted.
- */
- disable(opts = {}) {
- // If parent has been marked artificially dirty we don't want to re-calculate the
- // parent's dirtiness based on the children.
- const skipPristineCheck = this._parentMarkedDirty(opts.onlySelf);
- this.status = DISABLED;
- this.errors = null;
- this._forEachChild((control) => {
- control.disable(Object.assign(Object.assign({}, opts), { onlySelf: true }));
- });
- this._updateValue();
- if (opts.emitEvent !== false) {
- this.valueChanges.emit(this.value);
- this.statusChanges.emit(this.status);
- }
- this._updateAncestors(Object.assign(Object.assign({}, opts), { skipPristineCheck }));
- this._onDisabledChange.forEach((changeFn) => changeFn(true));
- }
- /**
- * Enables the control. This means the control is included in validation checks and
- * the aggregate value of its parent. Its status recalculates based on its value and
- * its validators.
- *
- * By default, if the control has children, all children are enabled.
- *
- * @see {@link AbstractControl.status}
- *
- * @param opts Configure options that control how the control propagates changes and
- * emits events when marked as untouched
- * * `onlySelf`: When true, mark only this control. When false or not supplied,
- * marks all direct ancestors. Default is false.
- * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
- * `valueChanges`
- * observables emit events with the latest status and value when the control is enabled.
- * When false, no events are emitted.
- */
- enable(opts = {}) {
- // If parent has been marked artificially dirty we don't want to re-calculate the
- // parent's dirtiness based on the children.
- const skipPristineCheck = this._parentMarkedDirty(opts.onlySelf);
- this.status = VALID;
- this._forEachChild((control) => {
- control.enable(Object.assign(Object.assign({}, opts), { onlySelf: true }));
- });
- this.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });
- this._updateAncestors(Object.assign(Object.assign({}, opts), { skipPristineCheck }));
- this._onDisabledChange.forEach((changeFn) => changeFn(false));
- }
- _updateAncestors(opts) {
- if (this._parent && !opts.onlySelf) {
- this._parent.updateValueAndValidity(opts);
- if (!opts.skipPristineCheck) {
- this._parent._updatePristine();
- }
- this._parent._updateTouched();
- }
- }
- /**
- * @param parent Sets the parent of the control
- */
- setParent(parent) {
- this._parent = parent;
- }
- /**
- * Recalculates the value and validation status of the control.
- *
- * By default, it also updates the value and validity of its ancestors.
- *
- * @param opts Configuration options determine how the control propagates changes and emits events
- * after updates and validity checks are applied.
- * * `onlySelf`: When true, only update this control. When false or not supplied,
- * update all direct ancestors. Default is false.
- * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
- * `valueChanges`
- * observables emit events with the latest status and value when the control is updated.
- * When false, no events are emitted.
- */
- updateValueAndValidity(opts = {}) {
- this._setInitialStatus();
- this._updateValue();
- if (this.enabled) {
- this._cancelExistingSubscription();
- this.errors = this._runValidator();
- this.status = this._calculateStatus();
- if (this.status === VALID || this.status === PENDING) {
- this._runAsyncValidator(opts.emitEvent);
- }
- }
- if (opts.emitEvent !== false) {
- this.valueChanges.emit(this.value);
- this.statusChanges.emit(this.status);
- }
- if (this._parent && !opts.onlySelf) {
- this._parent.updateValueAndValidity(opts);
- }
- }
- /** @internal */
- _updateTreeValidity(opts = { emitEvent: true }) {
- this._forEachChild((ctrl) => ctrl._updateTreeValidity(opts));
- this.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });
- }
- _setInitialStatus() {
- this.status = this._allControlsDisabled() ? DISABLED : VALID;
- }
- _runValidator() {
- return this.validator ? this.validator(this) : null;
- }
- _runAsyncValidator(emitEvent) {
- if (this.asyncValidator) {
- this.status = PENDING;
- this._hasOwnPendingAsyncValidator = true;
- const obs = toObservable(this.asyncValidator(this));
- this._asyncValidationSubscription = obs.subscribe((errors) => {
- this._hasOwnPendingAsyncValidator = false;
- // This will trigger the recalculation of the validation status, which depends on
- // the state of the asynchronous validation (whether it is in progress or not). So, it is
- // necessary that we have updated the `_hasOwnPendingAsyncValidator` boolean flag first.
- this.setErrors(errors, { emitEvent });
- });
- }
- }
- _cancelExistingSubscription() {
- if (this._asyncValidationSubscription) {
- this._asyncValidationSubscription.unsubscribe();
- this._hasOwnPendingAsyncValidator = false;
- }
- }
- /**
- * Sets errors on a form control when running validations manually, rather than automatically.
- *
- * Calling `setErrors` also updates the validity of the parent control.
- *
- * @usageNotes
- *
- * ### Manually set the errors for a control
- *
- * ```
- * const login = new FormControl('someLogin');
- * login.setErrors({
- * notUnique: true
- * });
- *
- * expect(login.valid).toEqual(false);
- * expect(login.errors).toEqual({ notUnique: true });
- *
- * login.setValue('someOtherLogin');
- *
- * expect(login.valid).toEqual(true);
- * ```
- */
- setErrors(errors, opts = {}) {
- this.errors = errors;
- this._updateControlsErrors(opts.emitEvent !== false);
- }
- /**
- * Retrieves a child control given the control's name or path.
- *
- * @param path A dot-delimited string or array of string/number values that define the path to the
- * control.
- *
- * @usageNotes
- * ### Retrieve a nested control
- *
- * For example, to get a `name` control nested within a `person` sub-group:
- *
- * * `this.form.get('person.name');`
- *
- * -OR-
- *
- * * `this.form.get(['person', 'name']);`
- */
- get(path) {
- return _find(this, path, '.');
- }
- /**
- * @description
- * Reports error data for the control with the given path.
- *
- * @param errorCode The code of the error to check
- * @param path A list of control names that designates how to move from the current control
- * to the control that should be queried for errors.
- *
- * @usageNotes
- * For example, for the following `FormGroup`:
- *
- * ```
- * form = new FormGroup({
- * address: new FormGroup({ street: new FormControl() })
- * });
- * ```
- *
- * The path to the 'street' control from the root form would be 'address' -> 'street'.
- *
- * It can be provided to this method in one of two formats:
- *
- * 1. An array of string control names, e.g. `['address', 'street']`
- * 1. A period-delimited list of control names in one string, e.g. `'address.street'`
- *
- * @returns error data for that particular error. If the control or error is not present,
- * null is returned.
- */
- getError(errorCode, path) {
- const control = path ? this.get(path) : this;
- return control && control.errors ? control.errors[errorCode] : null;
- }
- /**
- * @description
- * Reports whether the control with the given path has the error specified.
- *
- * @param errorCode The code of the error to check
- * @param path A list of control names that designates how to move from the current control
- * to the control that should be queried for errors.
- *
- * @usageNotes
- * For example, for the following `FormGroup`:
- *
- * ```
- * form = new FormGroup({
- * address: new FormGroup({ street: new FormControl() })
- * });
- * ```
- *
- * The path to the 'street' control from the root form would be 'address' -> 'street'.
- *
- * It can be provided to this method in one of two formats:
- *
- * 1. An array of string control names, e.g. `['address', 'street']`
- * 1. A period-delimited list of control names in one string, e.g. `'address.street'`
- *
- * If no path is given, this method checks for the error on the current control.
- *
- * @returns whether the given error is present in the control at the given path.
- *
- * If the control is not present, false is returned.
- */
- hasError(errorCode, path) {
- return !!this.getError(errorCode, path);
- }
- /**
- * Retrieves the top-level ancestor of this control.
- */
- get root() {
- let x = this;
- while (x._parent) {
- x = x._parent;
- }
- return x;
- }
- /** @internal */
- _updateControlsErrors(emitEvent) {
- this.status = this._calculateStatus();
- if (emitEvent) {
- this.statusChanges.emit(this.status);
- }
- if (this._parent) {
- this._parent._updateControlsErrors(emitEvent);
- }
- }
- /** @internal */
- _initObservables() {
- this.valueChanges = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.statusChanges = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- }
- _calculateStatus() {
- if (this._allControlsDisabled())
- return DISABLED;
- if (this.errors)
- return INVALID;
- if (this._hasOwnPendingAsyncValidator || this._anyControlsHaveStatus(PENDING))
- return PENDING;
- if (this._anyControlsHaveStatus(INVALID))
- return INVALID;
- return VALID;
- }
- /** @internal */
- _anyControlsHaveStatus(status) {
- return this._anyControls((control) => control.status === status);
- }
- /** @internal */
- _anyControlsDirty() {
- return this._anyControls((control) => control.dirty);
- }
- /** @internal */
- _anyControlsTouched() {
- return this._anyControls((control) => control.touched);
- }
- /** @internal */
- _updatePristine(opts = {}) {
- this.pristine = !this._anyControlsDirty();
- if (this._parent && !opts.onlySelf) {
- this._parent._updatePristine(opts);
- }
- }
- /** @internal */
- _updateTouched(opts = {}) {
- this.touched = this._anyControlsTouched();
- if (this._parent && !opts.onlySelf) {
- this._parent._updateTouched(opts);
- }
- }
- /** @internal */
- _isBoxedValue(formState) {
- return typeof formState === 'object' && formState !== null &&
- Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;
- }
- /** @internal */
- _registerOnCollectionChange(fn) {
- this._onCollectionChange = fn;
- }
- /** @internal */
- _setUpdateStrategy(opts) {
- if (isOptionsObj(opts) && opts.updateOn != null) {
- this._updateOn = opts.updateOn;
- }
- }
- /**
- * Check to see if parent has been marked artificially dirty.
- *
- * @internal
- */
- _parentMarkedDirty(onlySelf) {
- const parentDirty = this._parent && this._parent.dirty;
- return !onlySelf && !!parentDirty && !this._parent._anyControlsDirty();
- }
- }
- /**
- * Tracks the value and validation status of an individual form control.
- *
- * This is one of the three fundamental building blocks of Angular forms, along with
- * `FormGroup` and `FormArray`. It extends the `AbstractControl` class that
- * implements most of the base functionality for accessing the value, validation status,
- * user interactions and events. See [usage examples below](#usage-notes).
- *
- * @see `AbstractControl`
- * @see [Reactive Forms Guide](guide/reactive-forms)
- * @see [Usage Notes](#usage-notes)
- *
- * @usageNotes
- *
- * ### Initializing Form Controls
- *
- * Instantiate a `FormControl`, with an initial value.
- *
- * ```ts
- * const control = new FormControl('some value');
- * console.log(control.value); // 'some value'
- *```
- *
- * The following example initializes the control with a form state object. The `value`
- * and `disabled` keys are required in this case.
- *
- * ```ts
- * const control = new FormControl({ value: 'n/a', disabled: true });
- * console.log(control.value); // 'n/a'
- * console.log(control.status); // 'DISABLED'
- * ```
- *
- * The following example initializes the control with a sync validator.
- *
- * ```ts
- * const control = new FormControl('', Validators.required);
- * console.log(control.value); // ''
- * console.log(control.status); // 'INVALID'
- * ```
- *
- * The following example initializes the control using an options object.
- *
- * ```ts
- * const control = new FormControl('', {
- * validators: Validators.required,
- * asyncValidators: myAsyncValidator
- * });
- * ```
- *
- * ### Configure the control to update on a blur event
- *
- * Set the `updateOn` option to `'blur'` to update on the blur `event`.
- *
- * ```ts
- * const control = new FormControl('', { updateOn: 'blur' });
- * ```
- *
- * ### Configure the control to update on a submit event
- *
- * Set the `updateOn` option to `'submit'` to update on a submit `event`.
- *
- * ```ts
- * const control = new FormControl('', { updateOn: 'submit' });
- * ```
- *
- * ### Reset the control back to an initial value
- *
- * You reset to a specific form state by passing through a standalone
- * value or a form state object that contains both a value and a disabled state
- * (these are the only two properties that cannot be calculated).
- *
- * ```ts
- * const control = new FormControl('Nancy');
- *
- * console.log(control.value); // 'Nancy'
- *
- * control.reset('Drew');
- *
- * console.log(control.value); // 'Drew'
- * ```
- *
- * ### Reset the control back to an initial value and disabled
- *
- * ```
- * const control = new FormControl('Nancy');
- *
- * console.log(control.value); // 'Nancy'
- * console.log(control.status); // 'VALID'
- *
- * control.reset({ value: 'Drew', disabled: true });
- *
- * console.log(control.value); // 'Drew'
- * console.log(control.status); // 'DISABLED'
- * ```
- *
- * @publicApi
- */
- class FormControl extends AbstractControl {
- /**
- * Creates a new `FormControl` instance.
- *
- * @param formState Initializes the control with an initial value,
- * or an object that defines the initial value and disabled state.
- *
- * @param validatorOrOpts A synchronous validator function, or an array of
- * such functions, or an `AbstractControlOptions` object that contains validation functions
- * and a validation trigger.
- *
- * @param asyncValidator A single async validator or array of async validator functions
- *
- */
- constructor(formState = null, validatorOrOpts, asyncValidator) {
- super(pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts));
- /** @internal */
- this._onChange = [];
- this._applyFormState(formState);
- this._setUpdateStrategy(validatorOrOpts);
- this._initObservables();
- this.updateValueAndValidity({
- onlySelf: true,
- // If `asyncValidator` is present, it will trigger control status change from `PENDING` to
- // `VALID` or `INVALID`.
- // The status should be broadcasted via the `statusChanges` observable, so we set `emitEvent`
- // to `true` to allow that during the control creation process.
- emitEvent: !!asyncValidator
- });
- }
- /**
- * Sets a new value for the form control.
- *
- * @param value The new value for the control.
- * @param options Configuration options that determine how the control propagates changes
- * and emits events when the value changes.
- * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity
- * updateValueAndValidity} method.
- *
- * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is
- * false.
- * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
- * `valueChanges`
- * observables emit events with the latest status and value when the control value is updated.
- * When false, no events are emitted.
- * * `emitModelToViewChange`: When true or not supplied (the default), each change triggers an
- * `onChange` event to
- * update the view.
- * * `emitViewToModelChange`: When true or not supplied (the default), each change triggers an
- * `ngModelChange`
- * event to update the model.
- *
- */
- setValue(value, options = {}) {
- this.value = this._pendingValue = value;
- if (this._onChange.length && options.emitModelToViewChange !== false) {
- this._onChange.forEach((changeFn) => changeFn(this.value, options.emitViewToModelChange !== false));
- }
- this.updateValueAndValidity(options);
- }
- /**
- * Patches the value of a control.
- *
- * This function is functionally the same as {@link FormControl#setValue setValue} at this level.
- * It exists for symmetry with {@link FormGroup#patchValue patchValue} on `FormGroups` and
- * `FormArrays`, where it does behave differently.
- *
- * @see `setValue` for options
- */
- patchValue(value, options = {}) {
- this.setValue(value, options);
- }
- /**
- * Resets the form control, marking it `pristine` and `untouched`, and setting
- * the value to null.
- *
- * @param formState Resets the control with an initial value,
- * or an object that defines the initial value and disabled state.
- *
- * @param options Configuration options that determine how the control propagates changes
- * and emits events after the value changes.
- *
- * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is
- * false.
- * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
- * `valueChanges`
- * observables emit events with the latest status and value when the control is reset.
- * When false, no events are emitted.
- *
- */
- reset(formState = null, options = {}) {
- this._applyFormState(formState);
- this.markAsPristine(options);
- this.markAsUntouched(options);
- this.setValue(this.value, options);
- this._pendingChange = false;
- }
- /**
- * @internal
- */
- _updateValue() { }
- /**
- * @internal
- */
- _anyControls(condition) {
- return false;
- }
- /**
- * @internal
- */
- _allControlsDisabled() {
- return this.disabled;
- }
- /**
- * Register a listener for change events.
- *
- * @param fn The method that is called when the value changes
- */
- registerOnChange(fn) {
- this._onChange.push(fn);
- }
- /**
- * Internal function to unregister a change events listener.
- * @internal
- */
- _unregisterOnChange(fn) {
- removeListItem(this._onChange, fn);
- }
- /**
- * Register a listener for disabled events.
- *
- * @param fn The method that is called when the disabled status changes.
- */
- registerOnDisabledChange(fn) {
- this._onDisabledChange.push(fn);
- }
- /**
- * Internal function to unregister a disabled event listener.
- * @internal
- */
- _unregisterOnDisabledChange(fn) {
- removeListItem(this._onDisabledChange, fn);
- }
- /**
- * @internal
- */
- _forEachChild(cb) { }
- /** @internal */
- _syncPendingControls() {
- if (this.updateOn === 'submit') {
- if (this._pendingDirty)
- this.markAsDirty();
- if (this._pendingTouched)
- this.markAsTouched();
- if (this._pendingChange) {
- this.setValue(this._pendingValue, { onlySelf: true, emitModelToViewChange: false });
- return true;
- }
- }
- return false;
- }
- _applyFormState(formState) {
- if (this._isBoxedValue(formState)) {
- this.value = this._pendingValue = formState.value;
- formState.disabled ? this.disable({ onlySelf: true, emitEvent: false }) :
- this.enable({ onlySelf: true, emitEvent: false });
- }
- else {
- this.value = this._pendingValue = formState;
- }
- }
- }
- /**
- * Tracks the value and validity state of a group of `FormControl` instances.
- *
- * A `FormGroup` aggregates the values of each child `FormControl` into one object,
- * with each control name as the key. It calculates its status by reducing the status values
- * of its children. For example, if one of the controls in a group is invalid, the entire
- * group becomes invalid.
- *
- * `FormGroup` is one of the three fundamental building blocks used to define forms in Angular,
- * along with `FormControl` and `FormArray`.
- *
- * When instantiating a `FormGroup`, pass in a collection of child controls as the first
- * argument. The key for each child registers the name for the control.
- *
- * @usageNotes
- *
- * ### Create a form group with 2 controls
- *
- * ```
- * const form = new FormGroup({
- * first: new FormControl('Nancy', Validators.minLength(2)),
- * last: new FormControl('Drew'),
- * });
- *
- * console.log(form.value); // {first: 'Nancy', last; 'Drew'}
- * console.log(form.status); // 'VALID'
- * ```
- *
- * ### Create a form group with a group-level validator
- *
- * You include group-level validators as the second arg, or group-level async
- * validators as the third arg. These come in handy when you want to perform validation
- * that considers the value of more than one child control.
- *
- * ```
- * const form = new FormGroup({
- * password: new FormControl('', Validators.minLength(2)),
- * passwordConfirm: new FormControl('', Validators.minLength(2)),
- * }, passwordMatchValidator);
- *
- *
- * function passwordMatchValidator(g: FormGroup) {
- * return g.get('password').value === g.get('passwordConfirm').value
- * ? null : {'mismatch': true};
- * }
- * ```
- *
- * Like `FormControl` instances, you choose to pass in
- * validators and async validators as part of an options object.
- *
- * ```
- * const form = new FormGroup({
- * password: new FormControl('')
- * passwordConfirm: new FormControl('')
- * }, { validators: passwordMatchValidator, asyncValidators: otherValidator });
- * ```
- *
- * ### Set the updateOn property for all controls in a form group
- *
- * The options object is used to set a default value for each child
- * control's `updateOn` property. If you set `updateOn` to `'blur'` at the
- * group level, all child controls default to 'blur', unless the child
- * has explicitly specified a different `updateOn` value.
- *
- * ```ts
- * const c = new FormGroup({
- * one: new FormControl()
- * }, { updateOn: 'blur' });
- * ```
- *
- * @publicApi
- */
- class FormGroup extends AbstractControl {
- /**
- * Creates a new `FormGroup` instance.
- *
- * @param controls A collection of child controls. The key for each child is the name
- * under which it is registered.
- *
- * @param validatorOrOpts A synchronous validator function, or an array of
- * such functions, or an `AbstractControlOptions` object that contains validation functions
- * and a validation trigger.
- *
- * @param asyncValidator A single async validator or array of async validator functions
- *
- */
- constructor(controls, validatorOrOpts, asyncValidator) {
- super(pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts));
- this.controls = controls;
- this._initObservables();
- this._setUpdateStrategy(validatorOrOpts);
- this._setUpControls();
- this.updateValueAndValidity({
- onlySelf: true,
- // If `asyncValidator` is present, it will trigger control status change from `PENDING` to
- // `VALID` or `INVALID`. The status should be broadcasted via the `statusChanges` observable,
- // so we set `emitEvent` to `true` to allow that during the control creation process.
- emitEvent: !!asyncValidator
- });
- }
- /**
- * Registers a control with the group's list of controls.
- *
- * This method does not update the value or validity of the control.
- * Use {@link FormGroup#addControl addControl} instead.
- *
- * @param name The control name to register in the collection
- * @param control Provides the control for the given name
- */
- registerControl(name, control) {
- if (this.controls[name])
- return this.controls[name];
- this.controls[name] = control;
- control.setParent(this);
- control._registerOnCollectionChange(this._onCollectionChange);
- return control;
- }
- /**
- * Add a control to this group.
- *
- * This method also updates the value and validity of the control.
- *
- * @param name The control name to add to the collection
- * @param control Provides the control for the given name
- */
- addControl(name, control) {
- this.registerControl(name, control);
- this.updateValueAndValidity();
- this._onCollectionChange();
- }
- /**
- * Remove a control from this group.
- *
- * @param name The control name to remove from the collection
- */
- removeControl(name) {
- if (this.controls[name])
- this.controls[name]._registerOnCollectionChange(() => { });
- delete (this.controls[name]);
- this.updateValueAndValidity();
- this._onCollectionChange();
- }
- /**
- * Replace an existing control.
- *
- * @param name The control name to replace in the collection
- * @param control Provides the control for the given name
- */
- setControl(name, control) {
- if (this.controls[name])
- this.controls[name]._registerOnCollectionChange(() => { });
- delete (this.controls[name]);
- if (control)
- this.registerControl(name, control);
- this.updateValueAndValidity();
- this._onCollectionChange();
- }
- /**
- * Check whether there is an enabled control with the given name in the group.
- *
- * Reports false for disabled controls. If you'd like to check for existence in the group
- * only, use {@link AbstractControl#get get} instead.
- *
- * @param controlName The control name to check for existence in the collection
- *
- * @returns false for disabled controls, true otherwise.
- */
- contains(controlName) {
- return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;
- }
- /**
- * Sets the value of the `FormGroup`. It accepts an object that matches
- * the structure of the group, with control names as keys.
- *
- * @usageNotes
- * ### Set the complete value for the form group
- *
- * ```
- * const form = new FormGroup({
- * first: new FormControl(),
- * last: new FormControl()
- * });
- *
- * console.log(form.value); // {first: null, last: null}
- *
- * form.setValue({first: 'Nancy', last: 'Drew'});
- * console.log(form.value); // {first: 'Nancy', last: 'Drew'}
- * ```
- *
- * @throws When strict checks fail, such as setting the value of a control
- * that doesn't exist or if you exclude a value of a control that does exist.
- *
- * @param value The new value for the control that matches the structure of the group.
- * @param options Configuration options that determine how the control propagates changes
- * and emits events after the value changes.
- * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity
- * updateValueAndValidity} method.
- *
- * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is
- * false.
- * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
- * `valueChanges`
- * observables emit events with the latest status and value when the control value is updated.
- * When false, no events are emitted.
- */
- setValue(value, options = {}) {
- this._checkAllValuesPresent(value);
- Object.keys(value).forEach(name => {
- this._throwIfControlMissing(name);
- this.controls[name].setValue(value[name], { onlySelf: true, emitEvent: options.emitEvent });
- });
- this.updateValueAndValidity(options);
- }
- /**
- * Patches the value of the `FormGroup`. It accepts an object with control
- * names as keys, and does its best to match the values to the correct controls
- * in the group.
- *
- * It accepts both super-sets and sub-sets of the group without throwing an error.
- *
- * @usageNotes
- * ### Patch the value for a form group
- *
- * ```
- * const form = new FormGroup({
- * first: new FormControl(),
- * last: new FormControl()
- * });
- * console.log(form.value); // {first: null, last: null}
- *
- * form.patchValue({first: 'Nancy'});
- * console.log(form.value); // {first: 'Nancy', last: null}
- * ```
- *
- * @param value The object that matches the structure of the group.
- * @param options Configuration options that determine how the control propagates changes and
- * emits events after the value is patched.
- * * `onlySelf`: When true, each change only affects this control and not its parent. Default is
- * true.
- * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
- * `valueChanges`
- * observables emit events with the latest status and value when the control value is updated.
- * When false, no events are emitted.
- * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity
- * updateValueAndValidity} method.
- */
- patchValue(value, options = {}) {
- Object.keys(value).forEach(name => {
- if (this.controls[name]) {
- this.controls[name].patchValue(value[name], { onlySelf: true, emitEvent: options.emitEvent });
- }
- });
- this.updateValueAndValidity(options);
- }
- /**
- * Resets the `FormGroup`, marks all descendants `pristine` and `untouched` and sets
- * the value of all descendants to null.
- *
- * You reset to a specific form state by passing in a map of states
- * that matches the structure of your form, with control names as keys. The state
- * is a standalone value or a form state object with both a value and a disabled
- * status.
- *
- * @param value Resets the control with an initial value,
- * or an object that defines the initial value and disabled state.
- *
- * @param options Configuration options that determine how the control propagates changes
- * and emits events when the group is reset.
- * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is
- * false.
- * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
- * `valueChanges`
- * observables emit events with the latest status and value when the control is reset.
- * When false, no events are emitted.
- * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity
- * updateValueAndValidity} method.
- *
- * @usageNotes
- *
- * ### Reset the form group values
- *
- * ```ts
- * const form = new FormGroup({
- * first: new FormControl('first name'),
- * last: new FormControl('last name')
- * });
- *
- * console.log(form.value); // {first: 'first name', last: 'last name'}
- *
- * form.reset({ first: 'name', last: 'last name' });
- *
- * console.log(form.value); // {first: 'name', last: 'last name'}
- * ```
- *
- * ### Reset the form group values and disabled status
- *
- * ```
- * const form = new FormGroup({
- * first: new FormControl('first name'),
- * last: new FormControl('last name')
- * });
- *
- * form.reset({
- * first: {value: 'name', disabled: true},
- * last: 'last'
- * });
- *
- * console.log(form.value); // {last: 'last'}
- * console.log(form.get('first').status); // 'DISABLED'
- * ```
- */
- reset(value = {}, options = {}) {
- this._forEachChild((control, name) => {
- control.reset(value[name], { onlySelf: true, emitEvent: options.emitEvent });
- });
- this._updatePristine(options);
- this._updateTouched(options);
- this.updateValueAndValidity(options);
- }
- /**
- * The aggregate value of the `FormGroup`, including any disabled controls.
- *
- * Retrieves all values regardless of disabled status.
- * The `value` property is the best way to get the value of the group, because
- * it excludes disabled controls in the `FormGroup`.
- */
- getRawValue() {
- return this._reduceChildren({}, (acc, control, name) => {
- acc[name] = control instanceof FormControl ? control.value : control.getRawValue();
- return acc;
- });
- }
- /** @internal */
- _syncPendingControls() {
- let subtreeUpdated = this._reduceChildren(false, (updated, child) => {
- return child._syncPendingControls() ? true : updated;
- });
- if (subtreeUpdated)
- this.updateValueAndValidity({ onlySelf: true });
- return subtreeUpdated;
- }
- /** @internal */
- _throwIfControlMissing(name) {
- if (!Object.keys(this.controls).length) {
- throw new Error(`
- There are no form controls registered with this group yet. If you're using ngModel,
- you may want to check next tick (e.g. use setTimeout).
- `);
- }
- if (!this.controls[name]) {
- throw new Error(`Cannot find form control with name: ${name}.`);
- }
- }
- /** @internal */
- _forEachChild(cb) {
- Object.keys(this.controls).forEach(k => cb(this.controls[k], k));
- }
- /** @internal */
- _setUpControls() {
- this._forEachChild((control) => {
- control.setParent(this);
- control._registerOnCollectionChange(this._onCollectionChange);
- });
- }
- /** @internal */
- _updateValue() {
- this.value = this._reduceValue();
- }
- /** @internal */
- _anyControls(condition) {
- for (const controlName of Object.keys(this.controls)) {
- const control = this.controls[controlName];
- if (this.contains(controlName) && condition(control)) {
- return true;
- }
- }
- return false;
- }
- /** @internal */
- _reduceValue() {
- return this._reduceChildren({}, (acc, control, name) => {
- if (control.enabled || this.disabled) {
- acc[name] = control.value;
- }
- return acc;
- });
- }
- /** @internal */
- _reduceChildren(initValue, fn) {
- let res = initValue;
- this._forEachChild((control, name) => {
- res = fn(res, control, name);
- });
- return res;
- }
- /** @internal */
- _allControlsDisabled() {
- for (const controlName of Object.keys(this.controls)) {
- if (this.controls[controlName].enabled) {
- return false;
- }
- }
- return Object.keys(this.controls).length > 0 || this.disabled;
- }
- /** @internal */
- _checkAllValuesPresent(value) {
- this._forEachChild((control, name) => {
- if (value[name] === undefined) {
- throw new Error(`Must supply a value for form control with name: '${name}'.`);
- }
- });
- }
- }
- /**
- * Tracks the value and validity state of an array of `FormControl`,
- * `FormGroup` or `FormArray` instances.
- *
- * A `FormArray` aggregates the values of each child `FormControl` into an array.
- * It calculates its status by reducing the status values of its children. For example, if one of
- * the controls in a `FormArray` is invalid, the entire array becomes invalid.
- *
- * `FormArray` is one of the three fundamental building blocks used to define forms in Angular,
- * along with `FormControl` and `FormGroup`.
- *
- * @usageNotes
- *
- * ### Create an array of form controls
- *
- * ```
- * const arr = new FormArray([
- * new FormControl('Nancy', Validators.minLength(2)),
- * new FormControl('Drew'),
- * ]);
- *
- * console.log(arr.value); // ['Nancy', 'Drew']
- * console.log(arr.status); // 'VALID'
- * ```
- *
- * ### Create a form array with array-level validators
- *
- * You include array-level validators and async validators. These come in handy
- * when you want to perform validation that considers the value of more than one child
- * control.
- *
- * The two types of validators are passed in separately as the second and third arg
- * respectively, or together as part of an options object.
- *
- * ```
- * const arr = new FormArray([
- * new FormControl('Nancy'),
- * new FormControl('Drew')
- * ], {validators: myValidator, asyncValidators: myAsyncValidator});
- * ```
- *
- * ### Set the updateOn property for all controls in a form array
- *
- * The options object is used to set a default value for each child
- * control's `updateOn` property. If you set `updateOn` to `'blur'` at the
- * array level, all child controls default to 'blur', unless the child
- * has explicitly specified a different `updateOn` value.
- *
- * ```ts
- * const arr = new FormArray([
- * new FormControl()
- * ], {updateOn: 'blur'});
- * ```
- *
- * ### Adding or removing controls from a form array
- *
- * To change the controls in the array, use the `push`, `insert`, `removeAt` or `clear` methods
- * in `FormArray` itself. These methods ensure the controls are properly tracked in the
- * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate
- * the `FormArray` directly, as that result in strange and unexpected behavior such
- * as broken change detection.
- *
- * @publicApi
- */
- class FormArray extends AbstractControl {
- /**
- * Creates a new `FormArray` instance.
- *
- * @param controls An array of child controls. Each child control is given an index
- * where it is registered.
- *
- * @param validatorOrOpts A synchronous validator function, or an array of
- * such functions, or an `AbstractControlOptions` object that contains validation functions
- * and a validation trigger.
- *
- * @param asyncValidator A single async validator or array of async validator functions
- *
- */
- constructor(controls, validatorOrOpts, asyncValidator) {
- super(pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts));
- this.controls = controls;
- this._initObservables();
- this._setUpdateStrategy(validatorOrOpts);
- this._setUpControls();
- this.updateValueAndValidity({
- onlySelf: true,
- // If `asyncValidator` is present, it will trigger control status change from `PENDING` to
- // `VALID` or `INVALID`.
- // The status should be broadcasted via the `statusChanges` observable, so we set `emitEvent`
- // to `true` to allow that during the control creation process.
- emitEvent: !!asyncValidator
- });
- }
- /**
- * Get the `AbstractControl` at the given `index` in the array.
- *
- * @param index Index in the array to retrieve the control
- */
- at(index) {
- return this.controls[index];
- }
- /**
- * Insert a new `AbstractControl` at the end of the array.
- *
- * @param control Form control to be inserted
- */
- push(control) {
- this.controls.push(control);
- this._registerControl(control);
- this.updateValueAndValidity();
- this._onCollectionChange();
- }
- /**
- * Insert a new `AbstractControl` at the given `index` in the array.
- *
- * @param index Index in the array to insert the control
- * @param control Form control to be inserted
- */
- insert(index, control) {
- this.controls.splice(index, 0, control);
- this._registerControl(control);
- this.updateValueAndValidity();
- }
- /**
- * Remove the control at the given `index` in the array.
- *
- * @param index Index in the array to remove the control
- */
- removeAt(index) {
- if (this.controls[index])
- this.controls[index]._registerOnCollectionChange(() => { });
- this.controls.splice(index, 1);
- this.updateValueAndValidity();
- }
- /**
- * Replace an existing control.
- *
- * @param index Index in the array to replace the control
- * @param control The `AbstractControl` control to replace the existing control
- */
- setControl(index, control) {
- if (this.controls[index])
- this.controls[index]._registerOnCollectionChange(() => { });
- this.controls.splice(index, 1);
- if (control) {
- this.controls.splice(index, 0, control);
- this._registerControl(control);
- }
- this.updateValueAndValidity();
- this._onCollectionChange();
- }
- /**
- * Length of the control array.
- */
- get length() {
- return this.controls.length;
- }
- /**
- * Sets the value of the `FormArray`. It accepts an array that matches
- * the structure of the control.
- *
- * This method performs strict checks, and throws an error if you try
- * to set the value of a control that doesn't exist or if you exclude the
- * value of a control.
- *
- * @usageNotes
- * ### Set the values for the controls in the form array
- *
- * ```
- * const arr = new FormArray([
- * new FormControl(),
- * new FormControl()
- * ]);
- * console.log(arr.value); // [null, null]
- *
- * arr.setValue(['Nancy', 'Drew']);
- * console.log(arr.value); // ['Nancy', 'Drew']
- * ```
- *
- * @param value Array of values for the controls
- * @param options Configure options that determine how the control propagates changes and
- * emits events after the value changes
- *
- * * `onlySelf`: When true, each change only affects this control, and not its parent. Default
- * is false.
- * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
- * `valueChanges`
- * observables emit events with the latest status and value when the control value is updated.
- * When false, no events are emitted.
- * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity
- * updateValueAndValidity} method.
- */
- setValue(value, options = {}) {
- this._checkAllValuesPresent(value);
- value.forEach((newValue, index) => {
- this._throwIfControlMissing(index);
- this.at(index).setValue(newValue, { onlySelf: true, emitEvent: options.emitEvent });
- });
- this.updateValueAndValidity(options);
- }
- /**
- * Patches the value of the `FormArray`. It accepts an array that matches the
- * structure of the control, and does its best to match the values to the correct
- * controls in the group.
- *
- * It accepts both super-sets and sub-sets of the array without throwing an error.
- *
- * @usageNotes
- * ### Patch the values for controls in a form array
- *
- * ```
- * const arr = new FormArray([
- * new FormControl(),
- * new FormControl()
- * ]);
- * console.log(arr.value); // [null, null]
- *
- * arr.patchValue(['Nancy']);
- * console.log(arr.value); // ['Nancy', null]
- * ```
- *
- * @param value Array of latest values for the controls
- * @param options Configure options that determine how the control propagates changes and
- * emits events after the value changes
- *
- * * `onlySelf`: When true, each change only affects this control, and not its parent. Default
- * is false.
- * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
- * `valueChanges`
- * observables emit events with the latest status and value when the control value is updated.
- * When false, no events are emitted.
- * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity
- * updateValueAndValidity} method.
- */
- patchValue(value, options = {}) {
- value.forEach((newValue, index) => {
- if (this.at(index)) {
- this.at(index).patchValue(newValue, { onlySelf: true, emitEvent: options.emitEvent });
- }
- });
- this.updateValueAndValidity(options);
- }
- /**
- * Resets the `FormArray` and all descendants are marked `pristine` and `untouched`, and the
- * value of all descendants to null or null maps.
- *
- * You reset to a specific form state by passing in an array of states
- * that matches the structure of the control. The state is a standalone value
- * or a form state object with both a value and a disabled status.
- *
- * @usageNotes
- * ### Reset the values in a form array
- *
- * ```ts
- * const arr = new FormArray([
- * new FormControl(),
- * new FormControl()
- * ]);
- * arr.reset(['name', 'last name']);
- *
- * console.log(this.arr.value); // ['name', 'last name']
- * ```
- *
- * ### Reset the values in a form array and the disabled status for the first control
- *
- * ```
- * this.arr.reset([
- * {value: 'name', disabled: true},
- * 'last'
- * ]);
- *
- * console.log(this.arr.value); // ['name', 'last name']
- * console.log(this.arr.get(0).status); // 'DISABLED'
- * ```
- *
- * @param value Array of values for the controls
- * @param options Configure options that determine how the control propagates changes and
- * emits events after the value changes
- *
- * * `onlySelf`: When true, each change only affects this control, and not its parent. Default
- * is false.
- * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
- * `valueChanges`
- * observables emit events with the latest status and value when the control is reset.
- * When false, no events are emitted.
- * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity
- * updateValueAndValidity} method.
- */
- reset(value = [], options = {}) {
- this._forEachChild((control, index) => {
- control.reset(value[index], { onlySelf: true, emitEvent: options.emitEvent });
- });
- this._updatePristine(options);
- this._updateTouched(options);
- this.updateValueAndValidity(options);
- }
- /**
- * The aggregate value of the array, including any disabled controls.
- *
- * Reports all values regardless of disabled status.
- * For enabled controls only, the `value` property is the best way to get the value of the array.
- */
- getRawValue() {
- return this.controls.map((control) => {
- return control instanceof FormControl ? control.value : control.getRawValue();
- });
- }
- /**
- * Remove all controls in the `FormArray`.
- *
- * @usageNotes
- * ### Remove all elements from a FormArray
- *
- * ```ts
- * const arr = new FormArray([
- * new FormControl(),
- * new FormControl()
- * ]);
- * console.log(arr.length); // 2
- *
- * arr.clear();
- * console.log(arr.length); // 0
- * ```
- *
- * It's a simpler and more efficient alternative to removing all elements one by one:
- *
- * ```ts
- * const arr = new FormArray([
- * new FormControl(),
- * new FormControl()
- * ]);
- *
- * while (arr.length) {
- * arr.removeAt(0);
- * }
- * ```
- */
- clear() {
- if (this.controls.length < 1)
- return;
- this._forEachChild((control) => control._registerOnCollectionChange(() => { }));
- this.controls.splice(0);
- this.updateValueAndValidity();
- }
- /** @internal */
- _syncPendingControls() {
- let subtreeUpdated = this.controls.reduce((updated, child) => {
- return child._syncPendingControls() ? true : updated;
- }, false);
- if (subtreeUpdated)
- this.updateValueAndValidity({ onlySelf: true });
- return subtreeUpdated;
- }
- /** @internal */
- _throwIfControlMissing(index) {
- if (!this.controls.length) {
- throw new Error(`
- There are no form controls registered with this array yet. If you're using ngModel,
- you may want to check next tick (e.g. use setTimeout).
- `);
- }
- if (!this.at(index)) {
- throw new Error(`Cannot find form control at index ${index}`);
- }
- }
- /** @internal */
- _forEachChild(cb) {
- this.controls.forEach((control, index) => {
- cb(control, index);
- });
- }
- /** @internal */
- _updateValue() {
- this.value =
- this.controls.filter((control) => control.enabled || this.disabled)
- .map((control) => control.value);
- }
- /** @internal */
- _anyControls(condition) {
- return this.controls.some((control) => control.enabled && condition(control));
- }
- /** @internal */
- _setUpControls() {
- this._forEachChild((control) => this._registerControl(control));
- }
- /** @internal */
- _checkAllValuesPresent(value) {
- this._forEachChild((control, i) => {
- if (value[i] === undefined) {
- throw new Error(`Must supply a value for form control at index: ${i}.`);
- }
- });
- }
- /** @internal */
- _allControlsDisabled() {
- for (const control of this.controls) {
- if (control.enabled)
- return false;
- }
- return this.controls.length > 0 || this.disabled;
- }
- _registerControl(control) {
- control.setParent(this);
- control._registerOnCollectionChange(this._onCollectionChange);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const formDirectiveProvider = {
- provide: ControlContainer,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgForm)
- };
- const ɵ0 = () => Promise.resolve(null);
- const resolvedPromise = (ɵ0)();
- /**
- * @description
- * Creates a top-level `FormGroup` instance and binds it to a form
- * to track aggregate form value and validation status.
- *
- * As soon as you import the `FormsModule`, this directive becomes active by default on
- * all `<form>` tags. You don't need to add a special selector.
- *
- * You optionally export the directive into a local template variable using `ngForm` as the key
- * (ex: `#myForm="ngForm"`). This is optional, but useful. Many properties from the underlying
- * `FormGroup` instance are duplicated on the directive itself, so a reference to it
- * gives you access to the aggregate value and validity status of the form, as well as
- * user interaction properties like `dirty` and `touched`.
- *
- * To register child controls with the form, use `NgModel` with a `name`
- * attribute. You may use `NgModelGroup` to create sub-groups within the form.
- *
- * If necessary, listen to the directive's `ngSubmit` event to be notified when the user has
- * triggered a form submission. The `ngSubmit` event emits the original form
- * submission event.
- *
- * In template driven forms, all `<form>` tags are automatically tagged as `NgForm`.
- * To import the `FormsModule` but skip its usage in some forms,
- * for example, to use native HTML5 validation, add the `ngNoForm` and the `<form>`
- * tags won't create an `NgForm` directive. In reactive forms, using `ngNoForm` is
- * unnecessary because the `<form>` tags are inert. In that case, you would
- * refrain from using the `formGroup` directive.
- *
- * @usageNotes
- *
- * ### Listening for form submission
- *
- * The following example shows how to capture the form values from the "ngSubmit" event.
- *
- * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}
- *
- * ### Setting the update options
- *
- * The following example shows you how to change the "updateOn" option from its default using
- * ngFormOptions.
- *
- * ```html
- * <form [ngFormOptions]="{updateOn: 'blur'}">
- * <input name="one" ngModel> <!-- this ngModel will update on blur -->
- * </form>
- * ```
- *
- * ### Native DOM validation UI
- *
- * In order to prevent the native DOM form validation UI from interfering with Angular's form
- * validation, Angular automatically adds the `novalidate` attribute on any `<form>` whenever
- * `FormModule` or `ReactiveFormModule` are imported into the application.
- * If you want to explicitly enable native DOM validation UI with Angular forms, you can add the
- * `ngNativeValidate` attribute to the `<form>` element:
- *
- * ```html
- * <form ngNativeValidate>
- * ...
- * </form>
- * ```
- *
- * @ngModule FormsModule
- * @publicApi
- */
- class NgForm extends ControlContainer {
- constructor(validators, asyncValidators) {
- super();
- /**
- * @description
- * Returns whether the form submission has been triggered.
- */
- this.submitted = false;
- this._directives = [];
- /**
- * @description
- * Event emitter for the "ngSubmit" event
- */
- this.ngSubmit = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.form =
- new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));
- }
- /** @nodoc */
- ngAfterViewInit() {
- this._setUpdateStrategy();
- }
- /**
- * @description
- * The directive instance.
- */
- get formDirective() {
- return this;
- }
- /**
- * @description
- * The internal `FormGroup` instance.
- */
- get control() {
- return this.form;
- }
- /**
- * @description
- * Returns an array representing the path to this group. Because this directive
- * always lives at the top level of a form, it is always an empty array.
- */
- get path() {
- return [];
- }
- /**
- * @description
- * Returns a map of the controls in this group.
- */
- get controls() {
- return this.form.controls;
- }
- /**
- * @description
- * Method that sets up the control directive in this group, re-calculates its value
- * and validity, and adds the instance to the internal list of directives.
- *
- * @param dir The `NgModel` directive instance.
- */
- addControl(dir) {
- resolvedPromise.then(() => {
- const container = this._findContainer(dir.path);
- dir.control =
- container.registerControl(dir.name, dir.control);
- setUpControl(dir.control, dir);
- dir.control.updateValueAndValidity({ emitEvent: false });
- this._directives.push(dir);
- });
- }
- /**
- * @description
- * Retrieves the `FormControl` instance from the provided `NgModel` directive.
- *
- * @param dir The `NgModel` directive instance.
- */
- getControl(dir) {
- return this.form.get(dir.path);
- }
- /**
- * @description
- * Removes the `NgModel` instance from the internal list of directives
- *
- * @param dir The `NgModel` directive instance.
- */
- removeControl(dir) {
- resolvedPromise.then(() => {
- const container = this._findContainer(dir.path);
- if (container) {
- container.removeControl(dir.name);
- }
- removeListItem(this._directives, dir);
- });
- }
- /**
- * @description
- * Adds a new `NgModelGroup` directive instance to the form.
- *
- * @param dir The `NgModelGroup` directive instance.
- */
- addFormGroup(dir) {
- resolvedPromise.then(() => {
- const container = this._findContainer(dir.path);
- const group = new FormGroup({});
- setUpFormContainer(group, dir);
- container.registerControl(dir.name, group);
- group.updateValueAndValidity({ emitEvent: false });
- });
- }
- /**
- * @description
- * Removes the `NgModelGroup` directive instance from the form.
- *
- * @param dir The `NgModelGroup` directive instance.
- */
- removeFormGroup(dir) {
- resolvedPromise.then(() => {
- const container = this._findContainer(dir.path);
- if (container) {
- container.removeControl(dir.name);
- }
- });
- }
- /**
- * @description
- * Retrieves the `FormGroup` for a provided `NgModelGroup` directive instance
- *
- * @param dir The `NgModelGroup` directive instance.
- */
- getFormGroup(dir) {
- return this.form.get(dir.path);
- }
- /**
- * Sets the new value for the provided `NgControl` directive.
- *
- * @param dir The `NgControl` directive instance.
- * @param value The new value for the directive's control.
- */
- updateModel(dir, value) {
- resolvedPromise.then(() => {
- const ctrl = this.form.get(dir.path);
- ctrl.setValue(value);
- });
- }
- /**
- * @description
- * Sets the value for this `FormGroup`.
- *
- * @param value The new value
- */
- setValue(value) {
- this.control.setValue(value);
- }
- /**
- * @description
- * Method called when the "submit" event is triggered on the form.
- * Triggers the `ngSubmit` emitter to emit the "submit" event as its payload.
- *
- * @param $event The "submit" event object
- */
- onSubmit($event) {
- this.submitted = true;
- syncPendingControls(this.form, this._directives);
- this.ngSubmit.emit($event);
- return false;
- }
- /**
- * @description
- * Method called when the "reset" event is triggered on the form.
- */
- onReset() {
- this.resetForm();
- }
- /**
- * @description
- * Resets the form to an initial value and resets its submitted status.
- *
- * @param value The new value for the form.
- */
- resetForm(value = undefined) {
- this.form.reset(value);
- this.submitted = false;
- }
- _setUpdateStrategy() {
- if (this.options && this.options.updateOn != null) {
- this.form._updateOn = this.options.updateOn;
- }
- }
- /** @internal */
- _findContainer(path) {
- path.pop();
- return path.length ? this.form.get(path) : this.form;
- }
- }
- NgForm.ɵfac = function NgForm_Factory(t) { return new (t || NgForm)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_ASYNC_VALIDATORS, 10)); };
- NgForm.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgForm, selectors: [["form", 3, "ngNoForm", "", 3, "formGroup", ""], ["ng-form"], ["", "ngForm", ""]], hostBindings: function NgForm_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("submit", function NgForm_submit_HostBindingHandler($event) { return ctx.onSubmit($event); })("reset", function NgForm_reset_HostBindingHandler() { return ctx.onReset(); });
- } }, inputs: { options: ["ngFormOptions", "options"] }, outputs: { ngSubmit: "ngSubmit" }, exportAs: ["ngForm"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([formDirectiveProvider]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]] });
- NgForm.ctorParameters = () => [
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_VALIDATORS,] }] },
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_ASYNC_VALIDATORS,] }] }
- ];
- NgForm.propDecorators = {
- options: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['ngFormOptions',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgForm, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: 'form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]',
- providers: [formDirectiveProvider],
- host: { '(submit)': 'onSubmit($event)', '(reset)': 'onReset()' },
- outputs: ['ngSubmit'],
- exportAs: 'ngForm'
- }]
- }], function () { return [{ type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_VALIDATORS]
- }] }, { type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_ASYNC_VALIDATORS]
- }] }]; }, { options: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['ngFormOptions']
- }] }); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @description
- * A base class for code shared between the `NgModelGroup` and `FormGroupName` directives.
- *
- * @publicApi
- */
- class AbstractFormGroupDirective extends ControlContainer {
- /** @nodoc */
- ngOnInit() {
- this._checkParentType();
- // Register the group with its parent group.
- this.formDirective.addFormGroup(this);
- }
- /** @nodoc */
- ngOnDestroy() {
- if (this.formDirective) {
- // Remove the group from its parent group.
- this.formDirective.removeFormGroup(this);
- }
- }
- /**
- * @description
- * The `FormGroup` bound to this directive.
- */
- get control() {
- return this.formDirective.getFormGroup(this);
- }
- /**
- * @description
- * The path to this group from the top-level directive.
- */
- get path() {
- return controlPath(this.name == null ? this.name : this.name.toString(), this._parent);
- }
- /**
- * @description
- * The top-level directive for this group if present, otherwise null.
- */
- get formDirective() {
- return this._parent ? this._parent.formDirective : null;
- }
- /** @internal */
- _checkParentType() { }
- }
- AbstractFormGroupDirective.ɵfac = function AbstractFormGroupDirective_Factory(t) { return ɵAbstractFormGroupDirective_BaseFactory(t || AbstractFormGroupDirective); };
- AbstractFormGroupDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: AbstractFormGroupDirective, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]] });
- const ɵAbstractFormGroupDirective_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](AbstractFormGroupDirective);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AbstractFormGroupDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"]
- }], null, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class TemplateDrivenErrors {
- static modelParentException() {
- throw new Error(`
- ngModel cannot be used to register form controls with a parent formGroup directive. Try using
- formGroup's partner directive "formControlName" instead. Example:
- ${FormErrorExamples.formControlName}
- Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:
- Example:
- ${FormErrorExamples.ngModelWithFormGroup}`);
- }
- static formGroupNameException() {
- throw new Error(`
- ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.
- Option 1: Use formControlName instead of ngModel (reactive strategy):
- ${FormErrorExamples.formGroupName}
- Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):
- ${FormErrorExamples.ngModelGroup}`);
- }
- static missingNameException() {
- throw new Error(`If ngModel is used within a form tag, either the name attribute must be set or the form
- control must be defined as 'standalone' in ngModelOptions.
- Example 1: <input [(ngModel)]="person.firstName" name="first">
- Example 2: <input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone: true}">`);
- }
- static modelGroupParentException() {
- throw new Error(`
- ngModelGroup cannot be used with a parent formGroup directive.
- Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):
- ${FormErrorExamples.formGroupName}
- Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):
- ${FormErrorExamples.ngModelGroup}`);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const modelGroupProvider = {
- provide: ControlContainer,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgModelGroup)
- };
- /**
- * @description
- * Creates and binds a `FormGroup` instance to a DOM element.
- *
- * This directive can only be used as a child of `NgForm` (within `<form>` tags).
- *
- * Use this directive to validate a sub-group of your form separately from the
- * rest of your form, or if some values in your domain model make more sense
- * to consume together in a nested object.
- *
- * Provide a name for the sub-group and it will become the key
- * for the sub-group in the form's full value. If you need direct access, export the directive into
- * a local template variable using `ngModelGroup` (ex: `#myGroup="ngModelGroup"`).
- *
- * @usageNotes
- *
- * ### Consuming controls in a grouping
- *
- * The following example shows you how to combine controls together in a sub-group
- * of the form.
- *
- * {@example forms/ts/ngModelGroup/ng_model_group_example.ts region='Component'}
- *
- * @ngModule FormsModule
- * @publicApi
- */
- class NgModelGroup extends AbstractFormGroupDirective {
- constructor(parent, validators, asyncValidators) {
- super();
- this._parent = parent;
- this._setValidators(validators);
- this._setAsyncValidators(asyncValidators);
- }
- /** @internal */
- _checkParentType() {
- if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm) &&
- (typeof ngDevMode === 'undefined' || ngDevMode)) {
- TemplateDrivenErrors.modelGroupParentException();
- }
- }
- }
- NgModelGroup.ɵfac = function NgModelGroup_Factory(t) { return new (t || NgModelGroup)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ControlContainer, 5), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_ASYNC_VALIDATORS, 10)); };
- NgModelGroup.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgModelGroup, selectors: [["", "ngModelGroup", ""]], inputs: { name: ["ngModelGroup", "name"] }, exportAs: ["ngModelGroup"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([modelGroupProvider]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]] });
- NgModelGroup.ctorParameters = () => [
- { type: ControlContainer, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"] }] },
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_VALIDATORS,] }] },
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_ASYNC_VALIDATORS,] }] }
- ];
- NgModelGroup.propDecorators = {
- name: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['ngModelGroup',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgModelGroup, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngModelGroup]', providers: [modelGroupProvider], exportAs: 'ngModelGroup' }]
- }], function () { return [{ type: ControlContainer, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
- }] }, { type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_VALIDATORS]
- }] }, { type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_ASYNC_VALIDATORS]
- }] }]; }, { name: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['ngModelGroup']
- }] }); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const formControlBinding = {
- provide: NgControl,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => NgModel)
- };
- const ɵ0$1 = () => Promise.resolve(null);
- /**
- * `ngModel` forces an additional change detection run when its inputs change:
- * E.g.:
- * ```
- * <div>{{myModel.valid}}</div>
- * <input [(ngModel)]="myValue" #myModel="ngModel">
- * ```
- * I.e. `ngModel` can export itself on the element and then be used in the template.
- * Normally, this would result in expressions before the `input` that use the exported directive
- * to have an old value as they have been
- * dirty checked before. As this is a very common case for `ngModel`, we added this second change
- * detection run.
- *
- * Notes:
- * - this is just one extra run no matter how many `ngModel`s have been changed.
- * - this is a general problem when using `exportAs` for directives!
- */
- const resolvedPromise$1 = (ɵ0$1)();
- /**
- * @description
- * Creates a `FormControl` instance from a domain model and binds it
- * to a form control element.
- *
- * The `FormControl` instance tracks the value, user interaction, and
- * validation status of the control and keeps the view synced with the model. If used
- * within a parent form, the directive also registers itself with the form as a child
- * control.
- *
- * This directive is used by itself or as part of a larger form. Use the
- * `ngModel` selector to activate it.
- *
- * It accepts a domain model as an optional `Input`. If you have a one-way binding
- * to `ngModel` with `[]` syntax, changing the domain model's value in the component
- * class sets the value in the view. If you have a two-way binding with `[()]` syntax
- * (also known as 'banana-in-a-box syntax'), the value in the UI always syncs back to
- * the domain model in your class.
- *
- * To inspect the properties of the associated `FormControl` (like the validity state),
- * export the directive into a local template variable using `ngModel` as the key (ex:
- * `#myVar="ngModel"`). You can then access the control using the directive's `control` property.
- * However, the most commonly used properties (like `valid` and `dirty`) also exist on the control
- * for direct access. See a full list of properties directly available in
- * `AbstractControlDirective`.
- *
- * @see `RadioControlValueAccessor`
- * @see `SelectControlValueAccessor`
- *
- * @usageNotes
- *
- * ### Using ngModel on a standalone control
- *
- * The following examples show a simple standalone control using `ngModel`:
- *
- * {@example forms/ts/simpleNgModel/simple_ng_model_example.ts region='Component'}
- *
- * When using the `ngModel` within `<form>` tags, you'll also need to supply a `name` attribute
- * so that the control can be registered with the parent form under that name.
- *
- * In the context of a parent form, it's often unnecessary to include one-way or two-way binding,
- * as the parent form syncs the value for you. You access its properties by exporting it into a
- * local template variable using `ngForm` such as (`#f="ngForm"`). Use the variable where
- * needed on form submission.
- *
- * If you do need to populate initial values into your form, using a one-way binding for
- * `ngModel` tends to be sufficient as long as you use the exported form's value rather
- * than the domain model's value on submit.
- *
- * ### Using ngModel within a form
- *
- * The following example shows controls using `ngModel` within a form:
- *
- * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}
- *
- * ### Using a standalone ngModel within a group
- *
- * The following example shows you how to use a standalone ngModel control
- * within a form. This controls the display of the form, but doesn't contain form data.
- *
- * ```html
- * <form>
- * <input name="login" ngModel placeholder="Login">
- * <input type="checkbox" ngModel [ngModelOptions]="{standalone: true}"> Show more options?
- * </form>
- * <!-- form value: {login: ''} -->
- * ```
- *
- * ### Setting the ngModel `name` attribute through options
- *
- * The following example shows you an alternate way to set the name attribute. Here,
- * an attribute identified as name is used within a custom form control component. To still be able
- * to specify the NgModel's name, you must specify it using the `ngModelOptions` input instead.
- *
- * ```html
- * <form>
- * <my-custom-form-control name="Nancy" ngModel [ngModelOptions]="{name: 'user'}">
- * </my-custom-form-control>
- * </form>
- * <!-- form value: {user: ''} -->
- * ```
- *
- * @ngModule FormsModule
- * @publicApi
- */
- class NgModel extends NgControl {
- constructor(parent, validators, asyncValidators, valueAccessors) {
- super();
- this.control = new FormControl();
- /** @internal */
- this._registered = false;
- /**
- * @description
- * Event emitter for producing the `ngModelChange` event after
- * the view model updates.
- */
- this.update = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this._parent = parent;
- this._setValidators(validators);
- this._setAsyncValidators(asyncValidators);
- this.valueAccessor = selectValueAccessor(this, valueAccessors);
- }
- /** @nodoc */
- ngOnChanges(changes) {
- this._checkForErrors();
- if (!this._registered)
- this._setUpControl();
- if ('isDisabled' in changes) {
- this._updateDisabled(changes);
- }
- if (isPropertyUpdated(changes, this.viewModel)) {
- this._updateValue(this.model);
- this.viewModel = this.model;
- }
- }
- /** @nodoc */
- ngOnDestroy() {
- this.formDirective && this.formDirective.removeControl(this);
- }
- /**
- * @description
- * Returns an array that represents the path from the top-level form to this control.
- * Each index is the string name of the control on that level.
- */
- get path() {
- return this._parent ? controlPath(this.name, this._parent) : [this.name];
- }
- /**
- * @description
- * The top-level directive for this control if present, otherwise null.
- */
- get formDirective() {
- return this._parent ? this._parent.formDirective : null;
- }
- /**
- * @description
- * Sets the new value for the view model and emits an `ngModelChange` event.
- *
- * @param newValue The new value emitted by `ngModelChange`.
- */
- viewToModelUpdate(newValue) {
- this.viewModel = newValue;
- this.update.emit(newValue);
- }
- _setUpControl() {
- this._setUpdateStrategy();
- this._isStandalone() ? this._setUpStandalone() : this.formDirective.addControl(this);
- this._registered = true;
- }
- _setUpdateStrategy() {
- if (this.options && this.options.updateOn != null) {
- this.control._updateOn = this.options.updateOn;
- }
- }
- _isStandalone() {
- return !this._parent || !!(this.options && this.options.standalone);
- }
- _setUpStandalone() {
- setUpControl(this.control, this);
- this.control.updateValueAndValidity({ emitEvent: false });
- }
- _checkForErrors() {
- if (!this._isStandalone()) {
- this._checkParentType();
- }
- this._checkName();
- }
- _checkParentType() {
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
- if (!(this._parent instanceof NgModelGroup) &&
- this._parent instanceof AbstractFormGroupDirective) {
- TemplateDrivenErrors.formGroupNameException();
- }
- else if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {
- TemplateDrivenErrors.modelParentException();
- }
- }
- }
- _checkName() {
- if (this.options && this.options.name)
- this.name = this.options.name;
- if (!this._isStandalone() && !this.name && (typeof ngDevMode === 'undefined' || ngDevMode)) {
- TemplateDrivenErrors.missingNameException();
- }
- }
- _updateValue(value) {
- resolvedPromise$1.then(() => {
- this.control.setValue(value, { emitViewToModelChange: false });
- });
- }
- _updateDisabled(changes) {
- const disabledValue = changes['isDisabled'].currentValue;
- const isDisabled = disabledValue === '' || (disabledValue && disabledValue !== 'false');
- resolvedPromise$1.then(() => {
- if (isDisabled && !this.control.disabled) {
- this.control.disable();
- }
- else if (!isDisabled && this.control.disabled) {
- this.control.enable();
- }
- });
- }
- }
- NgModel.ɵfac = function NgModel_Factory(t) { return new (t || NgModel)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ControlContainer, 9), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_ASYNC_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALUE_ACCESSOR, 10)); };
- NgModel.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgModel, selectors: [["", "ngModel", "", 3, "formControlName", "", 3, "formControl", ""]], inputs: { name: "name", isDisabled: ["disabled", "isDisabled"], model: ["ngModel", "model"], options: ["ngModelOptions", "options"] }, outputs: { update: "ngModelChange" }, exportAs: ["ngModel"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([formControlBinding]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- NgModel.ctorParameters = () => [
- { type: ControlContainer, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"] }] },
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_VALIDATORS,] }] },
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_ASYNC_VALIDATORS,] }] },
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_VALUE_ACCESSOR,] }] }
- ];
- NgModel.propDecorators = {
- name: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- isDisabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['disabled',] }],
- model: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['ngModel',] }],
- options: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['ngModelOptions',] }],
- update: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['ngModelChange',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgModel, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[ngModel]:not([formControlName]):not([formControl])',
- providers: [formControlBinding],
- exportAs: 'ngModel'
- }]
- }], function () { return [{ type: ControlContainer, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
- }] }, { type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_VALIDATORS]
- }] }, { type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_ASYNC_VALIDATORS]
- }] }, { type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_VALUE_ACCESSOR]
- }] }]; }, { update: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['ngModelChange']
- }], name: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], isDisabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['disabled']
- }], model: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['ngModel']
- }], options: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['ngModelOptions']
- }] }); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @description
- *
- * Adds `novalidate` attribute to all forms by default.
- *
- * `novalidate` is used to disable browser's native form validation.
- *
- * If you want to use native validation with Angular forms, just add `ngNativeValidate` attribute:
- *
- * ```
- * <form ngNativeValidate></form>
- * ```
- *
- * @publicApi
- * @ngModule ReactiveFormsModule
- * @ngModule FormsModule
- */
- class ɵNgNoValidate {
- }
- ɵNgNoValidate.ɵfac = function ɵNgNoValidate_Factory(t) { return new (t || ɵNgNoValidate)(); };
- ɵNgNoValidate.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: ɵNgNoValidate, selectors: [["form", 3, "ngNoForm", "", 3, "ngNativeValidate", ""]], hostAttrs: ["novalidate", ""] });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ɵNgNoValidate, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: 'form:not([ngNoForm]):not([ngNativeValidate])',
- host: { 'novalidate': '' }
- }]
- }], null, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Token to provide to turn off the ngModel warning on formControl and formControlName.
- */
- const NG_MODEL_WITH_FORM_CONTROL_WARNING = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('NgModelWithFormControlWarning');
- const formControlBinding$1 = {
- provide: NgControl,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => FormControlDirective)
- };
- /**
- * @description
- * Synchronizes a standalone `FormControl` instance to a form control element.
- *
- * Note that support for using the `ngModel` input property and `ngModelChange` event with reactive
- * form directives was deprecated in Angular v6 and is scheduled for removal in
- * a future version of Angular.
- * For details, see [Deprecated features](guide/deprecations#ngmodel-with-reactive-forms).
- *
- * @see [Reactive Forms Guide](guide/reactive-forms)
- * @see `FormControl`
- * @see `AbstractControl`
- *
- * @usageNotes
- *
- * The following example shows how to register a standalone control and set its value.
- *
- * {@example forms/ts/simpleFormControl/simple_form_control_example.ts region='Component'}
- *
- * @ngModule ReactiveFormsModule
- * @publicApi
- */
- class FormControlDirective extends NgControl {
- constructor(validators, asyncValidators, valueAccessors, _ngModelWarningConfig) {
- super();
- this._ngModelWarningConfig = _ngModelWarningConfig;
- /** @deprecated as of v6 */
- this.update = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * @description
- * Instance property used to track whether an ngModel warning has been sent out for this
- * particular `FormControlDirective` instance. Used to support warning config of "always".
- *
- * @internal
- */
- this._ngModelWarningSent = false;
- this._setValidators(validators);
- this._setAsyncValidators(asyncValidators);
- this.valueAccessor = selectValueAccessor(this, valueAccessors);
- }
- /**
- * @description
- * Triggers a warning in dev mode that this input should not be used with reactive forms.
- */
- set isDisabled(isDisabled) {
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
- ReactiveErrors.disabledAttrWarning();
- }
- }
- /** @nodoc */
- ngOnChanges(changes) {
- if (this._isControlChanged(changes)) {
- setUpControl(this.form, this);
- if (this.control.disabled && this.valueAccessor.setDisabledState) {
- this.valueAccessor.setDisabledState(true);
- }
- this.form.updateValueAndValidity({ emitEvent: false });
- }
- if (isPropertyUpdated(changes, this.viewModel)) {
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
- _ngModelWarning('formControl', FormControlDirective, this, this._ngModelWarningConfig);
- }
- this.form.setValue(this.model);
- this.viewModel = this.model;
- }
- }
- /**
- * @description
- * Returns an array that represents the path from the top-level form to this control.
- * Each index is the string name of the control on that level.
- */
- get path() {
- return [];
- }
- /**
- * @description
- * The `FormControl` bound to this directive.
- */
- get control() {
- return this.form;
- }
- /**
- * @description
- * Sets the new value for the view model and emits an `ngModelChange` event.
- *
- * @param newValue The new value for the view model.
- */
- viewToModelUpdate(newValue) {
- this.viewModel = newValue;
- this.update.emit(newValue);
- }
- _isControlChanged(changes) {
- return changes.hasOwnProperty('form');
- }
- }
- FormControlDirective.ɵfac = function FormControlDirective_Factory(t) { return new (t || FormControlDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_ASYNC_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALUE_ACCESSOR, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_MODEL_WITH_FORM_CONTROL_WARNING, 8)); };
- FormControlDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: FormControlDirective, selectors: [["", "formControl", ""]], inputs: { isDisabled: ["disabled", "isDisabled"], form: ["formControl", "form"], model: ["ngModel", "model"] }, outputs: { update: "ngModelChange" }, exportAs: ["ngForm"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([formControlBinding$1]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- /**
- * @description
- * Static property used to track whether any ngModel warnings have been sent across
- * all instances of FormControlDirective. Used to support warning config of "once".
- *
- * @internal
- */
- FormControlDirective._ngModelWarningSentOnce = false;
- FormControlDirective.ctorParameters = () => [
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_VALIDATORS,] }] },
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_ASYNC_VALIDATORS,] }] },
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_VALUE_ACCESSOR,] }] },
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_MODEL_WITH_FORM_CONTROL_WARNING,] }] }
- ];
- FormControlDirective.propDecorators = {
- form: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['formControl',] }],
- isDisabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['disabled',] }],
- model: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['ngModel',] }],
- update: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['ngModelChange',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FormControlDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[formControl]', providers: [formControlBinding$1], exportAs: 'ngForm' }]
- }], function () { return [{ type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_VALIDATORS]
- }] }, { type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_ASYNC_VALIDATORS]
- }] }, { type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_VALUE_ACCESSOR]
- }] }, { type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_MODEL_WITH_FORM_CONTROL_WARNING]
- }] }]; }, { update: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['ngModelChange']
- }], isDisabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['disabled']
- }], form: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['formControl']
- }], model: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['ngModel']
- }] }); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const formDirectiveProvider$1 = {
- provide: ControlContainer,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => FormGroupDirective)
- };
- /**
- * @description
- *
- * Binds an existing `FormGroup` to a DOM element.
- *
- * This directive accepts an existing `FormGroup` instance. It will then use this
- * `FormGroup` instance to match any child `FormControl`, `FormGroup`,
- * and `FormArray` instances to child `FormControlName`, `FormGroupName`,
- * and `FormArrayName` directives.
- *
- * @see [Reactive Forms Guide](guide/reactive-forms)
- * @see `AbstractControl`
- *
- * ### Register Form Group
- *
- * The following example registers a `FormGroup` with first name and last name controls,
- * and listens for the *ngSubmit* event when the button is clicked.
- *
- * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}
- *
- * @ngModule ReactiveFormsModule
- * @publicApi
- */
- class FormGroupDirective extends ControlContainer {
- constructor(validators, asyncValidators) {
- super();
- this.validators = validators;
- this.asyncValidators = asyncValidators;
- /**
- * @description
- * Reports whether the form submission has been triggered.
- */
- this.submitted = false;
- /**
- * @description
- * Tracks the list of added `FormControlName` instances
- */
- this.directives = [];
- /**
- * @description
- * Tracks the `FormGroup` bound to this directive.
- */
- this.form = null;
- /**
- * @description
- * Emits an event when the form submission has been triggered.
- */
- this.ngSubmit = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this._setValidators(validators);
- this._setAsyncValidators(asyncValidators);
- }
- /** @nodoc */
- ngOnChanges(changes) {
- this._checkFormPresent();
- if (changes.hasOwnProperty('form')) {
- this._updateValidators();
- this._updateDomValue();
- this._updateRegistrations();
- this._oldForm = this.form;
- }
- }
- /**
- * @description
- * Returns this directive's instance.
- */
- get formDirective() {
- return this;
- }
- /**
- * @description
- * Returns the `FormGroup` bound to this directive.
- */
- get control() {
- return this.form;
- }
- /**
- * @description
- * Returns an array representing the path to this group. Because this directive
- * always lives at the top level of a form, it always an empty array.
- */
- get path() {
- return [];
- }
- /**
- * @description
- * Method that sets up the control directive in this group, re-calculates its value
- * and validity, and adds the instance to the internal list of directives.
- *
- * @param dir The `FormControlName` directive instance.
- */
- addControl(dir) {
- const ctrl = this.form.get(dir.path);
- setUpControl(ctrl, dir);
- ctrl.updateValueAndValidity({ emitEvent: false });
- this.directives.push(dir);
- return ctrl;
- }
- /**
- * @description
- * Retrieves the `FormControl` instance from the provided `FormControlName` directive
- *
- * @param dir The `FormControlName` directive instance.
- */
- getControl(dir) {
- return this.form.get(dir.path);
- }
- /**
- * @description
- * Removes the `FormControlName` instance from the internal list of directives
- *
- * @param dir The `FormControlName` directive instance.
- */
- removeControl(dir) {
- removeListItem(this.directives, dir);
- }
- /**
- * Adds a new `FormGroupName` directive instance to the form.
- *
- * @param dir The `FormGroupName` directive instance.
- */
- addFormGroup(dir) {
- const ctrl = this.form.get(dir.path);
- setUpFormContainer(ctrl, dir);
- ctrl.updateValueAndValidity({ emitEvent: false });
- }
- /**
- * No-op method to remove the form group.
- *
- * @param dir The `FormGroupName` directive instance.
- */
- removeFormGroup(dir) { }
- /**
- * @description
- * Retrieves the `FormGroup` for a provided `FormGroupName` directive instance
- *
- * @param dir The `FormGroupName` directive instance.
- */
- getFormGroup(dir) {
- return this.form.get(dir.path);
- }
- /**
- * Adds a new `FormArrayName` directive instance to the form.
- *
- * @param dir The `FormArrayName` directive instance.
- */
- addFormArray(dir) {
- const ctrl = this.form.get(dir.path);
- setUpFormContainer(ctrl, dir);
- ctrl.updateValueAndValidity({ emitEvent: false });
- }
- /**
- * No-op method to remove the form array.
- *
- * @param dir The `FormArrayName` directive instance.
- */
- removeFormArray(dir) { }
- /**
- * @description
- * Retrieves the `FormArray` for a provided `FormArrayName` directive instance.
- *
- * @param dir The `FormArrayName` directive instance.
- */
- getFormArray(dir) {
- return this.form.get(dir.path);
- }
- /**
- * Sets the new value for the provided `FormControlName` directive.
- *
- * @param dir The `FormControlName` directive instance.
- * @param value The new value for the directive's control.
- */
- updateModel(dir, value) {
- const ctrl = this.form.get(dir.path);
- ctrl.setValue(value);
- }
- /**
- * @description
- * Method called with the "submit" event is triggered on the form.
- * Triggers the `ngSubmit` emitter to emit the "submit" event as its payload.
- *
- * @param $event The "submit" event object
- */
- onSubmit($event) {
- this.submitted = true;
- syncPendingControls(this.form, this.directives);
- this.ngSubmit.emit($event);
- return false;
- }
- /**
- * @description
- * Method called when the "reset" event is triggered on the form.
- */
- onReset() {
- this.resetForm();
- }
- /**
- * @description
- * Resets the form to an initial value and resets its submitted status.
- *
- * @param value The new value for the form.
- */
- resetForm(value = undefined) {
- this.form.reset(value);
- this.submitted = false;
- }
- /** @internal */
- _updateDomValue() {
- this.directives.forEach(dir => {
- const newCtrl = this.form.get(dir.path);
- if (dir.control !== newCtrl) {
- // Note: the value of the `dir.control` may not be defined, for example when it's a first
- // `FormControl` that is added to a `FormGroup` instance (via `addControl` call).
- cleanUpControl(dir.control || null, dir);
- if (newCtrl)
- setUpControl(newCtrl, dir);
- dir.control = newCtrl;
- }
- });
- this.form._updateTreeValidity({ emitEvent: false });
- }
- _updateRegistrations() {
- this.form._registerOnCollectionChange(() => this._updateDomValue());
- if (this._oldForm) {
- this._oldForm._registerOnCollectionChange(() => { });
- }
- }
- _updateValidators() {
- setUpValidators(this.form, this, /* handleOnValidatorChange */ false);
- if (this._oldForm) {
- cleanUpValidators(this._oldForm, this, /* handleOnValidatorChange */ false);
- }
- }
- _checkFormPresent() {
- if (!this.form && (typeof ngDevMode === 'undefined' || ngDevMode)) {
- ReactiveErrors.missingFormException();
- }
- }
- }
- FormGroupDirective.ɵfac = function FormGroupDirective_Factory(t) { return new (t || FormGroupDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_ASYNC_VALIDATORS, 10)); };
- FormGroupDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: FormGroupDirective, selectors: [["", "formGroup", ""]], hostBindings: function FormGroupDirective_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("submit", function FormGroupDirective_submit_HostBindingHandler($event) { return ctx.onSubmit($event); })("reset", function FormGroupDirective_reset_HostBindingHandler() { return ctx.onReset(); });
- } }, inputs: { form: ["formGroup", "form"] }, outputs: { ngSubmit: "ngSubmit" }, exportAs: ["ngForm"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([formDirectiveProvider$1]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- FormGroupDirective.ctorParameters = () => [
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_VALIDATORS,] }] },
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_ASYNC_VALIDATORS,] }] }
- ];
- FormGroupDirective.propDecorators = {
- form: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['formGroup',] }],
- ngSubmit: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FormGroupDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[formGroup]',
- providers: [formDirectiveProvider$1],
- host: { '(submit)': 'onSubmit($event)', '(reset)': 'onReset()' },
- exportAs: 'ngForm'
- }]
- }], function () { return [{ type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_VALIDATORS]
- }] }, { type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_ASYNC_VALIDATORS]
- }] }]; }, { form: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['formGroup']
- }], ngSubmit: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }] }); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const formGroupNameProvider = {
- provide: ControlContainer,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => FormGroupName)
- };
- /**
- * @description
- *
- * Syncs a nested `FormGroup` to a DOM element.
- *
- * This directive can only be used with a parent `FormGroupDirective`.
- *
- * It accepts the string name of the nested `FormGroup` to link, and
- * looks for a `FormGroup` registered with that name in the parent
- * `FormGroup` instance you passed into `FormGroupDirective`.
- *
- * Use nested form groups to validate a sub-group of a
- * form separately from the rest or to group the values of certain
- * controls into their own nested object.
- *
- * @see [Reactive Forms Guide](guide/reactive-forms)
- *
- * @usageNotes
- *
- * ### Access the group by name
- *
- * The following example uses the {@link AbstractControl#get get} method to access the
- * associated `FormGroup`
- *
- * ```ts
- * this.form.get('name');
- * ```
- *
- * ### Access individual controls in the group
- *
- * The following example uses the {@link AbstractControl#get get} method to access
- * individual controls within the group using dot syntax.
- *
- * ```ts
- * this.form.get('name.first');
- * ```
- *
- * ### Register a nested `FormGroup`.
- *
- * The following example registers a nested *name* `FormGroup` within an existing `FormGroup`,
- * and provides methods to retrieve the nested `FormGroup` and individual controls.
- *
- * {@example forms/ts/nestedFormGroup/nested_form_group_example.ts region='Component'}
- *
- * @ngModule ReactiveFormsModule
- * @publicApi
- */
- class FormGroupName extends AbstractFormGroupDirective {
- constructor(parent, validators, asyncValidators) {
- super();
- this._parent = parent;
- this._setValidators(validators);
- this._setAsyncValidators(asyncValidators);
- }
- /** @internal */
- _checkParentType() {
- if (_hasInvalidParent(this._parent) && (typeof ngDevMode === 'undefined' || ngDevMode)) {
- ReactiveErrors.groupParentException();
- }
- }
- }
- FormGroupName.ɵfac = function FormGroupName_Factory(t) { return new (t || FormGroupName)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ControlContainer, 13), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_ASYNC_VALIDATORS, 10)); };
- FormGroupName.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: FormGroupName, selectors: [["", "formGroupName", ""]], inputs: { name: ["formGroupName", "name"] }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([formGroupNameProvider]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]] });
- FormGroupName.ctorParameters = () => [
- { type: ControlContainer, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"] }] },
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_VALIDATORS,] }] },
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_ASYNC_VALIDATORS,] }] }
- ];
- FormGroupName.propDecorators = {
- name: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['formGroupName',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FormGroupName, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[formGroupName]', providers: [formGroupNameProvider] }]
- }], function () { return [{ type: ControlContainer, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
- }] }, { type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_VALIDATORS]
- }] }, { type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_ASYNC_VALIDATORS]
- }] }]; }, { name: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['formGroupName']
- }] }); })();
- const formArrayNameProvider = {
- provide: ControlContainer,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => FormArrayName)
- };
- /**
- * @description
- *
- * Syncs a nested `FormArray` to a DOM element.
- *
- * This directive is designed to be used with a parent `FormGroupDirective` (selector:
- * `[formGroup]`).
- *
- * It accepts the string name of the nested `FormArray` you want to link, and
- * will look for a `FormArray` registered with that name in the parent
- * `FormGroup` instance you passed into `FormGroupDirective`.
- *
- * @see [Reactive Forms Guide](guide/reactive-forms)
- * @see `AbstractControl`
- *
- * @usageNotes
- *
- * ### Example
- *
- * {@example forms/ts/nestedFormArray/nested_form_array_example.ts region='Component'}
- *
- * @ngModule ReactiveFormsModule
- * @publicApi
- */
- class FormArrayName extends ControlContainer {
- constructor(parent, validators, asyncValidators) {
- super();
- this._parent = parent;
- this._setValidators(validators);
- this._setAsyncValidators(asyncValidators);
- }
- /**
- * A lifecycle method called when the directive's inputs are initialized. For internal use only.
- * @throws If the directive does not have a valid parent.
- * @nodoc
- */
- ngOnInit() {
- this._checkParentType();
- this.formDirective.addFormArray(this);
- }
- /**
- * A lifecycle method called before the directive's instance is destroyed. For internal use only.
- * @nodoc
- */
- ngOnDestroy() {
- if (this.formDirective) {
- this.formDirective.removeFormArray(this);
- }
- }
- /**
- * @description
- * The `FormArray` bound to this directive.
- */
- get control() {
- return this.formDirective.getFormArray(this);
- }
- /**
- * @description
- * The top-level directive for this group if present, otherwise null.
- */
- get formDirective() {
- return this._parent ? this._parent.formDirective : null;
- }
- /**
- * @description
- * Returns an array that represents the path from the top-level form to this control.
- * Each index is the string name of the control on that level.
- */
- get path() {
- return controlPath(this.name == null ? this.name : this.name.toString(), this._parent);
- }
- _checkParentType() {
- if (_hasInvalidParent(this._parent) && (typeof ngDevMode === 'undefined' || ngDevMode)) {
- ReactiveErrors.arrayParentException();
- }
- }
- }
- FormArrayName.ɵfac = function FormArrayName_Factory(t) { return new (t || FormArrayName)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ControlContainer, 13), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_ASYNC_VALIDATORS, 10)); };
- FormArrayName.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: FormArrayName, selectors: [["", "formArrayName", ""]], inputs: { name: ["formArrayName", "name"] }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([formArrayNameProvider]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]] });
- FormArrayName.ctorParameters = () => [
- { type: ControlContainer, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"] }] },
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_VALIDATORS,] }] },
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_ASYNC_VALIDATORS,] }] }
- ];
- FormArrayName.propDecorators = {
- name: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['formArrayName',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FormArrayName, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[formArrayName]', providers: [formArrayNameProvider] }]
- }], function () { return [{ type: ControlContainer, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
- }] }, { type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_VALIDATORS]
- }] }, { type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_ASYNC_VALIDATORS]
- }] }]; }, { name: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['formArrayName']
- }] }); })();
- function _hasInvalidParent(parent) {
- return !(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) &&
- !(parent instanceof FormArrayName);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const controlNameBinding = {
- provide: NgControl,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => FormControlName)
- };
- /**
- * @description
- * Syncs a `FormControl` in an existing `FormGroup` to a form control
- * element by name.
- *
- * @see [Reactive Forms Guide](guide/reactive-forms)
- * @see `FormControl`
- * @see `AbstractControl`
- *
- * @usageNotes
- *
- * ### Register `FormControl` within a group
- *
- * The following example shows how to register multiple form controls within a form group
- * and set their value.
- *
- * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}
- *
- * To see `formControlName` examples with different form control types, see:
- *
- * * Radio buttons: `RadioControlValueAccessor`
- * * Selects: `SelectControlValueAccessor`
- *
- * ### Use with ngModel is deprecated
- *
- * Support for using the `ngModel` input property and `ngModelChange` event with reactive
- * form directives has been deprecated in Angular v6 and is scheduled for removal in
- * a future version of Angular.
- *
- * For details, see [Deprecated features](guide/deprecations#ngmodel-with-reactive-forms).
- *
- * @ngModule ReactiveFormsModule
- * @publicApi
- */
- class FormControlName extends NgControl {
- constructor(parent, validators, asyncValidators, valueAccessors, _ngModelWarningConfig) {
- super();
- this._ngModelWarningConfig = _ngModelWarningConfig;
- this._added = false;
- /** @deprecated as of v6 */
- this.update = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * @description
- * Instance property used to track whether an ngModel warning has been sent out for this
- * particular FormControlName instance. Used to support warning config of "always".
- *
- * @internal
- */
- this._ngModelWarningSent = false;
- this._parent = parent;
- this._setValidators(validators);
- this._setAsyncValidators(asyncValidators);
- this.valueAccessor = selectValueAccessor(this, valueAccessors);
- }
- /**
- * @description
- * Triggers a warning in dev mode that this input should not be used with reactive forms.
- */
- set isDisabled(isDisabled) {
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
- ReactiveErrors.disabledAttrWarning();
- }
- }
- /** @nodoc */
- ngOnChanges(changes) {
- if (!this._added)
- this._setUpControl();
- if (isPropertyUpdated(changes, this.viewModel)) {
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
- _ngModelWarning('formControlName', FormControlName, this, this._ngModelWarningConfig);
- }
- this.viewModel = this.model;
- this.formDirective.updateModel(this, this.model);
- }
- }
- /** @nodoc */
- ngOnDestroy() {
- if (this.formDirective) {
- this.formDirective.removeControl(this);
- }
- }
- /**
- * @description
- * Sets the new value for the view model and emits an `ngModelChange` event.
- *
- * @param newValue The new value for the view model.
- */
- viewToModelUpdate(newValue) {
- this.viewModel = newValue;
- this.update.emit(newValue);
- }
- /**
- * @description
- * Returns an array that represents the path from the top-level form to this control.
- * Each index is the string name of the control on that level.
- */
- get path() {
- return controlPath(this.name == null ? this.name : this.name.toString(), this._parent);
- }
- /**
- * @description
- * The top-level directive for this group if present, otherwise null.
- */
- get formDirective() {
- return this._parent ? this._parent.formDirective : null;
- }
- _checkParentType() {
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
- if (!(this._parent instanceof FormGroupName) &&
- this._parent instanceof AbstractFormGroupDirective) {
- ReactiveErrors.ngModelGroupException();
- }
- else if (!(this._parent instanceof FormGroupName) &&
- !(this._parent instanceof FormGroupDirective) &&
- !(this._parent instanceof FormArrayName)) {
- ReactiveErrors.controlParentException();
- }
- }
- }
- _setUpControl() {
- this._checkParentType();
- this.control = this.formDirective.addControl(this);
- if (this.control.disabled && this.valueAccessor.setDisabledState) {
- this.valueAccessor.setDisabledState(true);
- }
- this._added = true;
- }
- }
- FormControlName.ɵfac = function FormControlName_Factory(t) { return new (t || FormControlName)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ControlContainer, 13), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_ASYNC_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALUE_ACCESSOR, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_MODEL_WITH_FORM_CONTROL_WARNING, 8)); };
- FormControlName.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: FormControlName, selectors: [["", "formControlName", ""]], inputs: { isDisabled: ["disabled", "isDisabled"], name: ["formControlName", "name"], model: ["ngModel", "model"] }, outputs: { update: "ngModelChange" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([controlNameBinding]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- /**
- * @description
- * Static property used to track whether any ngModel warnings have been sent across
- * all instances of FormControlName. Used to support warning config of "once".
- *
- * @internal
- */
- FormControlName._ngModelWarningSentOnce = false;
- FormControlName.ctorParameters = () => [
- { type: ControlContainer, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"] }] },
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_VALIDATORS,] }] },
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_ASYNC_VALIDATORS,] }] },
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_VALUE_ACCESSOR,] }] },
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [NG_MODEL_WITH_FORM_CONTROL_WARNING,] }] }
- ];
- FormControlName.propDecorators = {
- name: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['formControlName',] }],
- isDisabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['disabled',] }],
- model: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['ngModel',] }],
- update: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['ngModelChange',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FormControlName, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[formControlName]', providers: [controlNameBinding] }]
- }], function () { return [{ type: ControlContainer, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
- }] }, { type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_VALIDATORS]
- }] }, { type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_ASYNC_VALIDATORS]
- }] }, { type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_VALUE_ACCESSOR]
- }] }, { type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [NG_MODEL_WITH_FORM_CONTROL_WARNING]
- }] }]; }, { update: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['ngModelChange']
- }], isDisabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['disabled']
- }], name: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['formControlName']
- }], model: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['ngModel']
- }] }); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @description
- * Provider which adds `RequiredValidator` to the `NG_VALIDATORS` multi-provider list.
- */
- const REQUIRED_VALIDATOR = {
- provide: NG_VALIDATORS,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => RequiredValidator),
- multi: true
- };
- /**
- * @description
- * Provider which adds `CheckboxRequiredValidator` to the `NG_VALIDATORS` multi-provider list.
- */
- const CHECKBOX_REQUIRED_VALIDATOR = {
- provide: NG_VALIDATORS,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => CheckboxRequiredValidator),
- multi: true
- };
- /**
- * @description
- * A directive that adds the `required` validator to any controls marked with the
- * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
- *
- * @see [Form Validation](guide/form-validation)
- *
- * @usageNotes
- *
- * ### Adding a required validator using template-driven forms
- *
- * ```
- * <input name="fullName" ngModel required>
- * ```
- *
- * @ngModule FormsModule
- * @ngModule ReactiveFormsModule
- * @publicApi
- */
- class RequiredValidator {
- constructor() {
- this._required = false;
- }
- /**
- * @description
- * Tracks changes to the required attribute bound to this directive.
- */
- get required() {
- return this._required;
- }
- set required(value) {
- this._required = value != null && value !== false && `${value}` !== 'false';
- if (this._onChange)
- this._onChange();
- }
- /**
- * Method that validates whether the control is empty.
- * Returns the validation result if enabled, otherwise null.
- * @nodoc
- */
- validate(control) {
- return this.required ? Validators.required(control) : null;
- }
- /**
- * Registers a callback function to call when the validator inputs change.
- * @nodoc
- */
- registerOnValidatorChange(fn) {
- this._onChange = fn;
- }
- }
- RequiredValidator.ɵfac = function RequiredValidator_Factory(t) { return new (t || RequiredValidator)(); };
- RequiredValidator.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: RequiredValidator, selectors: [["", "required", "", "formControlName", "", 3, "type", "checkbox"], ["", "required", "", "formControl", "", 3, "type", "checkbox"], ["", "required", "", "ngModel", "", 3, "type", "checkbox"]], hostVars: 1, hostBindings: function RequiredValidator_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("required", ctx.required ? "" : null);
- } }, inputs: { required: "required" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([REQUIRED_VALIDATOR])] });
- RequiredValidator.propDecorators = {
- required: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](RequiredValidator, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: ':not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]',
- providers: [REQUIRED_VALIDATOR],
- host: { '[attr.required]': 'required ? "" : null' }
- }]
- }], function () { return []; }, { required: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * A Directive that adds the `required` validator to checkbox controls marked with the
- * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
- *
- * @see [Form Validation](guide/form-validation)
- *
- * @usageNotes
- *
- * ### Adding a required checkbox validator using template-driven forms
- *
- * The following example shows how to add a checkbox required validator to an input attached to an
- * ngModel binding.
- *
- * ```
- * <input type="checkbox" name="active" ngModel required>
- * ```
- *
- * @publicApi
- * @ngModule FormsModule
- * @ngModule ReactiveFormsModule
- */
- class CheckboxRequiredValidator extends RequiredValidator {
- /**
- * Method that validates whether or not the checkbox has been checked.
- * Returns the validation result if enabled, otherwise null.
- * @nodoc
- */
- validate(control) {
- return this.required ? Validators.requiredTrue(control) : null;
- }
- }
- CheckboxRequiredValidator.ɵfac = function CheckboxRequiredValidator_Factory(t) { return ɵCheckboxRequiredValidator_BaseFactory(t || CheckboxRequiredValidator); };
- CheckboxRequiredValidator.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: CheckboxRequiredValidator, selectors: [["input", "type", "checkbox", "required", "", "formControlName", ""], ["input", "type", "checkbox", "required", "", "formControl", ""], ["input", "type", "checkbox", "required", "", "ngModel", ""]], hostVars: 1, hostBindings: function CheckboxRequiredValidator_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("required", ctx.required ? "" : null);
- } }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([CHECKBOX_REQUIRED_VALIDATOR]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]] });
- const ɵCheckboxRequiredValidator_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](CheckboxRequiredValidator);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CheckboxRequiredValidator, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: 'input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]',
- providers: [CHECKBOX_REQUIRED_VALIDATOR],
- host: { '[attr.required]': 'required ? "" : null' }
- }]
- }], null, null); })();
- /**
- * @description
- * Provider which adds `EmailValidator` to the `NG_VALIDATORS` multi-provider list.
- */
- const EMAIL_VALIDATOR = {
- provide: NG_VALIDATORS,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => EmailValidator),
- multi: true
- };
- /**
- * A directive that adds the `email` validator to controls marked with the
- * `email` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
- *
- * @see [Form Validation](guide/form-validation)
- *
- * @usageNotes
- *
- * ### Adding an email validator
- *
- * The following example shows how to add an email validator to an input attached to an ngModel
- * binding.
- *
- * ```
- * <input type="email" name="email" ngModel email>
- * <input type="email" name="email" ngModel email="true">
- * <input type="email" name="email" ngModel [email]="true">
- * ```
- *
- * @publicApi
- * @ngModule FormsModule
- * @ngModule ReactiveFormsModule
- */
- class EmailValidator {
- constructor() {
- this._enabled = false;
- }
- /**
- * @description
- * Tracks changes to the email attribute bound to this directive.
- */
- set email(value) {
- this._enabled = value === '' || value === true || value === 'true';
- if (this._onChange)
- this._onChange();
- }
- /**
- * Method that validates whether an email address is valid.
- * Returns the validation result if enabled, otherwise null.
- * @nodoc
- */
- validate(control) {
- return this._enabled ? Validators.email(control) : null;
- }
- /**
- * Registers a callback function to call when the validator inputs change.
- * @nodoc
- */
- registerOnValidatorChange(fn) {
- this._onChange = fn;
- }
- }
- EmailValidator.ɵfac = function EmailValidator_Factory(t) { return new (t || EmailValidator)(); };
- EmailValidator.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: EmailValidator, selectors: [["", "email", "", "formControlName", ""], ["", "email", "", "formControl", ""], ["", "email", "", "ngModel", ""]], inputs: { email: "email" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([EMAIL_VALIDATOR])] });
- EmailValidator.propDecorators = {
- email: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](EmailValidator, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[email][formControlName],[email][formControl],[email][ngModel]',
- providers: [EMAIL_VALIDATOR]
- }]
- }], function () { return []; }, { email: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * @description
- * Provider which adds `MinLengthValidator` to the `NG_VALIDATORS` multi-provider list.
- */
- const MIN_LENGTH_VALIDATOR = {
- provide: NG_VALIDATORS,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => MinLengthValidator),
- multi: true
- };
- /**
- * A directive that adds minimum length validation to controls marked with the
- * `minlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
- *
- * @see [Form Validation](guide/form-validation)
- *
- * @usageNotes
- *
- * ### Adding a minimum length validator
- *
- * The following example shows how to add a minimum length validator to an input attached to an
- * ngModel binding.
- *
- * ```html
- * <input name="firstName" ngModel minlength="4">
- * ```
- *
- * @ngModule ReactiveFormsModule
- * @ngModule FormsModule
- * @publicApi
- */
- class MinLengthValidator {
- constructor() {
- this._validator = Validators.nullValidator;
- }
- /** @nodoc */
- ngOnChanges(changes) {
- if ('minlength' in changes) {
- this._createValidator();
- if (this._onChange)
- this._onChange();
- }
- }
- /**
- * Method that validates whether the value meets a minimum length requirement.
- * Returns the validation result if enabled, otherwise null.
- * @nodoc
- */
- validate(control) {
- return this.minlength == null ? null : this._validator(control);
- }
- /**
- * Registers a callback function to call when the validator inputs change.
- * @nodoc
- */
- registerOnValidatorChange(fn) {
- this._onChange = fn;
- }
- _createValidator() {
- this._validator = Validators.minLength(typeof this.minlength === 'number' ? this.minlength : parseInt(this.minlength, 10));
- }
- }
- MinLengthValidator.ɵfac = function MinLengthValidator_Factory(t) { return new (t || MinLengthValidator)(); };
- MinLengthValidator.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: MinLengthValidator, selectors: [["", "minlength", "", "formControlName", ""], ["", "minlength", "", "formControl", ""], ["", "minlength", "", "ngModel", ""]], hostVars: 1, hostBindings: function MinLengthValidator_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("minlength", ctx.minlength ? ctx.minlength : null);
- } }, inputs: { minlength: "minlength" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([MIN_LENGTH_VALIDATOR]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- MinLengthValidator.propDecorators = {
- minlength: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MinLengthValidator, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[minlength][formControlName],[minlength][formControl],[minlength][ngModel]',
- providers: [MIN_LENGTH_VALIDATOR],
- host: { '[attr.minlength]': 'minlength ? minlength : null' }
- }]
- }], function () { return []; }, { minlength: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * @description
- * Provider which adds `MaxLengthValidator` to the `NG_VALIDATORS` multi-provider list.
- */
- const MAX_LENGTH_VALIDATOR = {
- provide: NG_VALIDATORS,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => MaxLengthValidator),
- multi: true
- };
- /**
- * A directive that adds max length validation to controls marked with the
- * `maxlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
- *
- * @see [Form Validation](guide/form-validation)
- *
- * @usageNotes
- *
- * ### Adding a maximum length validator
- *
- * The following example shows how to add a maximum length validator to an input attached to an
- * ngModel binding.
- *
- * ```html
- * <input name="firstName" ngModel maxlength="25">
- * ```
- *
- * @ngModule ReactiveFormsModule
- * @ngModule FormsModule
- * @publicApi
- */
- class MaxLengthValidator {
- constructor() {
- this._validator = Validators.nullValidator;
- }
- /** @nodoc */
- ngOnChanges(changes) {
- if ('maxlength' in changes) {
- this._createValidator();
- if (this._onChange)
- this._onChange();
- }
- }
- /**
- * Method that validates whether the value exceeds the maximum length requirement.
- * @nodoc
- */
- validate(control) {
- return this.maxlength != null ? this._validator(control) : null;
- }
- /**
- * Registers a callback function to call when the validator inputs change.
- * @nodoc
- */
- registerOnValidatorChange(fn) {
- this._onChange = fn;
- }
- _createValidator() {
- this._validator = Validators.maxLength(typeof this.maxlength === 'number' ? this.maxlength : parseInt(this.maxlength, 10));
- }
- }
- MaxLengthValidator.ɵfac = function MaxLengthValidator_Factory(t) { return new (t || MaxLengthValidator)(); };
- MaxLengthValidator.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: MaxLengthValidator, selectors: [["", "maxlength", "", "formControlName", ""], ["", "maxlength", "", "formControl", ""], ["", "maxlength", "", "ngModel", ""]], hostVars: 1, hostBindings: function MaxLengthValidator_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("maxlength", ctx.maxlength ? ctx.maxlength : null);
- } }, inputs: { maxlength: "maxlength" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([MAX_LENGTH_VALIDATOR]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- MaxLengthValidator.propDecorators = {
- maxlength: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MaxLengthValidator, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]',
- providers: [MAX_LENGTH_VALIDATOR],
- host: { '[attr.maxlength]': 'maxlength ? maxlength : null' }
- }]
- }], function () { return []; }, { maxlength: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * @description
- * Provider which adds `PatternValidator` to the `NG_VALIDATORS` multi-provider list.
- */
- const PATTERN_VALIDATOR = {
- provide: NG_VALIDATORS,
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(() => PatternValidator),
- multi: true
- };
- /**
- * @description
- * A directive that adds regex pattern validation to controls marked with the
- * `pattern` attribute. The regex must match the entire control value.
- * The directive is provided with the `NG_VALIDATORS` multi-provider list.
- *
- * @see [Form Validation](guide/form-validation)
- *
- * @usageNotes
- *
- * ### Adding a pattern validator
- *
- * The following example shows how to add a pattern validator to an input attached to an
- * ngModel binding.
- *
- * ```html
- * <input name="firstName" ngModel pattern="[a-zA-Z ]*">
- * ```
- *
- * @ngModule ReactiveFormsModule
- * @ngModule FormsModule
- * @publicApi
- */
- class PatternValidator {
- constructor() {
- this._validator = Validators.nullValidator;
- }
- /** @nodoc */
- ngOnChanges(changes) {
- if ('pattern' in changes) {
- this._createValidator();
- if (this._onChange)
- this._onChange();
- }
- }
- /**
- * Method that validates whether the value matches the the pattern requirement.
- * @nodoc
- */
- validate(control) {
- return this._validator(control);
- }
- /**
- * Registers a callback function to call when the validator inputs change.
- * @nodoc
- */
- registerOnValidatorChange(fn) {
- this._onChange = fn;
- }
- _createValidator() {
- this._validator = Validators.pattern(this.pattern);
- }
- }
- PatternValidator.ɵfac = function PatternValidator_Factory(t) { return new (t || PatternValidator)(); };
- PatternValidator.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: PatternValidator, selectors: [["", "pattern", "", "formControlName", ""], ["", "pattern", "", "formControl", ""], ["", "pattern", "", "ngModel", ""]], hostVars: 1, hostBindings: function PatternValidator_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("pattern", ctx.pattern ? ctx.pattern : null);
- } }, inputs: { pattern: "pattern" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([PATTERN_VALIDATOR]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- PatternValidator.propDecorators = {
- pattern: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PatternValidator, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[pattern][formControlName],[pattern][formControl],[pattern][ngModel]',
- providers: [PATTERN_VALIDATOR],
- host: { '[attr.pattern]': 'pattern ? pattern : null' }
- }]
- }], function () { return []; }, { pattern: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const SHARED_FORM_DIRECTIVES = [
- ɵNgNoValidate,
- NgSelectOption,
- ɵNgSelectMultipleOption,
- DefaultValueAccessor,
- NumberValueAccessor,
- RangeValueAccessor,
- CheckboxControlValueAccessor,
- SelectControlValueAccessor,
- SelectMultipleControlValueAccessor,
- RadioControlValueAccessor,
- NgControlStatus,
- NgControlStatusGroup,
- RequiredValidator,
- MinLengthValidator,
- MaxLengthValidator,
- PatternValidator,
- CheckboxRequiredValidator,
- EmailValidator,
- ];
- const TEMPLATE_DRIVEN_DIRECTIVES = [NgModel, NgModelGroup, NgForm];
- const REACTIVE_DRIVEN_DIRECTIVES = [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName];
- /**
- * Internal module used for sharing directives between FormsModule and ReactiveFormsModule
- */
- class ɵInternalFormsSharedModule {
- }
- ɵInternalFormsSharedModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: ɵInternalFormsSharedModule });
- ɵInternalFormsSharedModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function ɵInternalFormsSharedModule_Factory(t) { return new (t || ɵInternalFormsSharedModule)(); } });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](ɵInternalFormsSharedModule, { declarations: [ɵNgNoValidate, NgSelectOption, ɵNgSelectMultipleOption, DefaultValueAccessor, NumberValueAccessor, RangeValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, SelectMultipleControlValueAccessor, RadioControlValueAccessor, NgControlStatus, NgControlStatusGroup, RequiredValidator, MinLengthValidator, MaxLengthValidator, PatternValidator, CheckboxRequiredValidator, EmailValidator], exports: [ɵNgNoValidate, NgSelectOption, ɵNgSelectMultipleOption, DefaultValueAccessor, NumberValueAccessor, RangeValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, SelectMultipleControlValueAccessor, RadioControlValueAccessor, NgControlStatus, NgControlStatusGroup, RequiredValidator, MinLengthValidator, MaxLengthValidator, PatternValidator, CheckboxRequiredValidator, EmailValidator] }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ɵInternalFormsSharedModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- declarations: SHARED_FORM_DIRECTIVES,
- exports: SHARED_FORM_DIRECTIVES
- }]
- }], null, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function isAbstractControlOptions(options) {
- return options.asyncValidators !== undefined ||
- options.validators !== undefined ||
- options.updateOn !== undefined;
- }
- /**
- * @description
- * Creates an `AbstractControl` from a user-specified configuration.
- *
- * The `FormBuilder` provides syntactic sugar that shortens creating instances of a `FormControl`,
- * `FormGroup`, or `FormArray`. It reduces the amount of boilerplate needed to build complex
- * forms.
- *
- * @see [Reactive Forms Guide](/guide/reactive-forms)
- *
- * @publicApi
- */
- class FormBuilder {
- group(controlsConfig, options = null) {
- const controls = this._reduceControls(controlsConfig);
- let validators = null;
- let asyncValidators = null;
- let updateOn = undefined;
- if (options != null) {
- if (isAbstractControlOptions(options)) {
- // `options` are `AbstractControlOptions`
- validators = options.validators != null ? options.validators : null;
- asyncValidators = options.asyncValidators != null ? options.asyncValidators : null;
- updateOn = options.updateOn != null ? options.updateOn : undefined;
- }
- else {
- // `options` are legacy form group options
- validators = options['validator'] != null ? options['validator'] : null;
- asyncValidators = options['asyncValidator'] != null ? options['asyncValidator'] : null;
- }
- }
- return new FormGroup(controls, { asyncValidators, updateOn, validators });
- }
- /**
- * @description
- * Construct a new `FormControl` with the given state, validators and options.
- *
- * @param formState Initializes the control with an initial state value, or
- * with an object that contains both a value and a disabled status.
- *
- * @param validatorOrOpts A synchronous validator function, or an array of
- * such functions, or an `AbstractControlOptions` object that contains
- * validation functions and a validation trigger.
- *
- * @param asyncValidator A single async validator or array of async validator
- * functions.
- *
- * @usageNotes
- *
- * ### Initialize a control as disabled
- *
- * The following example returns a control with an initial value in a disabled state.
- *
- * <code-example path="forms/ts/formBuilder/form_builder_example.ts" region="disabled-control">
- * </code-example>
- */
- control(formState, validatorOrOpts, asyncValidator) {
- return new FormControl(formState, validatorOrOpts, asyncValidator);
- }
- /**
- * Constructs a new `FormArray` from the given array of configurations,
- * validators and options.
- *
- * @param controlsConfig An array of child controls or control configs. Each
- * child control is given an index when it is registered.
- *
- * @param validatorOrOpts A synchronous validator function, or an array of
- * such functions, or an `AbstractControlOptions` object that contains
- * validation functions and a validation trigger.
- *
- * @param asyncValidator A single async validator or array of async validator
- * functions.
- */
- array(controlsConfig, validatorOrOpts, asyncValidator) {
- const controls = controlsConfig.map(c => this._createControl(c));
- return new FormArray(controls, validatorOrOpts, asyncValidator);
- }
- /** @internal */
- _reduceControls(controlsConfig) {
- const controls = {};
- Object.keys(controlsConfig).forEach(controlName => {
- controls[controlName] = this._createControl(controlsConfig[controlName]);
- });
- return controls;
- }
- /** @internal */
- _createControl(controlConfig) {
- if (controlConfig instanceof FormControl || controlConfig instanceof FormGroup ||
- controlConfig instanceof FormArray) {
- return controlConfig;
- }
- else if (Array.isArray(controlConfig)) {
- const value = controlConfig[0];
- const validator = controlConfig.length > 1 ? controlConfig[1] : null;
- const asyncValidator = controlConfig.length > 2 ? controlConfig[2] : null;
- return this.control(value, validator, asyncValidator);
- }
- else {
- return this.control(controlConfig);
- }
- }
- }
- FormBuilder.ɵfac = function FormBuilder_Factory(t) { return new (t || FormBuilder)(); };
- FormBuilder.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: FormBuilder, factory: FormBuilder.ɵfac });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FormBuilder, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @publicApi
- */
- const VERSION = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["Version"]('11.0.4');
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Exports the required providers and directives for template-driven forms,
- * making them available for import by NgModules that import this module.
- *
- * @see [Forms Overview](/guide/forms-overview)
- * @see [Template-driven Forms Guide](/guide/forms)
- *
- * @publicApi
- */
- class FormsModule {
- }
- FormsModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: FormsModule });
- FormsModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function FormsModule_Factory(t) { return new (t || FormsModule)(); }, providers: [RadioControlRegistry], imports: [ɵInternalFormsSharedModule] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](FormsModule, { declarations: [NgModel, NgModelGroup, NgForm], exports: [ɵInternalFormsSharedModule, NgModel, NgModelGroup, NgForm] }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FormsModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- declarations: TEMPLATE_DRIVEN_DIRECTIVES,
- providers: [RadioControlRegistry],
- exports: [ɵInternalFormsSharedModule, TEMPLATE_DRIVEN_DIRECTIVES]
- }]
- }], null, null); })();
- /**
- * Exports the required infrastructure and directives for reactive forms,
- * making them available for import by NgModules that import this module.
- *
- * @see [Forms Overview](guide/forms-overview)
- * @see [Reactive Forms Guide](guide/reactive-forms)
- *
- * @publicApi
- */
- class ReactiveFormsModule {
- /**
- * @description
- * Provides options for configuring the reactive forms module.
- *
- * @param opts An object of configuration options
- * * `warnOnNgModelWithFormControl` Configures when to emit a warning when an `ngModel`
- * binding is used with reactive form directives.
- */
- static withConfig(opts) {
- return {
- ngModule: ReactiveFormsModule,
- providers: [
- { provide: NG_MODEL_WITH_FORM_CONTROL_WARNING, useValue: opts.warnOnNgModelWithFormControl }
- ]
- };
- }
- }
- ReactiveFormsModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: ReactiveFormsModule });
- ReactiveFormsModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function ReactiveFormsModule_Factory(t) { return new (t || ReactiveFormsModule)(); }, providers: [FormBuilder, RadioControlRegistry], imports: [ɵInternalFormsSharedModule] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](ReactiveFormsModule, { declarations: [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName], exports: [ɵInternalFormsSharedModule, FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName] }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ReactiveFormsModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- declarations: [REACTIVE_DRIVEN_DIRECTIVES],
- providers: [FormBuilder, RadioControlRegistry],
- exports: [ɵInternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES]
- }]
- }], null, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // This file only reexports content of the `src` folder. Keep it that way.
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=forms.js.map
- /***/ }),
- /***/ "3UWI":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/auditTime.js ***!
- \********************************************************************/
- /*! exports provided: auditTime */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "auditTime", function() { return auditTime; });
- /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scheduler/async */ "D0XW");
- /* harmony import */ var _audit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./audit */ "tnsW");
- /* harmony import */ var _observable_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../observable/timer */ "PqYM");
- function auditTime(duration, scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"]) {
- return Object(_audit__WEBPACK_IMPORTED_MODULE_1__["audit"])(() => Object(_observable_timer__WEBPACK_IMPORTED_MODULE_2__["timer"])(duration, scheduler));
- }
- //# sourceMappingURL=auditTime.js.map
- /***/ }),
- /***/ "4A3s":
- /*!*************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/ignoreElements.js ***!
- \*************************************************************************/
- /*! exports provided: ignoreElements */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ignoreElements", function() { return ignoreElements; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function ignoreElements() {
- return function ignoreElementsOperatorFunction(source) {
- return source.lift(new IgnoreElementsOperator());
- };
- }
- class IgnoreElementsOperator {
- call(subscriber, source) {
- return source.subscribe(new IgnoreElementsSubscriber(subscriber));
- }
- }
- class IgnoreElementsSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- _next(unused) {
- }
- }
- //# sourceMappingURL=ignoreElements.js.map
- /***/ }),
- /***/ "4I5i":
- /*!*****************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/ArgumentOutOfRangeError.js ***!
- \*****************************************************************************/
- /*! exports provided: ArgumentOutOfRangeError */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ArgumentOutOfRangeError", function() { return ArgumentOutOfRangeError; });
- const ArgumentOutOfRangeErrorImpl = (() => {
- function ArgumentOutOfRangeErrorImpl() {
- Error.call(this);
- this.message = 'argument out of range';
- this.name = 'ArgumentOutOfRangeError';
- return this;
- }
- ArgumentOutOfRangeErrorImpl.prototype = Object.create(Error.prototype);
- return ArgumentOutOfRangeErrorImpl;
- })();
- const ArgumentOutOfRangeError = ArgumentOutOfRangeErrorImpl;
- //# sourceMappingURL=ArgumentOutOfRangeError.js.map
- /***/ }),
- /***/ "4O5X":
- /*!****************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/bindNodeCallback.js ***!
- \****************************************************************************/
- /*! exports provided: bindNodeCallback */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bindNodeCallback", function() { return bindNodeCallback; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../AsyncSubject */ "NHP+");
- /* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../operators/map */ "lJxs");
- /* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/canReportError */ "8Qeq");
- /* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/isScheduler */ "z+Ro");
- /* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/isArray */ "DH7j");
- function bindNodeCallback(callbackFunc, resultSelector, scheduler) {
- if (resultSelector) {
- if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_4__["isScheduler"])(resultSelector)) {
- scheduler = resultSelector;
- }
- else {
- return (...args) => bindNodeCallback(callbackFunc, scheduler)(...args).pipe(Object(_operators_map__WEBPACK_IMPORTED_MODULE_2__["map"])(args => Object(_util_isArray__WEBPACK_IMPORTED_MODULE_5__["isArray"])(args) ? resultSelector(...args) : resultSelector(args)));
- }
- }
- return function (...args) {
- const params = {
- subject: undefined,
- args,
- callbackFunc,
- scheduler,
- context: this,
- };
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- const { context } = params;
- let { subject } = params;
- if (!scheduler) {
- if (!subject) {
- subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
- const handler = (...innerArgs) => {
- const err = innerArgs.shift();
- if (err) {
- subject.error(err);
- return;
- }
- subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
- subject.complete();
- };
- try {
- callbackFunc.apply(context, [...args, handler]);
- }
- catch (err) {
- if (Object(_util_canReportError__WEBPACK_IMPORTED_MODULE_3__["canReportError"])(subject)) {
- subject.error(err);
- }
- else {
- console.warn(err);
- }
- }
- }
- return subject.subscribe(subscriber);
- }
- else {
- return scheduler.schedule(dispatch, 0, { params, subscriber, context });
- }
- });
- };
- }
- function dispatch(state) {
- const { params, subscriber, context } = state;
- const { callbackFunc, args, scheduler } = params;
- let subject = params.subject;
- if (!subject) {
- subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
- const handler = (...innerArgs) => {
- const err = innerArgs.shift();
- if (err) {
- this.add(scheduler.schedule(dispatchError, 0, { err, subject }));
- }
- else {
- const value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
- this.add(scheduler.schedule(dispatchNext, 0, { value, subject }));
- }
- };
- try {
- callbackFunc.apply(context, [...args, handler]);
- }
- catch (err) {
- this.add(scheduler.schedule(dispatchError, 0, { err, subject }));
- }
- }
- this.add(subject.subscribe(subscriber));
- }
- function dispatchNext(arg) {
- const { value, subject } = arg;
- subject.next(value);
- subject.complete();
- }
- function dispatchError(arg) {
- const { err, subject } = arg;
- subject.error(err);
- }
- //# sourceMappingURL=bindNodeCallback.js.map
- /***/ }),
- /***/ "4f8F":
- /*!***************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/race.js ***!
- \***************************************************************/
- /*! exports provided: race */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "race", function() { return race; });
- /* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/isArray */ "DH7j");
- /* harmony import */ var _observable_race__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../observable/race */ "Nv8m");
- function race(...observables) {
- return function raceOperatorFunction(source) {
- if (observables.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(observables[0])) {
- observables = observables[0];
- }
- return source.lift.call(Object(_observable_race__WEBPACK_IMPORTED_MODULE_1__["race"])(source, ...observables));
- };
- }
- //# sourceMappingURL=race.js.map
- /***/ }),
- /***/ "4hIw":
- /*!***********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/timeInterval.js ***!
- \***********************************************************************/
- /*! exports provided: timeInterval, TimeInterval */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeInterval", function() { return timeInterval; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TimeInterval", function() { return TimeInterval; });
- /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scheduler/async */ "D0XW");
- /* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./scan */ "Kqap");
- /* harmony import */ var _observable_defer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../observable/defer */ "NXyV");
- /* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./map */ "lJxs");
- function timeInterval(scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"]) {
- return (source) => Object(_observable_defer__WEBPACK_IMPORTED_MODULE_2__["defer"])(() => {
- return source.pipe(Object(_scan__WEBPACK_IMPORTED_MODULE_1__["scan"])(({ current }, value) => ({ value, current: scheduler.now(), last: current }), { current: scheduler.now(), value: undefined, last: undefined }), Object(_map__WEBPACK_IMPORTED_MODULE_3__["map"])(({ current, last, value }) => new TimeInterval(value, current - last)));
- });
- }
- class TimeInterval {
- constructor(value, interval) {
- this.value = value;
- this.interval = interval;
- }
- }
- //# sourceMappingURL=timeInterval.js.map
- /***/ }),
- /***/ "4yVj":
- /*!**************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduled/schedulePromise.js ***!
- \**************************************************************************/
- /*! exports provided: schedulePromise */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "schedulePromise", function() { return schedulePromise; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Subscription */ "quSY");
- function schedulePromise(input, scheduler) {
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- const sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
- sub.add(scheduler.schedule(() => input.then(value => {
- sub.add(scheduler.schedule(() => {
- subscriber.next(value);
- sub.add(scheduler.schedule(() => subscriber.complete()));
- }));
- }, err => {
- sub.add(scheduler.schedule(() => subscriber.error(err)));
- })));
- return sub;
- });
- }
- //# sourceMappingURL=schedulePromise.js.map
- /***/ }),
- /***/ "5+tZ":
- /*!*******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/mergeMap.js ***!
- \*******************************************************************/
- /*! exports provided: mergeMap, MergeMapOperator, MergeMapSubscriber */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeMap", function() { return mergeMap; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeMapOperator", function() { return MergeMapOperator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeMapSubscriber", function() { return MergeMapSubscriber; });
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../InnerSubscriber */ "51Dv");
- /* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./map */ "lJxs");
- /* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../observable/from */ "Cfvw");
- function mergeMap(project, resultSelector, concurrent = Number.POSITIVE_INFINITY) {
- if (typeof resultSelector === 'function') {
- return (source) => source.pipe(mergeMap((a, i) => Object(_observable_from__WEBPACK_IMPORTED_MODULE_4__["from"])(project(a, i)).pipe(Object(_map__WEBPACK_IMPORTED_MODULE_3__["map"])((b, ii) => resultSelector(a, b, i, ii))), concurrent));
- }
- else if (typeof resultSelector === 'number') {
- concurrent = resultSelector;
- }
- return (source) => source.lift(new MergeMapOperator(project, concurrent));
- }
- class MergeMapOperator {
- constructor(project, concurrent = Number.POSITIVE_INFINITY) {
- this.project = project;
- this.concurrent = concurrent;
- }
- call(observer, source) {
- return source.subscribe(new MergeMapSubscriber(observer, this.project, this.concurrent));
- }
- }
- class MergeMapSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"] {
- constructor(destination, project, concurrent = Number.POSITIVE_INFINITY) {
- super(destination);
- this.project = project;
- this.concurrent = concurrent;
- this.hasCompleted = false;
- this.buffer = [];
- this.active = 0;
- this.index = 0;
- }
- _next(value) {
- if (this.active < this.concurrent) {
- this._tryNext(value);
- }
- else {
- this.buffer.push(value);
- }
- }
- _tryNext(value) {
- let result;
- const index = this.index++;
- try {
- result = this.project(value, index);
- }
- catch (err) {
- this.destination.error(err);
- return;
- }
- this.active++;
- this._innerSub(result, value, index);
- }
- _innerSub(ish, value, index) {
- const innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__["InnerSubscriber"](this, value, index);
- const destination = this.destination;
- destination.add(innerSubscriber);
- const innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_0__["subscribeToResult"])(this, ish, undefined, undefined, innerSubscriber);
- if (innerSubscription !== innerSubscriber) {
- destination.add(innerSubscription);
- }
- }
- _complete() {
- this.hasCompleted = true;
- if (this.active === 0 && this.buffer.length === 0) {
- this.destination.complete();
- }
- this.unsubscribe();
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.destination.next(innerValue);
- }
- notifyComplete(innerSub) {
- const buffer = this.buffer;
- this.remove(innerSub);
- this.active--;
- if (buffer.length > 0) {
- this._next(buffer.shift());
- }
- else if (this.active === 0 && this.hasCompleted) {
- this.destination.complete();
- }
- }
- }
- //# sourceMappingURL=mergeMap.js.map
- /***/ }),
- /***/ "51Bx":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/mergeScan.js ***!
- \********************************************************************/
- /*! exports provided: mergeScan, MergeScanOperator, MergeScanSubscriber */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeScan", function() { return mergeScan; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeScanOperator", function() { return MergeScanOperator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeScanSubscriber", function() { return MergeScanSubscriber; });
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../InnerSubscriber */ "51Dv");
- function mergeScan(accumulator, seed, concurrent = Number.POSITIVE_INFINITY) {
- return (source) => source.lift(new MergeScanOperator(accumulator, seed, concurrent));
- }
- class MergeScanOperator {
- constructor(accumulator, seed, concurrent) {
- this.accumulator = accumulator;
- this.seed = seed;
- this.concurrent = concurrent;
- }
- call(subscriber, source) {
- return source.subscribe(new MergeScanSubscriber(subscriber, this.accumulator, this.seed, this.concurrent));
- }
- }
- class MergeScanSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"] {
- constructor(destination, accumulator, acc, concurrent) {
- super(destination);
- this.accumulator = accumulator;
- this.acc = acc;
- this.concurrent = concurrent;
- this.hasValue = false;
- this.hasCompleted = false;
- this.buffer = [];
- this.active = 0;
- this.index = 0;
- }
- _next(value) {
- if (this.active < this.concurrent) {
- const index = this.index++;
- const destination = this.destination;
- let ish;
- try {
- const { accumulator } = this;
- ish = accumulator(this.acc, value, index);
- }
- catch (e) {
- return destination.error(e);
- }
- this.active++;
- this._innerSub(ish, value, index);
- }
- else {
- this.buffer.push(value);
- }
- }
- _innerSub(ish, value, index) {
- const innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__["InnerSubscriber"](this, value, index);
- const destination = this.destination;
- destination.add(innerSubscriber);
- const innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_0__["subscribeToResult"])(this, ish, undefined, undefined, innerSubscriber);
- if (innerSubscription !== innerSubscriber) {
- destination.add(innerSubscription);
- }
- }
- _complete() {
- this.hasCompleted = true;
- if (this.active === 0 && this.buffer.length === 0) {
- if (this.hasValue === false) {
- this.destination.next(this.acc);
- }
- this.destination.complete();
- }
- this.unsubscribe();
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- const { destination } = this;
- this.acc = innerValue;
- this.hasValue = true;
- destination.next(innerValue);
- }
- notifyComplete(innerSub) {
- const buffer = this.buffer;
- const destination = this.destination;
- destination.remove(innerSub);
- this.active--;
- if (buffer.length > 0) {
- this._next(buffer.shift());
- }
- else if (this.active === 0 && this.hasCompleted) {
- if (this.hasValue === false) {
- this.destination.next(this.acc);
- }
- this.destination.complete();
- }
- }
- }
- //# sourceMappingURL=mergeScan.js.map
- /***/ }),
- /***/ "51Dv":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/InnerSubscriber.js ***!
- \****************************************************************/
- /*! exports provided: InnerSubscriber */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InnerSubscriber", function() { return InnerSubscriber; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Subscriber */ "7o/Q");
- class InnerSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(parent, outerValue, outerIndex) {
- super();
- this.parent = parent;
- this.outerValue = outerValue;
- this.outerIndex = outerIndex;
- this.index = 0;
- }
- _next(value) {
- this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);
- }
- _error(error) {
- this.parent.notifyError(error, this);
- this.unsubscribe();
- }
- _complete() {
- this.parent.notifyComplete(this);
- this.unsubscribe();
- }
- }
- //# sourceMappingURL=InnerSubscriber.js.map
- /***/ }),
- /***/ "5B2Y":
- /*!*****************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduled/scheduleObservable.js ***!
- \*****************************************************************************/
- /*! exports provided: scheduleObservable */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheduleObservable", function() { return scheduleObservable; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Subscription */ "quSY");
- /* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../symbol/observable */ "kJWO");
- function scheduleObservable(input, scheduler) {
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- const sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
- sub.add(scheduler.schedule(() => {
- const observable = input[_symbol_observable__WEBPACK_IMPORTED_MODULE_2__["observable"]]();
- sub.add(observable.subscribe({
- next(value) { sub.add(scheduler.schedule(() => subscriber.next(value))); },
- error(err) { sub.add(scheduler.schedule(() => subscriber.error(err))); },
- complete() { sub.add(scheduler.schedule(() => subscriber.complete())); },
- }));
- }));
- return sub;
- });
- }
- //# sourceMappingURL=scheduleObservable.js.map
- /***/ }),
- /***/ "5yfJ":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/never.js ***!
- \*****************************************************************/
- /*! exports provided: NEVER, never */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NEVER", function() { return NEVER; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "never", function() { return never; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _util_noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/noop */ "KqfI");
- const NEVER = new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](_util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"]);
- function never() {
- return NEVER;
- }
- //# sourceMappingURL=never.js.map
- /***/ }),
- /***/ "6NWb":
- /*!****************************************************************************************************!*\
- !*** ./node_modules/@fortawesome/angular-fontawesome/__ivy_ngcc__/fesm2015/angular-fontawesome.js ***!
- \****************************************************************************************************/
- /*! exports provided: FaConfig, FaDuotoneIconComponent, FaIconComponent, FaIconLibrary, FaLayersComponent, FaLayersCounterComponent, FaLayersTextComponent, FaStackComponent, FaStackItemSizeDirective, FontAwesomeModule */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FaConfig", function() { return FaConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FaDuotoneIconComponent", function() { return FaDuotoneIconComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FaIconComponent", function() { return FaIconComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FaIconLibrary", function() { return FaIconLibrary; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FaLayersComponent", function() { return FaLayersComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FaLayersCounterComponent", function() { return FaLayersCounterComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FaLayersTextComponent", function() { return FaLayersTextComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FaStackComponent", function() { return FaStackComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FaStackItemSizeDirective", function() { return FaStackItemSizeDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FontAwesomeModule", function() { return FontAwesomeModule; });
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/platform-browser */ "jhN1");
- /* harmony import */ var _fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @fortawesome/fontawesome-svg-core */ "7O5W");
- const _c0 = [[["fa-icon"], ["fa-duotone-icon"], ["fa-layers-text"], ["fa-layers-counter"]]];
- const _c1 = ["fa-icon, fa-duotone-icon, fa-layers-text, fa-layers-counter"];
- const _c2 = [[["fa-icon", "stackItemSize", ""], ["fa-duotone-icon", "stackItemSize", ""]]];
- const _c3 = ["fa-icon[stackItemSize],fa-duotone-icon[stackItemSize]"];
- class FaConfig {
- constructor() {
- /**
- * Default prefix to use, when one is not provided with the icon name.
- *
- * @default 'fas'
- */
- this.defaultPrefix = 'fas';
- /**
- * Provides a fallback icon to use whilst main icon is being loaded asynchronously.
- * When value is null, then fa-icon component will throw an error if icon input is missing.
- * When value is not null, then the provided icon will be used as a fallback icon if icon input is missing.
- *
- * @default null
- */
- this.fallbackIcon = null;
- /**
- * Whether components should lookup icon definitions in the global icon
- * library (the one available from
- * `import { library } from '@fortawesome/fontawesome-svg-core')`.
- *
- * See https://github.com/FortAwesome/angular-fontawesome/blob/master/docs/usage/icon-library.md
- * for detailed description of library modes.
- *
- * - 'unset' - Components should lookup icon definitions in the global library
- * and emit warning if they find a definition there. This option is a default
- * to assist existing applications with a migration. Applications are expected
- * to switch to using {@link FaIconLibrary}.
- * - true - Components should lookup icon definitions in the global library.
- * Note that global icon library is deprecated and support for it will be
- * removed. This option can be used to temporarily suppress warnings.
- * - false - Components should not lookup icon definitions in the global
- * library. Library will throw an error if missing icon is found in the global
- * library.
- *
- * @deprecated This option is deprecated since 0.5.0. In 0.6.0 default will
- * be changed to false. In 0.8.0 the option will be removed together with the
- * support for the global icon library.
- *
- * @default false
- */
- this.globalLibrary = false;
- }
- }
- FaConfig.ɵfac = function FaConfig_Factory(t) { return new (t || FaConfig)(); };
- FaConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function FaConfig_Factory() { return new FaConfig(); }, token: FaConfig, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FaConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return []; }, null); })();
- class FaIconLibrary {
- constructor() {
- this.definitions = {};
- }
- addIcons(...icons) {
- for (const icon of icons) {
- if (!(icon.prefix in this.definitions)) {
- this.definitions[icon.prefix] = {};
- }
- this.definitions[icon.prefix][icon.iconName] = icon;
- }
- }
- addIconPacks(...packs) {
- for (const pack of packs) {
- const icons = Object.keys(pack).map((key) => pack[key]);
- this.addIcons(...icons);
- }
- }
- getIconDefinition(prefix, name) {
- if (prefix in this.definitions && name in this.definitions[prefix]) {
- return this.definitions[prefix][name];
- }
- return null;
- }
- }
- FaIconLibrary.ɵfac = function FaIconLibrary_Factory(t) { return new (t || FaIconLibrary)(); };
- FaIconLibrary.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function FaIconLibrary_Factory() { return new FaIconLibrary(); }, token: FaIconLibrary, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FaIconLibrary, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return []; }, null); })();
- const faWarnIfIconDefinitionMissing = (iconSpec) => {
- throw new Error(`Could not find icon with iconName=${iconSpec.iconName} and prefix=${iconSpec.prefix} in the icon library.`);
- };
- const faWarnIfIconSpecMissing = () => {
- throw new Error('Property `icon` is required for `fa-icon`/`fa-duotone-icon` components.');
- };
- /**
- * Fontawesome class list.
- * Returns classes array by props.
- */
- const faClassList = (props) => {
- const classes = {
- 'fa-spin': props.spin,
- 'fa-pulse': props.pulse,
- 'fa-fw': props.fixedWidth,
- 'fa-border': props.border,
- 'fa-inverse': props.inverse,
- 'fa-layers-counter': props.counter,
- 'fa-flip-horizontal': props.flip === 'horizontal' || props.flip === 'both',
- 'fa-flip-vertical': props.flip === 'vertical' || props.flip === 'both',
- [`fa-${props.size}`]: props.size !== null,
- [`fa-rotate-${props.rotate}`]: props.rotate !== null,
- [`fa-pull-${props.pull}`]: props.pull !== null,
- [`fa-stack-${props.stackItemSize}`]: props.stackItemSize != null,
- };
- return Object.keys(classes)
- .map((key) => (classes[key] ? key : null))
- .filter((key) => key);
- };
- /**
- * Returns if is IconLookup or not.
- */
- const isIconLookup = (i) => {
- return i.prefix !== undefined && i.iconName !== undefined;
- };
- /**
- * Normalizing icon spec.
- */
- const faNormalizeIconSpec = (iconSpec, defaultPrefix) => {
- if (isIconLookup(iconSpec)) {
- return iconSpec;
- }
- if (Array.isArray(iconSpec) && iconSpec.length === 2) {
- return { prefix: iconSpec[0], iconName: iconSpec[1] };
- }
- if (typeof iconSpec === 'string') {
- return { prefix: defaultPrefix, iconName: iconSpec };
- }
- };
- class FaStackItemSizeDirective {
- constructor() {
- /**
- * Specify whether icon inside {@link FaStackComponent} should be rendered in
- * regular size (1x) or as a larger icon (2x).
- */
- this.stackItemSize = '1x';
- }
- ngOnChanges(changes) {
- if ('size' in changes) {
- throw new Error('fa-icon is not allowed to customize size when used inside fa-stack. ' +
- 'Set size on the enclosing fa-stack instead: <fa-stack size="4x">...</fa-stack>.');
- }
- }
- }
- FaStackItemSizeDirective.ɵfac = function FaStackItemSizeDirective_Factory(t) { return new (t || FaStackItemSizeDirective)(); };
- FaStackItemSizeDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: FaStackItemSizeDirective, selectors: [["fa-icon", "stackItemSize", ""], ["fa-duotone-icon", "stackItemSize", ""]], inputs: { stackItemSize: "stackItemSize", size: "size" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- FaStackItemSizeDirective.propDecorators = {
- stackItemSize: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- size: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FaStackItemSizeDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- // tslint:disable-next-line:directive-selector
- selector: 'fa-icon[stackItemSize],fa-duotone-icon[stackItemSize]'
- }]
- }], function () { return []; }, { stackItemSize: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], size: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class FaIconComponent {
- constructor(sanitizer, config, iconLibrary, stackItem) {
- this.sanitizer = sanitizer;
- this.config = config;
- this.iconLibrary = iconLibrary;
- this.stackItem = stackItem;
- this.classes = [];
- }
- ngOnChanges(changes) {
- if (this.icon == null && this.config.fallbackIcon == null) {
- return faWarnIfIconSpecMissing();
- }
- let iconToBeRendered = null;
- if (this.icon == null) {
- iconToBeRendered = this.config.fallbackIcon;
- }
- else {
- iconToBeRendered = this.icon;
- }
- if (changes) {
- const iconDefinition = this.findIconDefinition(iconToBeRendered);
- if (iconDefinition != null) {
- const params = this.buildParams();
- this.renderIcon(iconDefinition, params);
- }
- }
- }
- /**
- * Programmatically trigger rendering of the icon.
- *
- * This method is useful, when creating {@link FaIconComponent} dynamically or
- * changing its inputs programmatically as in these cases icon won't be
- * re-rendered automatically.
- */
- render() {
- this.ngOnChanges({});
- }
- findIconDefinition(i) {
- const lookup = faNormalizeIconSpec(i, this.config.defaultPrefix);
- if ('icon' in lookup) {
- return lookup;
- }
- const definition = this.iconLibrary.getIconDefinition(lookup.prefix, lookup.iconName);
- if (definition != null) {
- return definition;
- }
- const globalDefinition = Object(_fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_2__["findIconDefinition"])(lookup);
- if (globalDefinition != null) {
- const message = 'Global icon library is deprecated. ' +
- 'Consult https://github.com/FortAwesome/angular-fontawesome/blob/master/UPGRADING.md ' +
- 'for the migration instructions.';
- if (this.config.globalLibrary === 'unset') {
- console.error('FontAwesome: ' + message);
- }
- else if (!this.config.globalLibrary) {
- throw new Error(message);
- }
- return globalDefinition;
- }
- faWarnIfIconDefinitionMissing(lookup);
- return null;
- }
- buildParams() {
- const classOpts = {
- flip: this.flip,
- spin: this.spin,
- pulse: this.pulse,
- border: this.border,
- inverse: this.inverse,
- size: this.size || null,
- pull: this.pull || null,
- rotate: this.rotate || null,
- fixedWidth: typeof this.fixedWidth === 'boolean' ? this.fixedWidth : this.config.fixedWidth,
- stackItemSize: this.stackItem != null ? this.stackItem.stackItemSize : null,
- };
- const parsedTransform = typeof this.transform === 'string' ? _fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_2__["parse"].transform(this.transform) : this.transform;
- return {
- title: this.title,
- transform: parsedTransform,
- classes: [...faClassList(classOpts), ...this.classes],
- mask: this.mask != null ? this.findIconDefinition(this.mask) : null,
- styles: this.styles != null ? this.styles : {},
- symbol: this.symbol,
- attributes: {
- role: this.a11yRole,
- },
- };
- }
- renderIcon(definition, params) {
- const renderedIcon = Object(_fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_2__["icon"])(definition, params);
- this.renderedIconHTML = this.sanitizer.bypassSecurityTrustHtml(renderedIcon.html.join('\n'));
- }
- }
- FaIconComponent.ɵfac = function FaIconComponent_Factory(t) { return new (t || FaIconComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["DomSanitizer"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](FaConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](FaIconLibrary), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](FaStackItemSizeDirective, 8)); };
- FaIconComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: FaIconComponent, selectors: [["fa-icon"]], hostAttrs: [1, "ng-fa-icon"], hostVars: 2, hostBindings: function FaIconComponent_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("innerHTML", ctx.renderedIconHTML, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsanitizeHtml"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("title", ctx.title);
- } }, inputs: { classes: "classes", icon: "icon", title: "title", spin: "spin", pulse: "pulse", mask: "mask", styles: "styles", flip: "flip", size: "size", pull: "pull", border: "border", inverse: "inverse", symbol: "symbol", rotate: "rotate", fixedWidth: "fixedWidth", transform: "transform", a11yRole: "a11yRole" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], decls: 0, vars: 0, template: function FaIconComponent_Template(rf, ctx) { }, encapsulation: 2 });
- FaIconComponent.ctorParameters = () => [
- { type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["DomSanitizer"] },
- { type: FaConfig },
- { type: FaIconLibrary },
- { type: FaStackItemSizeDirective, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }] }
- ];
- FaIconComponent.propDecorators = {
- icon: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- title: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- spin: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- pulse: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- mask: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- styles: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- flip: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- size: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- pull: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- border: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- inverse: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- symbol: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- rotate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- fixedWidth: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- classes: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- transform: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- a11yRole: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- renderedIconHTML: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"], args: ['innerHTML',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FaIconComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'fa-icon',
- template: ``,
- host: {
- class: 'ng-fa-icon',
- '[attr.title]': 'title'
- }
- }]
- }], function () { return [{ type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["DomSanitizer"] }, { type: FaConfig }, { type: FaIconLibrary }, { type: FaStackItemSizeDirective, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }] }]; }, { classes: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], renderedIconHTML: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
- args: ['innerHTML']
- }], icon: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], title: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], spin: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], pulse: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], mask: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], styles: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], flip: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], size: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], pull: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], border: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], inverse: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], symbol: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], rotate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], fixedWidth: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], transform: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], a11yRole: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class FaDuotoneIconComponent extends FaIconComponent {
- findIconDefinition(i) {
- const definition = super.findIconDefinition(i);
- if (definition != null && !Array.isArray(definition.icon[4])) {
- throw new Error('The specified icon does not appear to be a Duotone icon. ' +
- 'Check that you specified the correct style: ' +
- `<fa-duotone-icon [icon]="['fad', '${definition.iconName}']"></fa-duotone-icon> ` +
- `or use: <fa-icon icon="${definition.iconName}"></fa-icon> instead.`);
- }
- return definition;
- }
- buildParams() {
- const params = super.buildParams();
- if (this.swapOpacity === true || this.swapOpacity === 'true') {
- params.classes.push('fa-swap-opacity');
- }
- if (this.primaryOpacity != null) {
- params.styles['--fa-primary-opacity'] = this.primaryOpacity.toString();
- }
- if (this.secondaryOpacity != null) {
- params.styles['--fa-secondary-opacity'] = this.secondaryOpacity.toString();
- }
- if (this.primaryColor != null) {
- params.styles['--fa-primary-color'] = this.primaryColor;
- }
- if (this.secondaryColor != null) {
- params.styles['--fa-secondary-color'] = this.secondaryColor;
- }
- return params;
- }
- }
- FaDuotoneIconComponent.ɵfac = function FaDuotoneIconComponent_Factory(t) { return ɵFaDuotoneIconComponent_BaseFactory(t || FaDuotoneIconComponent); };
- FaDuotoneIconComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: FaDuotoneIconComponent, selectors: [["fa-duotone-icon"]], inputs: { swapOpacity: "swapOpacity", primaryOpacity: "primaryOpacity", secondaryOpacity: "secondaryOpacity", primaryColor: "primaryColor", secondaryColor: "secondaryColor" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]], decls: 0, vars: 0, template: function FaDuotoneIconComponent_Template(rf, ctx) { }, encapsulation: 2 });
- FaDuotoneIconComponent.propDecorators = {
- swapOpacity: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- primaryOpacity: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- secondaryOpacity: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- primaryColor: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- secondaryColor: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- const ɵFaDuotoneIconComponent_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](FaDuotoneIconComponent);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FaDuotoneIconComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'fa-duotone-icon',
- template: ``
- }]
- }], null, { swapOpacity: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], primaryOpacity: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], secondaryOpacity: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], primaryColor: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], secondaryColor: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * Warns if parent component not existing.
- */
- const faWarnIfParentNotExist = (parent, parentName, childName) => {
- if (!parent) {
- throw new Error(`${childName} should be used as child of ${parentName} only.`);
- }
- };
- /**
- * Fontawesome layers.
- */
- class FaLayersComponent {
- constructor(renderer, elementRef, config) {
- this.renderer = renderer;
- this.elementRef = elementRef;
- this.config = config;
- }
- ngOnInit() {
- this.renderer.addClass(this.elementRef.nativeElement, 'fa-layers');
- this.fixedWidth = typeof this.fixedWidth === 'boolean' ? this.fixedWidth : this.config.fixedWidth;
- }
- ngOnChanges(changes) {
- if ('size' in changes) {
- if (changes.size.currentValue != null) {
- this.renderer.addClass(this.elementRef.nativeElement, `fa-${changes.size.currentValue}`);
- }
- if (changes.size.previousValue != null) {
- this.renderer.removeClass(this.elementRef.nativeElement, `fa-${changes.size.previousValue}`);
- }
- }
- }
- }
- FaLayersComponent.ɵfac = function FaLayersComponent_Factory(t) { return new (t || FaLayersComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](FaConfig)); };
- FaLayersComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: FaLayersComponent, selectors: [["fa-layers"]], hostVars: 2, hostBindings: function FaLayersComponent_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("fa-fw", ctx.fixedWidth);
- } }, inputs: { fixedWidth: "fixedWidth", size: "size" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], ngContentSelectors: _c1, decls: 1, vars: 0, template: function FaLayersComponent_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"](_c0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](0);
- } }, encapsulation: 2 });
- FaLayersComponent.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: FaConfig }
- ];
- FaLayersComponent.propDecorators = {
- size: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- fixedWidth: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"], args: ['class.fa-fw',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FaLayersComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'fa-layers',
- template: `<ng-content select="fa-icon, fa-duotone-icon, fa-layers-text, fa-layers-counter"></ng-content>`
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: FaConfig }]; }, { fixedWidth: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
- args: ['class.fa-fw']
- }], size: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class FaLayersCounterComponent {
- constructor(parent, sanitizer) {
- this.parent = parent;
- this.sanitizer = sanitizer;
- this.classes = [];
- faWarnIfParentNotExist(this.parent, 'FaLayersComponent', this.constructor.name);
- }
- ngOnChanges(changes) {
- if (changes) {
- const params = this.buildParams();
- this.updateContent(params);
- }
- }
- buildParams() {
- return {
- title: this.title,
- classes: this.classes,
- styles: this.styles,
- };
- }
- updateContent(params) {
- this.renderedHTML = this.sanitizer.bypassSecurityTrustHtml(Object(_fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_2__["counter"])(this.content || '', params).html.join(''));
- }
- }
- FaLayersCounterComponent.ɵfac = function FaLayersCounterComponent_Factory(t) { return new (t || FaLayersCounterComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](FaLayersComponent, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["DomSanitizer"])); };
- FaLayersCounterComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: FaLayersCounterComponent, selectors: [["fa-layers-counter"]], hostAttrs: [1, "ng-fa-layers-counter"], hostVars: 1, hostBindings: function FaLayersCounterComponent_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("innerHTML", ctx.renderedHTML, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsanitizeHtml"]);
- } }, inputs: { classes: "classes", content: "content", title: "title", styles: "styles" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], decls: 0, vars: 0, template: function FaLayersCounterComponent_Template(rf, ctx) { }, encapsulation: 2 });
- FaLayersCounterComponent.ctorParameters = () => [
- { type: FaLayersComponent, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }] },
- { type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["DomSanitizer"] }
- ];
- FaLayersCounterComponent.propDecorators = {
- content: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- title: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- styles: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- classes: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- renderedHTML: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"], args: ['innerHTML',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FaLayersCounterComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'fa-layers-counter',
- template: '',
- host: {
- class: 'ng-fa-layers-counter'
- }
- }]
- }], function () { return [{ type: FaLayersComponent, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }] }, { type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["DomSanitizer"] }]; }, { classes: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], renderedHTML: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
- args: ['innerHTML']
- }], content: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], title: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], styles: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class FaLayersTextComponent {
- constructor(parent, sanitizer) {
- this.parent = parent;
- this.sanitizer = sanitizer;
- this.classes = [];
- faWarnIfParentNotExist(this.parent, 'FaLayersComponent', this.constructor.name);
- }
- ngOnChanges(changes) {
- if (changes) {
- const params = this.buildParams();
- this.updateContent(params);
- }
- }
- /**
- * Updating params by component props.
- */
- buildParams() {
- const classOpts = {
- flip: this.flip,
- spin: this.spin,
- pulse: this.pulse,
- border: this.border,
- inverse: this.inverse,
- size: this.size || null,
- pull: this.pull || null,
- rotate: this.rotate || null,
- fixedWidth: this.fixedWidth,
- };
- const parsedTransform = typeof this.transform === 'string' ? _fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_2__["parse"].transform(this.transform) : this.transform;
- return {
- transform: parsedTransform,
- classes: [...faClassList(classOpts), ...this.classes],
- title: this.title,
- styles: this.styles,
- };
- }
- updateContent(params) {
- this.renderedHTML = this.sanitizer.bypassSecurityTrustHtml(Object(_fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_2__["text"])(this.content || '', params).html.join('\n'));
- }
- }
- FaLayersTextComponent.ɵfac = function FaLayersTextComponent_Factory(t) { return new (t || FaLayersTextComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](FaLayersComponent, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["DomSanitizer"])); };
- FaLayersTextComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: FaLayersTextComponent, selectors: [["fa-layers-text"]], hostAttrs: [1, "ng-fa-layers-text"], hostVars: 1, hostBindings: function FaLayersTextComponent_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("innerHTML", ctx.renderedHTML, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsanitizeHtml"]);
- } }, inputs: { classes: "classes", content: "content", title: "title", styles: "styles", spin: "spin", pulse: "pulse", flip: "flip", size: "size", pull: "pull", border: "border", inverse: "inverse", rotate: "rotate", fixedWidth: "fixedWidth", transform: "transform" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], decls: 0, vars: 0, template: function FaLayersTextComponent_Template(rf, ctx) { }, encapsulation: 2 });
- FaLayersTextComponent.ctorParameters = () => [
- { type: FaLayersComponent, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }] },
- { type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["DomSanitizer"] }
- ];
- FaLayersTextComponent.propDecorators = {
- content: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- title: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- styles: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- classes: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- spin: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- pulse: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- flip: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- size: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- pull: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- border: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- inverse: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- rotate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- fixedWidth: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- transform: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- renderedHTML: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"], args: ['innerHTML',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FaLayersTextComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'fa-layers-text',
- template: '',
- host: {
- class: 'ng-fa-layers-text'
- }
- }]
- }], function () { return [{ type: FaLayersComponent, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }] }, { type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["DomSanitizer"] }]; }, { classes: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], renderedHTML: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
- args: ['innerHTML']
- }], content: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], title: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], styles: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], spin: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], pulse: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], flip: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], size: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], pull: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], border: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], inverse: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], rotate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], fixedWidth: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], transform: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class FaStackComponent {
- constructor(renderer, elementRef) {
- this.renderer = renderer;
- this.elementRef = elementRef;
- }
- ngOnInit() {
- this.renderer.addClass(this.elementRef.nativeElement, 'fa-stack');
- }
- ngOnChanges(changes) {
- if ('size' in changes) {
- if (changes.size.currentValue != null) {
- this.renderer.addClass(this.elementRef.nativeElement, `fa-${changes.size.currentValue}`);
- }
- if (changes.size.previousValue != null) {
- this.renderer.removeClass(this.elementRef.nativeElement, `fa-${changes.size.previousValue}`);
- }
- }
- }
- }
- FaStackComponent.ɵfac = function FaStackComponent_Factory(t) { return new (t || FaStackComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- FaStackComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: FaStackComponent, selectors: [["fa-stack"]], inputs: { size: "size" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], ngContentSelectors: _c3, decls: 1, vars: 0, template: function FaStackComponent_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"](_c2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](0);
- } }, encapsulation: 2 });
- FaStackComponent.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- FaStackComponent.propDecorators = {
- size: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FaStackComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'fa-stack',
- // TODO: See if it is better to select fa-icon and throw if it does not have stackItemSize directive
- template: `<ng-content select="fa-icon[stackItemSize],fa-duotone-icon[stackItemSize]"></ng-content>`
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, { size: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class FontAwesomeModule {
- }
- FontAwesomeModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: FontAwesomeModule });
- FontAwesomeModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function FontAwesomeModule_Factory(t) { return new (t || FontAwesomeModule)(); } });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](FontAwesomeModule, { declarations: [FaIconComponent, FaDuotoneIconComponent, FaLayersComponent, FaLayersTextComponent, FaLayersCounterComponent, FaStackComponent, FaStackItemSizeDirective], exports: [FaIconComponent, FaDuotoneIconComponent, FaLayersComponent, FaLayersTextComponent, FaLayersCounterComponent, FaStackComponent, FaStackItemSizeDirective] }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FontAwesomeModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- declarations: [
- FaIconComponent,
- FaDuotoneIconComponent,
- FaLayersComponent,
- FaLayersTextComponent,
- FaLayersCounterComponent,
- FaStackComponent,
- FaStackItemSizeDirective,
- ],
- exports: [
- FaIconComponent,
- FaDuotoneIconComponent,
- FaLayersComponent,
- FaLayersTextComponent,
- FaLayersCounterComponent,
- FaStackComponent,
- FaStackItemSizeDirective,
- ]
- }]
- }], null, null); })();
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=angular-fontawesome.js.map
- /***/ }),
- /***/ "6eBy":
- /*!*******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/debounce.js ***!
- \*******************************************************************/
- /*! exports provided: debounce */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "debounce", function() { return debounce; });
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function debounce(durationSelector) {
- return (source) => source.lift(new DebounceOperator(durationSelector));
- }
- class DebounceOperator {
- constructor(durationSelector) {
- this.durationSelector = durationSelector;
- }
- call(subscriber, source) {
- return source.subscribe(new DebounceSubscriber(subscriber, this.durationSelector));
- }
- }
- class DebounceSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__["OuterSubscriber"] {
- constructor(destination, durationSelector) {
- super(destination);
- this.durationSelector = durationSelector;
- this.hasValue = false;
- this.durationSubscription = null;
- }
- _next(value) {
- try {
- const result = this.durationSelector.call(this, value);
- if (result) {
- this._tryNext(value, result);
- }
- }
- catch (err) {
- this.destination.error(err);
- }
- }
- _complete() {
- this.emitValue();
- this.destination.complete();
- }
- _tryNext(value, duration) {
- let subscription = this.durationSubscription;
- this.value = value;
- this.hasValue = true;
- if (subscription) {
- subscription.unsubscribe();
- this.remove(subscription);
- }
- subscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(this, duration);
- if (subscription && !subscription.closed) {
- this.add(this.durationSubscription = subscription);
- }
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.emitValue();
- }
- notifyComplete() {
- this.emitValue();
- }
- emitValue() {
- if (this.hasValue) {
- const value = this.value;
- const subscription = this.durationSubscription;
- if (subscription) {
- this.durationSubscription = null;
- subscription.unsubscribe();
- this.remove(subscription);
- }
- this.value = null;
- this.hasValue = false;
- super._next(value);
- }
- }
- }
- //# sourceMappingURL=debounce.js.map
- /***/ }),
- /***/ "7+OI":
- /*!******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/isObservable.js ***!
- \******************************************************************/
- /*! exports provided: isObservable */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isObservable", function() { return isObservable; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- function isObservable(obj) {
- return !!obj && (obj instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"] || (typeof obj.lift === 'function' && typeof obj.subscribe === 'function'));
- }
- //# sourceMappingURL=isObservable.js.map
- /***/ }),
- /***/ "7HRe":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduled/scheduled.js ***!
- \********************************************************************/
- /*! exports provided: scheduled */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheduled", function() { return scheduled; });
- /* harmony import */ var _scheduleObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./scheduleObservable */ "5B2Y");
- /* harmony import */ var _schedulePromise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./schedulePromise */ "4yVj");
- /* harmony import */ var _scheduleArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./scheduleArray */ "jZKg");
- /* harmony import */ var _scheduleIterable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./scheduleIterable */ "MBAA");
- /* harmony import */ var _util_isInteropObservable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/isInteropObservable */ "QIAL");
- /* harmony import */ var _util_isPromise__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/isPromise */ "c2HN");
- /* harmony import */ var _util_isArrayLike__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../util/isArrayLike */ "I55L");
- /* harmony import */ var _util_isIterable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../util/isIterable */ "CMyj");
- function scheduled(input, scheduler) {
- if (input != null) {
- if (Object(_util_isInteropObservable__WEBPACK_IMPORTED_MODULE_4__["isInteropObservable"])(input)) {
- return Object(_scheduleObservable__WEBPACK_IMPORTED_MODULE_0__["scheduleObservable"])(input, scheduler);
- }
- else if (Object(_util_isPromise__WEBPACK_IMPORTED_MODULE_5__["isPromise"])(input)) {
- return Object(_schedulePromise__WEBPACK_IMPORTED_MODULE_1__["schedulePromise"])(input, scheduler);
- }
- else if (Object(_util_isArrayLike__WEBPACK_IMPORTED_MODULE_6__["isArrayLike"])(input)) {
- return Object(_scheduleArray__WEBPACK_IMPORTED_MODULE_2__["scheduleArray"])(input, scheduler);
- }
- else if (Object(_util_isIterable__WEBPACK_IMPORTED_MODULE_7__["isIterable"])(input) || typeof input === 'string') {
- return Object(_scheduleIterable__WEBPACK_IMPORTED_MODULE_3__["scheduleIterable"])(input, scheduler);
- }
- }
- throw new TypeError((input !== null && typeof input || input) + ' is not observable');
- }
- //# sourceMappingURL=scheduled.js.map
- /***/ }),
- /***/ "7Hc7":
- /*!***************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduler/asap.js ***!
- \***************************************************************/
- /*! exports provided: asap */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asap", function() { return asap; });
- /* harmony import */ var _AsapAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsapAction */ "Pz8W");
- /* harmony import */ var _AsapScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AsapScheduler */ "RUbi");
- const asap = new _AsapScheduler__WEBPACK_IMPORTED_MODULE_1__["AsapScheduler"](_AsapAction__WEBPACK_IMPORTED_MODULE_0__["AsapAction"]);
- //# sourceMappingURL=asap.js.map
- /***/ }),
- /***/ "7O5W":
- /*!********************************************************************!*\
- !*** ./node_modules/@fortawesome/fontawesome-svg-core/index.es.js ***!
- \********************************************************************/
- /*! exports provided: icon, noAuto, config, toHtml, layer, text, counter, library, dom, parse, findIconDefinition */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "icon", function() { return icon; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "noAuto", function() { return noAuto; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "config", function() { return config; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toHtml", function() { return toHtml; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "layer", function() { return layer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "counter", function() { return counter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "library", function() { return library; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dom", function() { return dom; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parse", function() { return parse; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findIconDefinition", function() { return findIconDefinition; });
- /*!
- * Font Awesome Free 5.15.1 by @fontawesome - https://fontawesome.com
- * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
- */
- function _typeof(obj) {
- if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
- _typeof = function (obj) {
- return typeof obj;
- };
- } else {
- _typeof = function (obj) {
- return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
- };
- }
- return _typeof(obj);
- }
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
- function _defineProperties(target, props) {
- for (var i = 0; i < props.length; i++) {
- var descriptor = props[i];
- descriptor.enumerable = descriptor.enumerable || false;
- descriptor.configurable = true;
- if ("value" in descriptor) descriptor.writable = true;
- Object.defineProperty(target, descriptor.key, descriptor);
- }
- }
- function _createClass(Constructor, protoProps, staticProps) {
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
- if (staticProps) _defineProperties(Constructor, staticProps);
- return Constructor;
- }
- function _defineProperty(obj, key, value) {
- if (key in obj) {
- Object.defineProperty(obj, key, {
- value: value,
- enumerable: true,
- configurable: true,
- writable: true
- });
- } else {
- obj[key] = value;
- }
- return obj;
- }
- function _objectSpread(target) {
- for (var i = 1; i < arguments.length; i++) {
- var source = arguments[i] != null ? arguments[i] : {};
- var ownKeys = Object.keys(source);
- if (typeof Object.getOwnPropertySymbols === 'function') {
- ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
- return Object.getOwnPropertyDescriptor(source, sym).enumerable;
- }));
- }
- ownKeys.forEach(function (key) {
- _defineProperty(target, key, source[key]);
- });
- }
- return target;
- }
- function _slicedToArray(arr, i) {
- return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();
- }
- function _toConsumableArray(arr) {
- return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
- }
- function _arrayWithoutHoles(arr) {
- if (Array.isArray(arr)) {
- for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];
- return arr2;
- }
- }
- function _arrayWithHoles(arr) {
- if (Array.isArray(arr)) return arr;
- }
- function _iterableToArray(iter) {
- if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
- }
- function _iterableToArrayLimit(arr, i) {
- var _arr = [];
- var _n = true;
- var _d = false;
- var _e = undefined;
- try {
- for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
- _arr.push(_s.value);
- if (i && _arr.length === i) break;
- }
- } catch (err) {
- _d = true;
- _e = err;
- } finally {
- try {
- if (!_n && _i["return"] != null) _i["return"]();
- } finally {
- if (_d) throw _e;
- }
- }
- return _arr;
- }
- function _nonIterableSpread() {
- throw new TypeError("Invalid attempt to spread non-iterable instance");
- }
- function _nonIterableRest() {
- throw new TypeError("Invalid attempt to destructure non-iterable instance");
- }
- var noop = function noop() {};
- var _WINDOW = {};
- var _DOCUMENT = {};
- var _MUTATION_OBSERVER = null;
- var _PERFORMANCE = {
- mark: noop,
- measure: noop
- };
- try {
- if (typeof window !== 'undefined') _WINDOW = window;
- if (typeof document !== 'undefined') _DOCUMENT = document;
- if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver;
- if (typeof performance !== 'undefined') _PERFORMANCE = performance;
- } catch (e) {}
- var _ref = _WINDOW.navigator || {},
- _ref$userAgent = _ref.userAgent,
- userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;
- var WINDOW = _WINDOW;
- var DOCUMENT = _DOCUMENT;
- var MUTATION_OBSERVER = _MUTATION_OBSERVER;
- var PERFORMANCE = _PERFORMANCE;
- var IS_BROWSER = !!WINDOW.document;
- var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';
- var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');
- var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';
- var UNITS_IN_GRID = 16;
- var DEFAULT_FAMILY_PREFIX = 'fa';
- var DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa';
- var DATA_FA_I2SVG = 'data-fa-i2svg';
- var DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element';
- var DATA_FA_PSEUDO_ELEMENT_PENDING = 'data-fa-pseudo-element-pending';
- var DATA_PREFIX = 'data-prefix';
- var DATA_ICON = 'data-icon';
- var HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg';
- var MUTATION_APPROACH_ASYNC = 'async';
- var TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT'];
- var PRODUCTION = function () {
- try {
- return "development" === 'production';
- } catch (e) {
- return false;
- }
- }();
- var PREFIX_TO_STYLE = {
- 'fas': 'solid',
- 'far': 'regular',
- 'fal': 'light',
- 'fad': 'duotone',
- 'fab': 'brands',
- 'fak': 'kit',
- 'fa': 'solid'
- };
- var STYLE_TO_PREFIX = {
- 'solid': 'fas',
- 'regular': 'far',
- 'light': 'fal',
- 'duotone': 'fad',
- 'brands': 'fab',
- 'kit': 'fak'
- };
- var LAYERS_TEXT_CLASSNAME = 'fa-layers-text';
- var FONT_FAMILY_PATTERN = /Font Awesome ([5 ]*)(Solid|Regular|Light|Duotone|Brands|Free|Pro|Kit).*/; // TODO: do we need to handle font-weight for kit SVG pseudo-elements?
- var FONT_WEIGHT_TO_PREFIX = {
- '900': 'fas',
- '400': 'far',
- 'normal': 'far',
- '300': 'fal'
- };
- var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
- var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);
- var ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask'];
- var DUOTONE_CLASSES = {
- GROUP: 'group',
- SWAP_OPACITY: 'swap-opacity',
- PRIMARY: 'primary',
- SECONDARY: 'secondary'
- };
- var RESERVED_CLASSES = ['xs', 'sm', 'lg', 'fw', 'ul', 'li', 'border', 'pull-left', 'pull-right', 'spin', 'pulse', 'rotate-90', 'rotate-180', 'rotate-270', 'flip-horizontal', 'flip-vertical', 'flip-both', 'stack', 'stack-1x', 'stack-2x', 'inverse', 'layers', 'layers-text', 'layers-counter', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY].concat(oneToTen.map(function (n) {
- return "".concat(n, "x");
- })).concat(oneToTwenty.map(function (n) {
- return "w-".concat(n);
- }));
- var initial = WINDOW.FontAwesomeConfig || {};
- function getAttrConfig(attr) {
- var element = DOCUMENT.querySelector('script[' + attr + ']');
- if (element) {
- return element.getAttribute(attr);
- }
- }
- function coerce(val) {
- // Getting an empty string will occur if the attribute is set on the HTML tag but without a value
- // We'll assume that this is an indication that it should be toggled to true
- // For example <script data-search-pseudo-elements src="..."></script>
- if (val === '') return true;
- if (val === 'false') return false;
- if (val === 'true') return true;
- return val;
- }
- if (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {
- var attrs = [['data-family-prefix', 'familyPrefix'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];
- attrs.forEach(function (_ref) {
- var _ref2 = _slicedToArray(_ref, 2),
- attr = _ref2[0],
- key = _ref2[1];
- var val = coerce(getAttrConfig(attr));
- if (val !== undefined && val !== null) {
- initial[key] = val;
- }
- });
- }
- var _default = {
- familyPrefix: DEFAULT_FAMILY_PREFIX,
- replacementClass: DEFAULT_REPLACEMENT_CLASS,
- autoReplaceSvg: true,
- autoAddCss: true,
- autoA11y: true,
- searchPseudoElements: false,
- observeMutations: true,
- mutateApproach: 'async',
- keepOriginalSource: true,
- measurePerformance: false,
- showMissingIcons: true
- };
- var _config = _objectSpread({}, _default, initial);
- if (!_config.autoReplaceSvg) _config.observeMutations = false;
- var config = _objectSpread({}, _config);
- WINDOW.FontAwesomeConfig = config;
- var w = WINDOW || {};
- if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};
- if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};
- if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};
- if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];
- var namespace = w[NAMESPACE_IDENTIFIER];
- var functions = [];
- var listener = function listener() {
- DOCUMENT.removeEventListener('DOMContentLoaded', listener);
- loaded = 1;
- functions.map(function (fn) {
- return fn();
- });
- };
- var loaded = false;
- if (IS_DOM) {
- loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);
- if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);
- }
- function domready (fn) {
- if (!IS_DOM) return;
- loaded ? setTimeout(fn, 0) : functions.push(fn);
- }
- var PENDING = 'pending';
- var SETTLED = 'settled';
- var FULFILLED = 'fulfilled';
- var REJECTED = 'rejected';
- var NOOP = function NOOP() {};
- var isNode = typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function';
- var asyncSetTimer = typeof setImmediate === 'undefined' ? setTimeout : setImmediate;
- var asyncQueue = [];
- var asyncTimer;
- function asyncFlush() {
- // run promise callbacks
- for (var i = 0; i < asyncQueue.length; i++) {
- asyncQueue[i][0](asyncQueue[i][1]);
- } // reset async asyncQueue
- asyncQueue = [];
- asyncTimer = false;
- }
- function asyncCall(callback, arg) {
- asyncQueue.push([callback, arg]);
- if (!asyncTimer) {
- asyncTimer = true;
- asyncSetTimer(asyncFlush, 0);
- }
- }
- function invokeResolver(resolver, promise) {
- function resolvePromise(value) {
- resolve(promise, value);
- }
- function rejectPromise(reason) {
- reject(promise, reason);
- }
- try {
- resolver(resolvePromise, rejectPromise);
- } catch (e) {
- rejectPromise(e);
- }
- }
- function invokeCallback(subscriber) {
- var owner = subscriber.owner;
- var settled = owner._state;
- var value = owner._data;
- var callback = subscriber[settled];
- var promise = subscriber.then;
- if (typeof callback === 'function') {
- settled = FULFILLED;
- try {
- value = callback(value);
- } catch (e) {
- reject(promise, e);
- }
- }
- if (!handleThenable(promise, value)) {
- if (settled === FULFILLED) {
- resolve(promise, value);
- }
- if (settled === REJECTED) {
- reject(promise, value);
- }
- }
- }
- function handleThenable(promise, value) {
- var resolved;
- try {
- if (promise === value) {
- throw new TypeError('A promises callback cannot return that same promise.');
- }
- if (value && (typeof value === 'function' || _typeof(value) === 'object')) {
- // then should be retrieved only once
- var then = value.then;
- if (typeof then === 'function') {
- then.call(value, function (val) {
- if (!resolved) {
- resolved = true;
- if (value === val) {
- fulfill(promise, val);
- } else {
- resolve(promise, val);
- }
- }
- }, function (reason) {
- if (!resolved) {
- resolved = true;
- reject(promise, reason);
- }
- });
- return true;
- }
- }
- } catch (e) {
- if (!resolved) {
- reject(promise, e);
- }
- return true;
- }
- return false;
- }
- function resolve(promise, value) {
- if (promise === value || !handleThenable(promise, value)) {
- fulfill(promise, value);
- }
- }
- function fulfill(promise, value) {
- if (promise._state === PENDING) {
- promise._state = SETTLED;
- promise._data = value;
- asyncCall(publishFulfillment, promise);
- }
- }
- function reject(promise, reason) {
- if (promise._state === PENDING) {
- promise._state = SETTLED;
- promise._data = reason;
- asyncCall(publishRejection, promise);
- }
- }
- function publish(promise) {
- promise._then = promise._then.forEach(invokeCallback);
- }
- function publishFulfillment(promise) {
- promise._state = FULFILLED;
- publish(promise);
- }
- function publishRejection(promise) {
- promise._state = REJECTED;
- publish(promise);
- if (!promise._handled && isNode) {
- global.process.emit('unhandledRejection', promise._data, promise);
- }
- }
- function notifyRejectionHandled(promise) {
- global.process.emit('rejectionHandled', promise);
- }
- /**
- * @class
- */
- function P(resolver) {
- if (typeof resolver !== 'function') {
- throw new TypeError('Promise resolver ' + resolver + ' is not a function');
- }
- if (this instanceof P === false) {
- throw new TypeError('Failed to construct \'Promise\': Please use the \'new\' operator, this object constructor cannot be called as a function.');
- }
- this._then = [];
- invokeResolver(resolver, this);
- }
- P.prototype = {
- constructor: P,
- _state: PENDING,
- _then: null,
- _data: undefined,
- _handled: false,
- then: function then(onFulfillment, onRejection) {
- var subscriber = {
- owner: this,
- then: new this.constructor(NOOP),
- fulfilled: onFulfillment,
- rejected: onRejection
- };
- if ((onRejection || onFulfillment) && !this._handled) {
- this._handled = true;
- if (this._state === REJECTED && isNode) {
- asyncCall(notifyRejectionHandled, this);
- }
- }
- if (this._state === FULFILLED || this._state === REJECTED) {
- // already resolved, call callback async
- asyncCall(invokeCallback, subscriber);
- } else {
- // subscribe
- this._then.push(subscriber);
- }
- return subscriber.then;
- },
- catch: function _catch(onRejection) {
- return this.then(null, onRejection);
- }
- };
- P.all = function (promises) {
- if (!Array.isArray(promises)) {
- throw new TypeError('You must pass an array to Promise.all().');
- }
- return new P(function (resolve, reject) {
- var results = [];
- var remaining = 0;
- function resolver(index) {
- remaining++;
- return function (value) {
- results[index] = value;
- if (! --remaining) {
- resolve(results);
- }
- };
- }
- for (var i = 0, promise; i < promises.length; i++) {
- promise = promises[i];
- if (promise && typeof promise.then === 'function') {
- promise.then(resolver(i), reject);
- } else {
- results[i] = promise;
- }
- }
- if (!remaining) {
- resolve(results);
- }
- });
- };
- P.race = function (promises) {
- if (!Array.isArray(promises)) {
- throw new TypeError('You must pass an array to Promise.race().');
- }
- return new P(function (resolve, reject) {
- for (var i = 0, promise; i < promises.length; i++) {
- promise = promises[i];
- if (promise && typeof promise.then === 'function') {
- promise.then(resolve, reject);
- } else {
- resolve(promise);
- }
- }
- });
- };
- P.resolve = function (value) {
- if (value && _typeof(value) === 'object' && value.constructor === P) {
- return value;
- }
- return new P(function (resolve) {
- resolve(value);
- });
- };
- P.reject = function (reason) {
- return new P(function (resolve, reject) {
- reject(reason);
- });
- };
- var picked = typeof Promise === 'function' ? Promise : P;
- var d = UNITS_IN_GRID;
- var meaninglessTransform = {
- size: 16,
- x: 0,
- y: 0,
- rotate: 0,
- flipX: false,
- flipY: false
- };
- function isReserved(name) {
- return ~RESERVED_CLASSES.indexOf(name);
- }
- function insertCss(css) {
- if (!css || !IS_DOM) {
- return;
- }
- var style = DOCUMENT.createElement('style');
- style.setAttribute('type', 'text/css');
- style.innerHTML = css;
- var headChildren = DOCUMENT.head.childNodes;
- var beforeChild = null;
- for (var i = headChildren.length - 1; i > -1; i--) {
- var child = headChildren[i];
- var tagName = (child.tagName || '').toUpperCase();
- if (['STYLE', 'LINK'].indexOf(tagName) > -1) {
- beforeChild = child;
- }
- }
- DOCUMENT.head.insertBefore(style, beforeChild);
- return css;
- }
- var idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
- function nextUniqueId() {
- var size = 12;
- var id = '';
- while (size-- > 0) {
- id += idPool[Math.random() * 62 | 0];
- }
- return id;
- }
- function toArray(obj) {
- var array = [];
- for (var i = (obj || []).length >>> 0; i--;) {
- array[i] = obj[i];
- }
- return array;
- }
- function classArray(node) {
- if (node.classList) {
- return toArray(node.classList);
- } else {
- return (node.getAttribute('class') || '').split(' ').filter(function (i) {
- return i;
- });
- }
- }
- function getIconName(familyPrefix, cls) {
- var parts = cls.split('-');
- var prefix = parts[0];
- var iconName = parts.slice(1).join('-');
- if (prefix === familyPrefix && iconName !== '' && !isReserved(iconName)) {
- return iconName;
- } else {
- return null;
- }
- }
- function htmlEscape(str) {
- return "".concat(str).replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(/</g, '<').replace(/>/g, '>');
- }
- function joinAttributes(attributes) {
- return Object.keys(attributes || {}).reduce(function (acc, attributeName) {
- return acc + "".concat(attributeName, "=\"").concat(htmlEscape(attributes[attributeName]), "\" ");
- }, '').trim();
- }
- function joinStyles(styles) {
- return Object.keys(styles || {}).reduce(function (acc, styleName) {
- return acc + "".concat(styleName, ": ").concat(styles[styleName], ";");
- }, '');
- }
- function transformIsMeaningful(transform) {
- return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;
- }
- function transformForSvg(_ref) {
- var transform = _ref.transform,
- containerWidth = _ref.containerWidth,
- iconWidth = _ref.iconWidth;
- var outer = {
- transform: "translate(".concat(containerWidth / 2, " 256)")
- };
- var innerTranslate = "translate(".concat(transform.x * 32, ", ").concat(transform.y * 32, ") ");
- var innerScale = "scale(".concat(transform.size / 16 * (transform.flipX ? -1 : 1), ", ").concat(transform.size / 16 * (transform.flipY ? -1 : 1), ") ");
- var innerRotate = "rotate(".concat(transform.rotate, " 0 0)");
- var inner = {
- transform: "".concat(innerTranslate, " ").concat(innerScale, " ").concat(innerRotate)
- };
- var path = {
- transform: "translate(".concat(iconWidth / 2 * -1, " -256)")
- };
- return {
- outer: outer,
- inner: inner,
- path: path
- };
- }
- function transformForCss(_ref2) {
- var transform = _ref2.transform,
- _ref2$width = _ref2.width,
- width = _ref2$width === void 0 ? UNITS_IN_GRID : _ref2$width,
- _ref2$height = _ref2.height,
- height = _ref2$height === void 0 ? UNITS_IN_GRID : _ref2$height,
- _ref2$startCentered = _ref2.startCentered,
- startCentered = _ref2$startCentered === void 0 ? false : _ref2$startCentered;
- var val = '';
- if (startCentered && IS_IE) {
- val += "translate(".concat(transform.x / d - width / 2, "em, ").concat(transform.y / d - height / 2, "em) ");
- } else if (startCentered) {
- val += "translate(calc(-50% + ".concat(transform.x / d, "em), calc(-50% + ").concat(transform.y / d, "em)) ");
- } else {
- val += "translate(".concat(transform.x / d, "em, ").concat(transform.y / d, "em) ");
- }
- val += "scale(".concat(transform.size / d * (transform.flipX ? -1 : 1), ", ").concat(transform.size / d * (transform.flipY ? -1 : 1), ") ");
- val += "rotate(".concat(transform.rotate, "deg) ");
- return val;
- }
- var ALL_SPACE = {
- x: 0,
- y: 0,
- width: '100%',
- height: '100%'
- };
- function fillBlack(abstract) {
- var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
- if (abstract.attributes && (abstract.attributes.fill || force)) {
- abstract.attributes.fill = 'black';
- }
- return abstract;
- }
- function deGroup(abstract) {
- if (abstract.tag === 'g') {
- return abstract.children;
- } else {
- return [abstract];
- }
- }
- function makeIconMasking (_ref) {
- var children = _ref.children,
- attributes = _ref.attributes,
- main = _ref.main,
- mask = _ref.mask,
- explicitMaskId = _ref.maskId,
- transform = _ref.transform;
- var mainWidth = main.width,
- mainPath = main.icon;
- var maskWidth = mask.width,
- maskPath = mask.icon;
- var trans = transformForSvg({
- transform: transform,
- containerWidth: maskWidth,
- iconWidth: mainWidth
- });
- var maskRect = {
- tag: 'rect',
- attributes: _objectSpread({}, ALL_SPACE, {
- fill: 'white'
- })
- };
- var maskInnerGroupChildrenMixin = mainPath.children ? {
- children: mainPath.children.map(fillBlack)
- } : {};
- var maskInnerGroup = {
- tag: 'g',
- attributes: _objectSpread({}, trans.inner),
- children: [fillBlack(_objectSpread({
- tag: mainPath.tag,
- attributes: _objectSpread({}, mainPath.attributes, trans.path)
- }, maskInnerGroupChildrenMixin))]
- };
- var maskOuterGroup = {
- tag: 'g',
- attributes: _objectSpread({}, trans.outer),
- children: [maskInnerGroup]
- };
- var maskId = "mask-".concat(explicitMaskId || nextUniqueId());
- var clipId = "clip-".concat(explicitMaskId || nextUniqueId());
- var maskTag = {
- tag: 'mask',
- attributes: _objectSpread({}, ALL_SPACE, {
- id: maskId,
- maskUnits: 'userSpaceOnUse',
- maskContentUnits: 'userSpaceOnUse'
- }),
- children: [maskRect, maskOuterGroup]
- };
- var defs = {
- tag: 'defs',
- children: [{
- tag: 'clipPath',
- attributes: {
- id: clipId
- },
- children: deGroup(maskPath)
- }, maskTag]
- };
- children.push(defs, {
- tag: 'rect',
- attributes: _objectSpread({
- fill: 'currentColor',
- 'clip-path': "url(#".concat(clipId, ")"),
- mask: "url(#".concat(maskId, ")")
- }, ALL_SPACE)
- });
- return {
- children: children,
- attributes: attributes
- };
- }
- function makeIconStandard (_ref) {
- var children = _ref.children,
- attributes = _ref.attributes,
- main = _ref.main,
- transform = _ref.transform,
- styles = _ref.styles;
- var styleString = joinStyles(styles);
- if (styleString.length > 0) {
- attributes['style'] = styleString;
- }
- if (transformIsMeaningful(transform)) {
- var trans = transformForSvg({
- transform: transform,
- containerWidth: main.width,
- iconWidth: main.width
- });
- children.push({
- tag: 'g',
- attributes: _objectSpread({}, trans.outer),
- children: [{
- tag: 'g',
- attributes: _objectSpread({}, trans.inner),
- children: [{
- tag: main.icon.tag,
- children: main.icon.children,
- attributes: _objectSpread({}, main.icon.attributes, trans.path)
- }]
- }]
- });
- } else {
- children.push(main.icon);
- }
- return {
- children: children,
- attributes: attributes
- };
- }
- function asIcon (_ref) {
- var children = _ref.children,
- main = _ref.main,
- mask = _ref.mask,
- attributes = _ref.attributes,
- styles = _ref.styles,
- transform = _ref.transform;
- if (transformIsMeaningful(transform) && main.found && !mask.found) {
- var width = main.width,
- height = main.height;
- var offset = {
- x: width / height / 2,
- y: 0.5
- };
- attributes['style'] = joinStyles(_objectSpread({}, styles, {
- 'transform-origin': "".concat(offset.x + transform.x / 16, "em ").concat(offset.y + transform.y / 16, "em")
- }));
- }
- return [{
- tag: 'svg',
- attributes: attributes,
- children: children
- }];
- }
- function asSymbol (_ref) {
- var prefix = _ref.prefix,
- iconName = _ref.iconName,
- children = _ref.children,
- attributes = _ref.attributes,
- symbol = _ref.symbol;
- var id = symbol === true ? "".concat(prefix, "-").concat(config.familyPrefix, "-").concat(iconName) : symbol;
- return [{
- tag: 'svg',
- attributes: {
- style: 'display: none;'
- },
- children: [{
- tag: 'symbol',
- attributes: _objectSpread({}, attributes, {
- id: id
- }),
- children: children
- }]
- }];
- }
- function makeInlineSvgAbstract(params) {
- var _params$icons = params.icons,
- main = _params$icons.main,
- mask = _params$icons.mask,
- prefix = params.prefix,
- iconName = params.iconName,
- transform = params.transform,
- symbol = params.symbol,
- title = params.title,
- maskId = params.maskId,
- titleId = params.titleId,
- extra = params.extra,
- _params$watchable = params.watchable,
- watchable = _params$watchable === void 0 ? false : _params$watchable;
- var _ref = mask.found ? mask : main,
- width = _ref.width,
- height = _ref.height;
- var isUploadedIcon = prefix === 'fak';
- var widthClass = isUploadedIcon ? '' : "fa-w-".concat(Math.ceil(width / height * 16));
- var attrClass = [config.replacementClass, iconName ? "".concat(config.familyPrefix, "-").concat(iconName) : '', widthClass].filter(function (c) {
- return extra.classes.indexOf(c) === -1;
- }).filter(function (c) {
- return c !== '' || !!c;
- }).concat(extra.classes).join(' ');
- var content = {
- children: [],
- attributes: _objectSpread({}, extra.attributes, {
- 'data-prefix': prefix,
- 'data-icon': iconName,
- 'class': attrClass,
- 'role': extra.attributes.role || 'img',
- 'xmlns': 'http://www.w3.org/2000/svg',
- 'viewBox': "0 0 ".concat(width, " ").concat(height)
- })
- };
- var uploadedIconWidthStyle = isUploadedIcon && !~extra.classes.indexOf('fa-fw') ? {
- width: "".concat(width / height * 16 * 0.0625, "em")
- } : {};
- if (watchable) {
- content.attributes[DATA_FA_I2SVG] = '';
- }
- if (title) content.children.push({
- tag: 'title',
- attributes: {
- id: content.attributes['aria-labelledby'] || "title-".concat(titleId || nextUniqueId())
- },
- children: [title]
- });
- var args = _objectSpread({}, content, {
- prefix: prefix,
- iconName: iconName,
- main: main,
- mask: mask,
- maskId: maskId,
- transform: transform,
- symbol: symbol,
- styles: _objectSpread({}, uploadedIconWidthStyle, extra.styles)
- });
- var _ref2 = mask.found && main.found ? makeIconMasking(args) : makeIconStandard(args),
- children = _ref2.children,
- attributes = _ref2.attributes;
- args.children = children;
- args.attributes = attributes;
- if (symbol) {
- return asSymbol(args);
- } else {
- return asIcon(args);
- }
- }
- function makeLayersTextAbstract(params) {
- var content = params.content,
- width = params.width,
- height = params.height,
- transform = params.transform,
- title = params.title,
- extra = params.extra,
- _params$watchable2 = params.watchable,
- watchable = _params$watchable2 === void 0 ? false : _params$watchable2;
- var attributes = _objectSpread({}, extra.attributes, title ? {
- 'title': title
- } : {}, {
- 'class': extra.classes.join(' ')
- });
- if (watchable) {
- attributes[DATA_FA_I2SVG] = '';
- }
- var styles = _objectSpread({}, extra.styles);
- if (transformIsMeaningful(transform)) {
- styles['transform'] = transformForCss({
- transform: transform,
- startCentered: true,
- width: width,
- height: height
- });
- styles['-webkit-transform'] = styles['transform'];
- }
- var styleString = joinStyles(styles);
- if (styleString.length > 0) {
- attributes['style'] = styleString;
- }
- var val = [];
- val.push({
- tag: 'span',
- attributes: attributes,
- children: [content]
- });
- if (title) {
- val.push({
- tag: 'span',
- attributes: {
- class: 'sr-only'
- },
- children: [title]
- });
- }
- return val;
- }
- function makeLayersCounterAbstract(params) {
- var content = params.content,
- title = params.title,
- extra = params.extra;
- var attributes = _objectSpread({}, extra.attributes, title ? {
- 'title': title
- } : {}, {
- 'class': extra.classes.join(' ')
- });
- var styleString = joinStyles(extra.styles);
- if (styleString.length > 0) {
- attributes['style'] = styleString;
- }
- var val = [];
- val.push({
- tag: 'span',
- attributes: attributes,
- children: [content]
- });
- if (title) {
- val.push({
- tag: 'span',
- attributes: {
- class: 'sr-only'
- },
- children: [title]
- });
- }
- return val;
- }
- var noop$1 = function noop() {};
- var p = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {
- mark: noop$1,
- measure: noop$1
- };
- var preamble = "FA \"5.15.1\"";
- var begin = function begin(name) {
- p.mark("".concat(preamble, " ").concat(name, " begins"));
- return function () {
- return end(name);
- };
- };
- var end = function end(name) {
- p.mark("".concat(preamble, " ").concat(name, " ends"));
- p.measure("".concat(preamble, " ").concat(name), "".concat(preamble, " ").concat(name, " begins"), "".concat(preamble, " ").concat(name, " ends"));
- };
- var perf = {
- begin: begin,
- end: end
- };
- /**
- * Internal helper to bind a function known to have 4 arguments
- * to a given context.
- */
- var bindInternal4 = function bindInternal4(func, thisContext) {
- return function (a, b, c, d) {
- return func.call(thisContext, a, b, c, d);
- };
- };
- /**
- * # Reduce
- *
- * A fast object `.reduce()` implementation.
- *
- * @param {Object} subject The object to reduce over.
- * @param {Function} fn The reducer function.
- * @param {mixed} initialValue The initial value for the reducer, defaults to subject[0].
- * @param {Object} thisContext The context for the reducer.
- * @return {mixed} The final result.
- */
- var reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {
- var keys = Object.keys(subject),
- length = keys.length,
- iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,
- i,
- key,
- result;
- if (initialValue === undefined) {
- i = 1;
- result = subject[keys[0]];
- } else {
- i = 0;
- result = initialValue;
- }
- for (; i < length; i++) {
- key = keys[i];
- result = iterator(result, subject[key], key, subject);
- }
- return result;
- };
- function toHex(unicode) {
- var result = '';
- for (var i = 0; i < unicode.length; i++) {
- var hex = unicode.charCodeAt(i).toString(16);
- result += ('000' + hex).slice(-4);
- }
- return result;
- }
- function codePointAt(string, index) {
- /*! https://mths.be/codepointat v0.2.0 by @mathias */
- var size = string.length;
- var first = string.charCodeAt(index);
- var second;
- if (first >= 0xD800 && first <= 0xDBFF && size > index + 1) {
- second = string.charCodeAt(index + 1);
- if (second >= 0xDC00 && second <= 0xDFFF) {
- return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
- }
- }
- return first;
- }
- /**
- * Used to check that the character is between the E000..F8FF private unicode
- * range
- */
- function isPrivateUnicode(iconName) {
- if (iconName.length !== 1) {
- return false;
- } else {
- var cp = codePointAt(iconName, 0);
- return cp >= 57344 && cp <= 63743;
- }
- }
- function defineIcons(prefix, icons) {
- var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
- var _params$skipHooks = params.skipHooks,
- skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;
- var normalized = Object.keys(icons).reduce(function (acc, iconName) {
- var icon = icons[iconName];
- var expanded = !!icon.icon;
- if (expanded) {
- acc[icon.iconName] = icon.icon;
- } else {
- acc[iconName] = icon;
- }
- return acc;
- }, {});
- if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {
- namespace.hooks.addPack(prefix, normalized);
- } else {
- namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, normalized);
- }
- /**
- * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction
- * of new styles we needed to differentiate between them. Prefix `fa` is now an alias
- * for `fas` so we'll easy the upgrade process for our users by automatically defining
- * this as well.
- */
- if (prefix === 'fas') {
- defineIcons('fa', icons);
- }
- }
- var styles = namespace.styles,
- shims = namespace.shims;
- var _byUnicode = {};
- var _byLigature = {};
- var _byOldName = {};
- var build = function build() {
- var lookup = function lookup(reducer) {
- return reduce(styles, function (o, style, prefix) {
- o[prefix] = reduce(style, reducer, {});
- return o;
- }, {});
- };
- _byUnicode = lookup(function (acc, icon, iconName) {
- if (icon[3]) {
- acc[icon[3]] = iconName;
- }
- return acc;
- });
- _byLigature = lookup(function (acc, icon, iconName) {
- var ligatures = icon[2];
- acc[iconName] = iconName;
- ligatures.forEach(function (ligature) {
- acc[ligature] = iconName;
- });
- return acc;
- });
- var hasRegular = 'far' in styles;
- _byOldName = reduce(shims, function (acc, shim) {
- var oldName = shim[0];
- var prefix = shim[1];
- var iconName = shim[2];
- if (prefix === 'far' && !hasRegular) {
- prefix = 'fas';
- }
- acc[oldName] = {
- prefix: prefix,
- iconName: iconName
- };
- return acc;
- }, {});
- };
- build();
- function byUnicode(prefix, unicode) {
- return (_byUnicode[prefix] || {})[unicode];
- }
- function byLigature(prefix, ligature) {
- return (_byLigature[prefix] || {})[ligature];
- }
- function byOldName(name) {
- return _byOldName[name] || {
- prefix: null,
- iconName: null
- };
- }
- var styles$1 = namespace.styles;
- var emptyCanonicalIcon = function emptyCanonicalIcon() {
- return {
- prefix: null,
- iconName: null,
- rest: []
- };
- };
- function getCanonicalIcon(values) {
- return values.reduce(function (acc, cls) {
- var iconName = getIconName(config.familyPrefix, cls);
- if (styles$1[cls]) {
- acc.prefix = cls;
- } else if (config.autoFetchSvg && Object.keys(PREFIX_TO_STYLE).indexOf(cls) > -1) {
- acc.prefix = cls;
- } else if (iconName) {
- var shim = acc.prefix === 'fa' ? byOldName(iconName) : {};
- acc.iconName = shim.iconName || iconName;
- acc.prefix = shim.prefix || acc.prefix;
- } else if (cls !== config.replacementClass && cls.indexOf('fa-w-') !== 0) {
- acc.rest.push(cls);
- }
- return acc;
- }, emptyCanonicalIcon());
- }
- function iconFromMapping(mapping, prefix, iconName) {
- if (mapping && mapping[prefix] && mapping[prefix][iconName]) {
- return {
- prefix: prefix,
- iconName: iconName,
- icon: mapping[prefix][iconName]
- };
- }
- }
- function toHtml(abstractNodes) {
- var tag = abstractNodes.tag,
- _abstractNodes$attrib = abstractNodes.attributes,
- attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib,
- _abstractNodes$childr = abstractNodes.children,
- children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr;
- if (typeof abstractNodes === 'string') {
- return htmlEscape(abstractNodes);
- } else {
- return "<".concat(tag, " ").concat(joinAttributes(attributes), ">").concat(children.map(toHtml).join(''), "</").concat(tag, ">");
- }
- }
- var noop$2 = function noop() {};
- function isWatched(node) {
- var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;
- return typeof i2svg === 'string';
- }
- function getMutator() {
- if (config.autoReplaceSvg === true) {
- return mutators.replace;
- }
- var mutator = mutators[config.autoReplaceSvg];
- return mutator || mutators.replace;
- }
- var mutators = {
- replace: function replace(mutation) {
- var node = mutation[0];
- var abstract = mutation[1];
- var newOuterHTML = abstract.map(function (a) {
- return toHtml(a);
- }).join('\n');
- if (node.parentNode && node.outerHTML) {
- node.outerHTML = newOuterHTML + (config.keepOriginalSource && node.tagName.toLowerCase() !== 'svg' ? "<!-- ".concat(node.outerHTML, " Font Awesome fontawesome.com -->") : '');
- } else if (node.parentNode) {
- var newNode = document.createElement('span');
- node.parentNode.replaceChild(newNode, node);
- newNode.outerHTML = newOuterHTML;
- }
- },
- nest: function nest(mutation) {
- var node = mutation[0];
- var abstract = mutation[1]; // If we already have a replaced node we do not want to continue nesting within it.
- // Short-circuit to the standard replacement
- if (~classArray(node).indexOf(config.replacementClass)) {
- return mutators.replace(mutation);
- }
- var forSvg = new RegExp("".concat(config.familyPrefix, "-.*"));
- delete abstract[0].attributes.style;
- delete abstract[0].attributes.id;
- var splitClasses = abstract[0].attributes.class.split(' ').reduce(function (acc, cls) {
- if (cls === config.replacementClass || cls.match(forSvg)) {
- acc.toSvg.push(cls);
- } else {
- acc.toNode.push(cls);
- }
- return acc;
- }, {
- toNode: [],
- toSvg: []
- });
- abstract[0].attributes.class = splitClasses.toSvg.join(' ');
- var newInnerHTML = abstract.map(function (a) {
- return toHtml(a);
- }).join('\n');
- node.setAttribute('class', splitClasses.toNode.join(' '));
- node.setAttribute(DATA_FA_I2SVG, '');
- node.innerHTML = newInnerHTML;
- }
- };
- function performOperationSync(op) {
- op();
- }
- function perform(mutations, callback) {
- var callbackFunction = typeof callback === 'function' ? callback : noop$2;
- if (mutations.length === 0) {
- callbackFunction();
- } else {
- var frame = performOperationSync;
- if (config.mutateApproach === MUTATION_APPROACH_ASYNC) {
- frame = WINDOW.requestAnimationFrame || performOperationSync;
- }
- frame(function () {
- var mutator = getMutator();
- var mark = perf.begin('mutate');
- mutations.map(mutator);
- mark();
- callbackFunction();
- });
- }
- }
- var disabled = false;
- function disableObservation() {
- disabled = true;
- }
- function enableObservation() {
- disabled = false;
- }
- var mo = null;
- function observe(options) {
- if (!MUTATION_OBSERVER) {
- return;
- }
- if (!config.observeMutations) {
- return;
- }
- var treeCallback = options.treeCallback,
- nodeCallback = options.nodeCallback,
- pseudoElementsCallback = options.pseudoElementsCallback,
- _options$observeMutat = options.observeMutationsRoot,
- observeMutationsRoot = _options$observeMutat === void 0 ? DOCUMENT : _options$observeMutat;
- mo = new MUTATION_OBSERVER(function (objects) {
- if (disabled) return;
- toArray(objects).forEach(function (mutationRecord) {
- if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {
- if (config.searchPseudoElements) {
- pseudoElementsCallback(mutationRecord.target);
- }
- treeCallback(mutationRecord.target);
- }
- if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {
- pseudoElementsCallback(mutationRecord.target.parentNode);
- }
- if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {
- if (mutationRecord.attributeName === 'class') {
- var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)),
- prefix = _getCanonicalIcon.prefix,
- iconName = _getCanonicalIcon.iconName;
- if (prefix) mutationRecord.target.setAttribute('data-prefix', prefix);
- if (iconName) mutationRecord.target.setAttribute('data-icon', iconName);
- } else {
- nodeCallback(mutationRecord.target);
- }
- }
- });
- });
- if (!IS_DOM) return;
- mo.observe(observeMutationsRoot, {
- childList: true,
- attributes: true,
- characterData: true,
- subtree: true
- });
- }
- function disconnect() {
- if (!mo) return;
- mo.disconnect();
- }
- function styleParser (node) {
- var style = node.getAttribute('style');
- var val = [];
- if (style) {
- val = style.split(';').reduce(function (acc, style) {
- var styles = style.split(':');
- var prop = styles[0];
- var value = styles.slice(1);
- if (prop && value.length > 0) {
- acc[prop] = value.join(':').trim();
- }
- return acc;
- }, {});
- }
- return val;
- }
- function classParser (node) {
- var existingPrefix = node.getAttribute('data-prefix');
- var existingIconName = node.getAttribute('data-icon');
- var innerText = node.innerText !== undefined ? node.innerText.trim() : '';
- var val = getCanonicalIcon(classArray(node));
- if (existingPrefix && existingIconName) {
- val.prefix = existingPrefix;
- val.iconName = existingIconName;
- }
- if (val.prefix && innerText.length > 1) {
- val.iconName = byLigature(val.prefix, node.innerText);
- } else if (val.prefix && innerText.length === 1) {
- val.iconName = byUnicode(val.prefix, toHex(node.innerText));
- }
- return val;
- }
- var parseTransformString = function parseTransformString(transformString) {
- var transform = {
- size: 16,
- x: 0,
- y: 0,
- flipX: false,
- flipY: false,
- rotate: 0
- };
- if (!transformString) {
- return transform;
- } else {
- return transformString.toLowerCase().split(' ').reduce(function (acc, n) {
- var parts = n.toLowerCase().split('-');
- var first = parts[0];
- var rest = parts.slice(1).join('-');
- if (first && rest === 'h') {
- acc.flipX = true;
- return acc;
- }
- if (first && rest === 'v') {
- acc.flipY = true;
- return acc;
- }
- rest = parseFloat(rest);
- if (isNaN(rest)) {
- return acc;
- }
- switch (first) {
- case 'grow':
- acc.size = acc.size + rest;
- break;
- case 'shrink':
- acc.size = acc.size - rest;
- break;
- case 'left':
- acc.x = acc.x - rest;
- break;
- case 'right':
- acc.x = acc.x + rest;
- break;
- case 'up':
- acc.y = acc.y - rest;
- break;
- case 'down':
- acc.y = acc.y + rest;
- break;
- case 'rotate':
- acc.rotate = acc.rotate + rest;
- break;
- }
- return acc;
- }, transform);
- }
- };
- function transformParser (node) {
- return parseTransformString(node.getAttribute('data-fa-transform'));
- }
- function symbolParser (node) {
- var symbol = node.getAttribute('data-fa-symbol');
- return symbol === null ? false : symbol === '' ? true : symbol;
- }
- function attributesParser (node) {
- var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) {
- if (acc.name !== 'class' && acc.name !== 'style') {
- acc[attr.name] = attr.value;
- }
- return acc;
- }, {});
- var title = node.getAttribute('title');
- var titleId = node.getAttribute('data-fa-title-id');
- if (config.autoA11y) {
- if (title) {
- extraAttributes['aria-labelledby'] = "".concat(config.replacementClass, "-title-").concat(titleId || nextUniqueId());
- } else {
- extraAttributes['aria-hidden'] = 'true';
- extraAttributes['focusable'] = 'false';
- }
- }
- return extraAttributes;
- }
- function maskParser (node) {
- var mask = node.getAttribute('data-fa-mask');
- if (!mask) {
- return emptyCanonicalIcon();
- } else {
- return getCanonicalIcon(mask.split(' ').map(function (i) {
- return i.trim();
- }));
- }
- }
- function blankMeta() {
- return {
- iconName: null,
- title: null,
- titleId: null,
- prefix: null,
- transform: meaninglessTransform,
- symbol: false,
- mask: null,
- maskId: null,
- extra: {
- classes: [],
- styles: {},
- attributes: {}
- }
- };
- }
- function parseMeta(node) {
- var _classParser = classParser(node),
- iconName = _classParser.iconName,
- prefix = _classParser.prefix,
- extraClasses = _classParser.rest;
- var extraStyles = styleParser(node);
- var transform = transformParser(node);
- var symbol = symbolParser(node);
- var extraAttributes = attributesParser(node);
- var mask = maskParser(node);
- return {
- iconName: iconName,
- title: node.getAttribute('title'),
- titleId: node.getAttribute('data-fa-title-id'),
- prefix: prefix,
- transform: transform,
- symbol: symbol,
- mask: mask,
- maskId: node.getAttribute('data-fa-mask-id'),
- extra: {
- classes: extraClasses,
- styles: extraStyles,
- attributes: extraAttributes
- }
- };
- }
- function MissingIcon(error) {
- this.name = 'MissingIcon';
- this.message = error || 'Icon unavailable';
- this.stack = new Error().stack;
- }
- MissingIcon.prototype = Object.create(Error.prototype);
- MissingIcon.prototype.constructor = MissingIcon;
- var FILL = {
- fill: 'currentColor'
- };
- var ANIMATION_BASE = {
- attributeType: 'XML',
- repeatCount: 'indefinite',
- dur: '2s'
- };
- var RING = {
- tag: 'path',
- attributes: _objectSpread({}, FILL, {
- d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'
- })
- };
- var OPACITY_ANIMATE = _objectSpread({}, ANIMATION_BASE, {
- attributeName: 'opacity'
- });
- var DOT = {
- tag: 'circle',
- attributes: _objectSpread({}, FILL, {
- cx: '256',
- cy: '364',
- r: '28'
- }),
- children: [{
- tag: 'animate',
- attributes: _objectSpread({}, ANIMATION_BASE, {
- attributeName: 'r',
- values: '28;14;28;28;14;28;'
- })
- }, {
- tag: 'animate',
- attributes: _objectSpread({}, OPACITY_ANIMATE, {
- values: '1;0;1;1;0;1;'
- })
- }]
- };
- var QUESTION = {
- tag: 'path',
- attributes: _objectSpread({}, FILL, {
- opacity: '1',
- d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'
- }),
- children: [{
- tag: 'animate',
- attributes: _objectSpread({}, OPACITY_ANIMATE, {
- values: '1;0;0;0;0;1;'
- })
- }]
- };
- var EXCLAMATION = {
- tag: 'path',
- attributes: _objectSpread({}, FILL, {
- opacity: '0',
- d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'
- }),
- children: [{
- tag: 'animate',
- attributes: _objectSpread({}, OPACITY_ANIMATE, {
- values: '0;0;1;1;0;0;'
- })
- }]
- };
- var missing = {
- tag: 'g',
- children: [RING, DOT, QUESTION, EXCLAMATION]
- };
- var styles$2 = namespace.styles;
- function resolveCustomIconVersion() {
- var kitConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- var iconName = arguments.length > 1 ? arguments[1] : undefined;
- if (iconName && isPrivateUnicode(iconName)) {
- if (kitConfig && kitConfig.iconUploads) {
- var iconUploads = kitConfig.iconUploads;
- var descriptiveIconName = Object.keys(iconUploads).find(function (key) {
- return iconUploads[key] && iconUploads[key].u && iconUploads[key].u === toHex(iconName);
- });
- if (descriptiveIconName) {
- return iconUploads[descriptiveIconName].v;
- }
- }
- } else {
- if (kitConfig && kitConfig.iconUploads && kitConfig.iconUploads[iconName] && kitConfig.iconUploads[iconName].v) {
- return kitConfig.iconUploads[iconName].v;
- }
- }
- }
- function asFoundIcon(icon) {
- var width = icon[0];
- var height = icon[1];
- var _icon$slice = icon.slice(4),
- _icon$slice2 = _slicedToArray(_icon$slice, 1),
- vectorData = _icon$slice2[0];
- var element = null;
- if (Array.isArray(vectorData)) {
- element = {
- tag: 'g',
- attributes: {
- class: "".concat(config.familyPrefix, "-").concat(DUOTONE_CLASSES.GROUP)
- },
- children: [{
- tag: 'path',
- attributes: {
- class: "".concat(config.familyPrefix, "-").concat(DUOTONE_CLASSES.SECONDARY),
- fill: 'currentColor',
- d: vectorData[0]
- }
- }, {
- tag: 'path',
- attributes: {
- class: "".concat(config.familyPrefix, "-").concat(DUOTONE_CLASSES.PRIMARY),
- fill: 'currentColor',
- d: vectorData[1]
- }
- }]
- };
- } else {
- element = {
- tag: 'path',
- attributes: {
- fill: 'currentColor',
- d: vectorData
- }
- };
- }
- return {
- found: true,
- width: width,
- height: height,
- icon: element
- };
- }
- function findIcon(iconName, prefix) {
- return new picked(function (resolve, reject) {
- var val = {
- found: false,
- width: 512,
- height: 512,
- icon: missing
- };
- if (iconName && prefix && styles$2[prefix] && styles$2[prefix][iconName]) {
- var icon = styles$2[prefix][iconName];
- return resolve(asFoundIcon(icon));
- }
- var kitToken = null;
- var iconVersion = resolveCustomIconVersion(WINDOW.FontAwesomeKitConfig, iconName);
- if (WINDOW.FontAwesomeKitConfig && WINDOW.FontAwesomeKitConfig.token) {
- kitToken = WINDOW.FontAwesomeKitConfig.token;
- }
- if (iconName && prefix && !config.showMissingIcons) {
- reject(new MissingIcon("Icon is missing for prefix ".concat(prefix, " with icon name ").concat(iconName)));
- } else {
- resolve(val);
- }
- });
- }
- var styles$3 = namespace.styles;
- function generateSvgReplacementMutation(node, nodeMeta) {
- var iconName = nodeMeta.iconName,
- title = nodeMeta.title,
- titleId = nodeMeta.titleId,
- prefix = nodeMeta.prefix,
- transform = nodeMeta.transform,
- symbol = nodeMeta.symbol,
- mask = nodeMeta.mask,
- maskId = nodeMeta.maskId,
- extra = nodeMeta.extra;
- return new picked(function (resolve, reject) {
- picked.all([findIcon(iconName, prefix), findIcon(mask.iconName, mask.prefix)]).then(function (_ref) {
- var _ref2 = _slicedToArray(_ref, 2),
- main = _ref2[0],
- mask = _ref2[1];
- resolve([node, makeInlineSvgAbstract({
- icons: {
- main: main,
- mask: mask
- },
- prefix: prefix,
- iconName: iconName,
- transform: transform,
- symbol: symbol,
- mask: mask,
- maskId: maskId,
- title: title,
- titleId: titleId,
- extra: extra,
- watchable: true
- })]);
- });
- });
- }
- function generateLayersText(node, nodeMeta) {
- var title = nodeMeta.title,
- transform = nodeMeta.transform,
- extra = nodeMeta.extra;
- var width = null;
- var height = null;
- if (IS_IE) {
- var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);
- var boundingClientRect = node.getBoundingClientRect();
- width = boundingClientRect.width / computedFontSize;
- height = boundingClientRect.height / computedFontSize;
- }
- if (config.autoA11y && !title) {
- extra.attributes['aria-hidden'] = 'true';
- }
- return picked.resolve([node, makeLayersTextAbstract({
- content: node.innerHTML,
- width: width,
- height: height,
- transform: transform,
- title: title,
- extra: extra,
- watchable: true
- })]);
- }
- function generateMutation(node) {
- var nodeMeta = parseMeta(node);
- if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {
- return generateLayersText(node, nodeMeta);
- } else {
- return generateSvgReplacementMutation(node, nodeMeta);
- }
- }
- function onTree(root) {
- var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
- if (!IS_DOM) return;
- var htmlClassList = DOCUMENT.documentElement.classList;
- var hclAdd = function hclAdd(suffix) {
- return htmlClassList.add("".concat(HTML_CLASS_I2SVG_BASE_CLASS, "-").concat(suffix));
- };
- var hclRemove = function hclRemove(suffix) {
- return htmlClassList.remove("".concat(HTML_CLASS_I2SVG_BASE_CLASS, "-").concat(suffix));
- };
- var prefixes = config.autoFetchSvg ? Object.keys(PREFIX_TO_STYLE) : Object.keys(styles$3);
- var prefixesDomQuery = [".".concat(LAYERS_TEXT_CLASSNAME, ":not([").concat(DATA_FA_I2SVG, "])")].concat(prefixes.map(function (p) {
- return ".".concat(p, ":not([").concat(DATA_FA_I2SVG, "])");
- })).join(', ');
- if (prefixesDomQuery.length === 0) {
- return;
- }
- var candidates = [];
- try {
- candidates = toArray(root.querySelectorAll(prefixesDomQuery));
- } catch (e) {// noop
- }
- if (candidates.length > 0) {
- hclAdd('pending');
- hclRemove('complete');
- } else {
- return;
- }
- var mark = perf.begin('onTree');
- var mutations = candidates.reduce(function (acc, node) {
- try {
- var mutation = generateMutation(node);
- if (mutation) {
- acc.push(mutation);
- }
- } catch (e) {
- if (!PRODUCTION) {
- if (e instanceof MissingIcon) {
- console.error(e);
- }
- }
- }
- return acc;
- }, []);
- return new picked(function (resolve, reject) {
- picked.all(mutations).then(function (resolvedMutations) {
- perform(resolvedMutations, function () {
- hclAdd('active');
- hclAdd('complete');
- hclRemove('pending');
- if (typeof callback === 'function') callback();
- mark();
- resolve();
- });
- }).catch(function () {
- mark();
- reject();
- });
- });
- }
- function onNode(node) {
- var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
- generateMutation(node).then(function (mutation) {
- if (mutation) {
- perform([mutation], callback);
- }
- });
- }
- function replaceForPosition(node, position) {
- var pendingAttribute = "".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));
- return new picked(function (resolve, reject) {
- if (node.getAttribute(pendingAttribute) !== null) {
- // This node is already being processed
- return resolve();
- }
- var children = toArray(node.children);
- var alreadyProcessedPseudoElement = children.filter(function (c) {
- return c.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position;
- })[0];
- var styles = WINDOW.getComputedStyle(node, position);
- var fontFamily = styles.getPropertyValue('font-family').match(FONT_FAMILY_PATTERN);
- var fontWeight = styles.getPropertyValue('font-weight');
- var content = styles.getPropertyValue('content');
- if (alreadyProcessedPseudoElement && !fontFamily) {
- // If we've already processed it but the current computed style does not result in a font-family,
- // that probably means that a class name that was previously present to make the icon has been
- // removed. So we now should delete the icon.
- node.removeChild(alreadyProcessedPseudoElement);
- return resolve();
- } else if (fontFamily && content !== 'none' && content !== '') {
- var _content = styles.getPropertyValue('content');
- var prefix = ~['Solid', 'Regular', 'Light', 'Duotone', 'Brands', 'Kit'].indexOf(fontFamily[2]) ? STYLE_TO_PREFIX[fontFamily[2].toLowerCase()] : FONT_WEIGHT_TO_PREFIX[fontWeight];
- var hexValue = toHex(_content.length === 3 ? _content.substr(1, 1) : _content);
- var iconName = byUnicode(prefix, hexValue);
- var iconIdentifier = iconName; // Only convert the pseudo element in this :before/:after position into an icon if we haven't
- // already done so with the same prefix and iconName
- if (iconName && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) {
- node.setAttribute(pendingAttribute, iconIdentifier);
- if (alreadyProcessedPseudoElement) {
- // Delete the old one, since we're replacing it with a new one
- node.removeChild(alreadyProcessedPseudoElement);
- }
- var meta = blankMeta();
- var extra = meta.extra;
- extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;
- findIcon(iconName, prefix).then(function (main) {
- var abstract = makeInlineSvgAbstract(_objectSpread({}, meta, {
- icons: {
- main: main,
- mask: emptyCanonicalIcon()
- },
- prefix: prefix,
- iconName: iconIdentifier,
- extra: extra,
- watchable: true
- }));
- var element = DOCUMENT.createElement('svg');
- if (position === ':before') {
- node.insertBefore(element, node.firstChild);
- } else {
- node.appendChild(element);
- }
- element.outerHTML = abstract.map(function (a) {
- return toHtml(a);
- }).join('\n');
- node.removeAttribute(pendingAttribute);
- resolve();
- }).catch(reject);
- } else {
- resolve();
- }
- } else {
- resolve();
- }
- });
- }
- function replace(node) {
- return picked.all([replaceForPosition(node, ':before'), replaceForPosition(node, ':after')]);
- }
- function processable(node) {
- return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');
- }
- function searchPseudoElements (root) {
- if (!IS_DOM) return;
- return new picked(function (resolve, reject) {
- var operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);
- var end = perf.begin('searchPseudoElements');
- disableObservation();
- picked.all(operations).then(function () {
- end();
- enableObservation();
- resolve();
- }).catch(function () {
- end();
- enableObservation();
- reject();
- });
- });
- }
- var baseStyles = "svg:not(:root).svg-inline--fa {\n overflow: visible;\n}\n\n.svg-inline--fa {\n display: inline-block;\n font-size: inherit;\n height: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n}\n.svg-inline--fa.fa-lg {\n vertical-align: -0.225em;\n}\n.svg-inline--fa.fa-w-1 {\n width: 0.0625em;\n}\n.svg-inline--fa.fa-w-2 {\n width: 0.125em;\n}\n.svg-inline--fa.fa-w-3 {\n width: 0.1875em;\n}\n.svg-inline--fa.fa-w-4 {\n width: 0.25em;\n}\n.svg-inline--fa.fa-w-5 {\n width: 0.3125em;\n}\n.svg-inline--fa.fa-w-6 {\n width: 0.375em;\n}\n.svg-inline--fa.fa-w-7 {\n width: 0.4375em;\n}\n.svg-inline--fa.fa-w-8 {\n width: 0.5em;\n}\n.svg-inline--fa.fa-w-9 {\n width: 0.5625em;\n}\n.svg-inline--fa.fa-w-10 {\n width: 0.625em;\n}\n.svg-inline--fa.fa-w-11 {\n width: 0.6875em;\n}\n.svg-inline--fa.fa-w-12 {\n width: 0.75em;\n}\n.svg-inline--fa.fa-w-13 {\n width: 0.8125em;\n}\n.svg-inline--fa.fa-w-14 {\n width: 0.875em;\n}\n.svg-inline--fa.fa-w-15 {\n width: 0.9375em;\n}\n.svg-inline--fa.fa-w-16 {\n width: 1em;\n}\n.svg-inline--fa.fa-w-17 {\n width: 1.0625em;\n}\n.svg-inline--fa.fa-w-18 {\n width: 1.125em;\n}\n.svg-inline--fa.fa-w-19 {\n width: 1.1875em;\n}\n.svg-inline--fa.fa-w-20 {\n width: 1.25em;\n}\n.svg-inline--fa.fa-pull-left {\n margin-right: 0.3em;\n width: auto;\n}\n.svg-inline--fa.fa-pull-right {\n margin-left: 0.3em;\n width: auto;\n}\n.svg-inline--fa.fa-border {\n height: 1.5em;\n}\n.svg-inline--fa.fa-li {\n width: 2em;\n}\n.svg-inline--fa.fa-fw {\n width: 1.25em;\n}\n\n.fa-layers svg.svg-inline--fa {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.fa-layers {\n display: inline-block;\n height: 1em;\n position: relative;\n text-align: center;\n vertical-align: -0.125em;\n width: 1em;\n}\n.fa-layers svg.svg-inline--fa {\n -webkit-transform-origin: center center;\n transform-origin: center center;\n}\n\n.fa-layers-counter, .fa-layers-text {\n display: inline-block;\n position: absolute;\n text-align: center;\n}\n\n.fa-layers-text {\n left: 50%;\n top: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n -webkit-transform-origin: center center;\n transform-origin: center center;\n}\n\n.fa-layers-counter {\n background-color: #ff253a;\n border-radius: 1em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: #fff;\n height: 1.5em;\n line-height: 1;\n max-width: 5em;\n min-width: 1.5em;\n overflow: hidden;\n padding: 0.25em;\n right: 0;\n text-overflow: ellipsis;\n top: 0;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: top right;\n transform-origin: top right;\n}\n\n.fa-layers-bottom-right {\n bottom: 0;\n right: 0;\n top: auto;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: bottom right;\n transform-origin: bottom right;\n}\n\n.fa-layers-bottom-left {\n bottom: 0;\n left: 0;\n right: auto;\n top: auto;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: bottom left;\n transform-origin: bottom left;\n}\n\n.fa-layers-top-right {\n right: 0;\n top: 0;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: top right;\n transform-origin: top right;\n}\n\n.fa-layers-top-left {\n left: 0;\n right: auto;\n top: 0;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: top left;\n transform-origin: top left;\n}\n\n.fa-lg {\n font-size: 1.3333333333em;\n line-height: 0.75em;\n vertical-align: -0.0667em;\n}\n\n.fa-xs {\n font-size: 0.75em;\n}\n\n.fa-sm {\n font-size: 0.875em;\n}\n\n.fa-1x {\n font-size: 1em;\n}\n\n.fa-2x {\n font-size: 2em;\n}\n\n.fa-3x {\n font-size: 3em;\n}\n\n.fa-4x {\n font-size: 4em;\n}\n\n.fa-5x {\n font-size: 5em;\n}\n\n.fa-6x {\n font-size: 6em;\n}\n\n.fa-7x {\n font-size: 7em;\n}\n\n.fa-8x {\n font-size: 8em;\n}\n\n.fa-9x {\n font-size: 9em;\n}\n\n.fa-10x {\n font-size: 10em;\n}\n\n.fa-fw {\n text-align: center;\n width: 1.25em;\n}\n\n.fa-ul {\n list-style-type: none;\n margin-left: 2.5em;\n padding-left: 0;\n}\n.fa-ul > li {\n position: relative;\n}\n\n.fa-li {\n left: -2em;\n position: absolute;\n text-align: center;\n width: 2em;\n line-height: inherit;\n}\n\n.fa-border {\n border: solid 0.08em #eee;\n border-radius: 0.1em;\n padding: 0.2em 0.25em 0.15em;\n}\n\n.fa-pull-left {\n float: left;\n}\n\n.fa-pull-right {\n float: right;\n}\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n margin-right: 0.3em;\n}\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n margin-left: 0.3em;\n}\n\n.fa-spin {\n -webkit-animation: fa-spin 2s infinite linear;\n animation: fa-spin 2s infinite linear;\n}\n\n.fa-pulse {\n -webkit-animation: fa-spin 1s infinite steps(8);\n animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n.fa-rotate-90 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n -webkit-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n -webkit-transform: rotate(180deg);\n transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n -webkit-transform: rotate(270deg);\n transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n -webkit-transform: scale(-1, 1);\n transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n -webkit-transform: scale(1, -1);\n transform: scale(1, -1);\n}\n\n.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n -webkit-transform: scale(-1, -1);\n transform: scale(-1, -1);\n}\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical,\n:root .fa-flip-both {\n -webkit-filter: none;\n filter: none;\n}\n\n.fa-stack {\n display: inline-block;\n height: 2em;\n position: relative;\n width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.svg-inline--fa.fa-stack-1x {\n height: 1em;\n width: 1.25em;\n}\n.svg-inline--fa.fa-stack-2x {\n height: 2em;\n width: 2.5em;\n}\n\n.fa-inverse {\n color: #fff;\n}\n\n.sr-only {\n border: 0;\n clip: rect(0, 0, 0, 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n clip: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n position: static;\n width: auto;\n}\n\n.svg-inline--fa .fa-primary {\n fill: var(--fa-primary-color, currentColor);\n opacity: 1;\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa .fa-secondary {\n fill: var(--fa-secondary-color, currentColor);\n opacity: 0.4;\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-primary {\n opacity: 0.4;\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\n opacity: 1;\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa mask .fa-primary,\n.svg-inline--fa mask .fa-secondary {\n fill: black;\n}\n\n.fad.fa-inverse {\n color: #fff;\n}";
- function css () {
- var dfp = DEFAULT_FAMILY_PREFIX;
- var drc = DEFAULT_REPLACEMENT_CLASS;
- var fp = config.familyPrefix;
- var rc = config.replacementClass;
- var s = baseStyles;
- if (fp !== dfp || rc !== drc) {
- var dPatt = new RegExp("\\.".concat(dfp, "\\-"), 'g');
- var customPropPatt = new RegExp("\\--".concat(dfp, "\\-"), 'g');
- var rPatt = new RegExp("\\.".concat(drc), 'g');
- s = s.replace(dPatt, ".".concat(fp, "-")).replace(customPropPatt, "--".concat(fp, "-")).replace(rPatt, ".".concat(rc));
- }
- return s;
- }
- var Library =
- /*#__PURE__*/
- function () {
- function Library() {
- _classCallCheck(this, Library);
- this.definitions = {};
- }
- _createClass(Library, [{
- key: "add",
- value: function add() {
- var _this = this;
- for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {
- definitions[_key] = arguments[_key];
- }
- var additions = definitions.reduce(this._pullDefinitions, {});
- Object.keys(additions).forEach(function (key) {
- _this.definitions[key] = _objectSpread({}, _this.definitions[key] || {}, additions[key]);
- defineIcons(key, additions[key]);
- build();
- });
- }
- }, {
- key: "reset",
- value: function reset() {
- this.definitions = {};
- }
- }, {
- key: "_pullDefinitions",
- value: function _pullDefinitions(additions, definition) {
- var normalized = definition.prefix && definition.iconName && definition.icon ? {
- 0: definition
- } : definition;
- Object.keys(normalized).map(function (key) {
- var _normalized$key = normalized[key],
- prefix = _normalized$key.prefix,
- iconName = _normalized$key.iconName,
- icon = _normalized$key.icon;
- if (!additions[prefix]) additions[prefix] = {};
- additions[prefix][iconName] = icon;
- });
- return additions;
- }
- }]);
- return Library;
- }();
- function ensureCss() {
- if (config.autoAddCss && !_cssInserted) {
- insertCss(css());
- _cssInserted = true;
- }
- }
- function apiObject(val, abstractCreator) {
- Object.defineProperty(val, 'abstract', {
- get: abstractCreator
- });
- Object.defineProperty(val, 'html', {
- get: function get() {
- return val.abstract.map(function (a) {
- return toHtml(a);
- });
- }
- });
- Object.defineProperty(val, 'node', {
- get: function get() {
- if (!IS_DOM) return;
- var container = DOCUMENT.createElement('div');
- container.innerHTML = val.html;
- return container.children;
- }
- });
- return val;
- }
- function findIconDefinition(iconLookup) {
- var _iconLookup$prefix = iconLookup.prefix,
- prefix = _iconLookup$prefix === void 0 ? 'fa' : _iconLookup$prefix,
- iconName = iconLookup.iconName;
- if (!iconName) return;
- return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);
- }
- function resolveIcons(next) {
- return function (maybeIconDefinition) {
- var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});
- var mask = params.mask;
- if (mask) {
- mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});
- }
- return next(iconDefinition, _objectSpread({}, params, {
- mask: mask
- }));
- };
- }
- var library = new Library();
- var noAuto = function noAuto() {
- config.autoReplaceSvg = false;
- config.observeMutations = false;
- disconnect();
- };
- var _cssInserted = false;
- var dom = {
- i2svg: function i2svg() {
- var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- if (IS_DOM) {
- ensureCss();
- var _params$node = params.node,
- node = _params$node === void 0 ? DOCUMENT : _params$node,
- _params$callback = params.callback,
- callback = _params$callback === void 0 ? function () {} : _params$callback;
- if (config.searchPseudoElements) {
- searchPseudoElements(node);
- }
- return onTree(node, callback);
- } else {
- return picked.reject('Operation requires a DOM of some kind.');
- }
- },
- css: css,
- insertCss: function insertCss$$1() {
- if (!_cssInserted) {
- insertCss(css());
- _cssInserted = true;
- }
- },
- watch: function watch() {
- var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- var autoReplaceSvgRoot = params.autoReplaceSvgRoot,
- observeMutationsRoot = params.observeMutationsRoot;
- if (config.autoReplaceSvg === false) {
- config.autoReplaceSvg = true;
- }
- config.observeMutations = true;
- domready(function () {
- autoReplace({
- autoReplaceSvgRoot: autoReplaceSvgRoot
- });
- observe({
- treeCallback: onTree,
- nodeCallback: onNode,
- pseudoElementsCallback: searchPseudoElements,
- observeMutationsRoot: observeMutationsRoot
- });
- });
- }
- };
- var parse = {
- transform: function transform(transformString) {
- return parseTransformString(transformString);
- }
- };
- var icon = resolveIcons(function (iconDefinition) {
- var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- var _params$transform = params.transform,
- transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,
- _params$symbol = params.symbol,
- symbol = _params$symbol === void 0 ? false : _params$symbol,
- _params$mask = params.mask,
- mask = _params$mask === void 0 ? null : _params$mask,
- _params$maskId = params.maskId,
- maskId = _params$maskId === void 0 ? null : _params$maskId,
- _params$title = params.title,
- title = _params$title === void 0 ? null : _params$title,
- _params$titleId = params.titleId,
- titleId = _params$titleId === void 0 ? null : _params$titleId,
- _params$classes = params.classes,
- classes = _params$classes === void 0 ? [] : _params$classes,
- _params$attributes = params.attributes,
- attributes = _params$attributes === void 0 ? {} : _params$attributes,
- _params$styles = params.styles,
- styles = _params$styles === void 0 ? {} : _params$styles;
- if (!iconDefinition) return;
- var prefix = iconDefinition.prefix,
- iconName = iconDefinition.iconName,
- icon = iconDefinition.icon;
- return apiObject(_objectSpread({
- type: 'icon'
- }, iconDefinition), function () {
- ensureCss();
- if (config.autoA11y) {
- if (title) {
- attributes['aria-labelledby'] = "".concat(config.replacementClass, "-title-").concat(titleId || nextUniqueId());
- } else {
- attributes['aria-hidden'] = 'true';
- attributes['focusable'] = 'false';
- }
- }
- return makeInlineSvgAbstract({
- icons: {
- main: asFoundIcon(icon),
- mask: mask ? asFoundIcon(mask.icon) : {
- found: false,
- width: null,
- height: null,
- icon: {}
- }
- },
- prefix: prefix,
- iconName: iconName,
- transform: _objectSpread({}, meaninglessTransform, transform),
- symbol: symbol,
- title: title,
- maskId: maskId,
- titleId: titleId,
- extra: {
- attributes: attributes,
- styles: styles,
- classes: classes
- }
- });
- });
- });
- var text = function text(content) {
- var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- var _params$transform2 = params.transform,
- transform = _params$transform2 === void 0 ? meaninglessTransform : _params$transform2,
- _params$title2 = params.title,
- title = _params$title2 === void 0 ? null : _params$title2,
- _params$classes2 = params.classes,
- classes = _params$classes2 === void 0 ? [] : _params$classes2,
- _params$attributes2 = params.attributes,
- attributes = _params$attributes2 === void 0 ? {} : _params$attributes2,
- _params$styles2 = params.styles,
- styles = _params$styles2 === void 0 ? {} : _params$styles2;
- return apiObject({
- type: 'text',
- content: content
- }, function () {
- ensureCss();
- return makeLayersTextAbstract({
- content: content,
- transform: _objectSpread({}, meaninglessTransform, transform),
- title: title,
- extra: {
- attributes: attributes,
- styles: styles,
- classes: ["".concat(config.familyPrefix, "-layers-text")].concat(_toConsumableArray(classes))
- }
- });
- });
- };
- var counter = function counter(content) {
- var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- var _params$title3 = params.title,
- title = _params$title3 === void 0 ? null : _params$title3,
- _params$classes3 = params.classes,
- classes = _params$classes3 === void 0 ? [] : _params$classes3,
- _params$attributes3 = params.attributes,
- attributes = _params$attributes3 === void 0 ? {} : _params$attributes3,
- _params$styles3 = params.styles,
- styles = _params$styles3 === void 0 ? {} : _params$styles3;
- return apiObject({
- type: 'counter',
- content: content
- }, function () {
- ensureCss();
- return makeLayersCounterAbstract({
- content: content.toString(),
- title: title,
- extra: {
- attributes: attributes,
- styles: styles,
- classes: ["".concat(config.familyPrefix, "-layers-counter")].concat(_toConsumableArray(classes))
- }
- });
- });
- };
- var layer = function layer(assembler) {
- var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- var _params$classes4 = params.classes,
- classes = _params$classes4 === void 0 ? [] : _params$classes4;
- return apiObject({
- type: 'layer'
- }, function () {
- ensureCss();
- var children = [];
- assembler(function (args) {
- Array.isArray(args) ? args.map(function (a) {
- children = children.concat(a.abstract);
- }) : children = children.concat(args.abstract);
- });
- return [{
- tag: 'span',
- attributes: {
- class: ["".concat(config.familyPrefix, "-layers")].concat(_toConsumableArray(classes)).join(' ')
- },
- children: children
- }];
- });
- };
- var api = {
- noAuto: noAuto,
- config: config,
- dom: dom,
- library: library,
- parse: parse,
- findIconDefinition: findIconDefinition,
- icon: icon,
- text: text,
- counter: counter,
- layer: layer,
- toHtml: toHtml
- };
- var autoReplace = function autoReplace() {
- var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- var _params$autoReplaceSv = params.autoReplaceSvgRoot,
- autoReplaceSvgRoot = _params$autoReplaceSv === void 0 ? DOCUMENT : _params$autoReplaceSv;
- if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({
- node: autoReplaceSvgRoot
- });
- };
- /***/ }),
- /***/ "7o/Q":
- /*!***********************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/Subscriber.js ***!
- \***********************************************************/
- /*! exports provided: Subscriber, SafeSubscriber */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Subscriber", function() { return Subscriber; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SafeSubscriber", function() { return SafeSubscriber; });
- /* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util/isFunction */ "n6bG");
- /* harmony import */ var _Observer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Observer */ "gRHU");
- /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Subscription */ "quSY");
- /* harmony import */ var _internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../internal/symbol/rxSubscriber */ "2QA8");
- /* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./config */ "2fFW");
- /* harmony import */ var _util_hostReportError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util/hostReportError */ "NJ4a");
- class Subscriber extends _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"] {
- constructor(destinationOrNext, error, complete) {
- super();
- this.syncErrorValue = null;
- this.syncErrorThrown = false;
- this.syncErrorThrowable = false;
- this.isStopped = false;
- switch (arguments.length) {
- case 0:
- this.destination = _Observer__WEBPACK_IMPORTED_MODULE_1__["empty"];
- break;
- case 1:
- if (!destinationOrNext) {
- this.destination = _Observer__WEBPACK_IMPORTED_MODULE_1__["empty"];
- break;
- }
- if (typeof destinationOrNext === 'object') {
- if (destinationOrNext instanceof Subscriber) {
- this.syncErrorThrowable = destinationOrNext.syncErrorThrowable;
- this.destination = destinationOrNext;
- destinationOrNext.add(this);
- }
- else {
- this.syncErrorThrowable = true;
- this.destination = new SafeSubscriber(this, destinationOrNext);
- }
- break;
- }
- default:
- this.syncErrorThrowable = true;
- this.destination = new SafeSubscriber(this, destinationOrNext, error, complete);
- break;
- }
- }
- [_internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_3__["rxSubscriber"]]() { return this; }
- static create(next, error, complete) {
- const subscriber = new Subscriber(next, error, complete);
- subscriber.syncErrorThrowable = false;
- return subscriber;
- }
- next(value) {
- if (!this.isStopped) {
- this._next(value);
- }
- }
- error(err) {
- if (!this.isStopped) {
- this.isStopped = true;
- this._error(err);
- }
- }
- complete() {
- if (!this.isStopped) {
- this.isStopped = true;
- this._complete();
- }
- }
- unsubscribe() {
- if (this.closed) {
- return;
- }
- this.isStopped = true;
- super.unsubscribe();
- }
- _next(value) {
- this.destination.next(value);
- }
- _error(err) {
- this.destination.error(err);
- this.unsubscribe();
- }
- _complete() {
- this.destination.complete();
- this.unsubscribe();
- }
- _unsubscribeAndRecycle() {
- const { _parentOrParents } = this;
- this._parentOrParents = null;
- this.unsubscribe();
- this.closed = false;
- this.isStopped = false;
- this._parentOrParents = _parentOrParents;
- return this;
- }
- }
- class SafeSubscriber extends Subscriber {
- constructor(_parentSubscriber, observerOrNext, error, complete) {
- super();
- this._parentSubscriber = _parentSubscriber;
- let next;
- let context = this;
- if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_0__["isFunction"])(observerOrNext)) {
- next = observerOrNext;
- }
- else if (observerOrNext) {
- next = observerOrNext.next;
- error = observerOrNext.error;
- complete = observerOrNext.complete;
- if (observerOrNext !== _Observer__WEBPACK_IMPORTED_MODULE_1__["empty"]) {
- context = Object.create(observerOrNext);
- if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_0__["isFunction"])(context.unsubscribe)) {
- this.add(context.unsubscribe.bind(context));
- }
- context.unsubscribe = this.unsubscribe.bind(this);
- }
- }
- this._context = context;
- this._next = next;
- this._error = error;
- this._complete = complete;
- }
- next(value) {
- if (!this.isStopped && this._next) {
- const { _parentSubscriber } = this;
- if (!_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
- this.__tryOrUnsub(this._next, value);
- }
- else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {
- this.unsubscribe();
- }
- }
- }
- error(err) {
- if (!this.isStopped) {
- const { _parentSubscriber } = this;
- const { useDeprecatedSynchronousErrorHandling } = _config__WEBPACK_IMPORTED_MODULE_4__["config"];
- if (this._error) {
- if (!useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
- this.__tryOrUnsub(this._error, err);
- this.unsubscribe();
- }
- else {
- this.__tryOrSetError(_parentSubscriber, this._error, err);
- this.unsubscribe();
- }
- }
- else if (!_parentSubscriber.syncErrorThrowable) {
- this.unsubscribe();
- if (useDeprecatedSynchronousErrorHandling) {
- throw err;
- }
- Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_5__["hostReportError"])(err);
- }
- else {
- if (useDeprecatedSynchronousErrorHandling) {
- _parentSubscriber.syncErrorValue = err;
- _parentSubscriber.syncErrorThrown = true;
- }
- else {
- Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_5__["hostReportError"])(err);
- }
- this.unsubscribe();
- }
- }
- }
- complete() {
- if (!this.isStopped) {
- const { _parentSubscriber } = this;
- if (this._complete) {
- const wrappedComplete = () => this._complete.call(this._context);
- if (!_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
- this.__tryOrUnsub(wrappedComplete);
- this.unsubscribe();
- }
- else {
- this.__tryOrSetError(_parentSubscriber, wrappedComplete);
- this.unsubscribe();
- }
- }
- else {
- this.unsubscribe();
- }
- }
- }
- __tryOrUnsub(fn, value) {
- try {
- fn.call(this._context, value);
- }
- catch (err) {
- this.unsubscribe();
- if (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling) {
- throw err;
- }
- else {
- Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_5__["hostReportError"])(err);
- }
- }
- }
- __tryOrSetError(parent, fn, value) {
- if (!_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling) {
- throw new Error('bad call');
- }
- try {
- fn.call(this._context, value);
- }
- catch (err) {
- if (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling) {
- parent.syncErrorValue = err;
- parent.syncErrorThrown = true;
- return true;
- }
- else {
- Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_5__["hostReportError"])(err);
- return true;
- }
- }
- return false;
- }
- _unsubscribe() {
- const { _parentSubscriber } = this;
- this._context = null;
- this._parentSubscriber = null;
- _parentSubscriber.unsubscribe();
- }
- }
- //# sourceMappingURL=Subscriber.js.map
- /***/ }),
- /***/ "7ve7":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduler/Action.js ***!
- \*****************************************************************/
- /*! exports provided: Action */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Action", function() { return Action; });
- /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscription */ "quSY");
- class Action extends _Subscription__WEBPACK_IMPORTED_MODULE_0__["Subscription"] {
- constructor(scheduler, work) {
- super();
- }
- schedule(state, delay = 0) {
- return this;
- }
- }
- //# sourceMappingURL=Action.js.map
- /***/ }),
- /***/ "7wxJ":
- /*!*********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/combineAll.js ***!
- \*********************************************************************/
- /*! exports provided: combineAll */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "combineAll", function() { return combineAll; });
- /* harmony import */ var _observable_combineLatest__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../observable/combineLatest */ "itXk");
- function combineAll(project) {
- return (source) => source.lift(new _observable_combineLatest__WEBPACK_IMPORTED_MODULE_0__["CombineLatestOperator"](project));
- }
- //# sourceMappingURL=combineAll.js.map
- /***/ }),
- /***/ "8LU1":
- /*!********************************************************!*\
- !*** ./node_modules/@angular/cdk/fesm2015/coercion.js ***!
- \********************************************************/
- /*! exports provided: _isNumberValue, coerceArray, coerceBooleanProperty, coerceCssPixelValue, coerceElement, coerceNumberProperty */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_isNumberValue", function() { return _isNumberValue; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "coerceArray", function() { return coerceArray; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "coerceBooleanProperty", function() { return coerceBooleanProperty; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "coerceCssPixelValue", function() { return coerceCssPixelValue; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "coerceElement", function() { return coerceElement; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "coerceNumberProperty", function() { return coerceNumberProperty; });
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /** Coerces a data-bound value (typically a string) to a boolean. */
- function coerceBooleanProperty(value) {
- return value != null && `${value}` !== 'false';
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function coerceNumberProperty(value, fallbackValue = 0) {
- return _isNumberValue(value) ? Number(value) : fallbackValue;
- }
- /**
- * Whether the provided value is considered a number.
- * @docs-private
- */
- function _isNumberValue(value) {
- // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,
- // and other non-number values as NaN, where Number just uses 0) but it considers the string
- // '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.
- return !isNaN(parseFloat(value)) && !isNaN(Number(value));
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /** Wraps the provided value in an array, unless the provided value is an array. */
- function coerceArray(value) {
- return Array.isArray(value) ? value : [value];
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /** Coerces a value to a CSS pixel value. */
- function coerceCssPixelValue(value) {
- if (value == null) {
- return '';
- }
- return typeof value === 'string' ? value : `${value}px`;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Coerces an ElementRef or an Element into an element.
- * Useful for APIs that can accept either a ref or the native element itself.
- */
- function coerceElement(elementOrRef) {
- return elementOrRef instanceof _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] ? elementOrRef.nativeElement : elementOrRef;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- //# sourceMappingURL=coercion.js.map
- /***/ }),
- /***/ "8Qeq":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/canReportError.js ***!
- \********************************************************************/
- /*! exports provided: canReportError */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "canReportError", function() { return canReportError; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function canReportError(observer) {
- while (observer) {
- const { closed, destination, isStopped } = observer;
- if (closed || isStopped) {
- return false;
- }
- else if (destination && destination instanceof _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]) {
- observer = destination;
- }
- else {
- observer = null;
- }
- }
- return true;
- }
- //# sourceMappingURL=canReportError.js.map
- /***/ }),
- /***/ "9M8c":
- /*!**********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/bufferCount.js ***!
- \**********************************************************************/
- /*! exports provided: bufferCount */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bufferCount", function() { return bufferCount; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function bufferCount(bufferSize, startBufferEvery = null) {
- return function bufferCountOperatorFunction(source) {
- return source.lift(new BufferCountOperator(bufferSize, startBufferEvery));
- };
- }
- class BufferCountOperator {
- constructor(bufferSize, startBufferEvery) {
- this.bufferSize = bufferSize;
- this.startBufferEvery = startBufferEvery;
- if (!startBufferEvery || bufferSize === startBufferEvery) {
- this.subscriberClass = BufferCountSubscriber;
- }
- else {
- this.subscriberClass = BufferSkipCountSubscriber;
- }
- }
- call(subscriber, source) {
- return source.subscribe(new this.subscriberClass(subscriber, this.bufferSize, this.startBufferEvery));
- }
- }
- class BufferCountSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, bufferSize) {
- super(destination);
- this.bufferSize = bufferSize;
- this.buffer = [];
- }
- _next(value) {
- const buffer = this.buffer;
- buffer.push(value);
- if (buffer.length == this.bufferSize) {
- this.destination.next(buffer);
- this.buffer = [];
- }
- }
- _complete() {
- const buffer = this.buffer;
- if (buffer.length > 0) {
- this.destination.next(buffer);
- }
- super._complete();
- }
- }
- class BufferSkipCountSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, bufferSize, startBufferEvery) {
- super(destination);
- this.bufferSize = bufferSize;
- this.startBufferEvery = startBufferEvery;
- this.buffers = [];
- this.count = 0;
- }
- _next(value) {
- const { bufferSize, startBufferEvery, buffers, count } = this;
- this.count++;
- if (count % startBufferEvery === 0) {
- buffers.push([]);
- }
- for (let i = buffers.length; i--;) {
- const buffer = buffers[i];
- buffer.push(value);
- if (buffer.length === bufferSize) {
- buffers.splice(i, 1);
- this.destination.next(buffer);
- }
- }
- }
- _complete() {
- const { buffers, destination } = this;
- while (buffers.length > 0) {
- let buffer = buffers.shift();
- if (buffer.length > 0) {
- destination.next(buffer);
- }
- }
- super._complete();
- }
- }
- //# sourceMappingURL=bufferCount.js.map
- /***/ }),
- /***/ "9ihq":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/elementAt.js ***!
- \********************************************************************/
- /*! exports provided: elementAt */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elementAt", function() { return elementAt; });
- /* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/ArgumentOutOfRangeError */ "4I5i");
- /* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./filter */ "pLZG");
- /* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./throwIfEmpty */ "XDbj");
- /* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./defaultIfEmpty */ "xbPD");
- /* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./take */ "IzEk");
- function elementAt(index, defaultValue) {
- if (index < 0) {
- throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__["ArgumentOutOfRangeError"]();
- }
- const hasDefaultValue = arguments.length >= 2;
- return (source) => source.pipe(Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])((v, i) => i === index), Object(_take__WEBPACK_IMPORTED_MODULE_4__["take"])(1), hasDefaultValue
- ? Object(_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__["defaultIfEmpty"])(defaultValue)
- : Object(_throwIfEmpty__WEBPACK_IMPORTED_MODULE_2__["throwIfEmpty"])(() => new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__["ArgumentOutOfRangeError"]()));
- }
- //# sourceMappingURL=elementAt.js.map
- /***/ }),
- /***/ "9ppp":
- /*!*****************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/ObjectUnsubscribedError.js ***!
- \*****************************************************************************/
- /*! exports provided: ObjectUnsubscribedError */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObjectUnsubscribedError", function() { return ObjectUnsubscribedError; });
- const ObjectUnsubscribedErrorImpl = (() => {
- function ObjectUnsubscribedErrorImpl() {
- Error.call(this);
- this.message = 'object unsubscribed';
- this.name = 'ObjectUnsubscribedError';
- return this;
- }
- ObjectUnsubscribedErrorImpl.prototype = Object.create(Error.prototype);
- return ObjectUnsubscribedErrorImpl;
- })();
- const ObjectUnsubscribedError = ObjectUnsubscribedErrorImpl;
- //# sourceMappingURL=ObjectUnsubscribedError.js.map
- /***/ }),
- /***/ "A/ap":
- /*!*********************************************************!*\
- !*** ./node_modules/detect-passive-events/lib/index.js ***!
- \*********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- // adapted from https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md
- var detectPassiveEvents = {
- update: function update() {
- if (typeof window !== 'undefined' && typeof window.addEventListener === 'function') {
- var passive = false;
- var options = Object.defineProperty({}, 'passive', {
- get: function get() {
- passive = true;
- }
- });
- // note: have to set and remove a no-op listener instead of null
- // (which was used previously), becasue Edge v15 throws an error
- // when providing a null callback.
- // https://github.com/rafgraph/detect-passive-events/pull/3
- var noop = function noop() {};
- window.addEventListener('testPassiveEventSupport', noop, options);
- window.removeEventListener('testPassiveEventSupport', noop, options);
- detectPassiveEvents.hasSupport = passive;
- }
- }
- };
- detectPassiveEvents.update();
- exports.default = detectPassiveEvents;
- /***/ }),
- /***/ "A3iJ":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/partition.js ***!
- \********************************************************************/
- /*! exports provided: partition */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return partition; });
- /* harmony import */ var _util_not__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/not */ "F97/");
- /* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./filter */ "pLZG");
- function partition(predicate, thisArg) {
- return (source) => [
- Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])(predicate, thisArg)(source),
- Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])(Object(_util_not__WEBPACK_IMPORTED_MODULE_0__["not"])(predicate, thisArg))(source)
- ];
- }
- //# sourceMappingURL=partition.js.map
- /***/ }),
- /***/ "BFxc":
- /*!*******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/takeLast.js ***!
- \*******************************************************************/
- /*! exports provided: takeLast */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "takeLast", function() { return takeLast; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/ArgumentOutOfRangeError */ "4I5i");
- /* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../observable/empty */ "EY2u");
- function takeLast(count) {
- return function takeLastOperatorFunction(source) {
- if (count === 0) {
- return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_2__["empty"])();
- }
- else {
- return source.lift(new TakeLastOperator(count));
- }
- };
- }
- class TakeLastOperator {
- constructor(total) {
- this.total = total;
- if (this.total < 0) {
- throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_1__["ArgumentOutOfRangeError"];
- }
- }
- call(subscriber, source) {
- return source.subscribe(new TakeLastSubscriber(subscriber, this.total));
- }
- }
- class TakeLastSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, total) {
- super(destination);
- this.total = total;
- this.ring = new Array();
- this.count = 0;
- }
- _next(value) {
- const ring = this.ring;
- const total = this.total;
- const count = this.count++;
- if (ring.length < total) {
- ring.push(value);
- }
- else {
- const index = count % total;
- ring[index] = value;
- }
- }
- _complete() {
- const destination = this.destination;
- let count = this.count;
- if (count > 0) {
- const total = this.count >= this.total ? this.total : this.count;
- const ring = this.ring;
- for (let i = 0; i < total; i++) {
- const idx = (count++) % total;
- destination.next(ring[idx]);
- }
- }
- destination.complete();
- }
- }
- //# sourceMappingURL=takeLast.js.map
- /***/ }),
- /***/ "CMyj":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/isIterable.js ***!
- \****************************************************************/
- /*! exports provided: isIterable */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isIterable", function() { return isIterable; });
- /* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../symbol/iterator */ "Lhse");
- function isIterable(input) {
- return input && typeof input[_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__["iterator"]] === 'function';
- }
- //# sourceMappingURL=isIterable.js.map
- /***/ }),
- /***/ "CRDf":
- /*!***************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/subscribeToObservable.js ***!
- \***************************************************************************/
- /*! exports provided: subscribeToObservable */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToObservable", function() { return subscribeToObservable; });
- /* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../symbol/observable */ "kJWO");
- const subscribeToObservable = (obj) => (subscriber) => {
- const obs = obj[_symbol_observable__WEBPACK_IMPORTED_MODULE_0__["observable"]]();
- if (typeof obs.subscribe !== 'function') {
- throw new TypeError('Provided object does not correctly implement Symbol.observable');
- }
- else {
- return obs.subscribe(subscriber);
- }
- };
- //# sourceMappingURL=subscribeToObservable.js.map
- /***/ }),
- /***/ "CS/5":
- /*!*****************************************************************************************!*\
- !*** ./node_modules/ng-dynamic-component/__ivy_ngcc__/fesm2015/ng-dynamic-component.js ***!
- \*****************************************************************************************/
- /*! exports provided: COMPONENT_INJECTOR, ComponentOutletInjectorDirective, ComponentOutletInjectorModule, DynamicAttributesDirective, DynamicAttributesModule, DynamicComponent, DynamicComponentInjectorToken, DynamicDirectivesDirective, DynamicDirectivesModule, DynamicIoDirective, DynamicIoModule, DynamicModule, EventArgumentToken, defaultEventArgumentFactory, dynamicDirectiveDef, ɵa, ɵb */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "COMPONENT_INJECTOR", function() { return COMPONENT_INJECTOR; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComponentOutletInjectorDirective", function() { return ComponentOutletInjectorDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComponentOutletInjectorModule", function() { return ComponentOutletInjectorModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DynamicAttributesDirective", function() { return DynamicAttributesDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DynamicAttributesModule", function() { return DynamicAttributesModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DynamicComponent", function() { return DynamicComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DynamicComponentInjectorToken", function() { return DynamicComponentInjectorToken; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DynamicDirectivesDirective", function() { return DynamicDirectivesDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DynamicDirectivesModule", function() { return DynamicDirectivesModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DynamicIoDirective", function() { return DynamicIoDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DynamicIoModule", function() { return DynamicIoModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DynamicModule", function() { return DynamicModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EventArgumentToken", function() { return EventArgumentToken; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultEventArgumentFactory", function() { return defaultEventArgumentFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dynamicDirectiveDef", function() { return dynamicDirectiveDef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵa", function() { return DynamicIoModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵb", function() { return DynamicComponentInjectorToken; });
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ "ofXK");
- /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ "qCKp");
- /* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ "kU1M");
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/io/types.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @record
- */
- function InputsType() { }
- /**
- * @record
- */
- function OutputsType() { }
- /**
- * @record
- */
- function OutputWithArgs() { }
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/io/event-argument.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @return {?}
- */
- function defaultEventArgumentFactory() {
- return '$event';
- }
- /** @type {?} */
- const EventArgumentToken = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('EventArgument', {
- providedIn: 'root',
- factory: defaultEventArgumentFactory,
- });
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/component-injector/token.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @record
- */
- function DynamicComponentInjector() { }
- if (false) {}
- /** @type {?} */
- const DynamicComponentInjectorToken = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('DynamicComponentInjector');
- /**
- * @deprecated Since v6.0.0 - Use {\@link DynamicComponentInjectorToken} instead
- * and provide component class via `useExisting` instead of `useValue`
- * @type {?}
- */
- const COMPONENT_INJECTOR = DynamicComponentInjectorToken;
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/component-injector/component-outlet-injector.directive.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class ComponentOutletInjectorDirective {
- /**
- * @param {?} componentOutlet
- */
- constructor(componentOutlet) {
- this.componentOutlet = componentOutlet;
- }
- /**
- * @return {?}
- */
- get componentRef() {
- // NOTE: Accessing private APIs of Angular
- return ((/** @type {?} */ (this.componentOutlet)))._componentRef;
- }
- }
- ComponentOutletInjectorDirective.ɵfac = function ComponentOutletInjectorDirective_Factory(t) { return new (t || ComponentOutletInjectorDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgComponentOutlet"], 1)); };
- ComponentOutletInjectorDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: ComponentOutletInjectorDirective, selectors: [["", "ngComponentOutlet", ""]], exportAs: ["ndcComponentOutletInjector"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([
- {
- provide: DynamicComponentInjectorToken,
- useExisting: ComponentOutletInjectorDirective
- },
- ])] });
- /** @nocollapse */
- ComponentOutletInjectorDirective.ctorParameters = () => [
- { type: _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgComponentOutlet"], decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ComponentOutletInjectorDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- // tslint:disable-next-line: directive-selector
- selector: '[ngComponentOutlet]',
- exportAs: 'ndcComponentOutletInjector',
- providers: [
- {
- provide: DynamicComponentInjectorToken,
- useExisting: ComponentOutletInjectorDirective
- },
- ]
- }]
- }], function () { return [{ type: _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgComponentOutlet"], decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
- }] }]; }, null); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/component-injector/component-outlet-injector.module.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class ComponentOutletInjectorModule {
- }
- ComponentOutletInjectorModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: ComponentOutletInjectorModule });
- ComponentOutletInjectorModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function ComponentOutletInjectorModule_Factory(t) { return new (t || ComponentOutletInjectorModule)(); }, imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](ComponentOutletInjectorModule, { declarations: function () { return [ComponentOutletInjectorDirective]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]; }, exports: function () { return [ComponentOutletInjectorDirective]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ComponentOutletInjectorModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]],
- exports: [ComponentOutletInjectorDirective],
- declarations: [ComponentOutletInjectorDirective]
- }]
- }], null, null); })();
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/component-injector/index.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/util.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @param {?} val
- * @return {?}
- */
- function createNewChange(val) {
- return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["SimpleChange"](undefined, val, true);
- }
- /**
- * @param {?} val
- * @param {?} prevVal
- * @return {?}
- */
- function createChange(val, prevVal) {
- return new _angular_core__WEBPACK_IMPORTED_MODULE_0__["SimpleChange"](prevVal, val, false);
- }
- /**
- * @return {?}
- */
- function noop() { }
- /**
- * @param {?} ctor
- * @param {?} reflect
- * @return {?}
- */
- function getCtorParamTypes(ctor, reflect) {
- return reflect.getMetadata('design:paramtypes', ctor);
- }
- /**
- * Extract type arguments from Angular Directive/Component
- * @param {?} type
- * @return {?}
- */
- function extractNgParamTypes(type) {
- var _a, _b, _c;
- // NOTE: Accessing private APIs of Angular
- return (_c = (_b = (_a = ((/** @type {?} */ (type)))) === null || _a === void 0 ? void 0 : _a.ctorParameters) === null || _b === void 0 ? void 0 : _b.call(_a)) === null || _c === void 0 ? void 0 : _c.map((/**
- * @param {?} param
- * @return {?}
- */
- param => param.type));
- }
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/io/io.service.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @record
- */
- function IOMapInfo() { }
- if (false) {}
- /**
- * @record
- */
- function IoInitOptions() { }
- if (false) {}
- /**
- * @record
- */
- function OutputsTypeProcessed() { }
- class IoService {
- /**
- * @param {?} differs
- * @param {?} cfr
- * @param {?} eventArgument
- */
- constructor(differs, cfr, eventArgument) {
- this.differs = differs;
- this.cfr = cfr;
- this.eventArgument = eventArgument;
- this.checkInit = this.failInit;
- this.lastComponentInst = null;
- this.inputsDiffer = this.differs.find({}).create();
- this.compFactory = null;
- this.outputsShouldDisconnect$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- this.outputsChanged = (/**
- * @return {?}
- */
- () => false);
- }
- /**
- * @private
- * @return {?}
- */
- get compRef() {
- return this.compInjector.componentRef;
- }
- /**
- * @private
- * @return {?}
- */
- get componentInst() {
- return this.compRef ? this.compRef.instance : null;
- }
- /**
- * @private
- * @return {?}
- */
- get componentInstChanged() {
- if (this.lastComponentInst !== this.componentInst) {
- this.lastComponentInst = this.componentInst;
- return true;
- }
- else {
- return false;
- }
- }
- /**
- * @private
- * @return {?}
- */
- get compCdr() {
- // tslint:disable-next-line: deprecation
- return this.compRef ? this.compRef.injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]) : null;
- }
- /**
- * @return {?}
- */
- ngOnDestroy() {
- this._disconnectOutputs();
- }
- /**
- * @param {?} componentInjector
- * @param {?=} options
- * @return {?}
- */
- init(componentInjector, options = {}) {
- this.checkInit = componentInjector ? noop : this.failInit;
- this.compInjector = componentInjector;
- if (options.trackOutputChanges) {
- /** @type {?} */
- const outputsDiffer = this.differs.find({}).create();
- this.outputsChanged = (/**
- * @param {?} outputs
- * @return {?}
- */
- outputs => !!outputsDiffer.diff(outputs));
- }
- }
- /**
- * @param {?} inputs
- * @param {?} outputs
- * @param {?} inputsChanged
- * @param {?} outputsChanged
- * @return {?}
- */
- update(inputs, outputs, inputsChanged, outputsChanged) {
- this.checkInit();
- this.updateIO(inputs, outputs);
- /** @type {?} */
- const compChanged = this.componentInstChanged;
- if (compChanged || inputsChanged) {
- /** @type {?} */
- const inputsChanges = this._getInputsChanges();
- if (inputsChanges) {
- this._updateInputChanges(inputsChanges);
- }
- this.updateInputs(compChanged || !this.lastInputChanges);
- }
- if (compChanged || outputsChanged) {
- this.bindOutputs();
- }
- }
- /**
- * @return {?}
- */
- maybeUpdate() {
- this.checkInit();
- if (this.componentInstChanged) {
- this.updateInputs(true);
- this.bindOutputs();
- return;
- }
- if (this.outputsChanged(this.outputs)) {
- this.bindOutputs();
- }
- if (!this.inputs) {
- return;
- }
- /** @type {?} */
- const inputsChanges = this._getInputsChanges();
- if (inputsChanges) {
- /** @type {?} */
- const isNotFirstChange = !!this.lastInputChanges;
- this._updateInputChanges(inputsChanges);
- if (isNotFirstChange) {
- this.updateInputs();
- }
- }
- }
- /**
- * @private
- * @param {?} inputs
- * @param {?} outputs
- * @return {?}
- */
- updateIO(inputs, outputs) {
- this.inputs = inputs;
- this.outputs = outputs;
- }
- /**
- * @private
- * @param {?=} isFirstChange
- * @return {?}
- */
- updateInputs(isFirstChange = false) {
- if (isFirstChange) {
- this._updateCompFactory();
- }
- /** @type {?} */
- const compInst = this.componentInst;
- /** @type {?} */
- let inputs = this.inputs;
- if (!inputs || !compInst) {
- return;
- }
- inputs = this._resolveInputs(inputs);
- Object.keys(inputs).forEach((/**
- * @param {?} p
- * @return {?}
- */
- p => (compInst[p] = inputs[p])));
- // Mark component for check to re-render with new inputs
- if (this.compCdr) {
- this.compCdr.markForCheck();
- }
- this.notifyOnInputChanges(this.lastInputChanges, isFirstChange);
- }
- /**
- * @private
- * @return {?}
- */
- bindOutputs() {
- this._disconnectOutputs();
- /** @type {?} */
- const compInst = this.componentInst;
- /** @type {?} */
- let outputs = this.outputs;
- if (!outputs || !compInst) {
- return;
- }
- outputs = this._resolveOutputs(outputs);
- Object.keys(outputs)
- .filter((/**
- * @param {?} p
- * @return {?}
- */
- p => compInst[p]))
- .forEach((/**
- * @param {?} p
- * @return {?}
- */
- p => compInst[p]
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this.outputsShouldDisconnect$))
- .subscribe((/**
- * @param {?} event
- * @return {?}
- */
- (event) => ((/** @type {?} */ (outputs[p])))(event)))));
- }
- /**
- * @private
- * @param {?=} changes
- * @param {?=} forceFirstChanges
- * @return {?}
- */
- notifyOnInputChanges(changes = {}, forceFirstChanges) {
- // Exit early if component not interested to receive changes
- if (!this.componentInst.ngOnChanges) {
- return;
- }
- if (forceFirstChanges) {
- changes = this._collectFirstChanges();
- }
- this.componentInst.ngOnChanges(changes);
- }
- /**
- * @private
- * @return {?}
- */
- _disconnectOutputs() {
- this.outputsShouldDisconnect$.next();
- }
- /**
- * @private
- * @return {?}
- */
- _getInputsChanges() {
- return this.inputsDiffer.diff(this.inputs);
- }
- /**
- * @private
- * @param {?} differ
- * @return {?}
- */
- _updateInputChanges(differ) {
- this.lastInputChanges = this._collectChangesFromDiffer(differ);
- }
- /**
- * @private
- * @return {?}
- */
- _collectFirstChanges() {
- /** @type {?} */
- const changes = (/** @type {?} */ ({}));
- /** @type {?} */
- const inputs = this.inputs;
- Object.keys(inputs).forEach((/**
- * @param {?} prop
- * @return {?}
- */
- prop => (changes[prop] = createNewChange(inputs[prop]))));
- return this._resolveChanges(changes);
- }
- /**
- * @private
- * @param {?} differ
- * @return {?}
- */
- _collectChangesFromDiffer(differ) {
- /** @type {?} */
- const changes = {};
- differ.forEachAddedItem((/**
- * @param {?} record
- * @return {?}
- */
- record => (changes[record.key] = createNewChange(record.currentValue))));
- differ.forEachChangedItem((/**
- * @param {?} record
- * @return {?}
- */
- record => (changes[record.key] = createChange(record.currentValue, record.previousValue))));
- return this._resolveChanges(changes);
- }
- /**
- * @private
- * @return {?}
- */
- _resolveCompFactory() {
- try {
- try {
- return this.cfr.resolveComponentFactory(this.compRef.componentType);
- }
- catch (e) {
- // Fallback if componentType does not exist (happens on NgComponentOutlet)
- return this.cfr.resolveComponentFactory(this.compRef.instance.constructor);
- }
- }
- catch (e) {
- // Factory not available - bailout
- return null;
- }
- }
- /**
- * @private
- * @return {?}
- */
- _updateCompFactory() {
- this.compFactory = this._resolveCompFactory();
- }
- /**
- * @private
- * @param {?} inputs
- * @return {?}
- */
- _resolveInputs(inputs) {
- if (!this.compFactory) {
- return inputs;
- }
- return this._remapIO(inputs, this.compFactory.inputs);
- }
- /**
- * @private
- * @param {?} outputs
- * @return {?}
- */
- _resolveOutputs(outputs) {
- outputs = this._processOutputs(outputs);
- if (!this.compFactory) {
- return outputs;
- }
- return this._remapIO(outputs, this.compFactory.outputs);
- }
- /**
- * @private
- * @param {?} outputs
- * @return {?}
- */
- _processOutputs(outputs) {
- /** @type {?} */
- const processedOutputs = {};
- Object.keys(outputs).forEach((/**
- * @param {?} key
- * @return {?}
- */
- key => {
- /** @type {?} */
- const outputExpr = outputs[key];
- if (typeof outputExpr === 'function') {
- processedOutputs[key] = outputExpr;
- }
- else {
- processedOutputs[key] =
- outputExpr && this._processOutputArgs(outputExpr);
- }
- }));
- return processedOutputs;
- }
- /**
- * @private
- * @param {?} output
- * @return {?}
- */
- _processOutputArgs(output) {
- const { handler } = output;
- /** @type {?} */
- const args = 'args' in output ? output.args || [] : [this.eventArgument];
- return (/**
- * @param {?} event
- * @return {?}
- */
- event => handler(...args.map((/**
- * @param {?} arg
- * @return {?}
- */
- arg => (arg === this.eventArgument ? event : arg)))));
- }
- /**
- * @private
- * @param {?} changes
- * @return {?}
- */
- _resolveChanges(changes) {
- if (!this.compFactory) {
- return changes;
- }
- return this._remapIO(changes, this.compFactory.inputs);
- }
- /**
- * @private
- * @template T
- * @param {?} io
- * @param {?} mapping
- * @return {?}
- */
- _remapIO(io, mapping) {
- /** @type {?} */
- const newIO = {};
- Object.keys(io).forEach((/**
- * @param {?} key
- * @return {?}
- */
- key => {
- /** @type {?} */
- const newKey = this._findPropByTplInMapping(key, mapping) || key;
- newIO[newKey] = io[key];
- }));
- return (/** @type {?} */ (newIO));
- }
- /**
- * @private
- * @param {?} tplName
- * @param {?} mapping
- * @return {?}
- */
- _findPropByTplInMapping(tplName, mapping) {
- for (const map of mapping) {
- if (map.templateName === tplName) {
- return map.propName;
- }
- }
- return null;
- }
- /**
- * @private
- * @return {?}
- */
- failInit() {
- throw Error('IoService: ComponentInjector was not set! Please call init() method!');
- }
- }
- IoService.ɵfac = function IoService_Factory(t) { return new (t || IoService)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](EventArgumentToken)); };
- IoService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: IoService, factory: IoService.ɵfac });
- /** @nocollapse */
- IoService.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"] },
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [EventArgumentToken,] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](IoService, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"] }, { type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [EventArgumentToken]
- }] }]; }, null); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/io/io-factory.service.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class IoFactoryService {
- /**
- * @param {?} differs
- * @param {?} cfr
- * @param {?} eventArgument
- */
- constructor(differs, cfr, eventArgument) {
- this.differs = differs;
- this.cfr = cfr;
- this.eventArgument = eventArgument;
- }
- /**
- * @return {?}
- */
- create() {
- return new IoService(this.differs, this.cfr, this.eventArgument);
- }
- }
- IoFactoryService.ɵfac = function IoFactoryService_Factory(t) { return new (t || IoFactoryService)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](EventArgumentToken)); };
- /** @nocollapse */
- IoFactoryService.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"] },
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [EventArgumentToken,] }] }
- ];
- /** @nocollapse */ IoFactoryService.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function IoFactoryService_Factory() { return new IoFactoryService(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(EventArgumentToken)); }, token: IoFactoryService, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](IoFactoryService, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"] }, { type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [EventArgumentToken]
- }] }]; }, null); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/io/index.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/dynamic-io/dynamic-io.directive.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- // tslint:disable-next-line: no-conflicting-lifecycle
- class DynamicIoDirective {
- /**
- * @param {?} ioService
- * @param {?=} componentInjector
- */
- constructor(ioService, componentInjector) {
- this.ioService = ioService;
- this.componentInjector = componentInjector;
- this.ioService.init(this.componentInjector);
- }
- /**
- * @private
- * @return {?}
- */
- get inputs() {
- return this.ndcDynamicInputs || this.ngComponentOutletNdcDynamicInputs;
- }
- /**
- * @private
- * @return {?}
- */
- get outputs() {
- return this.ndcDynamicOutputs || this.ngComponentOutletNdcDynamicOutputs;
- }
- /**
- * @param {?} changes
- * @return {?}
- */
- ngOnChanges(changes) {
- this.ioService.update(this.inputs, this.outputs, this.inputsChanged(changes), this.outputsChanged(changes));
- }
- /**
- * @return {?}
- */
- ngDoCheck() {
- this.ioService.maybeUpdate();
- }
- /**
- * @private
- * @param {?} changes
- * @return {?}
- */
- inputsChanged(changes) {
- return ('ngComponentOutletNdcDynamicInputs' in changes ||
- 'ndcDynamicInputs' in changes);
- }
- /**
- * @private
- * @param {?} changes
- * @return {?}
- */
- outputsChanged(changes) {
- return ('ngComponentOutletNdcDynamicOutputs' in changes ||
- 'ndcDynamicOutputs' in changes);
- }
- }
- DynamicIoDirective.ɵfac = function DynamicIoDirective_Factory(t) { return new (t || DynamicIoDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](IoService), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](DynamicComponentInjectorToken, 8)); };
- DynamicIoDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: DynamicIoDirective, selectors: [["", "ndcDynamicInputs", ""], ["", "ndcDynamicOutputs", ""], ["", "ngComponentOutletNdcDynamicInputs", ""], ["", "ngComponentOutletNdcDynamicOutputs", ""]], inputs: { ndcDynamicInputs: "ndcDynamicInputs", ngComponentOutletNdcDynamicInputs: "ngComponentOutletNdcDynamicInputs", ndcDynamicOutputs: "ndcDynamicOutputs", ngComponentOutletNdcDynamicOutputs: "ngComponentOutletNdcDynamicOutputs" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([IoService]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- /** @nocollapse */
- DynamicIoDirective.ctorParameters = () => [
- { type: IoService },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [DynamicComponentInjectorToken,] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }] }
- ];
- DynamicIoDirective.propDecorators = {
- ndcDynamicInputs: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ngComponentOutletNdcDynamicInputs: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ndcDynamicOutputs: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ngComponentOutletNdcDynamicOutputs: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DynamicIoDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[ndcDynamicInputs],[ndcDynamicOutputs],[ngComponentOutletNdcDynamicInputs],[ngComponentOutletNdcDynamicOutputs]',
- providers: [IoService]
- }]
- }], function () { return [{ type: IoService }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [DynamicComponentInjectorToken]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }] }]; }, { ndcDynamicInputs: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ngComponentOutletNdcDynamicInputs: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ndcDynamicOutputs: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ngComponentOutletNdcDynamicOutputs: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/dynamic-io/dynamic-io.module.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class DynamicIoModule {
- }
- DynamicIoModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: DynamicIoModule });
- DynamicIoModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function DynamicIoModule_Factory(t) { return new (t || DynamicIoModule)(); }, imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]], ComponentOutletInjectorModule] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](DynamicIoModule, { declarations: function () { return [DynamicIoDirective]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]; }, exports: function () { return [DynamicIoDirective, ComponentOutletInjectorModule]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DynamicIoModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]],
- exports: [DynamicIoDirective, ComponentOutletInjectorModule],
- declarations: [DynamicIoDirective]
- }]
- }], null, null); })();
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/dynamic-io/index.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/dynamic.component.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class DynamicComponent {
- /**
- * @param {?} vcr
- * @param {?} cfr
- */
- constructor(vcr, cfr) {
- this.vcr = vcr;
- this.cfr = cfr;
- this.ndcDynamicCreated = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- }
- /**
- * @param {?} changes
- * @return {?}
- */
- ngOnChanges(changes) {
- if (changes.ndcDynamicComponent) {
- this.createDynamicComponent();
- }
- }
- /**
- * @return {?}
- */
- createDynamicComponent() {
- this.vcr.clear();
- this.componentRef = null;
- if (this.ndcDynamicComponent) {
- this.componentRef = this.vcr.createComponent(this.cfr.resolveComponentFactory(this.ndcDynamicComponent), 0, this._resolveInjector(), this.ndcDynamicContent);
- this.ndcDynamicCreated.emit(this.componentRef);
- }
- }
- /**
- * @private
- * @return {?}
- */
- _resolveInjector() {
- /** @type {?} */
- let injector = this.ndcDynamicInjector || this.vcr.injector;
- if (this.ndcDynamicProviders) {
- injector = _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"].create({
- providers: this.ndcDynamicProviders,
- parent: injector,
- });
- }
- return injector;
- }
- }
- DynamicComponent.ɵfac = function DynamicComponent_Factory(t) { return new (t || DynamicComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"])); };
- DynamicComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: DynamicComponent, selectors: [["ndc-dynamic"]], inputs: { ndcDynamicComponent: "ndcDynamicComponent", ndcDynamicInjector: "ndcDynamicInjector", ndcDynamicProviders: "ndcDynamicProviders", ndcDynamicContent: "ndcDynamicContent" }, outputs: { ndcDynamicCreated: "ndcDynamicCreated" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([
- { provide: DynamicComponentInjectorToken, useExisting: DynamicComponent },
- ]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], decls: 0, vars: 0, template: function DynamicComponent_Template(rf, ctx) { }, encapsulation: 2 });
- /** @nocollapse */
- DynamicComponent.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"] }
- ];
- DynamicComponent.propDecorators = {
- ndcDynamicComponent: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ndcDynamicInjector: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ndcDynamicProviders: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ndcDynamicContent: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ndcDynamicCreated: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DynamicComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ndc-dynamic',
- template: '',
- providers: [
- { provide: DynamicComponentInjectorToken, useExisting: DynamicComponent },
- ]
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"] }]; }, { ndcDynamicCreated: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], ndcDynamicComponent: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ndcDynamicInjector: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ndcDynamicProviders: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ndcDynamicContent: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/dynamic.module.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class DynamicModule {
- }
- DynamicModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: DynamicModule });
- DynamicModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function DynamicModule_Factory(t) { return new (t || DynamicModule)(); }, imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], DynamicIoModule], DynamicIoModule] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](DynamicModule, { declarations: function () { return [DynamicComponent]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], DynamicIoModule]; }, exports: function () { return [DynamicComponent, DynamicIoModule]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DynamicModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], DynamicIoModule],
- exports: [DynamicComponent, DynamicIoModule],
- declarations: [DynamicComponent]
- }]
- }], null, null); })();
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/dynamic-attributes/dynamic-attributes.directive.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @record
- */
- function AttributesMap() { }
- /**
- * @record
- */
- function AttributeActions() { }
- if (false) {}
- class DynamicAttributesDirective {
- /**
- * @param {?} renderer
- * @param {?} differs
- * @param {?} injector
- * @param {?=} componentInjector
- */
- constructor(renderer, differs, injector, componentInjector) {
- this.renderer = renderer;
- this.differs = differs;
- this.injector = injector;
- this.componentInjector = componentInjector;
- this.attrsDiffer = this.differs.find({}).create();
- }
- /**
- * @private
- * @return {?}
- */
- get _attributes() {
- return (this.ndcDynamicAttributes || this.ngComponentOutletNdcDynamicAttributes);
- }
- /**
- * @private
- * @return {?}
- */
- get _nativeElement() {
- var _a;
- return (_a = this.componentInjector.componentRef) === null || _a === void 0 ? void 0 : _a.location.nativeElement;
- }
- /**
- * @private
- * @return {?}
- */
- get _compType() {
- var _a;
- return (_a = this.componentInjector.componentRef) === null || _a === void 0 ? void 0 : _a.componentType;
- }
- /**
- * @private
- * @return {?}
- */
- get _isCompChanged() {
- if (this.lastCompType !== this._compType) {
- this.lastCompType = this._compType;
- return true;
- }
- return false;
- }
- /**
- * @return {?}
- */
- ngDoCheck() {
- /** @type {?} */
- const isCompChanged = this._isCompChanged;
- /** @type {?} */
- const changes = this.attrsDiffer.diff(this._attributes);
- if (changes) {
- this.lastAttrActions = this._changesToAttrActions(changes);
- }
- if (changes || (isCompChanged && this.lastAttrActions)) {
- this._updateAttributes(this.lastAttrActions);
- }
- }
- /**
- * @param {?} name
- * @param {?} value
- * @param {?=} namespace
- * @return {?}
- */
- setAttribute(name, value, namespace) {
- if (this._nativeElement) {
- this.renderer.setAttribute(this._nativeElement, name, value, namespace);
- }
- }
- /**
- * @param {?} name
- * @param {?=} namespace
- * @return {?}
- */
- removeAttribute(name, namespace) {
- if (this._nativeElement) {
- this.renderer.removeAttribute(this._nativeElement, name, namespace);
- }
- }
- /**
- * @private
- * @param {?} actions
- * @return {?}
- */
- _updateAttributes(actions) {
- // ? Early exit if no dynamic component
- if (!this._compType) {
- return;
- }
- Object.keys(actions.set).forEach((/**
- * @param {?} key
- * @return {?}
- */
- key => this.setAttribute(key, actions.set[key])));
- actions.remove.forEach((/**
- * @param {?} key
- * @return {?}
- */
- key => this.removeAttribute(key)));
- }
- /**
- * @private
- * @param {?} changes
- * @return {?}
- */
- _changesToAttrActions(changes) {
- /** @type {?} */
- const attrActions = {
- set: {},
- remove: [],
- };
- changes.forEachAddedItem((/**
- * @param {?} r
- * @return {?}
- */
- r => (attrActions.set[r.key] = r.currentValue)));
- changes.forEachChangedItem((/**
- * @param {?} r
- * @return {?}
- */
- r => (attrActions.set[r.key] = r.currentValue)));
- changes.forEachRemovedItem((/**
- * @param {?} r
- * @return {?}
- */
- r => attrActions.remove.push(r.key)));
- return attrActions;
- }
- }
- DynamicAttributesDirective.ɵfac = function DynamicAttributesDirective_Factory(t) { return new (t || DynamicAttributesDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](DynamicComponentInjectorToken, 8)); };
- DynamicAttributesDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: DynamicAttributesDirective, selectors: [["", "ndcDynamicAttributes", ""], ["", "ngComponentOutletNdcDynamicAttributes", ""]], inputs: { ndcDynamicAttributes: "ndcDynamicAttributes", ngComponentOutletNdcDynamicAttributes: "ngComponentOutletNdcDynamicAttributes" }, exportAs: ["ndcDynamicAttributes"] });
- /** @nocollapse */
- DynamicAttributesDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [DynamicComponentInjectorToken,] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }] }
- ];
- DynamicAttributesDirective.propDecorators = {
- ndcDynamicAttributes: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ngComponentOutletNdcDynamicAttributes: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DynamicAttributesDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[ndcDynamicAttributes],[ngComponentOutletNdcDynamicAttributes]',
- exportAs: 'ndcDynamicAttributes'
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [DynamicComponentInjectorToken]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }] }]; }, { ndcDynamicAttributes: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ngComponentOutletNdcDynamicAttributes: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/dynamic-attributes/dynamic-attributes.module.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class DynamicAttributesModule {
- }
- DynamicAttributesModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: DynamicAttributesModule });
- DynamicAttributesModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function DynamicAttributesModule_Factory(t) { return new (t || DynamicAttributesModule)(); }, imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]], ComponentOutletInjectorModule] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](DynamicAttributesModule, { declarations: function () { return [DynamicAttributesDirective]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]; }, exports: function () { return [DynamicAttributesDirective, ComponentOutletInjectorModule]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DynamicAttributesModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]],
- exports: [DynamicAttributesDirective, ComponentOutletInjectorModule],
- declarations: [DynamicAttributesDirective]
- }]
- }], null, null); })();
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/dynamic-attributes/index.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/window-ref/window-ref-browser.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @return {?}
- */
- function browserWindowFactory() {
- return window;
- }
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/window-ref/window-ref.service.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /** @type {?} */
- const WindowRefToken = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('WindowRef', {
- providedIn: 'root',
- factory: browserWindowFactory,
- });
- class WindowRefService {
- /**
- * @param {?} injector
- */
- constructor(injector) {
- this.injector = injector;
- this.nativeWindow = this.injector.get(WindowRefToken, null);
- }
- }
- WindowRefService.ɵfac = function WindowRefService_Factory(t) { return new (t || WindowRefService)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"])); };
- /** @nocollapse */
- WindowRefService.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] }
- ];
- /** @nocollapse */ WindowRefService.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function WindowRefService_Factory() { return new WindowRefService(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_0__["INJECTOR"])); }, token: WindowRefService, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](WindowRefService, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] }]; }, null); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/window-ref/index.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/dynamic-directives/dynamic-directives.directive.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @record
- * @template T
- */
- function DynamicDirectiveDef() { }
- if (false) {}
- /**
- * @template T
- * @param {?} type
- * @param {?=} inputs
- * @param {?=} outputs
- * @return {?}
- */
- function dynamicDirectiveDef(type, inputs, outputs) {
- return { type, inputs, outputs };
- }
- /**
- * @record
- * @template T
- */
- function DirectiveRef() { }
- if (false) {}
- class DynamicDirectivesDirective {
- /**
- * @param {?} iterableDiffers
- * @param {?} ioFactoryService
- * @param {?} windowRef
- * @param {?=} componentInjector
- */
- constructor(iterableDiffers, ioFactoryService, windowRef, componentInjector) {
- this.iterableDiffers = iterableDiffers;
- this.ioFactoryService = ioFactoryService;
- this.windowRef = windowRef;
- this.componentInjector = componentInjector;
- this.ndcDynamicDirectivesCreated = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.dirRef = new Map();
- this.dirIo = new Map();
- this.dirsDiffer = this.iterableDiffers
- .find([])
- .create((/**
- * @param {?} _
- * @param {?} def
- * @return {?}
- */
- (_, def) => def.type));
- }
- /**
- * @private
- * @return {?}
- */
- get directives() {
- return (this.ndcDynamicDirectives || this.ngComponentOutletNdcDynamicDirectives);
- }
- /**
- * @private
- * @return {?}
- */
- get componentRef() {
- return this.componentInjector.componentRef;
- }
- /**
- * @private
- * @return {?}
- */
- get compInstance() {
- return this.componentRef && this.componentRef.instance;
- }
- /**
- * @private
- * @return {?}
- */
- get isCompChanged() {
- if (this.lastCompInstance !== this.compInstance) {
- this.lastCompInstance = this.compInstance;
- return true;
- }
- return false;
- }
- /**
- * @private
- * @return {?}
- */
- get hostInjector() {
- return this.componentRef.injector;
- }
- /**
- * @private
- * @return {?}
- */
- get hostVcr() {
- // NOTE: Accessing private APIs of Angular
- // tslint:disable-next-line: no-string-literal
- return this.componentRef['_viewRef']['_viewContainerRef'];
- }
- /**
- * @private
- * @return {?}
- */
- get reflect() {
- return ((/** @type {?} */ (this.windowRef.nativeWindow))).Reflect;
- }
- /**
- * @return {?}
- */
- ngDoCheck() {
- if (this.maybeDestroyDirectives()) {
- return;
- }
- /** @type {?} */
- const dirsChanges = this.dirsDiffer.diff(this.directives);
- if (!dirsChanges) {
- return this.updateDirectives();
- }
- this.processDirChanges(dirsChanges);
- }
- /**
- * @return {?}
- */
- ngOnDestroy() {
- this.destroyAllDirectives();
- }
- /**
- * @private
- * @return {?}
- */
- maybeDestroyDirectives() {
- if (this.isCompChanged || !this.componentRef) {
- this.dirsDiffer.diff([]);
- this.destroyAllDirectives();
- }
- return !this.componentRef;
- }
- /**
- * @private
- * @param {?} changes
- * @return {?}
- */
- processDirChanges(changes) {
- changes.forEachRemovedItem((/**
- * @param {?} __0
- * @return {?}
- */
- ({ item }) => this.destroyDirective(item)));
- /** @type {?} */
- const createdDirs = [];
- changes.forEachAddedItem((/**
- * @param {?} __0
- * @return {?}
- */
- ({ item }) => createdDirs.push(this.initDirective(item))));
- if (createdDirs.length) {
- this.ndcDynamicDirectivesCreated.emit(createdDirs.filter(Boolean));
- }
- }
- /**
- * @private
- * @return {?}
- */
- updateDirectives() {
- this.directives.forEach((/**
- * @param {?} dir
- * @return {?}
- */
- dir => this.updateDirective(dir)));
- }
- /**
- * @private
- * @param {?} dirDef
- * @return {?}
- */
- updateDirective(dirDef) {
- /** @type {?} */
- const io = this.dirIo.get(dirDef.type);
- io.update(dirDef.inputs, dirDef.outputs, false, false);
- io.maybeUpdate();
- }
- /**
- * @private
- * @param {?} dirDef
- * @return {?}
- */
- initDirective(dirDef) {
- if (this.dirRef.has(dirDef.type)) {
- return;
- }
- /** @type {?} */
- const instance = this.createDirective(dirDef.type);
- /** @type {?} */
- const dir = {
- instance,
- type: dirDef.type,
- injector: this.hostInjector,
- hostComponent: this.componentRef.instance,
- hostView: this.componentRef.hostView,
- location: this.componentRef.location,
- changeDetectorRef: this.componentRef.changeDetectorRef,
- onDestroy: this.componentRef.onDestroy,
- };
- this.initDirIO(dir, dirDef.inputs, dirDef.outputs);
- this.callInitHooks(instance);
- this.dirRef.set(dir.type, dir);
- return dir;
- }
- /**
- * @private
- * @return {?}
- */
- destroyAllDirectives() {
- this.dirRef.forEach((/**
- * @param {?} dir
- * @return {?}
- */
- dir => this.destroyDirRef(dir)));
- this.dirRef.clear();
- this.dirIo.clear();
- }
- /**
- * @private
- * @param {?} dirDef
- * @return {?}
- */
- destroyDirective(dirDef) {
- this.destroyDirRef(this.dirRef.get(dirDef.type));
- this.dirRef.delete(dirDef.type);
- this.dirIo.delete(dirDef.type);
- }
- /**
- * @private
- * @param {?} dir
- * @param {?=} inputs
- * @param {?=} outputs
- * @return {?}
- */
- initDirIO(dir, inputs, outputs) {
- /** @type {?} */
- const io = this.ioFactoryService.create();
- io.init({ componentRef: this.dirToCompDef(dir) }, { trackOutputChanges: true });
- io.update(inputs, outputs, !!inputs, !!outputs);
- this.dirIo.set(dir.type, io);
- }
- /**
- * @private
- * @param {?} dir
- * @return {?}
- */
- dirToCompDef(dir) {
- return {
- changeDetectorRef: this.componentRef.changeDetectorRef,
- hostView: this.componentRef.hostView,
- location: this.componentRef.location,
- destroy: this.componentRef.destroy,
- onDestroy: this.componentRef.onDestroy,
- injector: this.componentRef.injector,
- instance: dir.instance,
- componentType: dir.type,
- };
- }
- /**
- * @private
- * @param {?} dir
- * @return {?}
- */
- destroyDirRef(dir) {
- /** @type {?} */
- const io = this.dirIo.get(dir.type);
- io.ngOnDestroy();
- if ('ngOnDestroy' in dir.instance) {
- dir.instance.ngOnDestroy();
- }
- }
- /**
- * @private
- * @template T
- * @param {?} dirType
- * @return {?}
- */
- createDirective(dirType) {
- /** @type {?} */
- const directiveInjector = _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"].create({
- providers: [
- {
- provide: dirType,
- useClass: dirType,
- deps: this.resolveDirParamTypes(dirType),
- },
- { provide: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], useValue: this.componentRef.location },
- ],
- parent: this.hostInjector,
- name: `DynamicDirectiveInjector:${dirType.name}@${this.componentRef.componentType.name}`,
- });
- return directiveInjector.get(dirType);
- }
- /**
- * @private
- * @param {?} dirType
- * @return {?}
- */
- resolveDirParamTypes(dirType) {
- var _a, _b;
- return ((_b = (_a =
- // First try Angular Compiler's metadata
- extractNgParamTypes(dirType)) !== null && _a !== void 0 ? _a :
- // Then fallback to Typescript Reflect API
- getCtorParamTypes(dirType, this.reflect)) !== null && _b !== void 0 ? _b :
- // Bailout
- []);
- }
- /**
- * @private
- * @param {?} obj
- * @return {?}
- */
- callInitHooks(obj) {
- this.callHook(obj, 'ngOnInit');
- this.callHook(obj, 'ngDoCheck');
- this.callHook(obj, 'ngAfterContentInit');
- this.callHook(obj, 'ngAfterContentChecked');
- this.callHook(obj, 'ngAfterViewInit');
- this.callHook(obj, 'ngAfterViewChecked');
- }
- /**
- * @private
- * @param {?} obj
- * @param {?} hook
- * @param {?=} args
- * @return {?}
- */
- callHook(obj, hook, args = []) {
- if (obj[hook]) {
- obj[hook](...args);
- }
- }
- }
- DynamicDirectivesDirective.ɵfac = function DynamicDirectivesDirective_Factory(t) { return new (t || DynamicDirectivesDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["IterableDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](IoFactoryService), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](WindowRefService), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](DynamicComponentInjectorToken, 8)); };
- DynamicDirectivesDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: DynamicDirectivesDirective, selectors: [["", "ndcDynamicDirectives", ""], ["", "ngComponentOutletNdcDynamicDirectives", ""]], inputs: { ndcDynamicDirectives: "ndcDynamicDirectives", ngComponentOutletNdcDynamicDirectives: "ngComponentOutletNdcDynamicDirectives" }, outputs: { ndcDynamicDirectivesCreated: "ndcDynamicDirectivesCreated" } });
- /** @nocollapse */
- DynamicDirectivesDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["IterableDiffers"] },
- { type: IoFactoryService },
- { type: WindowRefService },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [DynamicComponentInjectorToken,] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }] }
- ];
- DynamicDirectivesDirective.propDecorators = {
- ndcDynamicDirectives: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ngComponentOutletNdcDynamicDirectives: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ndcDynamicDirectivesCreated: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DynamicDirectivesDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[ndcDynamicDirectives],[ngComponentOutletNdcDynamicDirectives]'
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["IterableDiffers"] }, { type: IoFactoryService }, { type: WindowRefService }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [DynamicComponentInjectorToken]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }] }]; }, { ndcDynamicDirectivesCreated: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], ndcDynamicDirectives: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ngComponentOutletNdcDynamicDirectives: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/dynamic-directives/dynamic-directives.module.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class DynamicDirectivesModule {
- }
- DynamicDirectivesModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: DynamicDirectivesModule });
- DynamicDirectivesModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function DynamicDirectivesModule_Factory(t) { return new (t || DynamicDirectivesModule)(); }, imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]], ComponentOutletInjectorModule] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](DynamicDirectivesModule, { declarations: function () { return [DynamicDirectivesDirective]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]; }, exports: function () { return [DynamicDirectivesDirective, ComponentOutletInjectorModule]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DynamicDirectivesModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]],
- exports: [DynamicDirectivesDirective, ComponentOutletInjectorModule],
- declarations: [DynamicDirectivesDirective]
- }]
- }], null, null); })();
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/dynamic-directives/index.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @fileoverview added by tsickle
- * Generated from: public-api.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @fileoverview added by tsickle
- * Generated from: ng-dynamic-component.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- //# sourceMappingURL=ng-dynamic-component.js.map
- /***/ }),
- /***/ "Cfvw":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/from.js ***!
- \****************************************************************/
- /*! exports provided: from */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "from", function() { return from; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/subscribeTo */ "SeVD");
- /* harmony import */ var _scheduled_scheduled__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../scheduled/scheduled */ "7HRe");
- function from(input, scheduler) {
- if (!scheduler) {
- if (input instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]) {
- return input;
- }
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](Object(_util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__["subscribeTo"])(input));
- }
- else {
- return Object(_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_2__["scheduled"])(input, scheduler);
- }
- }
- //# sourceMappingURL=from.js.map
- /***/ }),
- /***/ "CqXF":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/mapTo.js ***!
- \****************************************************************/
- /*! exports provided: mapTo */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapTo", function() { return mapTo; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function mapTo(value) {
- return (source) => source.lift(new MapToOperator(value));
- }
- class MapToOperator {
- constructor(value) {
- this.value = value;
- }
- call(subscriber, source) {
- return source.subscribe(new MapToSubscriber(subscriber, this.value));
- }
- }
- class MapToSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, value) {
- super(destination);
- this.value = value;
- }
- _next(x) {
- this.destination.next(this.value);
- }
- }
- //# sourceMappingURL=mapTo.js.map
- /***/ }),
- /***/ "D0XW":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduler/async.js ***!
- \****************************************************************/
- /*! exports provided: async */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "async", function() { return async; });
- /* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsyncAction */ "3N8a");
- /* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AsyncScheduler */ "IjjT");
- const async = new _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__["AsyncScheduler"](_AsyncAction__WEBPACK_IMPORTED_MODULE_0__["AsyncAction"]);
- //# sourceMappingURL=async.js.map
- /***/ }),
- /***/ "DH7j":
- /*!*************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/isArray.js ***!
- \*************************************************************/
- /*! exports provided: isArray */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isArray", function() { return isArray; });
- const isArray = (() => Array.isArray || ((x) => x && typeof x.length === 'number'))();
- //# sourceMappingURL=isArray.js.map
- /***/ }),
- /***/ "EQ5u":
- /*!*********************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/ConnectableObservable.js ***!
- \*********************************************************************************/
- /*! exports provided: ConnectableObservable, connectableObservableDescriptor */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConnectableObservable", function() { return ConnectableObservable; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "connectableObservableDescriptor", function() { return connectableObservableDescriptor; });
- /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subject */ "XNiG");
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Subscription */ "quSY");
- /* harmony import */ var _operators_refCount__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../operators/refCount */ "x+ZX");
- class ConnectableObservable extends _Observable__WEBPACK_IMPORTED_MODULE_1__["Observable"] {
- constructor(source, subjectFactory) {
- super();
- this.source = source;
- this.subjectFactory = subjectFactory;
- this._refCount = 0;
- this._isComplete = false;
- }
- _subscribe(subscriber) {
- return this.getSubject().subscribe(subscriber);
- }
- getSubject() {
- const subject = this._subject;
- if (!subject || subject.isStopped) {
- this._subject = this.subjectFactory();
- }
- return this._subject;
- }
- connect() {
- let connection = this._connection;
- if (!connection) {
- this._isComplete = false;
- connection = this._connection = new _Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"]();
- connection.add(this.source
- .subscribe(new ConnectableSubscriber(this.getSubject(), this)));
- if (connection.closed) {
- this._connection = null;
- connection = _Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"].EMPTY;
- }
- }
- return connection;
- }
- refCount() {
- return Object(_operators_refCount__WEBPACK_IMPORTED_MODULE_4__["refCount"])()(this);
- }
- }
- const connectableObservableDescriptor = (() => {
- const connectableProto = ConnectableObservable.prototype;
- return {
- operator: { value: null },
- _refCount: { value: 0, writable: true },
- _subject: { value: null, writable: true },
- _connection: { value: null, writable: true },
- _subscribe: { value: connectableProto._subscribe },
- _isComplete: { value: connectableProto._isComplete, writable: true },
- getSubject: { value: connectableProto.getSubject },
- connect: { value: connectableProto.connect },
- refCount: { value: connectableProto.refCount }
- };
- })();
- class ConnectableSubscriber extends _Subject__WEBPACK_IMPORTED_MODULE_0__["SubjectSubscriber"] {
- constructor(destination, connectable) {
- super(destination);
- this.connectable = connectable;
- }
- _error(err) {
- this._unsubscribe();
- super._error(err);
- }
- _complete() {
- this.connectable._isComplete = true;
- this._unsubscribe();
- super._complete();
- }
- _unsubscribe() {
- const connectable = this.connectable;
- if (connectable) {
- this.connectable = null;
- const connection = connectable._connection;
- connectable._refCount = 0;
- connectable._subject = null;
- connectable._connection = null;
- if (connection) {
- connection.unsubscribe();
- }
- }
- }
- }
- class RefCountOperator {
- constructor(connectable) {
- this.connectable = connectable;
- }
- call(subscriber, source) {
- const { connectable } = this;
- connectable._refCount++;
- const refCounter = new RefCountSubscriber(subscriber, connectable);
- const subscription = source.subscribe(refCounter);
- if (!refCounter.closed) {
- refCounter.connection = connectable.connect();
- }
- return subscription;
- }
- }
- class RefCountSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_2__["Subscriber"] {
- constructor(destination, connectable) {
- super(destination);
- this.connectable = connectable;
- }
- _unsubscribe() {
- const { connectable } = this;
- if (!connectable) {
- this.connection = null;
- return;
- }
- this.connectable = null;
- const refCount = connectable._refCount;
- if (refCount <= 0) {
- this.connection = null;
- return;
- }
- connectable._refCount = refCount - 1;
- if (refCount > 1) {
- this.connection = null;
- return;
- }
- const { connection } = this;
- const sharedConnection = connectable._connection;
- this.connection = null;
- if (sharedConnection && (!connection || sharedConnection === connection)) {
- sharedConnection.unsubscribe();
- }
- }
- }
- //# sourceMappingURL=ConnectableObservable.js.map
- /***/ }),
- /***/ "EY2u":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/empty.js ***!
- \*****************************************************************/
- /*! exports provided: EMPTY, empty */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EMPTY", function() { return EMPTY; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empty", function() { return empty; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- const EMPTY = new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => subscriber.complete());
- function empty(scheduler) {
- return scheduler ? emptyScheduled(scheduler) : EMPTY;
- }
- function emptyScheduled(scheduler) {
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => scheduler.schedule(() => subscriber.complete()));
- }
- //# sourceMappingURL=empty.js.map
- /***/ }),
- /***/ "F97/":
- /*!*********************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/not.js ***!
- \*********************************************************/
- /*! exports provided: not */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "not", function() { return not; });
- function not(pred, thisArg) {
- function notPred() {
- return !(notPred.pred.apply(notPred.thisArg, arguments));
- }
- notPred.pred = pred;
- notPred.thisArg = thisArg;
- return notPred;
- }
- //# sourceMappingURL=not.js.map
- /***/ }),
- /***/ "FD9M":
- /*!***********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/bufferToggle.js ***!
- \***********************************************************************/
- /*! exports provided: bufferToggle */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bufferToggle", function() { return bufferToggle; });
- /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscription */ "quSY");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- function bufferToggle(openings, closingSelector) {
- return function bufferToggleOperatorFunction(source) {
- return source.lift(new BufferToggleOperator(openings, closingSelector));
- };
- }
- class BufferToggleOperator {
- constructor(openings, closingSelector) {
- this.openings = openings;
- this.closingSelector = closingSelector;
- }
- call(subscriber, source) {
- return source.subscribe(new BufferToggleSubscriber(subscriber, this.openings, this.closingSelector));
- }
- }
- class BufferToggleSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"] {
- constructor(destination, openings, closingSelector) {
- super(destination);
- this.openings = openings;
- this.closingSelector = closingSelector;
- this.contexts = [];
- this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(this, openings));
- }
- _next(value) {
- const contexts = this.contexts;
- const len = contexts.length;
- for (let i = 0; i < len; i++) {
- contexts[i].buffer.push(value);
- }
- }
- _error(err) {
- const contexts = this.contexts;
- while (contexts.length > 0) {
- const context = contexts.shift();
- context.subscription.unsubscribe();
- context.buffer = null;
- context.subscription = null;
- }
- this.contexts = null;
- super._error(err);
- }
- _complete() {
- const contexts = this.contexts;
- while (contexts.length > 0) {
- const context = contexts.shift();
- this.destination.next(context.buffer);
- context.subscription.unsubscribe();
- context.buffer = null;
- context.subscription = null;
- }
- this.contexts = null;
- super._complete();
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- outerValue ? this.closeBuffer(outerValue) : this.openBuffer(innerValue);
- }
- notifyComplete(innerSub) {
- this.closeBuffer(innerSub.context);
- }
- openBuffer(value) {
- try {
- const closingSelector = this.closingSelector;
- const closingNotifier = closingSelector.call(this, value);
- if (closingNotifier) {
- this.trySubscribe(closingNotifier);
- }
- }
- catch (err) {
- this._error(err);
- }
- }
- closeBuffer(context) {
- const contexts = this.contexts;
- if (contexts && context) {
- const { buffer, subscription } = context;
- this.destination.next(buffer);
- contexts.splice(contexts.indexOf(context), 1);
- this.remove(subscription);
- subscription.unsubscribe();
- }
- }
- trySubscribe(closingNotifier) {
- const contexts = this.contexts;
- const buffer = [];
- const subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_0__["Subscription"]();
- const context = { buffer, subscription };
- contexts.push(context);
- const innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(this, closingNotifier, context);
- if (!innerSubscription || innerSubscription.closed) {
- this.closeBuffer(context);
- }
- else {
- innerSubscription.context = context;
- this.add(innerSubscription);
- subscription.add(innerSubscription);
- }
- }
- }
- //# sourceMappingURL=bufferToggle.js.map
- /***/ }),
- /***/ "FQpF":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/expand.js ***!
- \*****************************************************************/
- /*! exports provided: expand, ExpandOperator, ExpandSubscriber */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expand", function() { return expand; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ExpandOperator", function() { return ExpandOperator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ExpandSubscriber", function() { return ExpandSubscriber; });
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function expand(project, concurrent = Number.POSITIVE_INFINITY, scheduler = undefined) {
- concurrent = (concurrent || 0) < 1 ? Number.POSITIVE_INFINITY : concurrent;
- return (source) => source.lift(new ExpandOperator(project, concurrent, scheduler));
- }
- class ExpandOperator {
- constructor(project, concurrent, scheduler) {
- this.project = project;
- this.concurrent = concurrent;
- this.scheduler = scheduler;
- }
- call(subscriber, source) {
- return source.subscribe(new ExpandSubscriber(subscriber, this.project, this.concurrent, this.scheduler));
- }
- }
- class ExpandSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__["OuterSubscriber"] {
- constructor(destination, project, concurrent, scheduler) {
- super(destination);
- this.project = project;
- this.concurrent = concurrent;
- this.scheduler = scheduler;
- this.index = 0;
- this.active = 0;
- this.hasCompleted = false;
- if (concurrent < Number.POSITIVE_INFINITY) {
- this.buffer = [];
- }
- }
- static dispatch(arg) {
- const { subscriber, result, value, index } = arg;
- subscriber.subscribeToProjection(result, value, index);
- }
- _next(value) {
- const destination = this.destination;
- if (destination.closed) {
- this._complete();
- return;
- }
- const index = this.index++;
- if (this.active < this.concurrent) {
- destination.next(value);
- try {
- const { project } = this;
- const result = project(value, index);
- if (!this.scheduler) {
- this.subscribeToProjection(result, value, index);
- }
- else {
- const state = { subscriber: this, result, value, index };
- const destination = this.destination;
- destination.add(this.scheduler.schedule(ExpandSubscriber.dispatch, 0, state));
- }
- }
- catch (e) {
- destination.error(e);
- }
- }
- else {
- this.buffer.push(value);
- }
- }
- subscribeToProjection(result, value, index) {
- this.active++;
- const destination = this.destination;
- destination.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(this, result, value, index));
- }
- _complete() {
- this.hasCompleted = true;
- if (this.hasCompleted && this.active === 0) {
- this.destination.complete();
- }
- this.unsubscribe();
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this._next(innerValue);
- }
- notifyComplete(innerSub) {
- const buffer = this.buffer;
- const destination = this.destination;
- destination.remove(innerSub);
- this.active--;
- if (buffer && buffer.length > 0) {
- this._next(buffer.shift());
- }
- if (this.hasCompleted && this.active === 0) {
- this.destination.complete();
- }
- }
- }
- //# sourceMappingURL=expand.js.map
- /***/ }),
- /***/ "FZB8":
- /*!**************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/min.js ***!
- \**************************************************************/
- /*! exports provided: min */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "min", function() { return min; });
- /* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./reduce */ "128B");
- function min(comparer) {
- const min = (typeof comparer === 'function')
- ? (x, y) => comparer(x, y) < 0 ? x : y
- : (x, y) => x < y ? x : y;
- return Object(_reduce__WEBPACK_IMPORTED_MODULE_0__["reduce"])(min);
- }
- //# sourceMappingURL=min.js.map
- /***/ }),
- /***/ "GJmQ":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/takeWhile.js ***!
- \********************************************************************/
- /*! exports provided: takeWhile */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "takeWhile", function() { return takeWhile; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function takeWhile(predicate, inclusive = false) {
- return (source) => source.lift(new TakeWhileOperator(predicate, inclusive));
- }
- class TakeWhileOperator {
- constructor(predicate, inclusive) {
- this.predicate = predicate;
- this.inclusive = inclusive;
- }
- call(subscriber, source) {
- return source.subscribe(new TakeWhileSubscriber(subscriber, this.predicate, this.inclusive));
- }
- }
- class TakeWhileSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, predicate, inclusive) {
- super(destination);
- this.predicate = predicate;
- this.inclusive = inclusive;
- this.index = 0;
- }
- _next(value) {
- const destination = this.destination;
- let result;
- try {
- result = this.predicate(value, this.index++);
- }
- catch (err) {
- destination.error(err);
- return;
- }
- this.nextOrComplete(value, result);
- }
- nextOrComplete(value, predicateResult) {
- const destination = this.destination;
- if (Boolean(predicateResult)) {
- destination.next(value);
- }
- else {
- if (this.inclusive) {
- destination.next(value);
- }
- destination.complete();
- }
- }
- }
- //# sourceMappingURL=takeWhile.js.map
- /***/ }),
- /***/ "Gi4w":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/every.js ***!
- \****************************************************************/
- /*! exports provided: every */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "every", function() { return every; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function every(predicate, thisArg) {
- return (source) => source.lift(new EveryOperator(predicate, thisArg, source));
- }
- class EveryOperator {
- constructor(predicate, thisArg, source) {
- this.predicate = predicate;
- this.thisArg = thisArg;
- this.source = source;
- }
- call(observer, source) {
- return source.subscribe(new EverySubscriber(observer, this.predicate, this.thisArg, this.source));
- }
- }
- class EverySubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, predicate, thisArg, source) {
- super(destination);
- this.predicate = predicate;
- this.thisArg = thisArg;
- this.source = source;
- this.index = 0;
- this.thisArg = thisArg || this;
- }
- notifyComplete(everyValueMatch) {
- this.destination.next(everyValueMatch);
- this.destination.complete();
- }
- _next(value) {
- let result = false;
- try {
- result = this.predicate.call(this.thisArg, value, this.index++, this.source);
- }
- catch (err) {
- this.destination.error(err);
- return;
- }
- if (!result) {
- this.notifyComplete(false);
- }
- }
- _complete() {
- this.notifyComplete(true);
- }
- }
- //# sourceMappingURL=every.js.map
- /***/ }),
- /***/ "GjHo":
- /*!**************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/zip.js ***!
- \**************************************************************/
- /*! exports provided: zip */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return zip; });
- /* harmony import */ var _observable_zip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../observable/zip */ "1uah");
- function zip(...observables) {
- return function zipOperatorFunction(source) {
- return source.lift.call(Object(_observable_zip__WEBPACK_IMPORTED_MODULE_0__["zip"])(source, ...observables));
- };
- }
- //# sourceMappingURL=zip.js.map
- /***/ }),
- /***/ "Gqsl":
- /*!*********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/repeatWhen.js ***!
- \*********************************************************************/
- /*! exports provided: repeatWhen */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "repeatWhen", function() { return repeatWhen; });
- /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subject */ "XNiG");
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function repeatWhen(notifier) {
- return (source) => source.lift(new RepeatWhenOperator(notifier));
- }
- class RepeatWhenOperator {
- constructor(notifier) {
- this.notifier = notifier;
- }
- call(subscriber, source) {
- return source.subscribe(new RepeatWhenSubscriber(subscriber, this.notifier, source));
- }
- }
- class RepeatWhenSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"] {
- constructor(destination, notifier, source) {
- super(destination);
- this.notifier = notifier;
- this.source = source;
- this.sourceIsBeingSubscribedTo = true;
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.sourceIsBeingSubscribedTo = true;
- this.source.subscribe(this);
- }
- notifyComplete(innerSub) {
- if (this.sourceIsBeingSubscribedTo === false) {
- return super.complete();
- }
- }
- complete() {
- this.sourceIsBeingSubscribedTo = false;
- if (!this.isStopped) {
- if (!this.retries) {
- this.subscribeToRetries();
- }
- if (!this.retriesSubscription || this.retriesSubscription.closed) {
- return super.complete();
- }
- this._unsubscribeAndRecycle();
- this.notifications.next();
- }
- }
- _unsubscribe() {
- const { notifications, retriesSubscription } = this;
- if (notifications) {
- notifications.unsubscribe();
- this.notifications = null;
- }
- if (retriesSubscription) {
- retriesSubscription.unsubscribe();
- this.retriesSubscription = null;
- }
- this.retries = null;
- }
- _unsubscribeAndRecycle() {
- const { _unsubscribe } = this;
- this._unsubscribe = null;
- super._unsubscribeAndRecycle();
- this._unsubscribe = _unsubscribe;
- return this;
- }
- subscribeToRetries() {
- this.notifications = new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]();
- let retries;
- try {
- const { notifier } = this;
- retries = notifier(this.notifications);
- }
- catch (e) {
- return super.complete();
- }
- this.retries = retries;
- this.retriesSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, retries);
- }
- }
- //# sourceMappingURL=repeatWhen.js.map
- /***/ }),
- /***/ "GyhO":
- /*!******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/concat.js ***!
- \******************************************************************/
- /*! exports provided: concat */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return concat; });
- /* harmony import */ var _of__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./of */ "LRne");
- /* harmony import */ var _operators_concatAll__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../operators/concatAll */ "0EUg");
- function concat(...observables) {
- return Object(_operators_concatAll__WEBPACK_IMPORTED_MODULE_1__["concatAll"])()(Object(_of__WEBPACK_IMPORTED_MODULE_0__["of"])(...observables));
- }
- //# sourceMappingURL=concat.js.map
- /***/ }),
- /***/ "HDdC":
- /*!***********************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/Observable.js ***!
- \***********************************************************/
- /*! exports provided: Observable */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Observable", function() { return Observable; });
- /* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util/canReportError */ "8Qeq");
- /* harmony import */ var _util_toSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/toSubscriber */ "WyKG");
- /* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./symbol/observable */ "kJWO");
- /* harmony import */ var _util_pipe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util/pipe */ "mCNh");
- /* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./config */ "2fFW");
- class Observable {
- constructor(subscribe) {
- this._isScalar = false;
- if (subscribe) {
- this._subscribe = subscribe;
- }
- }
- lift(operator) {
- const observable = new Observable();
- observable.source = this;
- observable.operator = operator;
- return observable;
- }
- subscribe(observerOrNext, error, complete) {
- const { operator } = this;
- const sink = Object(_util_toSubscriber__WEBPACK_IMPORTED_MODULE_1__["toSubscriber"])(observerOrNext, error, complete);
- if (operator) {
- sink.add(operator.call(sink, this.source));
- }
- else {
- sink.add(this.source || (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable) ?
- this._subscribe(sink) :
- this._trySubscribe(sink));
- }
- if (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling) {
- if (sink.syncErrorThrowable) {
- sink.syncErrorThrowable = false;
- if (sink.syncErrorThrown) {
- throw sink.syncErrorValue;
- }
- }
- }
- return sink;
- }
- _trySubscribe(sink) {
- try {
- return this._subscribe(sink);
- }
- catch (err) {
- if (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling) {
- sink.syncErrorThrown = true;
- sink.syncErrorValue = err;
- }
- if (Object(_util_canReportError__WEBPACK_IMPORTED_MODULE_0__["canReportError"])(sink)) {
- sink.error(err);
- }
- else {
- console.warn(err);
- }
- }
- }
- forEach(next, promiseCtor) {
- promiseCtor = getPromiseCtor(promiseCtor);
- return new promiseCtor((resolve, reject) => {
- let subscription;
- subscription = this.subscribe((value) => {
- try {
- next(value);
- }
- catch (err) {
- reject(err);
- if (subscription) {
- subscription.unsubscribe();
- }
- }
- }, reject, resolve);
- });
- }
- _subscribe(subscriber) {
- const { source } = this;
- return source && source.subscribe(subscriber);
- }
- [_symbol_observable__WEBPACK_IMPORTED_MODULE_2__["observable"]]() {
- return this;
- }
- pipe(...operations) {
- if (operations.length === 0) {
- return this;
- }
- return Object(_util_pipe__WEBPACK_IMPORTED_MODULE_3__["pipeFromArray"])(operations)(this);
- }
- toPromise(promiseCtor) {
- promiseCtor = getPromiseCtor(promiseCtor);
- return new promiseCtor((resolve, reject) => {
- let value;
- this.subscribe((x) => value = x, (err) => reject(err), () => resolve(value));
- });
- }
- }
- Observable.create = (subscribe) => {
- return new Observable(subscribe);
- };
- function getPromiseCtor(promiseCtor) {
- if (!promiseCtor) {
- promiseCtor = _config__WEBPACK_IMPORTED_MODULE_4__["config"].Promise || Promise;
- }
- if (!promiseCtor) {
- throw new Error('no Promise impl found');
- }
- return promiseCtor;
- }
- //# sourceMappingURL=Observable.js.map
- /***/ }),
- /***/ "Hh5Z":
- /*!*************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduler/QueueScheduler.js ***!
- \*************************************************************************/
- /*! exports provided: QueueScheduler */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QueueScheduler", function() { return QueueScheduler; });
- /* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsyncScheduler */ "IjjT");
- class QueueScheduler extends _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__["AsyncScheduler"] {
- }
- //# sourceMappingURL=QueueScheduler.js.map
- /***/ }),
- /***/ "Hkhx":
- /*!*****************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/onErrorResumeNext.js ***!
- \*****************************************************************************/
- /*! exports provided: onErrorResumeNext */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return onErrorResumeNext; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./from */ "Cfvw");
- /* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/isArray */ "DH7j");
- /* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./empty */ "EY2u");
- function onErrorResumeNext(...sources) {
- if (sources.length === 0) {
- return _empty__WEBPACK_IMPORTED_MODULE_3__["EMPTY"];
- }
- const [first, ...remainder] = sources;
- if (sources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_2__["isArray"])(first)) {
- return onErrorResumeNext(...first);
- }
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- const subNext = () => subscriber.add(onErrorResumeNext(...remainder).subscribe(subscriber));
- return Object(_from__WEBPACK_IMPORTED_MODULE_1__["from"])(first).subscribe({
- next(value) { subscriber.next(value); },
- error: subNext,
- complete: subNext,
- });
- });
- }
- //# sourceMappingURL=onErrorResumeNext.js.map
- /***/ }),
- /***/ "HrJb":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/count.js ***!
- \****************************************************************/
- /*! exports provided: count */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "count", function() { return count; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function count(predicate) {
- return (source) => source.lift(new CountOperator(predicate, source));
- }
- class CountOperator {
- constructor(predicate, source) {
- this.predicate = predicate;
- this.source = source;
- }
- call(subscriber, source) {
- return source.subscribe(new CountSubscriber(subscriber, this.predicate, this.source));
- }
- }
- class CountSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, predicate, source) {
- super(destination);
- this.predicate = predicate;
- this.source = source;
- this.count = 0;
- this.index = 0;
- }
- _next(value) {
- if (this.predicate) {
- this._tryPredicate(value);
- }
- else {
- this.count++;
- }
- }
- _tryPredicate(value) {
- let result;
- try {
- result = this.predicate(value, this.index++, this.source);
- }
- catch (err) {
- this.destination.error(err);
- return;
- }
- if (result) {
- this.count++;
- }
- }
- _complete() {
- this.destination.next(this.count);
- this.destination.complete();
- }
- }
- //# sourceMappingURL=count.js.map
- /***/ }),
- /***/ "I55L":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/isArrayLike.js ***!
- \*****************************************************************/
- /*! exports provided: isArrayLike */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isArrayLike", function() { return isArrayLike; });
- const isArrayLike = ((x) => x && typeof x.length === 'number' && typeof x !== 'function');
- //# sourceMappingURL=isArrayLike.js.map
- /***/ }),
- /***/ "IAdc":
- /*!******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/toArray.js ***!
- \******************************************************************/
- /*! exports provided: toArray */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toArray", function() { return toArray; });
- /* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./reduce */ "128B");
- function toArrayReducer(arr, item, index) {
- if (index === 0) {
- return [item];
- }
- arr.push(item);
- return arr;
- }
- function toArray() {
- return Object(_reduce__WEBPACK_IMPORTED_MODULE_0__["reduce"])(toArrayReducer, []);
- }
- //# sourceMappingURL=toArray.js.map
- /***/ }),
- /***/ "IjjT":
- /*!*************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduler/AsyncScheduler.js ***!
- \*************************************************************************/
- /*! exports provided: AsyncScheduler */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsyncScheduler", function() { return AsyncScheduler; });
- /* harmony import */ var _Scheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Scheduler */ "Y/cZ");
- class AsyncScheduler extends _Scheduler__WEBPACK_IMPORTED_MODULE_0__["Scheduler"] {
- constructor(SchedulerAction, now = _Scheduler__WEBPACK_IMPORTED_MODULE_0__["Scheduler"].now) {
- super(SchedulerAction, () => {
- if (AsyncScheduler.delegate && AsyncScheduler.delegate !== this) {
- return AsyncScheduler.delegate.now();
- }
- else {
- return now();
- }
- });
- this.actions = [];
- this.active = false;
- this.scheduled = undefined;
- }
- schedule(work, delay = 0, state) {
- if (AsyncScheduler.delegate && AsyncScheduler.delegate !== this) {
- return AsyncScheduler.delegate.schedule(work, delay, state);
- }
- else {
- return super.schedule(work, delay, state);
- }
- }
- flush(action) {
- const { actions } = this;
- if (this.active) {
- actions.push(action);
- return;
- }
- let error;
- this.active = true;
- do {
- if (error = action.execute(action.state, action.delay)) {
- break;
- }
- } while (action = actions.shift());
- this.active = false;
- if (error) {
- while (action = actions.shift()) {
- action.unsubscribe();
- }
- throw error;
- }
- }
- }
- //# sourceMappingURL=AsyncScheduler.js.map
- /***/ }),
- /***/ "IzEk":
- /*!***************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/take.js ***!
- \***************************************************************/
- /*! exports provided: take */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "take", function() { return take; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/ArgumentOutOfRangeError */ "4I5i");
- /* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../observable/empty */ "EY2u");
- function take(count) {
- return (source) => {
- if (count === 0) {
- return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_2__["empty"])();
- }
- else {
- return source.lift(new TakeOperator(count));
- }
- };
- }
- class TakeOperator {
- constructor(total) {
- this.total = total;
- if (this.total < 0) {
- throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_1__["ArgumentOutOfRangeError"];
- }
- }
- call(subscriber, source) {
- return source.subscribe(new TakeSubscriber(subscriber, this.total));
- }
- }
- class TakeSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, total) {
- super(destination);
- this.total = total;
- this.count = 0;
- }
- _next(value) {
- const total = this.total;
- const count = ++this.count;
- if (count <= total) {
- this.destination.next(value);
- if (count === total) {
- this.destination.complete();
- this.unsubscribe();
- }
- }
- }
- }
- //# sourceMappingURL=take.js.map
- /***/ }),
- /***/ "JIr8":
- /*!*********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/catchError.js ***!
- \*********************************************************************/
- /*! exports provided: catchError */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "catchError", function() { return catchError; });
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../InnerSubscriber */ "51Dv");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function catchError(selector) {
- return function catchErrorOperatorFunction(source) {
- const operator = new CatchOperator(selector);
- const caught = source.lift(operator);
- return (operator.caught = caught);
- };
- }
- class CatchOperator {
- constructor(selector) {
- this.selector = selector;
- }
- call(subscriber, source) {
- return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught));
- }
- }
- class CatchSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__["OuterSubscriber"] {
- constructor(destination, selector, caught) {
- super(destination);
- this.selector = selector;
- this.caught = caught;
- }
- error(err) {
- if (!this.isStopped) {
- let result;
- try {
- result = this.selector(err, this.caught);
- }
- catch (err2) {
- super.error(err2);
- return;
- }
- this._unsubscribeAndRecycle();
- const innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_1__["InnerSubscriber"](this, undefined, undefined);
- this.add(innerSubscriber);
- const innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, result, undefined, undefined, innerSubscriber);
- if (innerSubscription !== innerSubscriber) {
- this.add(innerSubscription);
- }
- }
- }
- }
- //# sourceMappingURL=catchError.js.map
- /***/ }),
- /***/ "JX91":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/startWith.js ***!
- \********************************************************************/
- /*! exports provided: startWith */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "startWith", function() { return startWith; });
- /* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../observable/concat */ "GyhO");
- /* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/isScheduler */ "z+Ro");
- function startWith(...array) {
- const scheduler = array[array.length - 1];
- if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__["isScheduler"])(scheduler)) {
- array.pop();
- return (source) => Object(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"])(array, source, scheduler);
- }
- else {
- return (source) => Object(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"])(array, source);
- }
- }
- //# sourceMappingURL=startWith.js.map
- /***/ }),
- /***/ "JmF6":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/zipAll.js ***!
- \*****************************************************************/
- /*! exports provided: zipAll */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "zipAll", function() { return zipAll; });
- /* harmony import */ var _observable_zip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../observable/zip */ "1uah");
- function zipAll(project) {
- return (source) => source.lift(new _observable_zip__WEBPACK_IMPORTED_MODULE_0__["ZipOperator"](project));
- }
- //# sourceMappingURL=zipAll.js.map
- /***/ }),
- /***/ "JqCM":
- /*!***********************************************************************!*\
- !*** ./node_modules/ngx-spinner/__ivy_ngcc__/fesm2015/ngx-spinner.js ***!
- \***********************************************************************/
- /*! exports provided: NgxSpinnerComponent, NgxSpinnerModule, NgxSpinnerService, ɵa */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgxSpinnerComponent", function() { return NgxSpinnerComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgxSpinnerModule", function() { return NgxSpinnerModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgxSpinnerService", function() { return NgxSpinnerService; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵa", function() { return SafeHtmlPipe; });
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "qCKp");
- /* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "kU1M");
- /* harmony import */ var _angular_animations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/animations */ "R0Ic");
- /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/common */ "ofXK");
- /* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/platform-browser */ "jhN1");
- function NgxSpinnerComponent_div_0_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div");
- } }
- function NgxSpinnerComponent_div_0_div_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgxSpinnerComponent_div_0_div_1_div_1_Template, 1, 0, "div", 5);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"](ctx_r1.spinner.class);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("color", ctx_r1.spinner.color);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx_r1.spinner.divArray);
- } }
- function NgxSpinnerComponent_div_0_div_2_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 6);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipe"](1, "safeHtml");
- } if (rf & 2) {
- const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("innerHTML", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipeBind1"](1, 1, ctx_r2.template), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsanitizeHtml"]);
- } }
- function NgxSpinnerComponent_div_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgxSpinnerComponent_div_0_div_1_Template, 2, 5, "div", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgxSpinnerComponent_div_0_div_2_Template, 2, 3, "div", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "div", 4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("background-color", ctx_r0.spinner.bdColor)("z-index", ctx_r0.spinner.zIndex)("position", ctx_r0.spinner.fullScreen ? "fixed" : "absolute");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("@fadeIn", "in");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx_r0.template);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r0.template);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("z-index", ctx_r0.spinner.zIndex);
- } }
- const _c0 = ["*"];
- const LOADERS = {
- 'ball-8bits': 16,
- 'ball-atom': 4,
- 'ball-beat': 3,
- 'ball-circus': 5,
- 'ball-climbing-dot': 4,
- 'ball-clip-rotate': 1,
- 'ball-clip-rotate-multiple': 2,
- 'ball-clip-rotate-pulse': 2,
- 'ball-elastic-dots': 5,
- 'ball-fall': 3,
- 'ball-fussion': 4,
- 'ball-grid-beat': 9,
- 'ball-grid-pulse': 9,
- 'ball-newton-cradle': 4,
- 'ball-pulse': 3,
- 'ball-pulse-rise': 5,
- 'ball-pulse-sync': 3,
- 'ball-rotate': 1,
- 'ball-running-dots': 5,
- 'ball-scale': 1,
- 'ball-scale-multiple': 3,
- 'ball-scale-pulse': 2,
- 'ball-scale-ripple': 1,
- 'ball-scale-ripple-multiple': 3,
- 'ball-spin': 8,
- 'ball-spin-clockwise': 8,
- 'ball-spin-clockwise-fade': 8,
- 'ball-spin-clockwise-fade-rotating': 8,
- 'ball-spin-fade': 8,
- 'ball-spin-fade-rotating': 8,
- 'ball-spin-rotate': 2,
- 'ball-square-clockwise-spin': 8,
- 'ball-square-spin': 8,
- 'ball-triangle-path': 3,
- 'ball-zig-zag': 2,
- 'ball-zig-zag-deflect': 2,
- 'cog': 1,
- 'cube-transition': 2,
- 'fire': 3,
- 'line-scale': 5,
- 'line-scale-party': 5,
- 'line-scale-pulse-out': 5,
- 'line-scale-pulse-out-rapid': 5,
- 'line-spin-clockwise-fade': 8,
- 'line-spin-clockwise-fade-rotating': 8,
- 'line-spin-fade': 8,
- 'line-spin-fade-rotating': 8,
- 'pacman': 6,
- 'square-jelly-box': 2,
- 'square-loader': 1,
- 'square-spin': 1,
- 'timer': 1,
- 'triangle-skew-spin': 1
- };
- const DEFAULTS = {
- BD_COLOR: 'rgba(51,51,51,0.8)',
- SPINNER_COLOR: '#fff',
- SPINNER_TYPE: 'ball-scale-multiple',
- Z_INDEX: 99999,
- };
- const PRIMARY_SPINNER = 'primary';
- class NgxSpinner {
- constructor(init) {
- Object.assign(this, init);
- }
- }
- class NgxSpinnerService {
- /**
- * Creates an instance of NgxSpinnerService.
- * @memberof NgxSpinnerService
- */
- constructor() {
- /**
- * Spinner observable
- *
- * @memberof NgxSpinnerService
- */
- // private spinnerObservable = new ReplaySubject<NgxSpinner>(1);
- this.spinnerObservable = new rxjs__WEBPACK_IMPORTED_MODULE_1__["BehaviorSubject"](null);
- }
- /**
- * Get subscription of desired spinner
- * @memberof NgxSpinnerService
- **/
- getSpinner(name) {
- return this.spinnerObservable.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])((x) => x && x.name === name));
- }
- /**
- * To show spinner
- *
- * @memberof NgxSpinnerService
- */
- show(name = PRIMARY_SPINNER, spinner) {
- setTimeout(() => {
- const showPromise = new Promise((resolve, _reject) => {
- if (spinner && Object.keys(spinner).length) {
- spinner['name'] = name;
- this.spinnerObservable.next(new NgxSpinner(Object.assign(Object.assign({}, spinner), { show: true })));
- resolve(true);
- }
- else {
- this.spinnerObservable.next(new NgxSpinner({ name, show: true }));
- resolve(true);
- }
- });
- return showPromise;
- }, 10);
- }
- /**
- * To hide spinner
- *
- * @memberof NgxSpinnerService
- */
- hide(name = PRIMARY_SPINNER, debounce = 10) {
- setTimeout(() => {
- const hidePromise = new Promise((resolve, _reject) => {
- this.spinnerObservable.next(new NgxSpinner({ name, show: false }));
- resolve(true);
- });
- return hidePromise;
- }, debounce);
- }
- }
- NgxSpinnerService.ɵfac = function NgxSpinnerService_Factory(t) { return new (t || NgxSpinnerService)(); };
- NgxSpinnerService.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgxSpinnerService_Factory() { return new NgxSpinnerService(); }, token: NgxSpinnerService, providedIn: "root" });
- NgxSpinnerService.ctorParameters = () => [];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgxSpinnerService, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{
- providedIn: 'root'
- }]
- }], function () { return []; }, null); })();
- class NgxSpinnerComponent {
- /**
- * Creates an instance of NgxSpinnerComponent.
- *
- * @memberof NgxSpinnerComponent
- */
- constructor(spinnerService, changeDetector) {
- this.spinnerService = spinnerService;
- this.changeDetector = changeDetector;
- /**
- * Spinner Object
- *
- * @memberof NgxSpinnerComponent
- */
- this.spinner = new NgxSpinner();
- /**
- * Unsubscribe from spinner's observable
- *
- * @memberof NgxSpinnerComponent
- **/
- this.ngUnsubscribe = new rxjs__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
- /**
- * To set default ngx-spinner options
- *
- * @memberof NgxSpinnerComponent
- */
- this.setDefaultOptions = () => {
- this.spinner = new NgxSpinner({
- name: this.name,
- bdColor: this.bdColor,
- size: this.size,
- color: this.color,
- type: this.type,
- fullScreen: this.fullScreen,
- divArray: this.divArray,
- divCount: this.divCount,
- show: this.show,
- zIndex: this.zIndex,
- template: this.template,
- });
- };
- this.bdColor = DEFAULTS.BD_COLOR;
- this.zIndex = DEFAULTS.Z_INDEX;
- this.color = DEFAULTS.SPINNER_COLOR;
- this.type = DEFAULTS.SPINNER_TYPE;
- this.size = 'large';
- this.fullScreen = true;
- this.name = PRIMARY_SPINNER;
- this.template = null;
- this.divArray = [];
- this.divCount = 0;
- this.show = false;
- }
- /**
- * Initialization method
- *
- * @memberof NgxSpinnerComponent
- */
- ngOnInit() {
- this.setDefaultOptions();
- this.spinnerService.getSpinner(this.name)
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["takeUntil"])(this.ngUnsubscribe))
- .subscribe((spinner) => {
- this.setDefaultOptions();
- Object.assign(this.spinner, spinner);
- if (spinner.show) {
- this.onInputChange();
- }
- this.changeDetector.markForCheck();
- });
- }
- /**
- * On changes event for input variables
- *
- * @memberof NgxSpinnerComponent
- */
- ngOnChanges(changes) {
- for (const propName in changes) {
- if (propName) {
- const changedProp = changes[propName];
- if (changedProp.isFirstChange()) {
- return;
- }
- else if (typeof changedProp.currentValue !== 'undefined' && changedProp.currentValue !== changedProp.previousValue) {
- if (changedProp.currentValue !== '') {
- this.spinner[propName] = changedProp.currentValue;
- }
- }
- }
- }
- }
- /**
- * To get class for spinner
- *
- * @memberof NgxSpinnerComponent
- */
- getClass(type, size) {
- this.spinner.divCount = LOADERS[type];
- this.spinner.divArray = Array(this.spinner.divCount).fill(0).map((x, i) => i);
- let sizeClass = '';
- switch (size.toLowerCase()) {
- case 'small':
- sizeClass = 'la-sm';
- break;
- case 'medium':
- sizeClass = 'la-2x';
- break;
- case 'large':
- sizeClass = 'la-3x';
- break;
- default:
- break;
- }
- return 'la-' + type + ' ' + sizeClass;
- }
- /**
- * Check if input variables have changed
- *
- * @memberof NgxSpinnerComponent
- */
- onInputChange() {
- this.spinner.class = this.getClass(this.spinner.type, this.spinner.size);
- }
- /**
- * Component destroy event
- *
- * @memberof NgxSpinnerComponent
- */
- ngOnDestroy() {
- this.ngUnsubscribe.next();
- this.ngUnsubscribe.complete();
- }
- }
- NgxSpinnerComponent.ɵfac = function NgxSpinnerComponent_Factory(t) { return new (t || NgxSpinnerComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgxSpinnerService), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"])); };
- NgxSpinnerComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgxSpinnerComponent, selectors: [["ngx-spinner"]], inputs: { bdColor: "bdColor", zIndex: "zIndex", color: "color", type: "type", size: "size", fullScreen: "fullScreen", name: "name", template: "template" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], ngContentSelectors: _c0, decls: 1, vars: 1, consts: [["class", "overlay", 3, "background-color", "z-index", "position", 4, "ngIf"], [1, "overlay"], [3, "class", "color", 4, "ngIf"], [3, "innerHTML", 4, "ngIf"], [1, "loading-text"], [4, "ngFor", "ngForOf"], [3, "innerHTML"]], template: function NgxSpinnerComponent_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgxSpinnerComponent_div_0_Template, 5, 11, "div", 0);
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.spinner.show);
- } }, directives: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_4__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_4__["NgForOf"]]; }, pipes: function () { return [SafeHtmlPipe]; }, styles: [".la-ball-8bits[_ngcontent-%COMP%], .la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-8bits[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-8bits.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-8bits[_ngcontent-%COMP%]{height:12px;width:12px}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-8bits 1s ease 0s infinite;animation:ball-8bits 1s ease 0s infinite;border-radius:0;height:4px;left:50%;opacity:0;position:absolute;top:50%;transform:translate(100%,100%);width:4px}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-.9375s;animation-delay:-.9375s}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-.875s;animation-delay:-.875s}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-.8125s;animation-delay:-.8125s}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-.75s;animation-delay:-.75s}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-.6875s;animation-delay:-.6875s}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation-delay:-.625s;animation-delay:-.625s}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){-webkit-animation-delay:-.5625s;animation-delay:-.5625s}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){-webkit-animation-delay:-.5s;animation-delay:-.5s}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(9){-webkit-animation-delay:-.4375s;animation-delay:-.4375s}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(10){-webkit-animation-delay:-.375s;animation-delay:-.375s}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(11){-webkit-animation-delay:-.3125s;animation-delay:-.3125s}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(12){-webkit-animation-delay:-.25s;animation-delay:-.25s}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(13){-webkit-animation-delay:-.1875s;animation-delay:-.1875s}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(14){-webkit-animation-delay:-.125s;animation-delay:-.125s}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(15){-webkit-animation-delay:-.0625s;animation-delay:-.0625s}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(16){-webkit-animation-delay:0s;animation-delay:0s}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{left:0;top:-100%}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){left:33.3333333333%;top:-100%}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){left:66.6666666667%;top:-66.6666666667%}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){left:100%;top:-33.3333333333%}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){left:100%;top:0}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){left:100%;top:33.3333333333%}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){left:66.6666666667%;top:66.6666666667%}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){left:33.3333333333%;top:100%}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(9){left:0;top:100%}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(10){left:-33.3333333333%;top:100%}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(11){left:-66.6666666667%;top:66.6666666667%}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(12){left:-100%;top:33.3333333333%}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(13){left:-100%;top:0}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(14){left:-100%;top:-33.3333333333%}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(15){left:-66.6666666667%;top:-66.6666666667%}.la-ball-8bits[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(16){left:-33.3333333333%;top:-100%}.la-ball-8bits.la-sm[_ngcontent-%COMP%]{height:6px;width:6px}.la-ball-8bits.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:2px;width:2px}.la-ball-8bits.la-2x[_ngcontent-%COMP%]{height:24px;width:24px}.la-ball-8bits.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:8px;width:8px}.la-ball-8bits.la-3x[_ngcontent-%COMP%]{height:36px;width:36px}.la-ball-8bits.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:12px;width:12px}@-webkit-keyframes ball-8bits{0%{opacity:1}50%{opacity:1}51%{opacity:0}}@keyframes ball-8bits{0%{opacity:1}50%{opacity:1}51%{opacity:0}}.la-ball-atom[_ngcontent-%COMP%], .la-ball-atom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-atom[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-atom.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-atom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-atom[_ngcontent-%COMP%]{height:32px;width:32px}.la-ball-atom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation:ball-atom-shrink 4.5s linear infinite;animation:ball-atom-shrink 4.5s linear infinite;background:#aaa;border-radius:100%;height:60%;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:60%;z-index:1}.la-ball-atom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:not(:first-child){-webkit-animation:ball-atom-zindex 1.5s steps(2) 0s infinite;animation:ball-atom-zindex 1.5s steps(2) 0s infinite;background:none;height:100%;left:0;position:absolute;width:100%;z-index:0}.la-ball-atom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:not(:first-child):before{-webkit-animation:ball-atom-position 1.5s ease 0s infinite,ball-atom-size 1.5s ease 0s infinite;animation:ball-atom-position 1.5s ease 0s infinite,ball-atom-size 1.5s ease 0s infinite;background:currentColor;border-radius:50%;content:\"\";height:10px;left:0;margin-left:-5px;margin-top:-5px;opacity:.75;position:absolute;top:0;width:10px}.la-ball-atom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:.75s;animation-delay:.75s}.la-ball-atom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2):before{-webkit-animation-delay:0s,-1.125s;animation-delay:0s,-1.125s}.la-ball-atom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-.25s;animation-delay:-.25s;transform:rotate(120deg)}.la-ball-atom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3):before{-webkit-animation-delay:-1s,-.75s;animation-delay:-1s,-.75s}.la-ball-atom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:.25s;animation-delay:.25s;transform:rotate(240deg)}.la-ball-atom[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4):before{-webkit-animation-delay:-.5s,-.125s;animation-delay:-.5s,-.125s}.la-ball-atom.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-atom.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:not(:first-child):before{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-atom.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-atom.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:not(:first-child):before{height:20px;margin-left:-10px;margin-top:-10px;width:20px}.la-ball-atom.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-ball-atom.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:not(:first-child):before{height:30px;margin-left:-15px;margin-top:-15px;width:30px}@-webkit-keyframes ball-atom-position{50%{left:100%;top:100%}}@keyframes ball-atom-position{50%{left:100%;top:100%}}@-webkit-keyframes ball-atom-size{50%{transform:scale(.5)}}@keyframes ball-atom-size{50%{transform:scale(.5)}}@-webkit-keyframes ball-atom-zindex{50%{z-index:10}}@keyframes ball-atom-zindex{50%{z-index:10}}@-webkit-keyframes ball-atom-shrink{50%{transform:translate(-50%,-50%) scale(.8)}}@keyframes ball-atom-shrink{50%{transform:translate(-50%,-50%) scale(.8)}}.la-ball-beat[_ngcontent-%COMP%], .la-ball-beat[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-beat[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-beat.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-beat[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-beat[_ngcontent-%COMP%]{height:18px;width:54px}.la-ball-beat[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-beat .7s linear -.15s infinite;animation:ball-beat .7s linear -.15s infinite;border-radius:100%;height:10px;margin:4px;width:10px}.la-ball-beat[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2n-1){-webkit-animation-delay:-.5s;animation-delay:-.5s}.la-ball-beat.la-sm[_ngcontent-%COMP%]{height:8px;width:26px}.la-ball-beat.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin:2px;width:4px}.la-ball-beat.la-2x[_ngcontent-%COMP%]{height:36px;width:108px}.la-ball-beat.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:20px;margin:8px;width:20px}.la-ball-beat.la-3x[_ngcontent-%COMP%]{height:54px;width:162px}.la-ball-beat.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:30px;margin:12px;width:30px}@-webkit-keyframes ball-beat{50%{opacity:.2;transform:scale(.75)}to{opacity:1;transform:scale(1)}}@keyframes ball-beat{50%{opacity:.2;transform:scale(.75)}to{opacity:1;transform:scale(1)}}.la-ball-circus[_ngcontent-%COMP%], .la-ball-circus[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-circus[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-circus.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-circus[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-circus[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-circus[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-circus-position 2.5s cubic-bezier(.25,0,.75,1) infinite,ball-circus-size 2.5s cubic-bezier(.25,0,.75,1) infinite;animation:ball-circus-position 2.5s cubic-bezier(.25,0,.75,1) infinite,ball-circus-size 2.5s cubic-bezier(.25,0,.75,1) infinite;border-radius:100%;display:block;height:16px;height:100%;left:-100%;opacity:.5;position:absolute;top:0;width:16px;width:100%}.la-ball-circus[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:0s,-.5s;animation-delay:0s,-.5s}.la-ball-circus[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-.5s,-1s;animation-delay:-.5s,-1s}.la-ball-circus[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-1s,-1.5s;animation-delay:-1s,-1.5s}.la-ball-circus[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-1.5s,-2s;animation-delay:-1.5s,-2s}.la-ball-circus[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-2s,-2.5s;animation-delay:-2s,-2.5s}.la-ball-circus.la-sm[_ngcontent-%COMP%], .la-ball-circus.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:8px;width:8px}.la-ball-circus.la-2x[_ngcontent-%COMP%], .la-ball-circus.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:32px;width:32px}.la-ball-circus.la-3x[_ngcontent-%COMP%], .la-ball-circus.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:48px;width:48px}@-webkit-keyframes ball-circus-position{50%{left:100%}}@keyframes ball-circus-position{50%{left:100%}}@-webkit-keyframes ball-circus-size{50%{transform:scale(.3)}}@keyframes ball-circus-size{50%{transform:scale(.3)}}.la-ball-climbing-dot[_ngcontent-%COMP%], .la-ball-climbing-dot[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-climbing-dot[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-climbing-dot.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-climbing-dot[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-climbing-dot[_ngcontent-%COMP%]{height:32px;width:42px}.la-ball-climbing-dot[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation:ball-climbing-dot-jump .6s ease-in-out infinite;animation:ball-climbing-dot-jump .6s ease-in-out infinite;border-radius:100%;bottom:32%;height:14px;left:18%;position:absolute;transform-origin:center bottom;width:14px}.la-ball-climbing-dot[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:not(:first-child){-webkit-animation:ball-climbing-dot-steps 1.8s linear infinite;animation:ball-climbing-dot-steps 1.8s linear infinite;border-radius:0;height:2px;position:absolute;right:0;top:0;transform:translate(60%);width:14px}.la-ball-climbing-dot[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:not(:first-child):nth-child(2){-webkit-animation-delay:0ms;animation-delay:0ms}.la-ball-climbing-dot[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:not(:first-child):nth-child(3){-webkit-animation-delay:-.6s;animation-delay:-.6s}.la-ball-climbing-dot[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:not(:first-child):nth-child(4){-webkit-animation-delay:-1.2s;animation-delay:-1.2s}.la-ball-climbing-dot.la-sm[_ngcontent-%COMP%]{height:16px;width:20px}.la-ball-climbing-dot.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{height:6px;width:6px}.la-ball-climbing-dot.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:not(:first-child){height:1px;width:6px}.la-ball-climbing-dot.la-2x[_ngcontent-%COMP%]{height:64px;width:84px}.la-ball-climbing-dot.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{height:28px;width:28px}.la-ball-climbing-dot.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:not(:first-child){height:4px;width:28px}.la-ball-climbing-dot.la-3x[_ngcontent-%COMP%]{height:96px;width:126px}.la-ball-climbing-dot.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{height:42px;width:42px}.la-ball-climbing-dot.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:not(:first-child){height:6px;width:42px}@-webkit-keyframes ball-climbing-dot-jump{0%{transform:scaleY(.7)}20%{transform:scale(.7,1.2)}40%{transform:scale(1)}50%{bottom:125%}46%{transform:scale(1)}80%{transform:scale(.7,1.2)}90%{transform:scale(.7,1.2)}to{transform:scaleY(.7)}}@keyframes ball-climbing-dot-jump{0%{transform:scaleY(.7)}20%{transform:scale(.7,1.2)}40%{transform:scale(1)}50%{bottom:125%}46%{transform:scale(1)}80%{transform:scale(.7,1.2)}90%{transform:scale(.7,1.2)}to{transform:scaleY(.7)}}@-webkit-keyframes ball-climbing-dot-steps{0%{opacity:0;right:0;top:0}50%{opacity:1}to{opacity:0;right:100%;top:100%}}@keyframes ball-climbing-dot-steps{0%{opacity:0;right:0;top:0}50%{opacity:1}to{opacity:0;right:100%;top:100%}}.la-ball-clip-rotate-multiple[_ngcontent-%COMP%], .la-ball-clip-rotate-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-clip-rotate-multiple[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-clip-rotate-multiple.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-clip-rotate-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-clip-rotate-multiple[_ngcontent-%COMP%]{height:32px;width:32px}.la-ball-clip-rotate-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-clip-rotate-multiple-rotate 1s ease-in-out infinite;animation:ball-clip-rotate-multiple-rotate 1s ease-in-out infinite;background:transparent;border-radius:100%;border-style:solid;border-width:2px;left:50%;position:absolute;top:50%}.la-ball-clip-rotate-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{border-left-color:transparent;border-right-color:transparent;height:32px;position:absolute;width:32px}.la-ball-clip-rotate-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:last-child{-webkit-animation-direction:reverse;-webkit-animation-duration:.5s;animation-direction:reverse;animation-duration:.5s;border-bottom-color:transparent;border-top-color:transparent;height:16px;width:16px}.la-ball-clip-rotate-multiple.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-clip-rotate-multiple.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:1px}.la-ball-clip-rotate-multiple.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{height:16px;width:16px}.la-ball-clip-rotate-multiple.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:last-child{height:8px;width:8px}.la-ball-clip-rotate-multiple.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-clip-rotate-multiple.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:4px}.la-ball-clip-rotate-multiple.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{height:64px;width:64px}.la-ball-clip-rotate-multiple.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:last-child{height:32px;width:32px}.la-ball-clip-rotate-multiple.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-ball-clip-rotate-multiple.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:6px}.la-ball-clip-rotate-multiple.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{height:96px;width:96px}.la-ball-clip-rotate-multiple.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:last-child{height:48px;width:48px}@-webkit-keyframes ball-clip-rotate-multiple-rotate{0%{transform:translate(-50%,-50%) rotate(0deg)}50%{transform:translate(-50%,-50%) rotate(180deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}@keyframes ball-clip-rotate-multiple-rotate{0%{transform:translate(-50%,-50%) rotate(0deg)}50%{transform:translate(-50%,-50%) rotate(180deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}.la-ball-clip-rotate-pulse[_ngcontent-%COMP%], .la-ball-clip-rotate-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-clip-rotate-pulse[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-clip-rotate-pulse.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-clip-rotate-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-clip-rotate-pulse[_ngcontent-%COMP%]{height:32px;width:32px}.la-ball-clip-rotate-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-radius:100%;left:50%;position:absolute;top:50%}.la-ball-clip-rotate-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation:ball-clip-rotate-pulse-rotate 1s cubic-bezier(.09,.57,.49,.9) infinite;animation:ball-clip-rotate-pulse-rotate 1s cubic-bezier(.09,.57,.49,.9) infinite;background:transparent;border-bottom-style:solid;border-bottom-width:2px;border-left:2px solid transparent;border-right:2px solid transparent;border-top-style:solid;border-top-width:2px;height:32px;position:absolute;width:32px}.la-ball-clip-rotate-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:last-child{-webkit-animation:ball-clip-rotate-pulse-scale 1s cubic-bezier(.09,.57,.49,.9) infinite;animation:ball-clip-rotate-pulse-scale 1s cubic-bezier(.09,.57,.49,.9) infinite;height:16px;width:16px}.la-ball-clip-rotate-pulse.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-clip-rotate-pulse.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{border-width:1px;height:16px;width:16px}.la-ball-clip-rotate-pulse.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:last-child{height:8px;width:8px}.la-ball-clip-rotate-pulse.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-clip-rotate-pulse.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{border-width:4px;height:64px;width:64px}.la-ball-clip-rotate-pulse.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:last-child{height:32px;width:32px}.la-ball-clip-rotate-pulse.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-ball-clip-rotate-pulse.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{border-width:6px;height:96px;width:96px}.la-ball-clip-rotate-pulse.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:last-child{height:48px;width:48px}@-webkit-keyframes ball-clip-rotate-pulse-rotate{0%{transform:translate(-50%,-50%) rotate(0deg)}50%{transform:translate(-50%,-50%) rotate(180deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}@keyframes ball-clip-rotate-pulse-rotate{0%{transform:translate(-50%,-50%) rotate(0deg)}50%{transform:translate(-50%,-50%) rotate(180deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}@-webkit-keyframes ball-clip-rotate-pulse-scale{0%,to{opacity:1;transform:translate(-50%,-50%) scale(1)}30%{opacity:.3;transform:translate(-50%,-50%) scale(.15)}}@keyframes ball-clip-rotate-pulse-scale{0%,to{opacity:1;transform:translate(-50%,-50%) scale(1)}30%{opacity:.3;transform:translate(-50%,-50%) scale(.15)}}.la-ball-clip-rotate[_ngcontent-%COMP%], .la-ball-clip-rotate[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-clip-rotate[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-clip-rotate.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-clip-rotate[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-clip-rotate[_ngcontent-%COMP%]{height:32px;width:32px}.la-ball-clip-rotate[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-clip-rotate .75s linear infinite;animation:ball-clip-rotate .75s linear infinite;background:transparent;border-bottom-color:transparent;border-radius:100%;border-width:2px;height:32px;width:32px}.la-ball-clip-rotate.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-clip-rotate.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:1px;height:16px;width:16px}.la-ball-clip-rotate.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-clip-rotate.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:4px;height:64px;width:64px}.la-ball-clip-rotate.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-ball-clip-rotate.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:6px;height:96px;width:96px}@-webkit-keyframes ball-clip-rotate{0%{transform:rotate(0deg)}50%{transform:rotate(180deg)}to{transform:rotate(1turn)}}@keyframes ball-clip-rotate{0%{transform:rotate(0deg)}50%{transform:rotate(180deg)}to{transform:rotate(1turn)}}.la-ball-elastic-dots[_ngcontent-%COMP%], .la-ball-elastic-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-elastic-dots[_ngcontent-%COMP%]{color:#fff;display:block}.la-ball-elastic-dots.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-elastic-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;float:none}.la-ball-elastic-dots[_ngcontent-%COMP%]{font-size:0;height:10px;text-align:center;width:120px}.la-ball-elastic-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-elastic-dots-anim 1s infinite;animation:ball-elastic-dots-anim 1s infinite;border-radius:100%;display:inline-block;height:10px;white-space:nowrap;width:10px}.la-ball-elastic-dots.la-sm[_ngcontent-%COMP%]{height:4px;width:60px}.la-ball-elastic-dots.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;width:4px}.la-ball-elastic-dots.la-2x[_ngcontent-%COMP%]{height:20px;width:240px}.la-ball-elastic-dots.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:20px;width:20px}.la-ball-elastic-dots.la-3x[_ngcontent-%COMP%]{height:30px;width:360px}.la-ball-elastic-dots.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:30px;width:30px}@-webkit-keyframes ball-elastic-dots-anim{0%,to{margin:0;transform:scale(1)}50%{margin:0 5%;transform:scale(.65)}}@keyframes ball-elastic-dots-anim{0%,to{margin:0;transform:scale(1)}50%{margin:0 5%;transform:scale(.65)}}.la-ball-fall[_ngcontent-%COMP%], .la-ball-fall[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-fall[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-fall.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-fall[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-fall[_ngcontent-%COMP%]{height:18px;width:54px}.la-ball-fall[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-fall 1s ease-in-out infinite;animation:ball-fall 1s ease-in-out infinite;border-radius:100%;height:10px;margin:4px;opacity:0;width:10px}.la-ball-fall[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-.2s;animation-delay:-.2s}.la-ball-fall[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-.1s;animation-delay:-.1s}.la-ball-fall[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:0ms;animation-delay:0ms}.la-ball-fall.la-sm[_ngcontent-%COMP%]{height:8px;width:26px}.la-ball-fall.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin:2px;width:4px}.la-ball-fall.la-2x[_ngcontent-%COMP%]{height:36px;width:108px}.la-ball-fall.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:20px;margin:8px;width:20px}.la-ball-fall.la-3x[_ngcontent-%COMP%]{height:54px;width:162px}.la-ball-fall.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:30px;margin:12px;width:30px}@-webkit-keyframes ball-fall{0%{opacity:0;transform:translateY(-145%)}10%{opacity:.5}20%{opacity:1;transform:translateY(0)}80%{opacity:1;transform:translateY(0)}90%{opacity:.5}to{opacity:0;transform:translateY(145%)}}@keyframes ball-fall{0%{opacity:0;transform:translateY(-145%)}10%{opacity:.5}20%{opacity:1;transform:translateY(0)}80%{opacity:1;transform:translateY(0)}90%{opacity:.5}to{opacity:0;transform:translateY(145%)}}.la-ball-fussion[_ngcontent-%COMP%], .la-ball-fussion[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-fussion[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-fussion.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-fussion[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-fussion[_ngcontent-%COMP%]{height:8px;width:8px}.la-ball-fussion[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-fussion-ball1 1s ease 0s infinite;animation:ball-fussion-ball1 1s ease 0s infinite;border-radius:100%;height:12px;position:absolute;transform:translate(-50%,-50%);width:12px}.la-ball-fussion[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{left:50%;top:0;z-index:1}.la-ball-fussion[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-name:ball-fussion-ball2;animation-name:ball-fussion-ball2;left:100%;top:50%;z-index:2}.la-ball-fussion[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-name:ball-fussion-ball3;animation-name:ball-fussion-ball3;left:50%;top:100%;z-index:1}.la-ball-fussion[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-name:ball-fussion-ball4;animation-name:ball-fussion-ball4;left:0;top:50%;z-index:2}.la-ball-fussion.la-sm[_ngcontent-%COMP%]{height:4px;width:4px}.la-ball-fussion.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:6px;width:6px}.la-ball-fussion.la-2x[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-fussion.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%], .la-ball-fussion.la-3x[_ngcontent-%COMP%]{height:24px;width:24px}.la-ball-fussion.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:36px;width:36px}@-webkit-keyframes ball-fussion-ball1{0%{opacity:.35}50%{left:200%;opacity:1;top:-100%}to{left:100%;opacity:.35;top:50%;z-index:2}}@keyframes ball-fussion-ball1{0%{opacity:.35}50%{left:200%;opacity:1;top:-100%}to{left:100%;opacity:.35;top:50%;z-index:2}}@-webkit-keyframes ball-fussion-ball2{0%{opacity:.35}50%{left:200%;opacity:1;top:200%}to{left:50%;opacity:.35;top:100%;z-index:1}}@keyframes ball-fussion-ball2{0%{opacity:.35}50%{left:200%;opacity:1;top:200%}to{left:50%;opacity:.35;top:100%;z-index:1}}@-webkit-keyframes ball-fussion-ball3{0%{opacity:.35}50%{left:-100%;opacity:1;top:200%}to{left:0;opacity:.35;top:50%;z-index:2}}@keyframes ball-fussion-ball3{0%{opacity:.35}50%{left:-100%;opacity:1;top:200%}to{left:0;opacity:.35;top:50%;z-index:2}}@-webkit-keyframes ball-fussion-ball4{0%{opacity:.35}50%{left:-100%;opacity:1;top:-100%}to{left:50%;opacity:.35;top:0;z-index:1}}@keyframes ball-fussion-ball4{0%{opacity:.35}50%{left:-100%;opacity:1;top:-100%}to{left:50%;opacity:.35;top:0;z-index:1}}.la-ball-grid-beat[_ngcontent-%COMP%], .la-ball-grid-beat[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-grid-beat[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-grid-beat.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-grid-beat[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-grid-beat[_ngcontent-%COMP%]{height:36px;width:36px}.la-ball-grid-beat[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation-iteration-count:infinite;-webkit-animation-name:ball-grid-beat;animation-iteration-count:infinite;animation-name:ball-grid-beat;border-radius:100%;height:8px;margin:2px;width:8px}.la-ball-grid-beat[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:.03s;-webkit-animation-duration:.65s;animation-delay:.03s;animation-duration:.65s}.la-ball-grid-beat[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:.09s;-webkit-animation-duration:1.02s;animation-delay:.09s;animation-duration:1.02s}.la-ball-grid-beat[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-.69s;-webkit-animation-duration:1.06s;animation-delay:-.69s;animation-duration:1.06s}.la-ball-grid-beat[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-.41s;-webkit-animation-duration:1.5s;animation-delay:-.41s;animation-duration:1.5s}.la-ball-grid-beat[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:.04s;-webkit-animation-duration:1.6s;animation-delay:.04s;animation-duration:1.6s}.la-ball-grid-beat[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation-delay:.07s;-webkit-animation-duration:.84s;animation-delay:.07s;animation-duration:.84s}.la-ball-grid-beat[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){-webkit-animation-delay:-.66s;-webkit-animation-duration:.68s;animation-delay:-.66s;animation-duration:.68s}.la-ball-grid-beat[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){-webkit-animation-delay:-.76s;-webkit-animation-duration:.93s;animation-delay:-.76s;animation-duration:.93s}.la-ball-grid-beat[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(9){-webkit-animation-delay:-.76s;-webkit-animation-duration:1.24s;animation-delay:-.76s;animation-duration:1.24s}.la-ball-grid-beat.la-sm[_ngcontent-%COMP%]{height:18px;width:18px}.la-ball-grid-beat.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin:1px;width:4px}.la-ball-grid-beat.la-2x[_ngcontent-%COMP%]{height:72px;width:72px}.la-ball-grid-beat.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:16px;margin:4px;width:16px}.la-ball-grid-beat.la-3x[_ngcontent-%COMP%]{height:108px;width:108px}.la-ball-grid-beat.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:24px;margin:6px;width:24px}@-webkit-keyframes ball-grid-beat{0%{opacity:1}50%{opacity:.35}to{opacity:1}}@keyframes ball-grid-beat{0%{opacity:1}50%{opacity:.35}to{opacity:1}}.la-ball-grid-pulse[_ngcontent-%COMP%], .la-ball-grid-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-grid-pulse[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-grid-pulse.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-grid-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-grid-pulse[_ngcontent-%COMP%]{height:36px;width:36px}.la-ball-grid-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation-iteration-count:infinite;-webkit-animation-name:ball-grid-pulse;animation-iteration-count:infinite;animation-name:ball-grid-pulse;border-radius:100%;height:8px;margin:2px;width:8px}.la-ball-grid-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:.03s;-webkit-animation-duration:.65s;animation-delay:.03s;animation-duration:.65s}.la-ball-grid-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:.09s;-webkit-animation-duration:1.02s;animation-delay:.09s;animation-duration:1.02s}.la-ball-grid-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-.69s;-webkit-animation-duration:1.06s;animation-delay:-.69s;animation-duration:1.06s}.la-ball-grid-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-.41s;-webkit-animation-duration:1.5s;animation-delay:-.41s;animation-duration:1.5s}.la-ball-grid-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:.04s;-webkit-animation-duration:1.6s;animation-delay:.04s;animation-duration:1.6s}.la-ball-grid-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation-delay:.07s;-webkit-animation-duration:.84s;animation-delay:.07s;animation-duration:.84s}.la-ball-grid-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){-webkit-animation-delay:-.66s;-webkit-animation-duration:.68s;animation-delay:-.66s;animation-duration:.68s}.la-ball-grid-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){-webkit-animation-delay:-.76s;-webkit-animation-duration:.93s;animation-delay:-.76s;animation-duration:.93s}.la-ball-grid-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(9){-webkit-animation-delay:-.76s;-webkit-animation-duration:1.24s;animation-delay:-.76s;animation-duration:1.24s}.la-ball-grid-pulse.la-sm[_ngcontent-%COMP%]{height:18px;width:18px}.la-ball-grid-pulse.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin:1px;width:4px}.la-ball-grid-pulse.la-2x[_ngcontent-%COMP%]{height:72px;width:72px}.la-ball-grid-pulse.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:16px;margin:4px;width:16px}.la-ball-grid-pulse.la-3x[_ngcontent-%COMP%]{height:108px;width:108px}.la-ball-grid-pulse.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:24px;margin:6px;width:24px}@-webkit-keyframes ball-grid-pulse{0%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.45)}to{opacity:1;transform:scale(1)}}@keyframes ball-grid-pulse{0%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.45)}to{opacity:1;transform:scale(1)}}.la-ball-newton-cradle[_ngcontent-%COMP%], .la-ball-newton-cradle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-newton-cradle[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-newton-cradle.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-newton-cradle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-newton-cradle[_ngcontent-%COMP%]{height:10px;width:40px}.la-ball-newton-cradle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-radius:100%;height:10px;width:10px}.la-ball-newton-cradle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation:ball-newton-cradle-left 1s ease-out 0s infinite;animation:ball-newton-cradle-left 1s ease-out 0s infinite;transform:translateX(0)}.la-ball-newton-cradle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:last-child{-webkit-animation:ball-newton-cradle-right 1s ease-out 0s infinite;animation:ball-newton-cradle-right 1s ease-out 0s infinite;transform:translateX(0)}.la-ball-newton-cradle.la-sm[_ngcontent-%COMP%]{height:4px;width:20px}.la-ball-newton-cradle.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;width:4px}.la-ball-newton-cradle.la-2x[_ngcontent-%COMP%]{height:20px;width:80px}.la-ball-newton-cradle.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:20px;width:20px}.la-ball-newton-cradle.la-3x[_ngcontent-%COMP%]{height:30px;width:120px}.la-ball-newton-cradle.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:30px;width:30px}@-webkit-keyframes ball-newton-cradle-left{25%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;transform:translateX(-100%)}50%{transform:translateX(0)}}@keyframes ball-newton-cradle-left{25%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;transform:translateX(-100%)}50%{transform:translateX(0)}}@-webkit-keyframes ball-newton-cradle-right{50%{transform:translateX(0)}75%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;transform:translateX(100%)}to{transform:translateX(0)}}@keyframes ball-newton-cradle-right{50%{transform:translateX(0)}75%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;transform:translateX(100%)}to{transform:translateX(0)}}.la-ball-pulse-rise[_ngcontent-%COMP%], .la-ball-pulse-rise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-pulse-rise[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-pulse-rise.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-pulse-rise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-pulse-rise[_ngcontent-%COMP%]{height:14px;width:70px}.la-ball-pulse-rise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-pulse-rise-even 1s cubic-bezier(.15,.36,.9,.6) 0s infinite;animation:ball-pulse-rise-even 1s cubic-bezier(.15,.36,.9,.6) 0s infinite;border-radius:100%;height:10px;margin:2px;width:10px}.la-ball-pulse-rise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2n-1){-webkit-animation-name:ball-pulse-rise-odd;animation-name:ball-pulse-rise-odd}.la-ball-pulse-rise.la-sm[_ngcontent-%COMP%]{height:6px;width:34px}.la-ball-pulse-rise.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin:1px;width:4px}.la-ball-pulse-rise.la-2x[_ngcontent-%COMP%]{height:28px;width:140px}.la-ball-pulse-rise.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:20px;margin:4px;width:20px}.la-ball-pulse-rise.la-3x[_ngcontent-%COMP%]{height:42px;width:210px}.la-ball-pulse-rise.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:30px;margin:6px;width:30px}@-webkit-keyframes ball-pulse-rise-even{0%{opacity:1;transform:scale(1.1)}25%{transform:translateY(-200%)}50%{opacity:.35;transform:scale(.3)}75%{transform:translateY(200%)}to{opacity:1;transform:translateY(0);transform:scale(1)}}@keyframes ball-pulse-rise-even{0%{opacity:1;transform:scale(1.1)}25%{transform:translateY(-200%)}50%{opacity:.35;transform:scale(.3)}75%{transform:translateY(200%)}to{opacity:1;transform:translateY(0);transform:scale(1)}}@-webkit-keyframes ball-pulse-rise-odd{0%{opacity:.35;transform:scale(.4)}25%{transform:translateY(200%)}50%{opacity:1;transform:scale(1.1)}75%{transform:translateY(-200%)}to{opacity:.35;transform:translateY(0);transform:scale(.75)}}@keyframes ball-pulse-rise-odd{0%{opacity:.35;transform:scale(.4)}25%{transform:translateY(200%)}50%{opacity:1;transform:scale(1.1)}75%{transform:translateY(-200%)}to{opacity:.35;transform:translateY(0);transform:scale(.75)}}.la-ball-pulse-sync[_ngcontent-%COMP%], .la-ball-pulse-sync[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-pulse-sync[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-pulse-sync.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-pulse-sync[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-pulse-sync[_ngcontent-%COMP%]{height:18px;width:54px}.la-ball-pulse-sync[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-pulse-sync .6s ease-in-out infinite;animation:ball-pulse-sync .6s ease-in-out infinite;border-radius:100%;height:10px;margin:4px;width:10px}.la-ball-pulse-sync[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-.14s;animation-delay:-.14s}.la-ball-pulse-sync[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-.07s;animation-delay:-.07s}.la-ball-pulse-sync[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:0s;animation-delay:0s}.la-ball-pulse-sync.la-sm[_ngcontent-%COMP%]{height:8px;width:26px}.la-ball-pulse-sync.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin:2px;width:4px}.la-ball-pulse-sync.la-2x[_ngcontent-%COMP%]{height:36px;width:108px}.la-ball-pulse-sync.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:20px;margin:8px;width:20px}.la-ball-pulse-sync.la-3x[_ngcontent-%COMP%]{height:54px;width:162px}.la-ball-pulse-sync.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:30px;margin:12px;width:30px}@-webkit-keyframes ball-pulse-sync{33%{transform:translateY(100%)}66%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes ball-pulse-sync{33%{transform:translateY(100%)}66%{transform:translateY(-100%)}to{transform:translateY(0)}}.la-ball-pulse[_ngcontent-%COMP%], .la-ball-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-pulse[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-pulse.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-pulse[_ngcontent-%COMP%]{height:18px;width:54px}.la-ball-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-.2s;animation-delay:-.2s}.la-ball-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-.1s;animation-delay:-.1s}.la-ball-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:0ms;animation-delay:0ms}.la-ball-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-pulse 1s ease infinite;animation:ball-pulse 1s ease infinite;border-radius:100%;height:10px;margin:4px;width:10px}.la-ball-pulse.la-sm[_ngcontent-%COMP%]{height:8px;width:26px}.la-ball-pulse.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin:2px;width:4px}.la-ball-pulse.la-2x[_ngcontent-%COMP%]{height:36px;width:108px}.la-ball-pulse.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:20px;margin:8px;width:20px}.la-ball-pulse.la-3x[_ngcontent-%COMP%]{height:54px;width:162px}.la-ball-pulse.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:30px;margin:12px;width:30px}@-webkit-keyframes ball-pulse{0%,60%,to{opacity:1;transform:scale(1)}30%{opacity:.1;transform:scale(.01)}}@keyframes ball-pulse{0%,60%,to{opacity:1;transform:scale(1)}30%{opacity:.1;transform:scale(.01)}}.la-ball-rotate[_ngcontent-%COMP%], .la-ball-rotate[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-rotate[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-rotate.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-rotate[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-rotate[_ngcontent-%COMP%], .la-ball-rotate[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:10px;width:10px}.la-ball-rotate[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-rotate-animation 1s cubic-bezier(.7,-.13,.22,.86) infinite;animation:ball-rotate-animation 1s cubic-bezier(.7,-.13,.22,.86) infinite;border-radius:100%}.la-ball-rotate[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:after, .la-ball-rotate[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:before{background:currentColor;border-radius:inherit;content:\"\";height:inherit;margin:inherit;opacity:.8;position:absolute;width:inherit}.la-ball-rotate[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:before{left:-150%;top:0}.la-ball-rotate[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:after{left:150%;top:0}.la-ball-rotate.la-sm[_ngcontent-%COMP%], .la-ball-rotate.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;width:4px}.la-ball-rotate.la-2x[_ngcontent-%COMP%], .la-ball-rotate.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:20px;width:20px}.la-ball-rotate.la-3x[_ngcontent-%COMP%], .la-ball-rotate.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:30px;width:30px}@-webkit-keyframes ball-rotate-animation{0%{transform:rotate(0deg)}50%{transform:rotate(180deg)}to{transform:rotate(1turn)}}@keyframes ball-rotate-animation{0%{transform:rotate(0deg)}50%{transform:rotate(180deg)}to{transform:rotate(1turn)}}.la-ball-running-dots[_ngcontent-%COMP%], .la-ball-running-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-running-dots[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-running-dots.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-running-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-running-dots[_ngcontent-%COMP%]{height:10px;width:10px}.la-ball-running-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-running-dots-animate 2s linear infinite;animation:ball-running-dots-animate 2s linear infinite;border-radius:100%;height:10px;margin-left:-25px;position:absolute;width:10px}.la-ball-running-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:0s;animation-delay:0s}.la-ball-running-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-.4s;animation-delay:-.4s}.la-ball-running-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-.8s;animation-delay:-.8s}.la-ball-running-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-1.2s;animation-delay:-1.2s}.la-ball-running-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-1.6s;animation-delay:-1.6s}.la-ball-running-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation-delay:-2s;animation-delay:-2s}.la-ball-running-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){-webkit-animation-delay:-2.4s;animation-delay:-2.4s}.la-ball-running-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){-webkit-animation-delay:-2.8s;animation-delay:-2.8s}.la-ball-running-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(9){-webkit-animation-delay:-3.2s;animation-delay:-3.2s}.la-ball-running-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(10){-webkit-animation-delay:-3.6s;animation-delay:-3.6s}.la-ball-running-dots.la-sm[_ngcontent-%COMP%]{height:4px;width:4px}.la-ball-running-dots.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin-left:-12px;width:4px}.la-ball-running-dots.la-2x[_ngcontent-%COMP%]{height:20px;width:20px}.la-ball-running-dots.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:20px;margin-left:-50px;width:20px}.la-ball-running-dots.la-3x[_ngcontent-%COMP%]{height:30px;width:30px}.la-ball-running-dots.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:30px;margin-left:-75px;width:30px}@-webkit-keyframes ball-running-dots-animate{0%,to{height:100%;transform:translateY(0) translateX(500%);width:100%}80%{transform:translateY(0) translateX(0)}85%{height:100%;transform:translateY(-125%) translateX(0);width:100%}90%{height:75%;width:200%}95%{height:100%;transform:translateY(-100%) translateX(500%);width:100%}}@keyframes ball-running-dots-animate{0%,to{height:100%;transform:translateY(0) translateX(500%);width:100%}80%{transform:translateY(0) translateX(0)}85%{height:100%;transform:translateY(-125%) translateX(0);width:100%}90%{height:75%;width:200%}95%{height:100%;transform:translateY(-100%) translateX(500%);width:100%}}.la-ball-scale-multiple[_ngcontent-%COMP%], .la-ball-scale-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-scale-multiple[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-scale-multiple.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-scale-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-scale-multiple[_ngcontent-%COMP%]{height:32px;width:32px}.la-ball-scale-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-scale-multiple 1s linear 0s infinite;animation:ball-scale-multiple 1s linear 0s infinite;border-radius:100%;height:32px;left:0;opacity:0;position:absolute;top:0;width:32px}.la-ball-scale-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:.2s;animation-delay:.2s}.la-ball-scale-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:.4s;animation-delay:.4s}.la-ball-scale-multiple.la-sm[_ngcontent-%COMP%], .la-ball-scale-multiple.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-scale-multiple.la-2x[_ngcontent-%COMP%], .la-ball-scale-multiple.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-scale-multiple.la-3x[_ngcontent-%COMP%], .la-ball-scale-multiple.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:96px;width:96px}@-webkit-keyframes ball-scale-multiple{0%{opacity:0;transform:scale(0)}5%{opacity:.75}to{opacity:0;transform:scale(1)}}@keyframes ball-scale-multiple{0%{opacity:0;transform:scale(0)}5%{opacity:.75}to{opacity:0;transform:scale(1)}}.la-ball-scale-pulse[_ngcontent-%COMP%], .la-ball-scale-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-scale-pulse[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-scale-pulse.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-scale-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-scale-pulse[_ngcontent-%COMP%]{height:32px;width:32px}.la-ball-scale-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-scale-pulse 2s ease-in-out infinite;animation:ball-scale-pulse 2s ease-in-out infinite;border-radius:100%;height:32px;left:0;opacity:.5;position:absolute;top:0;width:32px}.la-ball-scale-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:last-child{-webkit-animation-delay:-1s;animation-delay:-1s}.la-ball-scale-pulse.la-sm[_ngcontent-%COMP%], .la-ball-scale-pulse.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-scale-pulse.la-2x[_ngcontent-%COMP%], .la-ball-scale-pulse.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-scale-pulse.la-3x[_ngcontent-%COMP%], .la-ball-scale-pulse.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:96px;width:96px}@-webkit-keyframes ball-scale-pulse{0%,to{transform:scale(0)}50%{transform:scale(1)}}@keyframes ball-scale-pulse{0%,to{transform:scale(0)}50%{transform:scale(1)}}.la-ball-scale-ripple-multiple[_ngcontent-%COMP%], .la-ball-scale-ripple-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-scale-ripple-multiple[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-scale-ripple-multiple.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-scale-ripple-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-scale-ripple-multiple[_ngcontent-%COMP%]{height:32px;width:32px}.la-ball-scale-ripple-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-scale-ripple-multiple 1.25s cubic-bezier(.21,.53,.56,.8) 0s infinite;animation:ball-scale-ripple-multiple 1.25s cubic-bezier(.21,.53,.56,.8) 0s infinite;background:transparent;border-radius:100%;border-width:2px;height:32px;left:0;opacity:0;position:absolute;top:0;width:32px}.la-ball-scale-ripple-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:0s;animation-delay:0s}.la-ball-scale-ripple-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:.25s;animation-delay:.25s}.la-ball-scale-ripple-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:.5s;animation-delay:.5s}.la-ball-scale-ripple-multiple.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-scale-ripple-multiple.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:1px;height:16px;width:16px}.la-ball-scale-ripple-multiple.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-scale-ripple-multiple.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:4px;height:64px;width:64px}.la-ball-scale-ripple-multiple.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-ball-scale-ripple-multiple.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:6px;height:96px;width:96px}@-webkit-keyframes ball-scale-ripple-multiple{0%{opacity:1;transform:scale(.1)}70%{opacity:.5;transform:scale(1)}95%{opacity:0}}@keyframes ball-scale-ripple-multiple{0%{opacity:1;transform:scale(.1)}70%{opacity:.5;transform:scale(1)}95%{opacity:0}}.la-ball-scale-ripple[_ngcontent-%COMP%], .la-ball-scale-ripple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-scale-ripple[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-scale-ripple.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-scale-ripple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-scale-ripple[_ngcontent-%COMP%]{height:32px;width:32px}.la-ball-scale-ripple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-scale-ripple 1s cubic-bezier(.21,.53,.56,.8) 0s infinite;animation:ball-scale-ripple 1s cubic-bezier(.21,.53,.56,.8) 0s infinite;background:transparent;border-radius:100%;border-width:2px;height:32px;opacity:0;width:32px}.la-ball-scale-ripple.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-scale-ripple.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:1px;height:16px;width:16px}.la-ball-scale-ripple.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-scale-ripple.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:4px;height:64px;width:64px}.la-ball-scale-ripple.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-ball-scale-ripple.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:6px;height:96px;width:96px}@-webkit-keyframes ball-scale-ripple{0%{opacity:1;transform:scale(.1)}70%{opacity:.65;transform:scale(1)}to{opacity:0}}@keyframes ball-scale-ripple{0%{opacity:1;transform:scale(.1)}70%{opacity:.65;transform:scale(1)}to{opacity:0}}.la-ball-scale[_ngcontent-%COMP%], .la-ball-scale[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-scale[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-scale.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-scale[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-scale[_ngcontent-%COMP%], .la-ball-scale[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:32px;width:32px}.la-ball-scale[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-scale 1s ease-in-out 0s infinite;animation:ball-scale 1s ease-in-out 0s infinite;border-radius:100%;opacity:0}.la-ball-scale.la-sm[_ngcontent-%COMP%], .la-ball-scale.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-scale.la-2x[_ngcontent-%COMP%], .la-ball-scale.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-scale.la-3x[_ngcontent-%COMP%], .la-ball-scale.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:96px;width:96px}@-webkit-keyframes ball-scale{0%{opacity:1;transform:scale(0)}to{opacity:0;transform:scale(1)}}@keyframes ball-scale{0%{opacity:1;transform:scale(0)}to{opacity:0;transform:scale(1)}}.la-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%], .la-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-spin-clockwise-fade-rotating.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%]{-webkit-animation:ball-spin-clockwise-fade-rotating-rotate 6s linear infinite;animation:ball-spin-clockwise-fade-rotating-rotate 6s linear infinite;height:32px;width:32px}.la-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-spin-clockwise-fade-rotating 1s linear infinite;animation:ball-spin-clockwise-fade-rotating 1s linear infinite;border-radius:100%;height:8px;left:50%;margin-left:-4px;margin-top:-4px;position:absolute;top:50%;width:8px}.la-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-.875s;animation-delay:-.875s;left:50%;top:5%}.la-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-.75s;animation-delay:-.75s;left:81.8198051534%;top:18.1801948466%}.la-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-.625s;animation-delay:-.625s;left:95%;top:50%}.la-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-.5s;animation-delay:-.5s;left:81.8198051534%;top:81.8198051534%}.la-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-.375s;animation-delay:-.375s;left:50.0000000005%;top:94.9999999966%}.la-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation-delay:-.25s;animation-delay:-.25s;left:18.1801949248%;top:81.8198046966%}.la-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){-webkit-animation-delay:-.125s;animation-delay:-.125s;left:5.0000051215%;top:49.9999750815%}.la-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){-webkit-animation-delay:0s;animation-delay:0s;left:18.1803700518%;top:18.179464974%}.la-ball-spin-clockwise-fade-rotating.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-spin-clockwise-fade-rotating.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-spin-clockwise-fade-rotating.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-spin-clockwise-fade-rotating.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:16px;margin-left:-8px;margin-top:-8px;width:16px}.la-ball-spin-clockwise-fade-rotating.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-ball-spin-clockwise-fade-rotating.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:24px;margin-left:-12px;margin-top:-12px;width:24px}@-webkit-keyframes ball-spin-clockwise-fade-rotating-rotate{to{transform:rotate(-1turn)}}@keyframes ball-spin-clockwise-fade-rotating-rotate{to{transform:rotate(-1turn)}}@-webkit-keyframes ball-spin-clockwise-fade-rotating{50%{opacity:.25;transform:scale(.5)}to{opacity:1;transform:scale(1)}}@keyframes ball-spin-clockwise-fade-rotating{50%{opacity:.25;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.la-ball-spin-clockwise-fade[_ngcontent-%COMP%], .la-ball-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-spin-clockwise-fade[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-spin-clockwise-fade.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-spin-clockwise-fade[_ngcontent-%COMP%]{height:32px;width:32px}.la-ball-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-spin-clockwise-fade 1s linear infinite;animation:ball-spin-clockwise-fade 1s linear infinite;border-radius:100%;height:8px;left:50%;margin-left:-4px;margin-top:-4px;position:absolute;top:50%;width:8px}.la-ball-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-.875s;animation-delay:-.875s;left:50%;top:5%}.la-ball-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-.75s;animation-delay:-.75s;left:81.8198051534%;top:18.1801948466%}.la-ball-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-.625s;animation-delay:-.625s;left:95%;top:50%}.la-ball-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-.5s;animation-delay:-.5s;left:81.8198051534%;top:81.8198051534%}.la-ball-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-.375s;animation-delay:-.375s;left:50.0000000005%;top:94.9999999966%}.la-ball-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation-delay:-.25s;animation-delay:-.25s;left:18.1801949248%;top:81.8198046966%}.la-ball-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){-webkit-animation-delay:-.125s;animation-delay:-.125s;left:5.0000051215%;top:49.9999750815%}.la-ball-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){-webkit-animation-delay:0s;animation-delay:0s;left:18.1803700518%;top:18.179464974%}.la-ball-spin-clockwise-fade.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-spin-clockwise-fade.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-spin-clockwise-fade.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-spin-clockwise-fade.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:16px;margin-left:-8px;margin-top:-8px;width:16px}.la-ball-spin-clockwise-fade.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-ball-spin-clockwise-fade.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:24px;margin-left:-12px;margin-top:-12px;width:24px}@-webkit-keyframes ball-spin-clockwise-fade{50%{opacity:.25;transform:scale(.5)}to{opacity:1;transform:scale(1)}}@keyframes ball-spin-clockwise-fade{50%{opacity:.25;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.la-ball-spin-clockwise[_ngcontent-%COMP%], .la-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-spin-clockwise[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-spin-clockwise.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-spin-clockwise[_ngcontent-%COMP%]{height:32px;width:32px}.la-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-spin-clockwise 1s ease-in-out infinite;animation:ball-spin-clockwise 1s ease-in-out infinite;border-radius:100%;height:8px;left:50%;margin-left:-4px;margin-top:-4px;position:absolute;top:50%;width:8px}.la-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-.875s;animation-delay:-.875s;left:50%;top:5%}.la-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-.75s;animation-delay:-.75s;left:81.8198051534%;top:18.1801948466%}.la-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-.625s;animation-delay:-.625s;left:95%;top:50%}.la-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-.5s;animation-delay:-.5s;left:81.8198051534%;top:81.8198051534%}.la-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-.375s;animation-delay:-.375s;left:50.0000000005%;top:94.9999999966%}.la-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation-delay:-.25s;animation-delay:-.25s;left:18.1801949248%;top:81.8198046966%}.la-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){-webkit-animation-delay:-.125s;animation-delay:-.125s;left:5.0000051215%;top:49.9999750815%}.la-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){-webkit-animation-delay:0s;animation-delay:0s;left:18.1803700518%;top:18.179464974%}.la-ball-spin-clockwise.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-spin-clockwise.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-spin-clockwise.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-spin-clockwise.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:16px;margin-left:-8px;margin-top:-8px;width:16px}.la-ball-spin-clockwise.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-ball-spin-clockwise.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:24px;margin-left:-12px;margin-top:-12px;width:24px}@-webkit-keyframes ball-spin-clockwise{0%,to{opacity:1;transform:scale(1)}20%{opacity:1}80%{opacity:0;transform:scale(0)}}@keyframes ball-spin-clockwise{0%,to{opacity:1;transform:scale(1)}20%{opacity:1}80%{opacity:0;transform:scale(0)}}.la-ball-spin-fade-rotating[_ngcontent-%COMP%], .la-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-spin-fade-rotating[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-spin-fade-rotating.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-spin-fade-rotating[_ngcontent-%COMP%]{-webkit-animation:ball-spin-fade-rotate 6s linear infinite;animation:ball-spin-fade-rotate 6s linear infinite;height:32px;width:32px}.la-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-spin-fade 1s linear infinite;animation:ball-spin-fade 1s linear infinite;border-radius:100%;height:8px;left:50%;margin-left:-4px;margin-top:-4px;position:absolute;top:50%;width:8px}.la-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-1.125s;animation-delay:-1.125s;left:50%;top:5%}.la-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-1.25s;animation-delay:-1.25s;left:81.8198051534%;top:18.1801948466%}.la-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-1.375s;animation-delay:-1.375s;left:95%;top:50%}.la-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-1.5s;animation-delay:-1.5s;left:81.8198051534%;top:81.8198051534%}.la-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-1.625s;animation-delay:-1.625s;left:50.0000000005%;top:94.9999999966%}.la-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation-delay:-1.75s;animation-delay:-1.75s;left:18.1801949248%;top:81.8198046966%}.la-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){-webkit-animation-delay:-1.875s;animation-delay:-1.875s;left:5.0000051215%;top:49.9999750815%}.la-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){-webkit-animation-delay:-2s;animation-delay:-2s;left:18.1803700518%;top:18.179464974%}.la-ball-spin-fade-rotating.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-spin-fade-rotating.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-spin-fade-rotating.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-spin-fade-rotating.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:16px;margin-left:-8px;margin-top:-8px;width:16px}.la-ball-spin-fade-rotating.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-ball-spin-fade-rotating.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:24px;margin-left:-12px;margin-top:-12px;width:24px}@-webkit-keyframes ball-spin-fade-rotate{to{transform:rotate(1turn)}}@keyframes ball-spin-fade-rotate{to{transform:rotate(1turn)}}.la-ball-spin-fade[_ngcontent-%COMP%], .la-ball-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-spin-fade[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-spin-fade.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-spin-fade[_ngcontent-%COMP%]{height:32px;width:32px}.la-ball-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-spin-fade 1s linear infinite;animation:ball-spin-fade 1s linear infinite;border-radius:100%;height:8px;left:50%;margin-left:-4px;margin-top:-4px;position:absolute;top:50%;width:8px}.la-ball-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-1.125s;animation-delay:-1.125s;left:50%;top:5%}.la-ball-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-1.25s;animation-delay:-1.25s;left:81.8198051534%;top:18.1801948466%}.la-ball-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-1.375s;animation-delay:-1.375s;left:95%;top:50%}.la-ball-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-1.5s;animation-delay:-1.5s;left:81.8198051534%;top:81.8198051534%}.la-ball-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-1.625s;animation-delay:-1.625s;left:50.0000000005%;top:94.9999999966%}.la-ball-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation-delay:-1.75s;animation-delay:-1.75s;left:18.1801949248%;top:81.8198046966%}.la-ball-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){-webkit-animation-delay:-1.875s;animation-delay:-1.875s;left:5.0000051215%;top:49.9999750815%}.la-ball-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){-webkit-animation-delay:-2s;animation-delay:-2s;left:18.1803700518%;top:18.179464974%}.la-ball-spin-fade.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-spin-fade.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-spin-fade.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-spin-fade.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:16px;margin-left:-8px;margin-top:-8px;width:16px}.la-ball-spin-fade.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-ball-spin-fade.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:24px;margin-left:-12px;margin-top:-12px;width:24px}@-webkit-keyframes ball-spin-fade{0%,to{opacity:1;transform:scale(1)}50%{opacity:.25;transform:scale(.5)}}@keyframes ball-spin-fade{0%,to{opacity:1;transform:scale(1)}50%{opacity:.25;transform:scale(.5)}}.la-ball-spin-rotate[_ngcontent-%COMP%], .la-ball-spin-rotate[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-spin-rotate[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-spin-rotate.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-spin-rotate[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-spin-rotate[_ngcontent-%COMP%]{-webkit-animation:ball-spin-rotate 2s linear infinite;animation:ball-spin-rotate 2s linear infinite;height:32px;width:32px}.la-ball-spin-rotate[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-spin-bounce 2s ease-in-out infinite;animation:ball-spin-bounce 2s ease-in-out infinite;border-radius:100%;height:60%;position:absolute;top:0;width:60%}.la-ball-spin-rotate[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:last-child{-webkit-animation-delay:-1s;animation-delay:-1s;bottom:0;top:auto}.la-ball-spin-rotate.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-spin-rotate.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-spin-rotate.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}@-webkit-keyframes ball-spin-rotate{to{transform:rotate(1turn)}}@keyframes ball-spin-rotate{to{transform:rotate(1turn)}}@-webkit-keyframes ball-spin-bounce{0%,to{transform:scale(0)}50%{transform:scale(1)}}@keyframes ball-spin-bounce{0%,to{transform:scale(0)}50%{transform:scale(1)}}.la-ball-spin[_ngcontent-%COMP%], .la-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-spin[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-spin.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-spin[_ngcontent-%COMP%]{height:32px;width:32px}.la-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-spin 1s ease-in-out infinite;animation:ball-spin 1s ease-in-out infinite;border-radius:100%;height:8px;left:50%;margin-left:-4px;margin-top:-4px;position:absolute;top:50%;width:8px}.la-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-1.125s;animation-delay:-1.125s;left:50%;top:5%}.la-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-1.25s;animation-delay:-1.25s;left:81.8198051534%;top:18.1801948466%}.la-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-1.375s;animation-delay:-1.375s;left:95%;top:50%}.la-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-1.5s;animation-delay:-1.5s;left:81.8198051534%;top:81.8198051534%}.la-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-1.625s;animation-delay:-1.625s;left:50.0000000005%;top:94.9999999966%}.la-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation-delay:-1.75s;animation-delay:-1.75s;left:18.1801949248%;top:81.8198046966%}.la-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){-webkit-animation-delay:-1.875s;animation-delay:-1.875s;left:5.0000051215%;top:49.9999750815%}.la-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){-webkit-animation-delay:-2s;animation-delay:-2s;left:18.1803700518%;top:18.179464974%}.la-ball-spin.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-spin.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-spin.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-spin.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:16px;margin-left:-8px;margin-top:-8px;width:16px}.la-ball-spin.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-ball-spin.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:24px;margin-left:-12px;margin-top:-12px;width:24px}@-webkit-keyframes ball-spin{0%,to{opacity:1;transform:scale(1)}20%{opacity:1}80%{opacity:0;transform:scale(0)}}@keyframes ball-spin{0%,to{opacity:1;transform:scale(1)}20%{opacity:1}80%{opacity:0;transform:scale(0)}}.la-ball-square-clockwise-spin[_ngcontent-%COMP%], .la-ball-square-clockwise-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-square-clockwise-spin[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-square-clockwise-spin.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-square-clockwise-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-square-clockwise-spin[_ngcontent-%COMP%]{height:26px;width:26px}.la-ball-square-clockwise-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-square-clockwise-spin 1s ease-in-out infinite;animation:ball-square-clockwise-spin 1s ease-in-out infinite;border-radius:100%;height:12px;left:50%;margin-left:-6px;margin-top:-6px;position:absolute;top:50%;width:12px}.la-ball-square-clockwise-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-.875s;animation-delay:-.875s;left:0;top:0}.la-ball-square-clockwise-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-.75s;animation-delay:-.75s;left:50%;top:0}.la-ball-square-clockwise-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-.625s;animation-delay:-.625s;left:100%;top:0}.la-ball-square-clockwise-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-.5s;animation-delay:-.5s;left:100%;top:50%}.la-ball-square-clockwise-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-.375s;animation-delay:-.375s;left:100%;top:100%}.la-ball-square-clockwise-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation-delay:-.25s;animation-delay:-.25s;left:50%;top:100%}.la-ball-square-clockwise-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){-webkit-animation-delay:-.125s;animation-delay:-.125s;left:0;top:100%}.la-ball-square-clockwise-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){-webkit-animation-delay:0s;animation-delay:0s;left:0;top:50%}.la-ball-square-clockwise-spin.la-sm[_ngcontent-%COMP%]{height:12px;width:12px}.la-ball-square-clockwise-spin.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:6px;margin-left:-3px;margin-top:-3px;width:6px}.la-ball-square-clockwise-spin.la-2x[_ngcontent-%COMP%]{height:52px;width:52px}.la-ball-square-clockwise-spin.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:24px;margin-left:-12px;margin-top:-12px;width:24px}.la-ball-square-clockwise-spin.la-3x[_ngcontent-%COMP%]{height:78px;width:78px}.la-ball-square-clockwise-spin.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:36px;margin-left:-18px;margin-top:-18px;width:36px}@-webkit-keyframes ball-square-clockwise-spin{0%,40%,to{transform:scale(.4)}70%{transform:scale(1)}}@keyframes ball-square-clockwise-spin{0%,40%,to{transform:scale(.4)}70%{transform:scale(1)}}.la-ball-square-spin[_ngcontent-%COMP%], .la-ball-square-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-square-spin[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-square-spin.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-square-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-square-spin[_ngcontent-%COMP%]{height:26px;width:26px}.la-ball-square-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:ball-square-spin 1s ease-in-out infinite;animation:ball-square-spin 1s ease-in-out infinite;border-radius:100%;height:12px;left:50%;margin-left:-6px;margin-top:-6px;position:absolute;top:50%;width:12px}.la-ball-square-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-1.125s;animation-delay:-1.125s;left:0;top:0}.la-ball-square-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-1.25s;animation-delay:-1.25s;left:50%;top:0}.la-ball-square-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-1.375s;animation-delay:-1.375s;left:100%;top:0}.la-ball-square-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-1.5s;animation-delay:-1.5s;left:100%;top:50%}.la-ball-square-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-1.625s;animation-delay:-1.625s;left:100%;top:100%}.la-ball-square-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation-delay:-1.75s;animation-delay:-1.75s;left:50%;top:100%}.la-ball-square-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){-webkit-animation-delay:-1.875s;animation-delay:-1.875s;left:0;top:100%}.la-ball-square-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){-webkit-animation-delay:-2s;animation-delay:-2s;left:0;top:50%}.la-ball-square-spin.la-sm[_ngcontent-%COMP%]{height:12px;width:12px}.la-ball-square-spin.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:6px;margin-left:-3px;margin-top:-3px;width:6px}.la-ball-square-spin.la-2x[_ngcontent-%COMP%]{height:52px;width:52px}.la-ball-square-spin.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:24px;margin-left:-12px;margin-top:-12px;width:24px}.la-ball-square-spin.la-3x[_ngcontent-%COMP%]{height:78px;width:78px}.la-ball-square-spin.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:36px;margin-left:-18px;margin-top:-18px;width:36px}@-webkit-keyframes ball-square-spin{0%,40%,to{transform:scale(.4)}70%{transform:scale(1)}}@keyframes ball-square-spin{0%,40%,to{transform:scale(.4)}70%{transform:scale(1)}}.la-ball-triangle-path[_ngcontent-%COMP%], .la-ball-triangle-path[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-triangle-path[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-triangle-path.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-triangle-path[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-triangle-path[_ngcontent-%COMP%]{height:32px;width:32px}.la-ball-triangle-path[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-radius:100%;height:10px;left:0;position:absolute;top:0;width:10px}.la-ball-triangle-path[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation:ball-triangle-path-ball-one 2s ease-in-out 0s infinite;animation:ball-triangle-path-ball-one 2s ease-in-out 0s infinite}.la-ball-triangle-path[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation:ball-triangle-path-ball-two 2s ease-in-out 0s infinite;animation:ball-triangle-path-ball-two 2s ease-in-out 0s infinite}.la-ball-triangle-path[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation:ball-triangle-path-ball-tree 2s ease-in-out 0s infinite;animation:ball-triangle-path-ball-tree 2s ease-in-out 0s infinite}.la-ball-triangle-path.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-triangle-path.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;width:4px}.la-ball-triangle-path.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-triangle-path.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:20px;width:20px}.la-ball-triangle-path.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-ball-triangle-path.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:30px;width:30px}@-webkit-keyframes ball-triangle-path-ball-one{0%{transform:translateY(220%)}17%{opacity:.25}33%{opacity:1;transform:translate(110%)}50%{opacity:.25}66%{opacity:1;transform:translate(220%,220%)}83%{opacity:.25}to{opacity:1;transform:translateY(220%)}}@keyframes ball-triangle-path-ball-one{0%{transform:translateY(220%)}17%{opacity:.25}33%{opacity:1;transform:translate(110%)}50%{opacity:.25}66%{opacity:1;transform:translate(220%,220%)}83%{opacity:.25}to{opacity:1;transform:translateY(220%)}}@-webkit-keyframes ball-triangle-path-ball-two{0%{transform:translate(110%)}17%{opacity:.25}33%{opacity:1;transform:translate(220%,220%)}50%{opacity:.25}66%{opacity:1;transform:translateY(220%)}83%{opacity:.25}to{opacity:1;transform:translate(110%)}}@keyframes ball-triangle-path-ball-two{0%{transform:translate(110%)}17%{opacity:.25}33%{opacity:1;transform:translate(220%,220%)}50%{opacity:.25}66%{opacity:1;transform:translateY(220%)}83%{opacity:.25}to{opacity:1;transform:translate(110%)}}@-webkit-keyframes ball-triangle-path-ball-tree{0%{transform:translate(220%,220%)}17%{opacity:.25}33%{opacity:1;transform:translateY(220%)}50%{opacity:.25}66%{opacity:1;transform:translate(110%)}83%{opacity:.25}to{opacity:1;transform:translate(220%,220%)}}@keyframes ball-triangle-path-ball-tree{0%{transform:translate(220%,220%)}17%{opacity:.25}33%{opacity:1;transform:translateY(220%)}50%{opacity:.25}66%{opacity:1;transform:translate(110%)}83%{opacity:.25}to{opacity:1;transform:translate(220%,220%)}}.la-ball-zig-zag-deflect[_ngcontent-%COMP%], .la-ball-zig-zag-deflect[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-zig-zag-deflect[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-zig-zag-deflect.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-zig-zag-deflect[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-zig-zag-deflect[_ngcontent-%COMP%]{height:32px;position:relative;width:32px}.la-ball-zig-zag-deflect[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-radius:100%;height:10px;left:50%;margin-left:-5px;margin-top:-5px;position:absolute;top:50%;width:10px}.la-ball-zig-zag-deflect[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation:ball-zig-deflect 1.5s linear 0s infinite;animation:ball-zig-deflect 1.5s linear 0s infinite}.la-ball-zig-zag-deflect[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:last-child{-webkit-animation:ball-zag-deflect 1.5s linear 0s infinite;animation:ball-zag-deflect 1.5s linear 0s infinite}.la-ball-zig-zag-deflect.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-zig-zag-deflect.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-zig-zag-deflect.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-zig-zag-deflect.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:20px;margin-left:-10px;margin-top:-10px;width:20px}.la-ball-zig-zag-deflect.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-ball-zig-zag-deflect.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:30px;margin-left:-15px;margin-top:-15px;width:30px}@-webkit-keyframes ball-zig-deflect{17%{transform:translate(-80%,-160%)}34%{transform:translate(80%,-160%)}50%{transform:translate(0)}67%{transform:translate(80%,-160%)}84%{transform:translate(-80%,-160%)}to{transform:translate(0)}}@keyframes ball-zig-deflect{17%{transform:translate(-80%,-160%)}34%{transform:translate(80%,-160%)}50%{transform:translate(0)}67%{transform:translate(80%,-160%)}84%{transform:translate(-80%,-160%)}to{transform:translate(0)}}@-webkit-keyframes ball-zag-deflect{17%{transform:translate(80%,160%)}34%{transform:translate(-80%,160%)}50%{transform:translate(0)}67%{transform:translate(-80%,160%)}84%{transform:translate(80%,160%)}to{transform:translate(0)}}@keyframes ball-zag-deflect{17%{transform:translate(80%,160%)}34%{transform:translate(-80%,160%)}50%{transform:translate(0)}67%{transform:translate(-80%,160%)}84%{transform:translate(80%,160%)}to{transform:translate(0)}}.la-ball-zig-zag[_ngcontent-%COMP%], .la-ball-zig-zag[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-ball-zig-zag[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-ball-zig-zag.la-dark[_ngcontent-%COMP%]{color:#333}.la-ball-zig-zag[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-zig-zag[_ngcontent-%COMP%]{height:32px;position:relative;width:32px}.la-ball-zig-zag[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-radius:100%;height:10px;left:50%;margin-left:-5px;margin-top:-5px;position:absolute;top:50%;width:10px}.la-ball-zig-zag[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation:ball-zig-effect .7s linear 0s infinite;animation:ball-zig-effect .7s linear 0s infinite}.la-ball-zig-zag[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:last-child{-webkit-animation:ball-zag-effect .7s linear 0s infinite;animation:ball-zag-effect .7s linear 0s infinite}.la-ball-zig-zag.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-ball-zig-zag.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-zig-zag.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-ball-zig-zag.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:20px;margin-left:-10px;margin-top:-10px;width:20px}.la-ball-zig-zag.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-ball-zig-zag.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:30px;margin-left:-15px;margin-top:-15px;width:30px}@-webkit-keyframes ball-zig-effect{0%{transform:translate(0)}33%{transform:translate(-75%,-150%)}66%{transform:translate(75%,-150%)}to{transform:translate(0)}}@keyframes ball-zig-effect{0%{transform:translate(0)}33%{transform:translate(-75%,-150%)}66%{transform:translate(75%,-150%)}to{transform:translate(0)}}@-webkit-keyframes ball-zag-effect{0%{transform:translate(0)}33%{transform:translate(75%,150%)}66%{transform:translate(-75%,150%)}to{transform:translate(0)}}@keyframes ball-zag-effect{0%{transform:translate(0)}33%{transform:translate(75%,150%)}66%{transform:translate(-75%,150%)}to{transform:translate(0)}}.la-cog[_ngcontent-%COMP%], .la-cog[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-cog[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-cog.la-dark[_ngcontent-%COMP%]{color:#333}.la-cog[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-cog[_ngcontent-%COMP%]{height:31px;width:31px}.la-cog[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:cog-rotate 4s linear infinite;animation:cog-rotate 4s linear infinite;background-color:transparent;border-radius:100%;border-style:dashed;border-width:2px;height:100%;width:100%}.la-cog[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:after{border:2px solid;border-radius:100%;content:\"\";height:100%;left:0;position:absolute;top:0;width:100%}.la-cog.la-sm[_ngcontent-%COMP%]{height:15px;width:15px}.la-cog.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%], .la-cog.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:after{border-width:1px}.la-cog.la-2x[_ngcontent-%COMP%]{height:61px;width:61px}.la-cog.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%], .la-cog.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:after{border-width:4px}.la-cog.la-3x[_ngcontent-%COMP%]{height:91px;width:91px}.la-cog.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%], .la-cog.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:after{border-width:6px}@-webkit-keyframes cog-rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes cog-rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.la-cube-transition[_ngcontent-%COMP%], .la-cube-transition[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-cube-transition[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-cube-transition.la-dark[_ngcontent-%COMP%]{color:#333}.la-cube-transition[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-cube-transition[_ngcontent-%COMP%]{height:32px;width:32px}.la-cube-transition[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:cube-transition 1.6s ease-in-out 0s infinite;animation:cube-transition 1.6s ease-in-out 0s infinite;border-radius:0;height:14px;left:0;margin-left:-7px;margin-top:-7px;position:absolute;top:0;width:14px}.la-cube-transition[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:last-child{-webkit-animation-delay:-.8s;animation-delay:-.8s}.la-cube-transition.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-cube-transition.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:6px;margin-left:-3px;margin-top:-3px;width:6px}.la-cube-transition.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-cube-transition.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:28px;margin-left:-14px;margin-top:-14px;width:28px}.la-cube-transition.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-cube-transition.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:42px;margin-left:-21px;margin-top:-21px;width:42px}@-webkit-keyframes cube-transition{25%{left:100%;top:0;transform:scale(.5) rotate(-90deg)}50%{left:100%;top:100%;transform:scale(1) rotate(-180deg)}75%{left:0;top:100%;transform:scale(.5) rotate(-270deg)}to{left:0;top:0;transform:scale(1) rotate(-1turn)}}@keyframes cube-transition{25%{left:100%;top:0;transform:scale(.5) rotate(-90deg)}50%{left:100%;top:100%;transform:scale(1) rotate(-180deg)}75%{left:0;top:100%;transform:scale(.5) rotate(-270deg)}to{left:0;top:0;transform:scale(1) rotate(-1turn)}}.la-fire[_ngcontent-%COMP%], .la-fire[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-fire[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-fire.la-dark[_ngcontent-%COMP%]{color:#333}.la-fire[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-fire[_ngcontent-%COMP%]{height:32px;width:32px}.la-fire[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:fire-diamonds 1.5s linear infinite;animation:fire-diamonds 1.5s linear infinite;border-radius:0;border-radius:2px;bottom:0;height:12px;left:50%;position:absolute;transform:translateY(0) translateX(-50%) rotate(45deg) scale(0);width:12px}.la-fire[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-.85s;animation-delay:-.85s}.la-fire[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-1.85s;animation-delay:-1.85s}.la-fire[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-2.85s;animation-delay:-2.85s}.la-fire.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-fire.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:6px;width:6px}.la-fire.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-fire.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:24px;width:24px}.la-fire.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-fire.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:36px;width:36px}@-webkit-keyframes fire-diamonds{0%{transform:translateY(75%) translateX(-50%) rotate(45deg) scale(0)}50%{transform:translateY(-87.5%) translateX(-50%) rotate(45deg) scale(1)}to{transform:translateY(-212.5%) translateX(-50%) rotate(45deg) scale(0)}}@keyframes fire-diamonds{0%{transform:translateY(75%) translateX(-50%) rotate(45deg) scale(0)}50%{transform:translateY(-87.5%) translateX(-50%) rotate(45deg) scale(1)}to{transform:translateY(-212.5%) translateX(-50%) rotate(45deg) scale(0)}}.la-line-scale-party[_ngcontent-%COMP%], .la-line-scale-party[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-line-scale-party[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-line-scale-party.la-dark[_ngcontent-%COMP%]{color:#333}.la-line-scale-party[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-line-scale-party[_ngcontent-%COMP%]{height:32px;width:40px}.la-line-scale-party[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation-iteration-count:infinite;-webkit-animation-name:line-scale-party;animation-iteration-count:infinite;animation-name:line-scale-party;border-radius:0;height:32px;margin:0 2px;width:4px}.la-line-scale-party[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-.23s;-webkit-animation-duration:.43s;animation-delay:-.23s;animation-duration:.43s}.la-line-scale-party[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-.32s;-webkit-animation-duration:.62s;animation-delay:-.32s;animation-duration:.62s}.la-line-scale-party[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-.44s;-webkit-animation-duration:.43s;animation-delay:-.44s;animation-duration:.43s}.la-line-scale-party[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-.31s;-webkit-animation-duration:.8s;animation-delay:-.31s;animation-duration:.8s}.la-line-scale-party[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-.24s;-webkit-animation-duration:.74s;animation-delay:-.24s;animation-duration:.74s}.la-line-scale-party.la-sm[_ngcontent-%COMP%]{height:16px;width:20px}.la-line-scale-party.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:16px;margin:0 1px;width:2px}.la-line-scale-party.la-2x[_ngcontent-%COMP%]{height:64px;width:80px}.la-line-scale-party.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:64px;margin:0 4px;width:8px}.la-line-scale-party.la-3x[_ngcontent-%COMP%]{height:96px;width:120px}.la-line-scale-party.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:96px;margin:0 6px;width:12px}@-webkit-keyframes line-scale-party{0%{transform:scaleY(1)}50%{transform:scaleY(.3)}to{transform:scaleY(1)}}@keyframes line-scale-party{0%{transform:scaleY(1)}50%{transform:scaleY(.3)}to{transform:scaleY(1)}}.la-line-scale-pulse-out-rapid[_ngcontent-%COMP%], .la-line-scale-pulse-out-rapid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-line-scale-pulse-out-rapid[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-line-scale-pulse-out-rapid.la-dark[_ngcontent-%COMP%]{color:#333}.la-line-scale-pulse-out-rapid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-line-scale-pulse-out-rapid[_ngcontent-%COMP%]{height:32px;width:40px}.la-line-scale-pulse-out-rapid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:line-scale-pulse-out-rapid .9s cubic-bezier(.11,.49,.38,.78) infinite;animation:line-scale-pulse-out-rapid .9s cubic-bezier(.11,.49,.38,.78) infinite;border-radius:0;height:32px;margin:0 2px;width:4px}.la-line-scale-pulse-out-rapid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-.9s;animation-delay:-.9s}.la-line-scale-pulse-out-rapid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2), .la-line-scale-pulse-out-rapid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-.65s;animation-delay:-.65s}.la-line-scale-pulse-out-rapid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child, .la-line-scale-pulse-out-rapid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-.4s;animation-delay:-.4s}.la-line-scale-pulse-out-rapid.la-sm[_ngcontent-%COMP%]{height:16px;width:20px}.la-line-scale-pulse-out-rapid.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:16px;margin:0 1px;width:2px}.la-line-scale-pulse-out-rapid.la-2x[_ngcontent-%COMP%]{height:64px;width:80px}.la-line-scale-pulse-out-rapid.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:64px;margin:0 4px;width:8px}.la-line-scale-pulse-out-rapid.la-3x[_ngcontent-%COMP%]{height:96px;width:120px}.la-line-scale-pulse-out-rapid.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:96px;margin:0 6px;width:12px}@-webkit-keyframes line-scale-pulse-out-rapid{0%{transform:scaley(1)}80%{transform:scaley(.3)}90%{transform:scaley(1)}}@keyframes line-scale-pulse-out-rapid{0%{transform:scaley(1)}80%{transform:scaley(.3)}90%{transform:scaley(1)}}.la-line-scale-pulse-out[_ngcontent-%COMP%], .la-line-scale-pulse-out[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-line-scale-pulse-out[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-line-scale-pulse-out.la-dark[_ngcontent-%COMP%]{color:#333}.la-line-scale-pulse-out[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-line-scale-pulse-out[_ngcontent-%COMP%]{height:32px;width:40px}.la-line-scale-pulse-out[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:line-scale-pulse-out .9s cubic-bezier(.85,.25,.37,.85) infinite;animation:line-scale-pulse-out .9s cubic-bezier(.85,.25,.37,.85) infinite;border-radius:0;height:32px;margin:0 2px;width:4px}.la-line-scale-pulse-out[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-.9s;animation-delay:-.9s}.la-line-scale-pulse-out[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2), .la-line-scale-pulse-out[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-.7s;animation-delay:-.7s}.la-line-scale-pulse-out[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child, .la-line-scale-pulse-out[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-.5s;animation-delay:-.5s}.la-line-scale-pulse-out.la-sm[_ngcontent-%COMP%]{height:16px;width:20px}.la-line-scale-pulse-out.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:16px;margin:0 1px;width:2px}.la-line-scale-pulse-out.la-2x[_ngcontent-%COMP%]{height:64px;width:80px}.la-line-scale-pulse-out.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:64px;margin:0 4px;width:8px}.la-line-scale-pulse-out.la-3x[_ngcontent-%COMP%]{height:96px;width:120px}.la-line-scale-pulse-out.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:96px;margin:0 6px;width:12px}@-webkit-keyframes line-scale-pulse-out{0%{transform:scaley(1)}50%{transform:scaley(.3)}to{transform:scaley(1)}}@keyframes line-scale-pulse-out{0%{transform:scaley(1)}50%{transform:scaley(.3)}to{transform:scaley(1)}}.la-line-scale[_ngcontent-%COMP%], .la-line-scale[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-line-scale[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-line-scale.la-dark[_ngcontent-%COMP%]{color:#333}.la-line-scale[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-line-scale[_ngcontent-%COMP%]{height:32px;width:40px}.la-line-scale[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:line-scale 1.2s ease infinite;animation:line-scale 1.2s ease infinite;border-radius:0;height:32px;margin:0 2px;width:4px}.la-line-scale[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-1.2s;animation-delay:-1.2s}.la-line-scale[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-1.1s;animation-delay:-1.1s}.la-line-scale[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-1s;animation-delay:-1s}.la-line-scale[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-.9s;animation-delay:-.9s}.la-line-scale[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-.8s;animation-delay:-.8s}.la-line-scale.la-sm[_ngcontent-%COMP%]{height:16px;width:20px}.la-line-scale.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:16px;margin:0 1px;width:2px}.la-line-scale.la-2x[_ngcontent-%COMP%]{height:64px;width:80px}.la-line-scale.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:64px;margin:0 4px;width:8px}.la-line-scale.la-3x[_ngcontent-%COMP%]{height:96px;width:120px}.la-line-scale.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:96px;margin:0 6px;width:12px}@-webkit-keyframes line-scale{0%,40%,to{transform:scaleY(.4)}20%{transform:scaleY(1)}}@keyframes line-scale{0%,40%,to{transform:scaleY(.4)}20%{transform:scaleY(1)}}.la-line-spin-clockwise-fade-rotating[_ngcontent-%COMP%], .la-line-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-line-spin-clockwise-fade-rotating[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-line-spin-clockwise-fade-rotating.la-dark[_ngcontent-%COMP%]{color:#333}.la-line-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-line-spin-clockwise-fade-rotating[_ngcontent-%COMP%]{-webkit-animation:line-spin-clockwise-fade-rotating-rotate 6s linear infinite;animation:line-spin-clockwise-fade-rotating-rotate 6s linear infinite;height:32px;width:32px}.la-line-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:line-spin-clockwise-fade-rotating 1s ease-in-out infinite;animation:line-spin-clockwise-fade-rotating 1s ease-in-out infinite;border-radius:0;height:10px;margin:-5px 2px 2px -1px;position:absolute;width:2px}.la-line-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-.875s;animation-delay:-.875s;left:50%;top:15%;transform:rotate(0deg)}.la-line-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-.75s;animation-delay:-.75s;left:74.7487373415%;top:25.2512626585%;transform:rotate(45deg)}.la-line-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-.625s;animation-delay:-.625s;left:85%;top:50%;transform:rotate(90deg)}.la-line-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-.5s;animation-delay:-.5s;left:74.7487373415%;top:74.7487373415%;transform:rotate(135deg)}.la-line-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-.375s;animation-delay:-.375s;left:50.0000000004%;top:84.9999999974%;transform:rotate(180deg)}.la-line-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation-delay:-.25s;animation-delay:-.25s;left:25.2512627193%;top:74.7487369862%;transform:rotate(225deg)}.la-line-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){-webkit-animation-delay:-.125s;animation-delay:-.125s;left:15.0000039834%;top:49.9999806189%;transform:rotate(270deg)}.la-line-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){-webkit-animation-delay:0s;animation-delay:0s;left:25.2513989292%;top:25.2506949798%;transform:rotate(315deg)}.la-line-spin-clockwise-fade-rotating.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-line-spin-clockwise-fade-rotating.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin-left:0;margin-top:-2px;width:1px}.la-line-spin-clockwise-fade-rotating.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-line-spin-clockwise-fade-rotating.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:20px;margin-left:-2px;margin-top:-10px;width:4px}.la-line-spin-clockwise-fade-rotating.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-line-spin-clockwise-fade-rotating.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:30px;margin-left:-3px;margin-top:-15px;width:6px}@-webkit-keyframes line-spin-clockwise-fade-rotating-rotate{to{transform:rotate(-1turn)}}@keyframes line-spin-clockwise-fade-rotating-rotate{to{transform:rotate(-1turn)}}@-webkit-keyframes line-spin-clockwise-fade-rotating{50%{opacity:.2}to{opacity:1}}@keyframes line-spin-clockwise-fade-rotating{50%{opacity:.2}to{opacity:1}}.la-line-spin-clockwise-fade[_ngcontent-%COMP%], .la-line-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-line-spin-clockwise-fade[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-line-spin-clockwise-fade.la-dark[_ngcontent-%COMP%]{color:#333}.la-line-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-line-spin-clockwise-fade[_ngcontent-%COMP%]{height:32px;width:32px}.la-line-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:line-spin-clockwise-fade 1s ease-in-out infinite;animation:line-spin-clockwise-fade 1s ease-in-out infinite;border-radius:0;height:10px;margin:-5px 2px 2px -1px;position:absolute;width:2px}.la-line-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-.875s;animation-delay:-.875s;left:50%;top:15%;transform:rotate(0deg)}.la-line-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-.75s;animation-delay:-.75s;left:74.7487373415%;top:25.2512626585%;transform:rotate(45deg)}.la-line-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-.625s;animation-delay:-.625s;left:85%;top:50%;transform:rotate(90deg)}.la-line-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-.5s;animation-delay:-.5s;left:74.7487373415%;top:74.7487373415%;transform:rotate(135deg)}.la-line-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-.375s;animation-delay:-.375s;left:50.0000000004%;top:84.9999999974%;transform:rotate(180deg)}.la-line-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation-delay:-.25s;animation-delay:-.25s;left:25.2512627193%;top:74.7487369862%;transform:rotate(225deg)}.la-line-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){-webkit-animation-delay:-.125s;animation-delay:-.125s;left:15.0000039834%;top:49.9999806189%;transform:rotate(270deg)}.la-line-spin-clockwise-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){-webkit-animation-delay:0s;animation-delay:0s;left:25.2513989292%;top:25.2506949798%;transform:rotate(315deg)}.la-line-spin-clockwise-fade.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-line-spin-clockwise-fade.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin-left:0;margin-top:-2px;width:1px}.la-line-spin-clockwise-fade.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-line-spin-clockwise-fade.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:20px;margin-left:-2px;margin-top:-10px;width:4px}.la-line-spin-clockwise-fade.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-line-spin-clockwise-fade.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:30px;margin-left:-3px;margin-top:-15px;width:6px}@-webkit-keyframes line-spin-clockwise-fade{50%{opacity:.2}to{opacity:1}}@keyframes line-spin-clockwise-fade{50%{opacity:.2}to{opacity:1}}.la-line-spin-fade-rotating[_ngcontent-%COMP%], .la-line-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-line-spin-fade-rotating[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-line-spin-fade-rotating.la-dark[_ngcontent-%COMP%]{color:#333}.la-line-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-line-spin-fade-rotating[_ngcontent-%COMP%]{-webkit-animation:ball-spin-fade-rotating-rotate 6s linear infinite;animation:ball-spin-fade-rotating-rotate 6s linear infinite;height:32px;width:32px}.la-line-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:line-spin-fade-rotating 1s ease-in-out infinite;animation:line-spin-fade-rotating 1s ease-in-out infinite;border-radius:0;height:10px;margin:-5px 2px 2px -1px;position:absolute;width:2px}.la-line-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-1.125s;animation-delay:-1.125s;left:50%;top:15%;transform:rotate(0deg)}.la-line-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-1.25s;animation-delay:-1.25s;left:74.7487373415%;top:25.2512626585%;transform:rotate(45deg)}.la-line-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-1.375s;animation-delay:-1.375s;left:85%;top:50%;transform:rotate(90deg)}.la-line-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-1.5s;animation-delay:-1.5s;left:74.7487373415%;top:74.7487373415%;transform:rotate(135deg)}.la-line-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-1.625s;animation-delay:-1.625s;left:50.0000000004%;top:84.9999999974%;transform:rotate(180deg)}.la-line-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation-delay:-1.75s;animation-delay:-1.75s;left:25.2512627193%;top:74.7487369862%;transform:rotate(225deg)}.la-line-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){-webkit-animation-delay:-1.875s;animation-delay:-1.875s;left:15.0000039834%;top:49.9999806189%;transform:rotate(270deg)}.la-line-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){-webkit-animation-delay:-2s;animation-delay:-2s;left:25.2513989292%;top:25.2506949798%;transform:rotate(315deg)}.la-line-spin-fade-rotating.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-line-spin-fade-rotating.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin-left:0;margin-top:-2px;width:1px}.la-line-spin-fade-rotating.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-line-spin-fade-rotating.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:20px;margin-left:-2px;margin-top:-10px;width:4px}.la-line-spin-fade-rotating.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-line-spin-fade-rotating.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:30px;margin-left:-3px;margin-top:-15px;width:6px}@-webkit-keyframes ball-spin-fade-rotating-rotate{to{transform:rotate(1turn)}}@keyframes ball-spin-fade-rotating-rotate{to{transform:rotate(1turn)}}@-webkit-keyframes line-spin-fade-rotating{50%{opacity:.2}to{opacity:1}}@keyframes line-spin-fade-rotating{50%{opacity:.2}to{opacity:1}}.la-line-spin-fade[_ngcontent-%COMP%], .la-line-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-line-spin-fade[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-line-spin-fade.la-dark[_ngcontent-%COMP%]{color:#333}.la-line-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-line-spin-fade[_ngcontent-%COMP%]{height:32px;width:32px}.la-line-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:line-spin-fade 1s ease-in-out infinite;animation:line-spin-fade 1s ease-in-out infinite;border-radius:0;height:10px;margin:-5px 2px 2px -1px;position:absolute;width:2px}.la-line-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation-delay:-1.125s;animation-delay:-1.125s;left:50%;top:15%;transform:rotate(0deg)}.la-line-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-delay:-1.25s;animation-delay:-1.25s;left:74.7487373415%;top:25.2512626585%;transform:rotate(45deg)}.la-line-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-1.375s;animation-delay:-1.375s;left:85%;top:50%;transform:rotate(90deg)}.la-line-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-1.5s;animation-delay:-1.5s;left:74.7487373415%;top:74.7487373415%;transform:rotate(135deg)}.la-line-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-1.625s;animation-delay:-1.625s;left:50.0000000004%;top:84.9999999974%;transform:rotate(180deg)}.la-line-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation-delay:-1.75s;animation-delay:-1.75s;left:25.2512627193%;top:74.7487369862%;transform:rotate(225deg)}.la-line-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){-webkit-animation-delay:-1.875s;animation-delay:-1.875s;left:15.0000039834%;top:49.9999806189%;transform:rotate(270deg)}.la-line-spin-fade[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){-webkit-animation-delay:-2s;animation-delay:-2s;left:25.2513989292%;top:25.2506949798%;transform:rotate(315deg)}.la-line-spin-fade.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-line-spin-fade.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:4px;margin-left:0;margin-top:-2px;width:1px}.la-line-spin-fade.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-line-spin-fade.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:20px;margin-left:-2px;margin-top:-10px;width:4px}.la-line-spin-fade.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-line-spin-fade.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:30px;margin-left:-3px;margin-top:-15px;width:6px}@-webkit-keyframes line-spin-fade{50%{opacity:.2}to{opacity:1}}@keyframes line-spin-fade{50%{opacity:.2}to{opacity:1}}.la-pacman[_ngcontent-%COMP%], .la-pacman[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-pacman[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-pacman.la-dark[_ngcontent-%COMP%]{color:#333}.la-pacman[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-pacman[_ngcontent-%COMP%]{height:32px;width:32px}.la-pacman[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child, .la-pacman[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation:pacman-rotate-half-up .5s 0s infinite;animation:pacman-rotate-half-up .5s 0s infinite;background:transparent;border-radius:100%;border-right:solid transparent;border-style:solid;border-width:16px;height:0;position:absolute;width:0}.la-pacman[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation-name:pacman-rotate-half-down;animation-name:pacman-rotate-half-down;top:0}.la-pacman[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3), .la-pacman[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4), .la-pacman[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5), .la-pacman[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation:pacman-balls 2s linear 0s infinite;animation:pacman-balls 2s linear 0s infinite;border-radius:100%;height:8px;left:200%;opacity:0;position:absolute;top:50%;width:8px}.la-pacman[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){-webkit-animation-delay:-1.44s;animation-delay:-1.44s}.la-pacman[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){-webkit-animation-delay:-1.94s;animation-delay:-1.94s}.la-pacman[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){-webkit-animation-delay:-2.44s;animation-delay:-2.44s}.la-pacman[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){-webkit-animation-delay:-2.94s;animation-delay:-2.94s}.la-pacman.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-pacman.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child, .la-pacman.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){border-width:8px;position:absolute}.la-pacman.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){top:0}.la-pacman.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3), .la-pacman.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4), .la-pacman.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5), .la-pacman.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){height:4px;width:4px}.la-pacman.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-pacman.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child, .la-pacman.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){border-width:32px;position:absolute}.la-pacman.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){top:0}.la-pacman.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3), .la-pacman.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4), .la-pacman.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5), .la-pacman.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){height:16px;width:16px}.la-pacman.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-pacman.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child, .la-pacman.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){border-width:48px;position:absolute}.la-pacman.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){top:0}.la-pacman.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3), .la-pacman.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4), .la-pacman.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5), .la-pacman.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){height:24px;width:24px}@-webkit-keyframes pacman-rotate-half-up{0%,to{transform:rotate(270deg)}50%{transform:rotate(1turn)}}@keyframes pacman-rotate-half-up{0%,to{transform:rotate(270deg)}50%{transform:rotate(1turn)}}@-webkit-keyframes pacman-rotate-half-down{0%,to{transform:rotate(90deg)}50%{transform:rotate(0deg)}}@keyframes pacman-rotate-half-down{0%,to{transform:rotate(90deg)}50%{transform:rotate(0deg)}}@-webkit-keyframes pacman-balls{0%{left:200%;opacity:0;transform:translateY(-50%)}5%{opacity:.5}66%{opacity:1}67%{opacity:0}to{left:0;transform:translateY(-50%)}}@keyframes pacman-balls{0%{left:200%;opacity:0;transform:translateY(-50%)}5%{opacity:.5}66%{opacity:1}67%{opacity:0}to{left:0;transform:translateY(-50%)}}.la-square-jelly-box[_ngcontent-%COMP%], .la-square-jelly-box[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-square-jelly-box[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-square-jelly-box.la-dark[_ngcontent-%COMP%]{color:#333}.la-square-jelly-box[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-square-jelly-box[_ngcontent-%COMP%]{height:32px;width:32px}.la-square-jelly-box[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child, .la-square-jelly-box[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){left:0;position:absolute;width:100%}.la-square-jelly-box[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{-webkit-animation:square-jelly-box-animate .6s linear -.1s infinite;animation:square-jelly-box-animate .6s linear -.1s infinite;border-radius:10%;height:100%;top:-25%;z-index:1}.la-square-jelly-box[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){-webkit-animation:square-jelly-box-shadow .6s linear -.1s infinite;animation:square-jelly-box-shadow .6s linear -.1s infinite;background:#000;border-radius:50%;bottom:-9%;height:10%;opacity:.2}.la-square-jelly-box.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-square-jelly-box.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-square-jelly-box.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}@-webkit-keyframes square-jelly-box-animate{17%{border-bottom-right-radius:10%}25%{transform:translateY(25%) rotate(22.5deg)}50%{border-bottom-right-radius:100%;transform:translateY(50%) scaleY(.9) rotate(45deg)}75%{transform:translateY(25%) rotate(67.5deg)}to{transform:translateY(0) rotate(90deg)}}@keyframes square-jelly-box-animate{17%{border-bottom-right-radius:10%}25%{transform:translateY(25%) rotate(22.5deg)}50%{border-bottom-right-radius:100%;transform:translateY(50%) scaleY(.9) rotate(45deg)}75%{transform:translateY(25%) rotate(67.5deg)}to{transform:translateY(0) rotate(90deg)}}@-webkit-keyframes square-jelly-box-shadow{50%{transform:scaleX(1.25)}}@keyframes square-jelly-box-shadow{50%{transform:scaleX(1.25)}}.la-square-loader[_ngcontent-%COMP%], .la-square-loader[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-square-loader[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-square-loader.la-dark[_ngcontent-%COMP%]{color:#333}.la-square-loader[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-square-loader[_ngcontent-%COMP%]{height:32px;width:32px}.la-square-loader[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:square-loader 2s ease infinite;animation:square-loader 2s ease infinite;background:transparent;border-radius:0;border-width:2px;height:100%;width:100%}.la-square-loader[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:after{-webkit-animation:square-loader-inner 2s ease-in infinite;animation:square-loader-inner 2s ease-in infinite;background-color:currentColor;content:\"\";display:inline-block;vertical-align:top;width:100%}.la-square-loader.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-square-loader.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:1px}.la-square-loader.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-square-loader.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:4px}.la-square-loader.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}.la-square-loader.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:6px}@-webkit-keyframes square-loader{0%{transform:rotate(0deg)}25%{transform:rotate(180deg)}50%{transform:rotate(180deg)}75%{transform:rotate(1turn)}to{transform:rotate(1turn)}}@keyframes square-loader{0%{transform:rotate(0deg)}25%{transform:rotate(180deg)}50%{transform:rotate(180deg)}75%{transform:rotate(1turn)}to{transform:rotate(1turn)}}@-webkit-keyframes square-loader-inner{0%{height:0}25%{height:0}50%{height:100%}75%{height:100%}to{height:0}}@keyframes square-loader-inner{0%{height:0}25%{height:0}50%{height:100%}75%{height:100%}to{height:0}}.la-square-spin[_ngcontent-%COMP%], .la-square-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-square-spin[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-square-spin.la-dark[_ngcontent-%COMP%]{color:#333}.la-square-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-square-spin[_ngcontent-%COMP%]{height:32px;width:32px}.la-square-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:square-spin 3s cubic-bezier(.09,.57,.49,.9) 0s infinite;animation:square-spin 3s cubic-bezier(.09,.57,.49,.9) 0s infinite;border-radius:0;height:100%;width:100%}.la-square-spin.la-sm[_ngcontent-%COMP%]{height:16px;width:16px}.la-square-spin.la-2x[_ngcontent-%COMP%]{height:64px;width:64px}.la-square-spin.la-3x[_ngcontent-%COMP%]{height:96px;width:96px}@-webkit-keyframes square-spin{0%{transform:perspective(100px) rotateX(0) rotateY(0)}25%{transform:perspective(100px) rotateX(180deg) rotateY(0)}50%{transform:perspective(100px) rotateX(180deg) rotateY(180deg)}75%{transform:perspective(100px) rotateX(0) rotateY(180deg)}to{transform:perspective(100px) rotateX(0) rotateY(1turn)}}@keyframes square-spin{0%{transform:perspective(100px) rotateX(0) rotateY(0)}25%{transform:perspective(100px) rotateX(180deg) rotateY(0)}50%{transform:perspective(100px) rotateX(180deg) rotateY(180deg)}75%{transform:perspective(100px) rotateX(0) rotateY(180deg)}to{transform:perspective(100px) rotateX(0) rotateY(1turn)}}.la-timer[_ngcontent-%COMP%], .la-timer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-timer[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-timer.la-dark[_ngcontent-%COMP%]{color:#333}.la-timer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-timer[_ngcontent-%COMP%], .la-timer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:32px;width:32px}.la-timer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background:transparent;border-radius:100%;border-width:2px}.la-timer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:after, .la-timer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:before{-webkit-animation:timer-loader 1.25s linear infinite;-webkit-animation-delay:-625ms;animation:timer-loader 1.25s linear infinite;animation-delay:-625ms;background:currentColor;border-radius:2px;content:\"\";display:block;left:14px;margin-left:-1px;margin-top:-1px;position:absolute;top:14px;transform-origin:1px 1px 0;width:2px}.la-timer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:before{height:12px}.la-timer[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:after{-webkit-animation-delay:-7.5s;-webkit-animation-duration:15s;animation-delay:-7.5s;animation-duration:15s;height:8px}.la-timer.la-sm[_ngcontent-%COMP%], .la-timer.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:16px;width:16px}.la-timer.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:1px}.la-timer.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:after, .la-timer.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:before{border-radius:1px;left:7px;margin-left:-.5px;margin-top:-.5px;top:7px;transform-origin:.5px .5px 0;width:1px}.la-timer.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:before{height:6px}.la-timer.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:after{height:4px}.la-timer.la-2x[_ngcontent-%COMP%], .la-timer.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:64px;width:64px}.la-timer.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:4px}.la-timer.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:after, .la-timer.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:before{border-radius:4px;left:28px;margin-left:-2px;margin-top:-2px;top:28px;transform-origin:2px 2px 0;width:4px}.la-timer.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:before{height:24px}.la-timer.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:after{height:16px}.la-timer.la-3x[_ngcontent-%COMP%], .la-timer.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{height:96px;width:96px}.la-timer.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:6px}.la-timer.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:after, .la-timer.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:before{border-radius:6px;left:42px;margin-left:-3px;margin-top:-3px;top:42px;transform-origin:3px 3px 0;width:6px}.la-timer.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:before{height:36px}.la-timer.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:after{height:24px}@-webkit-keyframes timer-loader{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes timer-loader{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.la-triangle-skew-spin[_ngcontent-%COMP%], .la-triangle-skew-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{box-sizing:border-box;position:relative}.la-triangle-skew-spin[_ngcontent-%COMP%]{color:#fff;display:block;font-size:0}.la-triangle-skew-spin.la-dark[_ngcontent-%COMP%]{color:#333}.la-triangle-skew-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-triangle-skew-spin[_ngcontent-%COMP%]{height:16px;width:32px}.la-triangle-skew-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{-webkit-animation:triangle-skew-spin 3s cubic-bezier(.09,.57,.49,.9) 0s infinite;animation:triangle-skew-spin 3s cubic-bezier(.09,.57,.49,.9) 0s infinite;background:transparent;border-color:currentcolor transparent;border-left:none;border-right:none;border-style:solid;border-width:0 16px 16px;height:0;width:0}.la-triangle-skew-spin.la-sm[_ngcontent-%COMP%]{height:8px;width:16px}.la-triangle-skew-spin.la-sm[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:0 8px 8px}.la-triangle-skew-spin.la-2x[_ngcontent-%COMP%]{height:32px;width:64px}.la-triangle-skew-spin.la-2x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:0 32px 32px}.la-triangle-skew-spin.la-3x[_ngcontent-%COMP%]{height:48px;width:96px}.la-triangle-skew-spin.la-3x[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{border-width:0 48px 48px}@-webkit-keyframes triangle-skew-spin{0%{transform:perspective(100px) rotateX(0) rotateY(0)}25%{transform:perspective(100px) rotateX(180deg) rotateY(0)}50%{transform:perspective(100px) rotateX(180deg) rotateY(180deg)}75%{transform:perspective(100px) rotateX(0) rotateY(180deg)}to{transform:perspective(100px) rotateX(0) rotateY(1turn)}}@keyframes triangle-skew-spin{0%{transform:perspective(100px) rotateX(0) rotateY(0)}25%{transform:perspective(100px) rotateX(180deg) rotateY(0)}50%{transform:perspective(100px) rotateX(180deg) rotateY(180deg)}75%{transform:perspective(100px) rotateX(0) rotateY(180deg)}to{transform:perspective(100px) rotateX(0) rotateY(1turn)}}.overlay[_ngcontent-%COMP%]{height:100%;left:0;position:fixed;top:0;width:100%}.overlay[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:not(.loading-text){left:50%;margin:0;position:absolute;top:50%;transform:translate(-50%,-50%)}.loading-text[_ngcontent-%COMP%]{left:50%;position:absolute;top:60%;transform:translate(-50%,-60%)}"], data: { animation: [
- Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["trigger"])('fadeIn', [
- Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["state"])('in', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])({ opacity: 1 })),
- Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["transition"])(':enter', [
- Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])({ opacity: 0 }),
- Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["animate"])(300)
- ]),
- Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["transition"])(':leave', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["animate"])(200, Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])({ opacity: 0 })))
- ])
- ] }, changeDetection: 0 });
- NgxSpinnerComponent.ctorParameters = () => [
- { type: NgxSpinnerService },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }
- ];
- NgxSpinnerComponent.propDecorators = {
- bdColor: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- size: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- color: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- type: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- fullScreen: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- name: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- zIndex: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- template: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgxSpinnerComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ngx-spinner',
- template: "<div [@fadeIn]=\"'in'\" *ngIf=\"spinner.show\" class=\"overlay\" [style.background-color]=\"spinner.bdColor\"\n [style.z-index]=\"spinner.zIndex\" [style.position]=\"spinner.fullScreen ? 'fixed' : 'absolute'\">\n <div *ngIf=\"!template\" [class]=\"spinner.class\" [style.color]=\"spinner.color\">\n <div *ngFor=\"let index of spinner.divArray\"></div>\n </div>\n <div *ngIf=\"template\" [innerHTML]=\"template | safeHtml\"></div>\n <div class=\"loading-text\" [style.z-index]=\"spinner.zIndex\">\n <ng-content></ng-content>\n </div>\n</div>",
- changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
- animations: [
- Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["trigger"])('fadeIn', [
- Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["state"])('in', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])({ opacity: 1 })),
- Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["transition"])(':enter', [
- Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])({ opacity: 0 }),
- Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["animate"])(300)
- ]),
- Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["transition"])(':leave', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["animate"])(200, Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])({ opacity: 0 })))
- ])
- ],
- styles: ["/*!\n * Load Awesome v1.1.0 (http://github.danielcardoso.net/load-awesome/)\n * Copyright 2015 Daniel Cardoso <@DanielCardoso>\n * Licensed under MIT\n */.la-ball-8bits,.la-ball-8bits>div{box-sizing:border-box;position:relative}.la-ball-8bits{color:#fff;display:block;font-size:0}.la-ball-8bits.la-dark{color:#333}.la-ball-8bits>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-8bits{height:12px;width:12px}.la-ball-8bits>div{-webkit-animation:ball-8bits 1s ease 0s infinite;animation:ball-8bits 1s ease 0s infinite;border-radius:0;height:4px;left:50%;opacity:0;position:absolute;top:50%;transform:translate(100%,100%);width:4px}.la-ball-8bits>div:first-child{-webkit-animation-delay:-.9375s;animation-delay:-.9375s}.la-ball-8bits>div:nth-child(2){-webkit-animation-delay:-.875s;animation-delay:-.875s}.la-ball-8bits>div:nth-child(3){-webkit-animation-delay:-.8125s;animation-delay:-.8125s}.la-ball-8bits>div:nth-child(4){-webkit-animation-delay:-.75s;animation-delay:-.75s}.la-ball-8bits>div:nth-child(5){-webkit-animation-delay:-.6875s;animation-delay:-.6875s}.la-ball-8bits>div:nth-child(6){-webkit-animation-delay:-.625s;animation-delay:-.625s}.la-ball-8bits>div:nth-child(7){-webkit-animation-delay:-.5625s;animation-delay:-.5625s}.la-ball-8bits>div:nth-child(8){-webkit-animation-delay:-.5s;animation-delay:-.5s}.la-ball-8bits>div:nth-child(9){-webkit-animation-delay:-.4375s;animation-delay:-.4375s}.la-ball-8bits>div:nth-child(10){-webkit-animation-delay:-.375s;animation-delay:-.375s}.la-ball-8bits>div:nth-child(11){-webkit-animation-delay:-.3125s;animation-delay:-.3125s}.la-ball-8bits>div:nth-child(12){-webkit-animation-delay:-.25s;animation-delay:-.25s}.la-ball-8bits>div:nth-child(13){-webkit-animation-delay:-.1875s;animation-delay:-.1875s}.la-ball-8bits>div:nth-child(14){-webkit-animation-delay:-.125s;animation-delay:-.125s}.la-ball-8bits>div:nth-child(15){-webkit-animation-delay:-.0625s;animation-delay:-.0625s}.la-ball-8bits>div:nth-child(16){-webkit-animation-delay:0s;animation-delay:0s}.la-ball-8bits>div:first-child{left:0;top:-100%}.la-ball-8bits>div:nth-child(2){left:33.3333333333%;top:-100%}.la-ball-8bits>div:nth-child(3){left:66.6666666667%;top:-66.6666666667%}.la-ball-8bits>div:nth-child(4){left:100%;top:-33.3333333333%}.la-ball-8bits>div:nth-child(5){left:100%;top:0}.la-ball-8bits>div:nth-child(6){left:100%;top:33.3333333333%}.la-ball-8bits>div:nth-child(7){left:66.6666666667%;top:66.6666666667%}.la-ball-8bits>div:nth-child(8){left:33.3333333333%;top:100%}.la-ball-8bits>div:nth-child(9){left:0;top:100%}.la-ball-8bits>div:nth-child(10){left:-33.3333333333%;top:100%}.la-ball-8bits>div:nth-child(11){left:-66.6666666667%;top:66.6666666667%}.la-ball-8bits>div:nth-child(12){left:-100%;top:33.3333333333%}.la-ball-8bits>div:nth-child(13){left:-100%;top:0}.la-ball-8bits>div:nth-child(14){left:-100%;top:-33.3333333333%}.la-ball-8bits>div:nth-child(15){left:-66.6666666667%;top:-66.6666666667%}.la-ball-8bits>div:nth-child(16){left:-33.3333333333%;top:-100%}.la-ball-8bits.la-sm{height:6px;width:6px}.la-ball-8bits.la-sm>div{height:2px;width:2px}.la-ball-8bits.la-2x{height:24px;width:24px}.la-ball-8bits.la-2x>div{height:8px;width:8px}.la-ball-8bits.la-3x{height:36px;width:36px}.la-ball-8bits.la-3x>div{height:12px;width:12px}@-webkit-keyframes ball-8bits{0%{opacity:1}50%{opacity:1}51%{opacity:0}}@keyframes ball-8bits{0%{opacity:1}50%{opacity:1}51%{opacity:0}}.la-ball-atom,.la-ball-atom>div{box-sizing:border-box;position:relative}.la-ball-atom{color:#fff;display:block;font-size:0}.la-ball-atom.la-dark{color:#333}.la-ball-atom>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-atom{height:32px;width:32px}.la-ball-atom>div:first-child{-webkit-animation:ball-atom-shrink 4.5s linear infinite;animation:ball-atom-shrink 4.5s linear infinite;background:#aaa;border-radius:100%;height:60%;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:60%;z-index:1}.la-ball-atom>div:not(:first-child){-webkit-animation:ball-atom-zindex 1.5s steps(2) 0s infinite;animation:ball-atom-zindex 1.5s steps(2) 0s infinite;background:none;height:100%;left:0;position:absolute;width:100%;z-index:0}.la-ball-atom>div:not(:first-child):before{-webkit-animation:ball-atom-position 1.5s ease 0s infinite,ball-atom-size 1.5s ease 0s infinite;animation:ball-atom-position 1.5s ease 0s infinite,ball-atom-size 1.5s ease 0s infinite;background:currentColor;border-radius:50%;content:\"\";height:10px;left:0;margin-left:-5px;margin-top:-5px;opacity:.75;position:absolute;top:0;width:10px}.la-ball-atom>div:nth-child(2){-webkit-animation-delay:.75s;animation-delay:.75s}.la-ball-atom>div:nth-child(2):before{-webkit-animation-delay:0s,-1.125s;animation-delay:0s,-1.125s}.la-ball-atom>div:nth-child(3){-webkit-animation-delay:-.25s;animation-delay:-.25s;transform:rotate(120deg)}.la-ball-atom>div:nth-child(3):before{-webkit-animation-delay:-1s,-.75s;animation-delay:-1s,-.75s}.la-ball-atom>div:nth-child(4){-webkit-animation-delay:.25s;animation-delay:.25s;transform:rotate(240deg)}.la-ball-atom>div:nth-child(4):before{-webkit-animation-delay:-.5s,-.125s;animation-delay:-.5s,-.125s}.la-ball-atom.la-sm{height:16px;width:16px}.la-ball-atom.la-sm>div:not(:first-child):before{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-atom.la-2x{height:64px;width:64px}.la-ball-atom.la-2x>div:not(:first-child):before{height:20px;margin-left:-10px;margin-top:-10px;width:20px}.la-ball-atom.la-3x{height:96px;width:96px}.la-ball-atom.la-3x>div:not(:first-child):before{height:30px;margin-left:-15px;margin-top:-15px;width:30px}@-webkit-keyframes ball-atom-position{50%{left:100%;top:100%}}@keyframes ball-atom-position{50%{left:100%;top:100%}}@-webkit-keyframes ball-atom-size{50%{transform:scale(.5)}}@keyframes ball-atom-size{50%{transform:scale(.5)}}@-webkit-keyframes ball-atom-zindex{50%{z-index:10}}@keyframes ball-atom-zindex{50%{z-index:10}}@-webkit-keyframes ball-atom-shrink{50%{transform:translate(-50%,-50%) scale(.8)}}@keyframes ball-atom-shrink{50%{transform:translate(-50%,-50%) scale(.8)}}.la-ball-beat,.la-ball-beat>div{box-sizing:border-box;position:relative}.la-ball-beat{color:#fff;display:block;font-size:0}.la-ball-beat.la-dark{color:#333}.la-ball-beat>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-beat{height:18px;width:54px}.la-ball-beat>div{-webkit-animation:ball-beat .7s linear -.15s infinite;animation:ball-beat .7s linear -.15s infinite;border-radius:100%;height:10px;margin:4px;width:10px}.la-ball-beat>div:nth-child(2n-1){-webkit-animation-delay:-.5s;animation-delay:-.5s}.la-ball-beat.la-sm{height:8px;width:26px}.la-ball-beat.la-sm>div{height:4px;margin:2px;width:4px}.la-ball-beat.la-2x{height:36px;width:108px}.la-ball-beat.la-2x>div{height:20px;margin:8px;width:20px}.la-ball-beat.la-3x{height:54px;width:162px}.la-ball-beat.la-3x>div{height:30px;margin:12px;width:30px}@-webkit-keyframes ball-beat{50%{opacity:.2;transform:scale(.75)}to{opacity:1;transform:scale(1)}}@keyframes ball-beat{50%{opacity:.2;transform:scale(.75)}to{opacity:1;transform:scale(1)}}.la-ball-circus,.la-ball-circus>div{box-sizing:border-box;position:relative}.la-ball-circus{color:#fff;display:block;font-size:0}.la-ball-circus.la-dark{color:#333}.la-ball-circus>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-circus{height:16px;width:16px}.la-ball-circus>div{-webkit-animation:ball-circus-position 2.5s cubic-bezier(.25,0,.75,1) infinite,ball-circus-size 2.5s cubic-bezier(.25,0,.75,1) infinite;animation:ball-circus-position 2.5s cubic-bezier(.25,0,.75,1) infinite,ball-circus-size 2.5s cubic-bezier(.25,0,.75,1) infinite;border-radius:100%;display:block;height:16px;height:100%;left:-100%;opacity:.5;position:absolute;top:0;width:16px;width:100%}.la-ball-circus>div:first-child{-webkit-animation-delay:0s,-.5s;animation-delay:0s,-.5s}.la-ball-circus>div:nth-child(2){-webkit-animation-delay:-.5s,-1s;animation-delay:-.5s,-1s}.la-ball-circus>div:nth-child(3){-webkit-animation-delay:-1s,-1.5s;animation-delay:-1s,-1.5s}.la-ball-circus>div:nth-child(4){-webkit-animation-delay:-1.5s,-2s;animation-delay:-1.5s,-2s}.la-ball-circus>div:nth-child(5){-webkit-animation-delay:-2s,-2.5s;animation-delay:-2s,-2.5s}.la-ball-circus.la-sm,.la-ball-circus.la-sm>div{height:8px;width:8px}.la-ball-circus.la-2x,.la-ball-circus.la-2x>div{height:32px;width:32px}.la-ball-circus.la-3x,.la-ball-circus.la-3x>div{height:48px;width:48px}@-webkit-keyframes ball-circus-position{50%{left:100%}}@keyframes ball-circus-position{50%{left:100%}}@-webkit-keyframes ball-circus-size{50%{transform:scale(.3)}}@keyframes ball-circus-size{50%{transform:scale(.3)}}.la-ball-climbing-dot,.la-ball-climbing-dot>div{box-sizing:border-box;position:relative}.la-ball-climbing-dot{color:#fff;display:block;font-size:0}.la-ball-climbing-dot.la-dark{color:#333}.la-ball-climbing-dot>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-climbing-dot{height:32px;width:42px}.la-ball-climbing-dot>div:first-child{-webkit-animation:ball-climbing-dot-jump .6s ease-in-out infinite;animation:ball-climbing-dot-jump .6s ease-in-out infinite;border-radius:100%;bottom:32%;height:14px;left:18%;position:absolute;transform-origin:center bottom;width:14px}.la-ball-climbing-dot>div:not(:first-child){-webkit-animation:ball-climbing-dot-steps 1.8s linear infinite;animation:ball-climbing-dot-steps 1.8s linear infinite;border-radius:0;height:2px;position:absolute;right:0;top:0;transform:translate(60%);width:14px}.la-ball-climbing-dot>div:not(:first-child):nth-child(2){-webkit-animation-delay:0ms;animation-delay:0ms}.la-ball-climbing-dot>div:not(:first-child):nth-child(3){-webkit-animation-delay:-.6s;animation-delay:-.6s}.la-ball-climbing-dot>div:not(:first-child):nth-child(4){-webkit-animation-delay:-1.2s;animation-delay:-1.2s}.la-ball-climbing-dot.la-sm{height:16px;width:20px}.la-ball-climbing-dot.la-sm>div:first-child{height:6px;width:6px}.la-ball-climbing-dot.la-sm>div:not(:first-child){height:1px;width:6px}.la-ball-climbing-dot.la-2x{height:64px;width:84px}.la-ball-climbing-dot.la-2x>div:first-child{height:28px;width:28px}.la-ball-climbing-dot.la-2x>div:not(:first-child){height:4px;width:28px}.la-ball-climbing-dot.la-3x{height:96px;width:126px}.la-ball-climbing-dot.la-3x>div:first-child{height:42px;width:42px}.la-ball-climbing-dot.la-3x>div:not(:first-child){height:6px;width:42px}@-webkit-keyframes ball-climbing-dot-jump{0%{transform:scaleY(.7)}20%{transform:scale(.7,1.2)}40%{transform:scale(1)}50%{bottom:125%}46%{transform:scale(1)}80%{transform:scale(.7,1.2)}90%{transform:scale(.7,1.2)}to{transform:scaleY(.7)}}@keyframes ball-climbing-dot-jump{0%{transform:scaleY(.7)}20%{transform:scale(.7,1.2)}40%{transform:scale(1)}50%{bottom:125%}46%{transform:scale(1)}80%{transform:scale(.7,1.2)}90%{transform:scale(.7,1.2)}to{transform:scaleY(.7)}}@-webkit-keyframes ball-climbing-dot-steps{0%{opacity:0;right:0;top:0}50%{opacity:1}to{opacity:0;right:100%;top:100%}}@keyframes ball-climbing-dot-steps{0%{opacity:0;right:0;top:0}50%{opacity:1}to{opacity:0;right:100%;top:100%}}.la-ball-clip-rotate-multiple,.la-ball-clip-rotate-multiple>div{box-sizing:border-box;position:relative}.la-ball-clip-rotate-multiple{color:#fff;display:block;font-size:0}.la-ball-clip-rotate-multiple.la-dark{color:#333}.la-ball-clip-rotate-multiple>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-clip-rotate-multiple{height:32px;width:32px}.la-ball-clip-rotate-multiple>div{-webkit-animation:ball-clip-rotate-multiple-rotate 1s ease-in-out infinite;animation:ball-clip-rotate-multiple-rotate 1s ease-in-out infinite;background:transparent;border-radius:100%;border-style:solid;border-width:2px;left:50%;position:absolute;top:50%}.la-ball-clip-rotate-multiple>div:first-child{border-left-color:transparent;border-right-color:transparent;height:32px;position:absolute;width:32px}.la-ball-clip-rotate-multiple>div:last-child{-webkit-animation-direction:reverse;-webkit-animation-duration:.5s;animation-direction:reverse;animation-duration:.5s;border-bottom-color:transparent;border-top-color:transparent;height:16px;width:16px}.la-ball-clip-rotate-multiple.la-sm{height:16px;width:16px}.la-ball-clip-rotate-multiple.la-sm>div{border-width:1px}.la-ball-clip-rotate-multiple.la-sm>div:first-child{height:16px;width:16px}.la-ball-clip-rotate-multiple.la-sm>div:last-child{height:8px;width:8px}.la-ball-clip-rotate-multiple.la-2x{height:64px;width:64px}.la-ball-clip-rotate-multiple.la-2x>div{border-width:4px}.la-ball-clip-rotate-multiple.la-2x>div:first-child{height:64px;width:64px}.la-ball-clip-rotate-multiple.la-2x>div:last-child{height:32px;width:32px}.la-ball-clip-rotate-multiple.la-3x{height:96px;width:96px}.la-ball-clip-rotate-multiple.la-3x>div{border-width:6px}.la-ball-clip-rotate-multiple.la-3x>div:first-child{height:96px;width:96px}.la-ball-clip-rotate-multiple.la-3x>div:last-child{height:48px;width:48px}@-webkit-keyframes ball-clip-rotate-multiple-rotate{0%{transform:translate(-50%,-50%) rotate(0deg)}50%{transform:translate(-50%,-50%) rotate(180deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}@keyframes ball-clip-rotate-multiple-rotate{0%{transform:translate(-50%,-50%) rotate(0deg)}50%{transform:translate(-50%,-50%) rotate(180deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}.la-ball-clip-rotate-pulse,.la-ball-clip-rotate-pulse>div{box-sizing:border-box;position:relative}.la-ball-clip-rotate-pulse{color:#fff;display:block;font-size:0}.la-ball-clip-rotate-pulse.la-dark{color:#333}.la-ball-clip-rotate-pulse>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-clip-rotate-pulse{height:32px;width:32px}.la-ball-clip-rotate-pulse>div{border-radius:100%;left:50%;position:absolute;top:50%}.la-ball-clip-rotate-pulse>div:first-child{-webkit-animation:ball-clip-rotate-pulse-rotate 1s cubic-bezier(.09,.57,.49,.9) infinite;animation:ball-clip-rotate-pulse-rotate 1s cubic-bezier(.09,.57,.49,.9) infinite;background:transparent;border-bottom-style:solid;border-bottom-width:2px;border-left:2px solid transparent;border-right:2px solid transparent;border-top-style:solid;border-top-width:2px;height:32px;position:absolute;width:32px}.la-ball-clip-rotate-pulse>div:last-child{-webkit-animation:ball-clip-rotate-pulse-scale 1s cubic-bezier(.09,.57,.49,.9) infinite;animation:ball-clip-rotate-pulse-scale 1s cubic-bezier(.09,.57,.49,.9) infinite;height:16px;width:16px}.la-ball-clip-rotate-pulse.la-sm{height:16px;width:16px}.la-ball-clip-rotate-pulse.la-sm>div:first-child{border-width:1px;height:16px;width:16px}.la-ball-clip-rotate-pulse.la-sm>div:last-child{height:8px;width:8px}.la-ball-clip-rotate-pulse.la-2x{height:64px;width:64px}.la-ball-clip-rotate-pulse.la-2x>div:first-child{border-width:4px;height:64px;width:64px}.la-ball-clip-rotate-pulse.la-2x>div:last-child{height:32px;width:32px}.la-ball-clip-rotate-pulse.la-3x{height:96px;width:96px}.la-ball-clip-rotate-pulse.la-3x>div:first-child{border-width:6px;height:96px;width:96px}.la-ball-clip-rotate-pulse.la-3x>div:last-child{height:48px;width:48px}@-webkit-keyframes ball-clip-rotate-pulse-rotate{0%{transform:translate(-50%,-50%) rotate(0deg)}50%{transform:translate(-50%,-50%) rotate(180deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}@keyframes ball-clip-rotate-pulse-rotate{0%{transform:translate(-50%,-50%) rotate(0deg)}50%{transform:translate(-50%,-50%) rotate(180deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}@-webkit-keyframes ball-clip-rotate-pulse-scale{0%,to{opacity:1;transform:translate(-50%,-50%) scale(1)}30%{opacity:.3;transform:translate(-50%,-50%) scale(.15)}}@keyframes ball-clip-rotate-pulse-scale{0%,to{opacity:1;transform:translate(-50%,-50%) scale(1)}30%{opacity:.3;transform:translate(-50%,-50%) scale(.15)}}.la-ball-clip-rotate,.la-ball-clip-rotate>div{box-sizing:border-box;position:relative}.la-ball-clip-rotate{color:#fff;display:block;font-size:0}.la-ball-clip-rotate.la-dark{color:#333}.la-ball-clip-rotate>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-clip-rotate{height:32px;width:32px}.la-ball-clip-rotate>div{-webkit-animation:ball-clip-rotate .75s linear infinite;animation:ball-clip-rotate .75s linear infinite;background:transparent;border-bottom-color:transparent;border-radius:100%;border-width:2px;height:32px;width:32px}.la-ball-clip-rotate.la-sm{height:16px;width:16px}.la-ball-clip-rotate.la-sm>div{border-width:1px;height:16px;width:16px}.la-ball-clip-rotate.la-2x{height:64px;width:64px}.la-ball-clip-rotate.la-2x>div{border-width:4px;height:64px;width:64px}.la-ball-clip-rotate.la-3x{height:96px;width:96px}.la-ball-clip-rotate.la-3x>div{border-width:6px;height:96px;width:96px}@-webkit-keyframes ball-clip-rotate{0%{transform:rotate(0deg)}50%{transform:rotate(180deg)}to{transform:rotate(1turn)}}@keyframes ball-clip-rotate{0%{transform:rotate(0deg)}50%{transform:rotate(180deg)}to{transform:rotate(1turn)}}.la-ball-elastic-dots,.la-ball-elastic-dots>div{box-sizing:border-box;position:relative}.la-ball-elastic-dots{color:#fff;display:block}.la-ball-elastic-dots.la-dark{color:#333}.la-ball-elastic-dots>div{background-color:currentColor;border:0 solid;float:none}.la-ball-elastic-dots{font-size:0;height:10px;text-align:center;width:120px}.la-ball-elastic-dots>div{-webkit-animation:ball-elastic-dots-anim 1s infinite;animation:ball-elastic-dots-anim 1s infinite;border-radius:100%;display:inline-block;height:10px;white-space:nowrap;width:10px}.la-ball-elastic-dots.la-sm{height:4px;width:60px}.la-ball-elastic-dots.la-sm>div{height:4px;width:4px}.la-ball-elastic-dots.la-2x{height:20px;width:240px}.la-ball-elastic-dots.la-2x>div{height:20px;width:20px}.la-ball-elastic-dots.la-3x{height:30px;width:360px}.la-ball-elastic-dots.la-3x>div{height:30px;width:30px}@-webkit-keyframes ball-elastic-dots-anim{0%,to{margin:0;transform:scale(1)}50%{margin:0 5%;transform:scale(.65)}}@keyframes ball-elastic-dots-anim{0%,to{margin:0;transform:scale(1)}50%{margin:0 5%;transform:scale(.65)}}.la-ball-fall,.la-ball-fall>div{box-sizing:border-box;position:relative}.la-ball-fall{color:#fff;display:block;font-size:0}.la-ball-fall.la-dark{color:#333}.la-ball-fall>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-fall{height:18px;width:54px}.la-ball-fall>div{-webkit-animation:ball-fall 1s ease-in-out infinite;animation:ball-fall 1s ease-in-out infinite;border-radius:100%;height:10px;margin:4px;opacity:0;width:10px}.la-ball-fall>div:first-child{-webkit-animation-delay:-.2s;animation-delay:-.2s}.la-ball-fall>div:nth-child(2){-webkit-animation-delay:-.1s;animation-delay:-.1s}.la-ball-fall>div:nth-child(3){-webkit-animation-delay:0ms;animation-delay:0ms}.la-ball-fall.la-sm{height:8px;width:26px}.la-ball-fall.la-sm>div{height:4px;margin:2px;width:4px}.la-ball-fall.la-2x{height:36px;width:108px}.la-ball-fall.la-2x>div{height:20px;margin:8px;width:20px}.la-ball-fall.la-3x{height:54px;width:162px}.la-ball-fall.la-3x>div{height:30px;margin:12px;width:30px}@-webkit-keyframes ball-fall{0%{opacity:0;transform:translateY(-145%)}10%{opacity:.5}20%{opacity:1;transform:translateY(0)}80%{opacity:1;transform:translateY(0)}90%{opacity:.5}to{opacity:0;transform:translateY(145%)}}@keyframes ball-fall{0%{opacity:0;transform:translateY(-145%)}10%{opacity:.5}20%{opacity:1;transform:translateY(0)}80%{opacity:1;transform:translateY(0)}90%{opacity:.5}to{opacity:0;transform:translateY(145%)}}.la-ball-fussion,.la-ball-fussion>div{box-sizing:border-box;position:relative}.la-ball-fussion{color:#fff;display:block;font-size:0}.la-ball-fussion.la-dark{color:#333}.la-ball-fussion>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-fussion{height:8px;width:8px}.la-ball-fussion>div{-webkit-animation:ball-fussion-ball1 1s ease 0s infinite;animation:ball-fussion-ball1 1s ease 0s infinite;border-radius:100%;height:12px;position:absolute;transform:translate(-50%,-50%);width:12px}.la-ball-fussion>div:first-child{left:50%;top:0;z-index:1}.la-ball-fussion>div:nth-child(2){-webkit-animation-name:ball-fussion-ball2;animation-name:ball-fussion-ball2;left:100%;top:50%;z-index:2}.la-ball-fussion>div:nth-child(3){-webkit-animation-name:ball-fussion-ball3;animation-name:ball-fussion-ball3;left:50%;top:100%;z-index:1}.la-ball-fussion>div:nth-child(4){-webkit-animation-name:ball-fussion-ball4;animation-name:ball-fussion-ball4;left:0;top:50%;z-index:2}.la-ball-fussion.la-sm{height:4px;width:4px}.la-ball-fussion.la-sm>div{height:6px;width:6px}.la-ball-fussion.la-2x{height:16px;width:16px}.la-ball-fussion.la-2x>div,.la-ball-fussion.la-3x{height:24px;width:24px}.la-ball-fussion.la-3x>div{height:36px;width:36px}@-webkit-keyframes ball-fussion-ball1{0%{opacity:.35}50%{left:200%;opacity:1;top:-100%}to{left:100%;opacity:.35;top:50%;z-index:2}}@keyframes ball-fussion-ball1{0%{opacity:.35}50%{left:200%;opacity:1;top:-100%}to{left:100%;opacity:.35;top:50%;z-index:2}}@-webkit-keyframes ball-fussion-ball2{0%{opacity:.35}50%{left:200%;opacity:1;top:200%}to{left:50%;opacity:.35;top:100%;z-index:1}}@keyframes ball-fussion-ball2{0%{opacity:.35}50%{left:200%;opacity:1;top:200%}to{left:50%;opacity:.35;top:100%;z-index:1}}@-webkit-keyframes ball-fussion-ball3{0%{opacity:.35}50%{left:-100%;opacity:1;top:200%}to{left:0;opacity:.35;top:50%;z-index:2}}@keyframes ball-fussion-ball3{0%{opacity:.35}50%{left:-100%;opacity:1;top:200%}to{left:0;opacity:.35;top:50%;z-index:2}}@-webkit-keyframes ball-fussion-ball4{0%{opacity:.35}50%{left:-100%;opacity:1;top:-100%}to{left:50%;opacity:.35;top:0;z-index:1}}@keyframes ball-fussion-ball4{0%{opacity:.35}50%{left:-100%;opacity:1;top:-100%}to{left:50%;opacity:.35;top:0;z-index:1}}.la-ball-grid-beat,.la-ball-grid-beat>div{box-sizing:border-box;position:relative}.la-ball-grid-beat{color:#fff;display:block;font-size:0}.la-ball-grid-beat.la-dark{color:#333}.la-ball-grid-beat>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-grid-beat{height:36px;width:36px}.la-ball-grid-beat>div{-webkit-animation-iteration-count:infinite;-webkit-animation-name:ball-grid-beat;animation-iteration-count:infinite;animation-name:ball-grid-beat;border-radius:100%;height:8px;margin:2px;width:8px}.la-ball-grid-beat>div:first-child{-webkit-animation-delay:.03s;-webkit-animation-duration:.65s;animation-delay:.03s;animation-duration:.65s}.la-ball-grid-beat>div:nth-child(2){-webkit-animation-delay:.09s;-webkit-animation-duration:1.02s;animation-delay:.09s;animation-duration:1.02s}.la-ball-grid-beat>div:nth-child(3){-webkit-animation-delay:-.69s;-webkit-animation-duration:1.06s;animation-delay:-.69s;animation-duration:1.06s}.la-ball-grid-beat>div:nth-child(4){-webkit-animation-delay:-.41s;-webkit-animation-duration:1.5s;animation-delay:-.41s;animation-duration:1.5s}.la-ball-grid-beat>div:nth-child(5){-webkit-animation-delay:.04s;-webkit-animation-duration:1.6s;animation-delay:.04s;animation-duration:1.6s}.la-ball-grid-beat>div:nth-child(6){-webkit-animation-delay:.07s;-webkit-animation-duration:.84s;animation-delay:.07s;animation-duration:.84s}.la-ball-grid-beat>div:nth-child(7){-webkit-animation-delay:-.66s;-webkit-animation-duration:.68s;animation-delay:-.66s;animation-duration:.68s}.la-ball-grid-beat>div:nth-child(8){-webkit-animation-delay:-.76s;-webkit-animation-duration:.93s;animation-delay:-.76s;animation-duration:.93s}.la-ball-grid-beat>div:nth-child(9){-webkit-animation-delay:-.76s;-webkit-animation-duration:1.24s;animation-delay:-.76s;animation-duration:1.24s}.la-ball-grid-beat.la-sm{height:18px;width:18px}.la-ball-grid-beat.la-sm>div{height:4px;margin:1px;width:4px}.la-ball-grid-beat.la-2x{height:72px;width:72px}.la-ball-grid-beat.la-2x>div{height:16px;margin:4px;width:16px}.la-ball-grid-beat.la-3x{height:108px;width:108px}.la-ball-grid-beat.la-3x>div{height:24px;margin:6px;width:24px}@-webkit-keyframes ball-grid-beat{0%{opacity:1}50%{opacity:.35}to{opacity:1}}@keyframes ball-grid-beat{0%{opacity:1}50%{opacity:.35}to{opacity:1}}.la-ball-grid-pulse,.la-ball-grid-pulse>div{box-sizing:border-box;position:relative}.la-ball-grid-pulse{color:#fff;display:block;font-size:0}.la-ball-grid-pulse.la-dark{color:#333}.la-ball-grid-pulse>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-grid-pulse{height:36px;width:36px}.la-ball-grid-pulse>div{-webkit-animation-iteration-count:infinite;-webkit-animation-name:ball-grid-pulse;animation-iteration-count:infinite;animation-name:ball-grid-pulse;border-radius:100%;height:8px;margin:2px;width:8px}.la-ball-grid-pulse>div:first-child{-webkit-animation-delay:.03s;-webkit-animation-duration:.65s;animation-delay:.03s;animation-duration:.65s}.la-ball-grid-pulse>div:nth-child(2){-webkit-animation-delay:.09s;-webkit-animation-duration:1.02s;animation-delay:.09s;animation-duration:1.02s}.la-ball-grid-pulse>div:nth-child(3){-webkit-animation-delay:-.69s;-webkit-animation-duration:1.06s;animation-delay:-.69s;animation-duration:1.06s}.la-ball-grid-pulse>div:nth-child(4){-webkit-animation-delay:-.41s;-webkit-animation-duration:1.5s;animation-delay:-.41s;animation-duration:1.5s}.la-ball-grid-pulse>div:nth-child(5){-webkit-animation-delay:.04s;-webkit-animation-duration:1.6s;animation-delay:.04s;animation-duration:1.6s}.la-ball-grid-pulse>div:nth-child(6){-webkit-animation-delay:.07s;-webkit-animation-duration:.84s;animation-delay:.07s;animation-duration:.84s}.la-ball-grid-pulse>div:nth-child(7){-webkit-animation-delay:-.66s;-webkit-animation-duration:.68s;animation-delay:-.66s;animation-duration:.68s}.la-ball-grid-pulse>div:nth-child(8){-webkit-animation-delay:-.76s;-webkit-animation-duration:.93s;animation-delay:-.76s;animation-duration:.93s}.la-ball-grid-pulse>div:nth-child(9){-webkit-animation-delay:-.76s;-webkit-animation-duration:1.24s;animation-delay:-.76s;animation-duration:1.24s}.la-ball-grid-pulse.la-sm{height:18px;width:18px}.la-ball-grid-pulse.la-sm>div{height:4px;margin:1px;width:4px}.la-ball-grid-pulse.la-2x{height:72px;width:72px}.la-ball-grid-pulse.la-2x>div{height:16px;margin:4px;width:16px}.la-ball-grid-pulse.la-3x{height:108px;width:108px}.la-ball-grid-pulse.la-3x>div{height:24px;margin:6px;width:24px}@-webkit-keyframes ball-grid-pulse{0%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.45)}to{opacity:1;transform:scale(1)}}@keyframes ball-grid-pulse{0%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.45)}to{opacity:1;transform:scale(1)}}.la-ball-newton-cradle,.la-ball-newton-cradle>div{box-sizing:border-box;position:relative}.la-ball-newton-cradle{color:#fff;display:block;font-size:0}.la-ball-newton-cradle.la-dark{color:#333}.la-ball-newton-cradle>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-newton-cradle{height:10px;width:40px}.la-ball-newton-cradle>div{border-radius:100%;height:10px;width:10px}.la-ball-newton-cradle>div:first-child{-webkit-animation:ball-newton-cradle-left 1s ease-out 0s infinite;animation:ball-newton-cradle-left 1s ease-out 0s infinite;transform:translateX(0)}.la-ball-newton-cradle>div:last-child{-webkit-animation:ball-newton-cradle-right 1s ease-out 0s infinite;animation:ball-newton-cradle-right 1s ease-out 0s infinite;transform:translateX(0)}.la-ball-newton-cradle.la-sm{height:4px;width:20px}.la-ball-newton-cradle.la-sm>div{height:4px;width:4px}.la-ball-newton-cradle.la-2x{height:20px;width:80px}.la-ball-newton-cradle.la-2x>div{height:20px;width:20px}.la-ball-newton-cradle.la-3x{height:30px;width:120px}.la-ball-newton-cradle.la-3x>div{height:30px;width:30px}@-webkit-keyframes ball-newton-cradle-left{25%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;transform:translateX(-100%)}50%{transform:translateX(0)}}@keyframes ball-newton-cradle-left{25%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;transform:translateX(-100%)}50%{transform:translateX(0)}}@-webkit-keyframes ball-newton-cradle-right{50%{transform:translateX(0)}75%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;transform:translateX(100%)}to{transform:translateX(0)}}@keyframes ball-newton-cradle-right{50%{transform:translateX(0)}75%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;transform:translateX(100%)}to{transform:translateX(0)}}.la-ball-pulse-rise,.la-ball-pulse-rise>div{box-sizing:border-box;position:relative}.la-ball-pulse-rise{color:#fff;display:block;font-size:0}.la-ball-pulse-rise.la-dark{color:#333}.la-ball-pulse-rise>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-pulse-rise{height:14px;width:70px}.la-ball-pulse-rise>div{-webkit-animation:ball-pulse-rise-even 1s cubic-bezier(.15,.36,.9,.6) 0s infinite;animation:ball-pulse-rise-even 1s cubic-bezier(.15,.36,.9,.6) 0s infinite;border-radius:100%;height:10px;margin:2px;width:10px}.la-ball-pulse-rise>div:nth-child(2n-1){-webkit-animation-name:ball-pulse-rise-odd;animation-name:ball-pulse-rise-odd}.la-ball-pulse-rise.la-sm{height:6px;width:34px}.la-ball-pulse-rise.la-sm>div{height:4px;margin:1px;width:4px}.la-ball-pulse-rise.la-2x{height:28px;width:140px}.la-ball-pulse-rise.la-2x>div{height:20px;margin:4px;width:20px}.la-ball-pulse-rise.la-3x{height:42px;width:210px}.la-ball-pulse-rise.la-3x>div{height:30px;margin:6px;width:30px}@-webkit-keyframes ball-pulse-rise-even{0%{opacity:1;transform:scale(1.1)}25%{transform:translateY(-200%)}50%{opacity:.35;transform:scale(.3)}75%{transform:translateY(200%)}to{opacity:1;transform:translateY(0);transform:scale(1)}}@keyframes ball-pulse-rise-even{0%{opacity:1;transform:scale(1.1)}25%{transform:translateY(-200%)}50%{opacity:.35;transform:scale(.3)}75%{transform:translateY(200%)}to{opacity:1;transform:translateY(0);transform:scale(1)}}@-webkit-keyframes ball-pulse-rise-odd{0%{opacity:.35;transform:scale(.4)}25%{transform:translateY(200%)}50%{opacity:1;transform:scale(1.1)}75%{transform:translateY(-200%)}to{opacity:.35;transform:translateY(0);transform:scale(.75)}}@keyframes ball-pulse-rise-odd{0%{opacity:.35;transform:scale(.4)}25%{transform:translateY(200%)}50%{opacity:1;transform:scale(1.1)}75%{transform:translateY(-200%)}to{opacity:.35;transform:translateY(0);transform:scale(.75)}}.la-ball-pulse-sync,.la-ball-pulse-sync>div{box-sizing:border-box;position:relative}.la-ball-pulse-sync{color:#fff;display:block;font-size:0}.la-ball-pulse-sync.la-dark{color:#333}.la-ball-pulse-sync>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-pulse-sync{height:18px;width:54px}.la-ball-pulse-sync>div{-webkit-animation:ball-pulse-sync .6s ease-in-out infinite;animation:ball-pulse-sync .6s ease-in-out infinite;border-radius:100%;height:10px;margin:4px;width:10px}.la-ball-pulse-sync>div:first-child{-webkit-animation-delay:-.14s;animation-delay:-.14s}.la-ball-pulse-sync>div:nth-child(2){-webkit-animation-delay:-.07s;animation-delay:-.07s}.la-ball-pulse-sync>div:nth-child(3){-webkit-animation-delay:0s;animation-delay:0s}.la-ball-pulse-sync.la-sm{height:8px;width:26px}.la-ball-pulse-sync.la-sm>div{height:4px;margin:2px;width:4px}.la-ball-pulse-sync.la-2x{height:36px;width:108px}.la-ball-pulse-sync.la-2x>div{height:20px;margin:8px;width:20px}.la-ball-pulse-sync.la-3x{height:54px;width:162px}.la-ball-pulse-sync.la-3x>div{height:30px;margin:12px;width:30px}@-webkit-keyframes ball-pulse-sync{33%{transform:translateY(100%)}66%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes ball-pulse-sync{33%{transform:translateY(100%)}66%{transform:translateY(-100%)}to{transform:translateY(0)}}.la-ball-pulse,.la-ball-pulse>div{box-sizing:border-box;position:relative}.la-ball-pulse{color:#fff;display:block;font-size:0}.la-ball-pulse.la-dark{color:#333}.la-ball-pulse>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-pulse{height:18px;width:54px}.la-ball-pulse>div:first-child{-webkit-animation-delay:-.2s;animation-delay:-.2s}.la-ball-pulse>div:nth-child(2){-webkit-animation-delay:-.1s;animation-delay:-.1s}.la-ball-pulse>div:nth-child(3){-webkit-animation-delay:0ms;animation-delay:0ms}.la-ball-pulse>div{-webkit-animation:ball-pulse 1s ease infinite;animation:ball-pulse 1s ease infinite;border-radius:100%;height:10px;margin:4px;width:10px}.la-ball-pulse.la-sm{height:8px;width:26px}.la-ball-pulse.la-sm>div{height:4px;margin:2px;width:4px}.la-ball-pulse.la-2x{height:36px;width:108px}.la-ball-pulse.la-2x>div{height:20px;margin:8px;width:20px}.la-ball-pulse.la-3x{height:54px;width:162px}.la-ball-pulse.la-3x>div{height:30px;margin:12px;width:30px}@-webkit-keyframes ball-pulse{0%,60%,to{opacity:1;transform:scale(1)}30%{opacity:.1;transform:scale(.01)}}@keyframes ball-pulse{0%,60%,to{opacity:1;transform:scale(1)}30%{opacity:.1;transform:scale(.01)}}.la-ball-rotate,.la-ball-rotate>div{box-sizing:border-box;position:relative}.la-ball-rotate{color:#fff;display:block;font-size:0}.la-ball-rotate.la-dark{color:#333}.la-ball-rotate>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-rotate,.la-ball-rotate>div{height:10px;width:10px}.la-ball-rotate>div{-webkit-animation:ball-rotate-animation 1s cubic-bezier(.7,-.13,.22,.86) infinite;animation:ball-rotate-animation 1s cubic-bezier(.7,-.13,.22,.86) infinite;border-radius:100%}.la-ball-rotate>div:after,.la-ball-rotate>div:before{background:currentColor;border-radius:inherit;content:\"\";height:inherit;margin:inherit;opacity:.8;position:absolute;width:inherit}.la-ball-rotate>div:before{left:-150%;top:0}.la-ball-rotate>div:after{left:150%;top:0}.la-ball-rotate.la-sm,.la-ball-rotate.la-sm>div{height:4px;width:4px}.la-ball-rotate.la-2x,.la-ball-rotate.la-2x>div{height:20px;width:20px}.la-ball-rotate.la-3x,.la-ball-rotate.la-3x>div{height:30px;width:30px}@-webkit-keyframes ball-rotate-animation{0%{transform:rotate(0deg)}50%{transform:rotate(180deg)}to{transform:rotate(1turn)}}@keyframes ball-rotate-animation{0%{transform:rotate(0deg)}50%{transform:rotate(180deg)}to{transform:rotate(1turn)}}.la-ball-running-dots,.la-ball-running-dots>div{box-sizing:border-box;position:relative}.la-ball-running-dots{color:#fff;display:block;font-size:0}.la-ball-running-dots.la-dark{color:#333}.la-ball-running-dots>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-running-dots{height:10px;width:10px}.la-ball-running-dots>div{-webkit-animation:ball-running-dots-animate 2s linear infinite;animation:ball-running-dots-animate 2s linear infinite;border-radius:100%;height:10px;margin-left:-25px;position:absolute;width:10px}.la-ball-running-dots>div:first-child{-webkit-animation-delay:0s;animation-delay:0s}.la-ball-running-dots>div:nth-child(2){-webkit-animation-delay:-.4s;animation-delay:-.4s}.la-ball-running-dots>div:nth-child(3){-webkit-animation-delay:-.8s;animation-delay:-.8s}.la-ball-running-dots>div:nth-child(4){-webkit-animation-delay:-1.2s;animation-delay:-1.2s}.la-ball-running-dots>div:nth-child(5){-webkit-animation-delay:-1.6s;animation-delay:-1.6s}.la-ball-running-dots>div:nth-child(6){-webkit-animation-delay:-2s;animation-delay:-2s}.la-ball-running-dots>div:nth-child(7){-webkit-animation-delay:-2.4s;animation-delay:-2.4s}.la-ball-running-dots>div:nth-child(8){-webkit-animation-delay:-2.8s;animation-delay:-2.8s}.la-ball-running-dots>div:nth-child(9){-webkit-animation-delay:-3.2s;animation-delay:-3.2s}.la-ball-running-dots>div:nth-child(10){-webkit-animation-delay:-3.6s;animation-delay:-3.6s}.la-ball-running-dots.la-sm{height:4px;width:4px}.la-ball-running-dots.la-sm>div{height:4px;margin-left:-12px;width:4px}.la-ball-running-dots.la-2x{height:20px;width:20px}.la-ball-running-dots.la-2x>div{height:20px;margin-left:-50px;width:20px}.la-ball-running-dots.la-3x{height:30px;width:30px}.la-ball-running-dots.la-3x>div{height:30px;margin-left:-75px;width:30px}@-webkit-keyframes ball-running-dots-animate{0%,to{height:100%;transform:translateY(0) translateX(500%);width:100%}80%{transform:translateY(0) translateX(0)}85%{height:100%;transform:translateY(-125%) translateX(0);width:100%}90%{height:75%;width:200%}95%{height:100%;transform:translateY(-100%) translateX(500%);width:100%}}@keyframes ball-running-dots-animate{0%,to{height:100%;transform:translateY(0) translateX(500%);width:100%}80%{transform:translateY(0) translateX(0)}85%{height:100%;transform:translateY(-125%) translateX(0);width:100%}90%{height:75%;width:200%}95%{height:100%;transform:translateY(-100%) translateX(500%);width:100%}}.la-ball-scale-multiple,.la-ball-scale-multiple>div{box-sizing:border-box;position:relative}.la-ball-scale-multiple{color:#fff;display:block;font-size:0}.la-ball-scale-multiple.la-dark{color:#333}.la-ball-scale-multiple>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-scale-multiple{height:32px;width:32px}.la-ball-scale-multiple>div{-webkit-animation:ball-scale-multiple 1s linear 0s infinite;animation:ball-scale-multiple 1s linear 0s infinite;border-radius:100%;height:32px;left:0;opacity:0;position:absolute;top:0;width:32px}.la-ball-scale-multiple>div:nth-child(2){-webkit-animation-delay:.2s;animation-delay:.2s}.la-ball-scale-multiple>div:nth-child(3){-webkit-animation-delay:.4s;animation-delay:.4s}.la-ball-scale-multiple.la-sm,.la-ball-scale-multiple.la-sm>div{height:16px;width:16px}.la-ball-scale-multiple.la-2x,.la-ball-scale-multiple.la-2x>div{height:64px;width:64px}.la-ball-scale-multiple.la-3x,.la-ball-scale-multiple.la-3x>div{height:96px;width:96px}@-webkit-keyframes ball-scale-multiple{0%{opacity:0;transform:scale(0)}5%{opacity:.75}to{opacity:0;transform:scale(1)}}@keyframes ball-scale-multiple{0%{opacity:0;transform:scale(0)}5%{opacity:.75}to{opacity:0;transform:scale(1)}}.la-ball-scale-pulse,.la-ball-scale-pulse>div{box-sizing:border-box;position:relative}.la-ball-scale-pulse{color:#fff;display:block;font-size:0}.la-ball-scale-pulse.la-dark{color:#333}.la-ball-scale-pulse>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-scale-pulse{height:32px;width:32px}.la-ball-scale-pulse>div{-webkit-animation:ball-scale-pulse 2s ease-in-out infinite;animation:ball-scale-pulse 2s ease-in-out infinite;border-radius:100%;height:32px;left:0;opacity:.5;position:absolute;top:0;width:32px}.la-ball-scale-pulse>div:last-child{-webkit-animation-delay:-1s;animation-delay:-1s}.la-ball-scale-pulse.la-sm,.la-ball-scale-pulse.la-sm>div{height:16px;width:16px}.la-ball-scale-pulse.la-2x,.la-ball-scale-pulse.la-2x>div{height:64px;width:64px}.la-ball-scale-pulse.la-3x,.la-ball-scale-pulse.la-3x>div{height:96px;width:96px}@-webkit-keyframes ball-scale-pulse{0%,to{transform:scale(0)}50%{transform:scale(1)}}@keyframes ball-scale-pulse{0%,to{transform:scale(0)}50%{transform:scale(1)}}.la-ball-scale-ripple-multiple,.la-ball-scale-ripple-multiple>div{box-sizing:border-box;position:relative}.la-ball-scale-ripple-multiple{color:#fff;display:block;font-size:0}.la-ball-scale-ripple-multiple.la-dark{color:#333}.la-ball-scale-ripple-multiple>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-scale-ripple-multiple{height:32px;width:32px}.la-ball-scale-ripple-multiple>div{-webkit-animation:ball-scale-ripple-multiple 1.25s cubic-bezier(.21,.53,.56,.8) 0s infinite;animation:ball-scale-ripple-multiple 1.25s cubic-bezier(.21,.53,.56,.8) 0s infinite;background:transparent;border-radius:100%;border-width:2px;height:32px;left:0;opacity:0;position:absolute;top:0;width:32px}.la-ball-scale-ripple-multiple>div:first-child{-webkit-animation-delay:0s;animation-delay:0s}.la-ball-scale-ripple-multiple>div:nth-child(2){-webkit-animation-delay:.25s;animation-delay:.25s}.la-ball-scale-ripple-multiple>div:nth-child(3){-webkit-animation-delay:.5s;animation-delay:.5s}.la-ball-scale-ripple-multiple.la-sm{height:16px;width:16px}.la-ball-scale-ripple-multiple.la-sm>div{border-width:1px;height:16px;width:16px}.la-ball-scale-ripple-multiple.la-2x{height:64px;width:64px}.la-ball-scale-ripple-multiple.la-2x>div{border-width:4px;height:64px;width:64px}.la-ball-scale-ripple-multiple.la-3x{height:96px;width:96px}.la-ball-scale-ripple-multiple.la-3x>div{border-width:6px;height:96px;width:96px}@-webkit-keyframes ball-scale-ripple-multiple{0%{opacity:1;transform:scale(.1)}70%{opacity:.5;transform:scale(1)}95%{opacity:0}}@keyframes ball-scale-ripple-multiple{0%{opacity:1;transform:scale(.1)}70%{opacity:.5;transform:scale(1)}95%{opacity:0}}.la-ball-scale-ripple,.la-ball-scale-ripple>div{box-sizing:border-box;position:relative}.la-ball-scale-ripple{color:#fff;display:block;font-size:0}.la-ball-scale-ripple.la-dark{color:#333}.la-ball-scale-ripple>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-scale-ripple{height:32px;width:32px}.la-ball-scale-ripple>div{-webkit-animation:ball-scale-ripple 1s cubic-bezier(.21,.53,.56,.8) 0s infinite;animation:ball-scale-ripple 1s cubic-bezier(.21,.53,.56,.8) 0s infinite;background:transparent;border-radius:100%;border-width:2px;height:32px;opacity:0;width:32px}.la-ball-scale-ripple.la-sm{height:16px;width:16px}.la-ball-scale-ripple.la-sm>div{border-width:1px;height:16px;width:16px}.la-ball-scale-ripple.la-2x{height:64px;width:64px}.la-ball-scale-ripple.la-2x>div{border-width:4px;height:64px;width:64px}.la-ball-scale-ripple.la-3x{height:96px;width:96px}.la-ball-scale-ripple.la-3x>div{border-width:6px;height:96px;width:96px}@-webkit-keyframes ball-scale-ripple{0%{opacity:1;transform:scale(.1)}70%{opacity:.65;transform:scale(1)}to{opacity:0}}@keyframes ball-scale-ripple{0%{opacity:1;transform:scale(.1)}70%{opacity:.65;transform:scale(1)}to{opacity:0}}.la-ball-scale,.la-ball-scale>div{box-sizing:border-box;position:relative}.la-ball-scale{color:#fff;display:block;font-size:0}.la-ball-scale.la-dark{color:#333}.la-ball-scale>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-scale,.la-ball-scale>div{height:32px;width:32px}.la-ball-scale>div{-webkit-animation:ball-scale 1s ease-in-out 0s infinite;animation:ball-scale 1s ease-in-out 0s infinite;border-radius:100%;opacity:0}.la-ball-scale.la-sm,.la-ball-scale.la-sm>div{height:16px;width:16px}.la-ball-scale.la-2x,.la-ball-scale.la-2x>div{height:64px;width:64px}.la-ball-scale.la-3x,.la-ball-scale.la-3x>div{height:96px;width:96px}@-webkit-keyframes ball-scale{0%{opacity:1;transform:scale(0)}to{opacity:0;transform:scale(1)}}@keyframes ball-scale{0%{opacity:1;transform:scale(0)}to{opacity:0;transform:scale(1)}}.la-ball-spin-clockwise-fade-rotating,.la-ball-spin-clockwise-fade-rotating>div{box-sizing:border-box;position:relative}.la-ball-spin-clockwise-fade-rotating{color:#fff;display:block;font-size:0}.la-ball-spin-clockwise-fade-rotating.la-dark{color:#333}.la-ball-spin-clockwise-fade-rotating>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-spin-clockwise-fade-rotating{-webkit-animation:ball-spin-clockwise-fade-rotating-rotate 6s linear infinite;animation:ball-spin-clockwise-fade-rotating-rotate 6s linear infinite;height:32px;width:32px}.la-ball-spin-clockwise-fade-rotating>div{-webkit-animation:ball-spin-clockwise-fade-rotating 1s linear infinite;animation:ball-spin-clockwise-fade-rotating 1s linear infinite;border-radius:100%;height:8px;left:50%;margin-left:-4px;margin-top:-4px;position:absolute;top:50%;width:8px}.la-ball-spin-clockwise-fade-rotating>div:first-child{-webkit-animation-delay:-.875s;animation-delay:-.875s;left:50%;top:5%}.la-ball-spin-clockwise-fade-rotating>div:nth-child(2){-webkit-animation-delay:-.75s;animation-delay:-.75s;left:81.8198051534%;top:18.1801948466%}.la-ball-spin-clockwise-fade-rotating>div:nth-child(3){-webkit-animation-delay:-.625s;animation-delay:-.625s;left:95%;top:50%}.la-ball-spin-clockwise-fade-rotating>div:nth-child(4){-webkit-animation-delay:-.5s;animation-delay:-.5s;left:81.8198051534%;top:81.8198051534%}.la-ball-spin-clockwise-fade-rotating>div:nth-child(5){-webkit-animation-delay:-.375s;animation-delay:-.375s;left:50.0000000005%;top:94.9999999966%}.la-ball-spin-clockwise-fade-rotating>div:nth-child(6){-webkit-animation-delay:-.25s;animation-delay:-.25s;left:18.1801949248%;top:81.8198046966%}.la-ball-spin-clockwise-fade-rotating>div:nth-child(7){-webkit-animation-delay:-.125s;animation-delay:-.125s;left:5.0000051215%;top:49.9999750815%}.la-ball-spin-clockwise-fade-rotating>div:nth-child(8){-webkit-animation-delay:0s;animation-delay:0s;left:18.1803700518%;top:18.179464974%}.la-ball-spin-clockwise-fade-rotating.la-sm{height:16px;width:16px}.la-ball-spin-clockwise-fade-rotating.la-sm>div{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-spin-clockwise-fade-rotating.la-2x{height:64px;width:64px}.la-ball-spin-clockwise-fade-rotating.la-2x>div{height:16px;margin-left:-8px;margin-top:-8px;width:16px}.la-ball-spin-clockwise-fade-rotating.la-3x{height:96px;width:96px}.la-ball-spin-clockwise-fade-rotating.la-3x>div{height:24px;margin-left:-12px;margin-top:-12px;width:24px}@-webkit-keyframes ball-spin-clockwise-fade-rotating-rotate{to{transform:rotate(-1turn)}}@keyframes ball-spin-clockwise-fade-rotating-rotate{to{transform:rotate(-1turn)}}@-webkit-keyframes ball-spin-clockwise-fade-rotating{50%{opacity:.25;transform:scale(.5)}to{opacity:1;transform:scale(1)}}@keyframes ball-spin-clockwise-fade-rotating{50%{opacity:.25;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.la-ball-spin-clockwise-fade,.la-ball-spin-clockwise-fade>div{box-sizing:border-box;position:relative}.la-ball-spin-clockwise-fade{color:#fff;display:block;font-size:0}.la-ball-spin-clockwise-fade.la-dark{color:#333}.la-ball-spin-clockwise-fade>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-spin-clockwise-fade{height:32px;width:32px}.la-ball-spin-clockwise-fade>div{-webkit-animation:ball-spin-clockwise-fade 1s linear infinite;animation:ball-spin-clockwise-fade 1s linear infinite;border-radius:100%;height:8px;left:50%;margin-left:-4px;margin-top:-4px;position:absolute;top:50%;width:8px}.la-ball-spin-clockwise-fade>div:first-child{-webkit-animation-delay:-.875s;animation-delay:-.875s;left:50%;top:5%}.la-ball-spin-clockwise-fade>div:nth-child(2){-webkit-animation-delay:-.75s;animation-delay:-.75s;left:81.8198051534%;top:18.1801948466%}.la-ball-spin-clockwise-fade>div:nth-child(3){-webkit-animation-delay:-.625s;animation-delay:-.625s;left:95%;top:50%}.la-ball-spin-clockwise-fade>div:nth-child(4){-webkit-animation-delay:-.5s;animation-delay:-.5s;left:81.8198051534%;top:81.8198051534%}.la-ball-spin-clockwise-fade>div:nth-child(5){-webkit-animation-delay:-.375s;animation-delay:-.375s;left:50.0000000005%;top:94.9999999966%}.la-ball-spin-clockwise-fade>div:nth-child(6){-webkit-animation-delay:-.25s;animation-delay:-.25s;left:18.1801949248%;top:81.8198046966%}.la-ball-spin-clockwise-fade>div:nth-child(7){-webkit-animation-delay:-.125s;animation-delay:-.125s;left:5.0000051215%;top:49.9999750815%}.la-ball-spin-clockwise-fade>div:nth-child(8){-webkit-animation-delay:0s;animation-delay:0s;left:18.1803700518%;top:18.179464974%}.la-ball-spin-clockwise-fade.la-sm{height:16px;width:16px}.la-ball-spin-clockwise-fade.la-sm>div{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-spin-clockwise-fade.la-2x{height:64px;width:64px}.la-ball-spin-clockwise-fade.la-2x>div{height:16px;margin-left:-8px;margin-top:-8px;width:16px}.la-ball-spin-clockwise-fade.la-3x{height:96px;width:96px}.la-ball-spin-clockwise-fade.la-3x>div{height:24px;margin-left:-12px;margin-top:-12px;width:24px}@-webkit-keyframes ball-spin-clockwise-fade{50%{opacity:.25;transform:scale(.5)}to{opacity:1;transform:scale(1)}}@keyframes ball-spin-clockwise-fade{50%{opacity:.25;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.la-ball-spin-clockwise,.la-ball-spin-clockwise>div{box-sizing:border-box;position:relative}.la-ball-spin-clockwise{color:#fff;display:block;font-size:0}.la-ball-spin-clockwise.la-dark{color:#333}.la-ball-spin-clockwise>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-spin-clockwise{height:32px;width:32px}.la-ball-spin-clockwise>div{-webkit-animation:ball-spin-clockwise 1s ease-in-out infinite;animation:ball-spin-clockwise 1s ease-in-out infinite;border-radius:100%;height:8px;left:50%;margin-left:-4px;margin-top:-4px;position:absolute;top:50%;width:8px}.la-ball-spin-clockwise>div:first-child{-webkit-animation-delay:-.875s;animation-delay:-.875s;left:50%;top:5%}.la-ball-spin-clockwise>div:nth-child(2){-webkit-animation-delay:-.75s;animation-delay:-.75s;left:81.8198051534%;top:18.1801948466%}.la-ball-spin-clockwise>div:nth-child(3){-webkit-animation-delay:-.625s;animation-delay:-.625s;left:95%;top:50%}.la-ball-spin-clockwise>div:nth-child(4){-webkit-animation-delay:-.5s;animation-delay:-.5s;left:81.8198051534%;top:81.8198051534%}.la-ball-spin-clockwise>div:nth-child(5){-webkit-animation-delay:-.375s;animation-delay:-.375s;left:50.0000000005%;top:94.9999999966%}.la-ball-spin-clockwise>div:nth-child(6){-webkit-animation-delay:-.25s;animation-delay:-.25s;left:18.1801949248%;top:81.8198046966%}.la-ball-spin-clockwise>div:nth-child(7){-webkit-animation-delay:-.125s;animation-delay:-.125s;left:5.0000051215%;top:49.9999750815%}.la-ball-spin-clockwise>div:nth-child(8){-webkit-animation-delay:0s;animation-delay:0s;left:18.1803700518%;top:18.179464974%}.la-ball-spin-clockwise.la-sm{height:16px;width:16px}.la-ball-spin-clockwise.la-sm>div{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-spin-clockwise.la-2x{height:64px;width:64px}.la-ball-spin-clockwise.la-2x>div{height:16px;margin-left:-8px;margin-top:-8px;width:16px}.la-ball-spin-clockwise.la-3x{height:96px;width:96px}.la-ball-spin-clockwise.la-3x>div{height:24px;margin-left:-12px;margin-top:-12px;width:24px}@-webkit-keyframes ball-spin-clockwise{0%,to{opacity:1;transform:scale(1)}20%{opacity:1}80%{opacity:0;transform:scale(0)}}@keyframes ball-spin-clockwise{0%,to{opacity:1;transform:scale(1)}20%{opacity:1}80%{opacity:0;transform:scale(0)}}.la-ball-spin-fade-rotating,.la-ball-spin-fade-rotating>div{box-sizing:border-box;position:relative}.la-ball-spin-fade-rotating{color:#fff;display:block;font-size:0}.la-ball-spin-fade-rotating.la-dark{color:#333}.la-ball-spin-fade-rotating>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-spin-fade-rotating{-webkit-animation:ball-spin-fade-rotate 6s linear infinite;animation:ball-spin-fade-rotate 6s linear infinite;height:32px;width:32px}.la-ball-spin-fade-rotating>div{-webkit-animation:ball-spin-fade 1s linear infinite;animation:ball-spin-fade 1s linear infinite;border-radius:100%;height:8px;left:50%;margin-left:-4px;margin-top:-4px;position:absolute;top:50%;width:8px}.la-ball-spin-fade-rotating>div:first-child{-webkit-animation-delay:-1.125s;animation-delay:-1.125s;left:50%;top:5%}.la-ball-spin-fade-rotating>div:nth-child(2){-webkit-animation-delay:-1.25s;animation-delay:-1.25s;left:81.8198051534%;top:18.1801948466%}.la-ball-spin-fade-rotating>div:nth-child(3){-webkit-animation-delay:-1.375s;animation-delay:-1.375s;left:95%;top:50%}.la-ball-spin-fade-rotating>div:nth-child(4){-webkit-animation-delay:-1.5s;animation-delay:-1.5s;left:81.8198051534%;top:81.8198051534%}.la-ball-spin-fade-rotating>div:nth-child(5){-webkit-animation-delay:-1.625s;animation-delay:-1.625s;left:50.0000000005%;top:94.9999999966%}.la-ball-spin-fade-rotating>div:nth-child(6){-webkit-animation-delay:-1.75s;animation-delay:-1.75s;left:18.1801949248%;top:81.8198046966%}.la-ball-spin-fade-rotating>div:nth-child(7){-webkit-animation-delay:-1.875s;animation-delay:-1.875s;left:5.0000051215%;top:49.9999750815%}.la-ball-spin-fade-rotating>div:nth-child(8){-webkit-animation-delay:-2s;animation-delay:-2s;left:18.1803700518%;top:18.179464974%}.la-ball-spin-fade-rotating.la-sm{height:16px;width:16px}.la-ball-spin-fade-rotating.la-sm>div{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-spin-fade-rotating.la-2x{height:64px;width:64px}.la-ball-spin-fade-rotating.la-2x>div{height:16px;margin-left:-8px;margin-top:-8px;width:16px}.la-ball-spin-fade-rotating.la-3x{height:96px;width:96px}.la-ball-spin-fade-rotating.la-3x>div{height:24px;margin-left:-12px;margin-top:-12px;width:24px}@-webkit-keyframes ball-spin-fade-rotate{to{transform:rotate(1turn)}}@keyframes ball-spin-fade-rotate{to{transform:rotate(1turn)}}.la-ball-spin-fade,.la-ball-spin-fade>div{box-sizing:border-box;position:relative}.la-ball-spin-fade{color:#fff;display:block;font-size:0}.la-ball-spin-fade.la-dark{color:#333}.la-ball-spin-fade>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-spin-fade{height:32px;width:32px}.la-ball-spin-fade>div{-webkit-animation:ball-spin-fade 1s linear infinite;animation:ball-spin-fade 1s linear infinite;border-radius:100%;height:8px;left:50%;margin-left:-4px;margin-top:-4px;position:absolute;top:50%;width:8px}.la-ball-spin-fade>div:first-child{-webkit-animation-delay:-1.125s;animation-delay:-1.125s;left:50%;top:5%}.la-ball-spin-fade>div:nth-child(2){-webkit-animation-delay:-1.25s;animation-delay:-1.25s;left:81.8198051534%;top:18.1801948466%}.la-ball-spin-fade>div:nth-child(3){-webkit-animation-delay:-1.375s;animation-delay:-1.375s;left:95%;top:50%}.la-ball-spin-fade>div:nth-child(4){-webkit-animation-delay:-1.5s;animation-delay:-1.5s;left:81.8198051534%;top:81.8198051534%}.la-ball-spin-fade>div:nth-child(5){-webkit-animation-delay:-1.625s;animation-delay:-1.625s;left:50.0000000005%;top:94.9999999966%}.la-ball-spin-fade>div:nth-child(6){-webkit-animation-delay:-1.75s;animation-delay:-1.75s;left:18.1801949248%;top:81.8198046966%}.la-ball-spin-fade>div:nth-child(7){-webkit-animation-delay:-1.875s;animation-delay:-1.875s;left:5.0000051215%;top:49.9999750815%}.la-ball-spin-fade>div:nth-child(8){-webkit-animation-delay:-2s;animation-delay:-2s;left:18.1803700518%;top:18.179464974%}.la-ball-spin-fade.la-sm{height:16px;width:16px}.la-ball-spin-fade.la-sm>div{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-spin-fade.la-2x{height:64px;width:64px}.la-ball-spin-fade.la-2x>div{height:16px;margin-left:-8px;margin-top:-8px;width:16px}.la-ball-spin-fade.la-3x{height:96px;width:96px}.la-ball-spin-fade.la-3x>div{height:24px;margin-left:-12px;margin-top:-12px;width:24px}@-webkit-keyframes ball-spin-fade{0%,to{opacity:1;transform:scale(1)}50%{opacity:.25;transform:scale(.5)}}@keyframes ball-spin-fade{0%,to{opacity:1;transform:scale(1)}50%{opacity:.25;transform:scale(.5)}}.la-ball-spin-rotate,.la-ball-spin-rotate>div{box-sizing:border-box;position:relative}.la-ball-spin-rotate{color:#fff;display:block;font-size:0}.la-ball-spin-rotate.la-dark{color:#333}.la-ball-spin-rotate>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-spin-rotate{-webkit-animation:ball-spin-rotate 2s linear infinite;animation:ball-spin-rotate 2s linear infinite;height:32px;width:32px}.la-ball-spin-rotate>div{-webkit-animation:ball-spin-bounce 2s ease-in-out infinite;animation:ball-spin-bounce 2s ease-in-out infinite;border-radius:100%;height:60%;position:absolute;top:0;width:60%}.la-ball-spin-rotate>div:last-child{-webkit-animation-delay:-1s;animation-delay:-1s;bottom:0;top:auto}.la-ball-spin-rotate.la-sm{height:16px;width:16px}.la-ball-spin-rotate.la-2x{height:64px;width:64px}.la-ball-spin-rotate.la-3x{height:96px;width:96px}@-webkit-keyframes ball-spin-rotate{to{transform:rotate(1turn)}}@keyframes ball-spin-rotate{to{transform:rotate(1turn)}}@-webkit-keyframes ball-spin-bounce{0%,to{transform:scale(0)}50%{transform:scale(1)}}@keyframes ball-spin-bounce{0%,to{transform:scale(0)}50%{transform:scale(1)}}.la-ball-spin,.la-ball-spin>div{box-sizing:border-box;position:relative}.la-ball-spin{color:#fff;display:block;font-size:0}.la-ball-spin.la-dark{color:#333}.la-ball-spin>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-spin{height:32px;width:32px}.la-ball-spin>div{-webkit-animation:ball-spin 1s ease-in-out infinite;animation:ball-spin 1s ease-in-out infinite;border-radius:100%;height:8px;left:50%;margin-left:-4px;margin-top:-4px;position:absolute;top:50%;width:8px}.la-ball-spin>div:first-child{-webkit-animation-delay:-1.125s;animation-delay:-1.125s;left:50%;top:5%}.la-ball-spin>div:nth-child(2){-webkit-animation-delay:-1.25s;animation-delay:-1.25s;left:81.8198051534%;top:18.1801948466%}.la-ball-spin>div:nth-child(3){-webkit-animation-delay:-1.375s;animation-delay:-1.375s;left:95%;top:50%}.la-ball-spin>div:nth-child(4){-webkit-animation-delay:-1.5s;animation-delay:-1.5s;left:81.8198051534%;top:81.8198051534%}.la-ball-spin>div:nth-child(5){-webkit-animation-delay:-1.625s;animation-delay:-1.625s;left:50.0000000005%;top:94.9999999966%}.la-ball-spin>div:nth-child(6){-webkit-animation-delay:-1.75s;animation-delay:-1.75s;left:18.1801949248%;top:81.8198046966%}.la-ball-spin>div:nth-child(7){-webkit-animation-delay:-1.875s;animation-delay:-1.875s;left:5.0000051215%;top:49.9999750815%}.la-ball-spin>div:nth-child(8){-webkit-animation-delay:-2s;animation-delay:-2s;left:18.1803700518%;top:18.179464974%}.la-ball-spin.la-sm{height:16px;width:16px}.la-ball-spin.la-sm>div{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-spin.la-2x{height:64px;width:64px}.la-ball-spin.la-2x>div{height:16px;margin-left:-8px;margin-top:-8px;width:16px}.la-ball-spin.la-3x{height:96px;width:96px}.la-ball-spin.la-3x>div{height:24px;margin-left:-12px;margin-top:-12px;width:24px}@-webkit-keyframes ball-spin{0%,to{opacity:1;transform:scale(1)}20%{opacity:1}80%{opacity:0;transform:scale(0)}}@keyframes ball-spin{0%,to{opacity:1;transform:scale(1)}20%{opacity:1}80%{opacity:0;transform:scale(0)}}.la-ball-square-clockwise-spin,.la-ball-square-clockwise-spin>div{box-sizing:border-box;position:relative}.la-ball-square-clockwise-spin{color:#fff;display:block;font-size:0}.la-ball-square-clockwise-spin.la-dark{color:#333}.la-ball-square-clockwise-spin>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-square-clockwise-spin{height:26px;width:26px}.la-ball-square-clockwise-spin>div{-webkit-animation:ball-square-clockwise-spin 1s ease-in-out infinite;animation:ball-square-clockwise-spin 1s ease-in-out infinite;border-radius:100%;height:12px;left:50%;margin-left:-6px;margin-top:-6px;position:absolute;top:50%;width:12px}.la-ball-square-clockwise-spin>div:first-child{-webkit-animation-delay:-.875s;animation-delay:-.875s;left:0;top:0}.la-ball-square-clockwise-spin>div:nth-child(2){-webkit-animation-delay:-.75s;animation-delay:-.75s;left:50%;top:0}.la-ball-square-clockwise-spin>div:nth-child(3){-webkit-animation-delay:-.625s;animation-delay:-.625s;left:100%;top:0}.la-ball-square-clockwise-spin>div:nth-child(4){-webkit-animation-delay:-.5s;animation-delay:-.5s;left:100%;top:50%}.la-ball-square-clockwise-spin>div:nth-child(5){-webkit-animation-delay:-.375s;animation-delay:-.375s;left:100%;top:100%}.la-ball-square-clockwise-spin>div:nth-child(6){-webkit-animation-delay:-.25s;animation-delay:-.25s;left:50%;top:100%}.la-ball-square-clockwise-spin>div:nth-child(7){-webkit-animation-delay:-.125s;animation-delay:-.125s;left:0;top:100%}.la-ball-square-clockwise-spin>div:nth-child(8){-webkit-animation-delay:0s;animation-delay:0s;left:0;top:50%}.la-ball-square-clockwise-spin.la-sm{height:12px;width:12px}.la-ball-square-clockwise-spin.la-sm>div{height:6px;margin-left:-3px;margin-top:-3px;width:6px}.la-ball-square-clockwise-spin.la-2x{height:52px;width:52px}.la-ball-square-clockwise-spin.la-2x>div{height:24px;margin-left:-12px;margin-top:-12px;width:24px}.la-ball-square-clockwise-spin.la-3x{height:78px;width:78px}.la-ball-square-clockwise-spin.la-3x>div{height:36px;margin-left:-18px;margin-top:-18px;width:36px}@-webkit-keyframes ball-square-clockwise-spin{0%,40%,to{transform:scale(.4)}70%{transform:scale(1)}}@keyframes ball-square-clockwise-spin{0%,40%,to{transform:scale(.4)}70%{transform:scale(1)}}.la-ball-square-spin,.la-ball-square-spin>div{box-sizing:border-box;position:relative}.la-ball-square-spin{color:#fff;display:block;font-size:0}.la-ball-square-spin.la-dark{color:#333}.la-ball-square-spin>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-square-spin{height:26px;width:26px}.la-ball-square-spin>div{-webkit-animation:ball-square-spin 1s ease-in-out infinite;animation:ball-square-spin 1s ease-in-out infinite;border-radius:100%;height:12px;left:50%;margin-left:-6px;margin-top:-6px;position:absolute;top:50%;width:12px}.la-ball-square-spin>div:first-child{-webkit-animation-delay:-1.125s;animation-delay:-1.125s;left:0;top:0}.la-ball-square-spin>div:nth-child(2){-webkit-animation-delay:-1.25s;animation-delay:-1.25s;left:50%;top:0}.la-ball-square-spin>div:nth-child(3){-webkit-animation-delay:-1.375s;animation-delay:-1.375s;left:100%;top:0}.la-ball-square-spin>div:nth-child(4){-webkit-animation-delay:-1.5s;animation-delay:-1.5s;left:100%;top:50%}.la-ball-square-spin>div:nth-child(5){-webkit-animation-delay:-1.625s;animation-delay:-1.625s;left:100%;top:100%}.la-ball-square-spin>div:nth-child(6){-webkit-animation-delay:-1.75s;animation-delay:-1.75s;left:50%;top:100%}.la-ball-square-spin>div:nth-child(7){-webkit-animation-delay:-1.875s;animation-delay:-1.875s;left:0;top:100%}.la-ball-square-spin>div:nth-child(8){-webkit-animation-delay:-2s;animation-delay:-2s;left:0;top:50%}.la-ball-square-spin.la-sm{height:12px;width:12px}.la-ball-square-spin.la-sm>div{height:6px;margin-left:-3px;margin-top:-3px;width:6px}.la-ball-square-spin.la-2x{height:52px;width:52px}.la-ball-square-spin.la-2x>div{height:24px;margin-left:-12px;margin-top:-12px;width:24px}.la-ball-square-spin.la-3x{height:78px;width:78px}.la-ball-square-spin.la-3x>div{height:36px;margin-left:-18px;margin-top:-18px;width:36px}@-webkit-keyframes ball-square-spin{0%,40%,to{transform:scale(.4)}70%{transform:scale(1)}}@keyframes ball-square-spin{0%,40%,to{transform:scale(.4)}70%{transform:scale(1)}}.la-ball-triangle-path,.la-ball-triangle-path>div{box-sizing:border-box;position:relative}.la-ball-triangle-path{color:#fff;display:block;font-size:0}.la-ball-triangle-path.la-dark{color:#333}.la-ball-triangle-path>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-triangle-path{height:32px;width:32px}.la-ball-triangle-path>div{border-radius:100%;height:10px;left:0;position:absolute;top:0;width:10px}.la-ball-triangle-path>div:first-child{-webkit-animation:ball-triangle-path-ball-one 2s ease-in-out 0s infinite;animation:ball-triangle-path-ball-one 2s ease-in-out 0s infinite}.la-ball-triangle-path>div:nth-child(2){-webkit-animation:ball-triangle-path-ball-two 2s ease-in-out 0s infinite;animation:ball-triangle-path-ball-two 2s ease-in-out 0s infinite}.la-ball-triangle-path>div:nth-child(3){-webkit-animation:ball-triangle-path-ball-tree 2s ease-in-out 0s infinite;animation:ball-triangle-path-ball-tree 2s ease-in-out 0s infinite}.la-ball-triangle-path.la-sm{height:16px;width:16px}.la-ball-triangle-path.la-sm>div{height:4px;width:4px}.la-ball-triangle-path.la-2x{height:64px;width:64px}.la-ball-triangle-path.la-2x>div{height:20px;width:20px}.la-ball-triangle-path.la-3x{height:96px;width:96px}.la-ball-triangle-path.la-3x>div{height:30px;width:30px}@-webkit-keyframes ball-triangle-path-ball-one{0%{transform:translateY(220%)}17%{opacity:.25}33%{opacity:1;transform:translate(110%)}50%{opacity:.25}66%{opacity:1;transform:translate(220%,220%)}83%{opacity:.25}to{opacity:1;transform:translateY(220%)}}@keyframes ball-triangle-path-ball-one{0%{transform:translateY(220%)}17%{opacity:.25}33%{opacity:1;transform:translate(110%)}50%{opacity:.25}66%{opacity:1;transform:translate(220%,220%)}83%{opacity:.25}to{opacity:1;transform:translateY(220%)}}@-webkit-keyframes ball-triangle-path-ball-two{0%{transform:translate(110%)}17%{opacity:.25}33%{opacity:1;transform:translate(220%,220%)}50%{opacity:.25}66%{opacity:1;transform:translateY(220%)}83%{opacity:.25}to{opacity:1;transform:translate(110%)}}@keyframes ball-triangle-path-ball-two{0%{transform:translate(110%)}17%{opacity:.25}33%{opacity:1;transform:translate(220%,220%)}50%{opacity:.25}66%{opacity:1;transform:translateY(220%)}83%{opacity:.25}to{opacity:1;transform:translate(110%)}}@-webkit-keyframes ball-triangle-path-ball-tree{0%{transform:translate(220%,220%)}17%{opacity:.25}33%{opacity:1;transform:translateY(220%)}50%{opacity:.25}66%{opacity:1;transform:translate(110%)}83%{opacity:.25}to{opacity:1;transform:translate(220%,220%)}}@keyframes ball-triangle-path-ball-tree{0%{transform:translate(220%,220%)}17%{opacity:.25}33%{opacity:1;transform:translateY(220%)}50%{opacity:.25}66%{opacity:1;transform:translate(110%)}83%{opacity:.25}to{opacity:1;transform:translate(220%,220%)}}.la-ball-zig-zag-deflect,.la-ball-zig-zag-deflect>div{box-sizing:border-box;position:relative}.la-ball-zig-zag-deflect{color:#fff;display:block;font-size:0}.la-ball-zig-zag-deflect.la-dark{color:#333}.la-ball-zig-zag-deflect>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-zig-zag-deflect{height:32px;position:relative;width:32px}.la-ball-zig-zag-deflect>div{border-radius:100%;height:10px;left:50%;margin-left:-5px;margin-top:-5px;position:absolute;top:50%;width:10px}.la-ball-zig-zag-deflect>div:first-child{-webkit-animation:ball-zig-deflect 1.5s linear 0s infinite;animation:ball-zig-deflect 1.5s linear 0s infinite}.la-ball-zig-zag-deflect>div:last-child{-webkit-animation:ball-zag-deflect 1.5s linear 0s infinite;animation:ball-zag-deflect 1.5s linear 0s infinite}.la-ball-zig-zag-deflect.la-sm{height:16px;width:16px}.la-ball-zig-zag-deflect.la-sm>div{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-zig-zag-deflect.la-2x{height:64px;width:64px}.la-ball-zig-zag-deflect.la-2x>div{height:20px;margin-left:-10px;margin-top:-10px;width:20px}.la-ball-zig-zag-deflect.la-3x{height:96px;width:96px}.la-ball-zig-zag-deflect.la-3x>div{height:30px;margin-left:-15px;margin-top:-15px;width:30px}@-webkit-keyframes ball-zig-deflect{17%{transform:translate(-80%,-160%)}34%{transform:translate(80%,-160%)}50%{transform:translate(0)}67%{transform:translate(80%,-160%)}84%{transform:translate(-80%,-160%)}to{transform:translate(0)}}@keyframes ball-zig-deflect{17%{transform:translate(-80%,-160%)}34%{transform:translate(80%,-160%)}50%{transform:translate(0)}67%{transform:translate(80%,-160%)}84%{transform:translate(-80%,-160%)}to{transform:translate(0)}}@-webkit-keyframes ball-zag-deflect{17%{transform:translate(80%,160%)}34%{transform:translate(-80%,160%)}50%{transform:translate(0)}67%{transform:translate(-80%,160%)}84%{transform:translate(80%,160%)}to{transform:translate(0)}}@keyframes ball-zag-deflect{17%{transform:translate(80%,160%)}34%{transform:translate(-80%,160%)}50%{transform:translate(0)}67%{transform:translate(-80%,160%)}84%{transform:translate(80%,160%)}to{transform:translate(0)}}.la-ball-zig-zag,.la-ball-zig-zag>div{box-sizing:border-box;position:relative}.la-ball-zig-zag{color:#fff;display:block;font-size:0}.la-ball-zig-zag.la-dark{color:#333}.la-ball-zig-zag>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-ball-zig-zag{height:32px;position:relative;width:32px}.la-ball-zig-zag>div{border-radius:100%;height:10px;left:50%;margin-left:-5px;margin-top:-5px;position:absolute;top:50%;width:10px}.la-ball-zig-zag>div:first-child{-webkit-animation:ball-zig-effect .7s linear 0s infinite;animation:ball-zig-effect .7s linear 0s infinite}.la-ball-zig-zag>div:last-child{-webkit-animation:ball-zag-effect .7s linear 0s infinite;animation:ball-zag-effect .7s linear 0s infinite}.la-ball-zig-zag.la-sm{height:16px;width:16px}.la-ball-zig-zag.la-sm>div{height:4px;margin-left:-2px;margin-top:-2px;width:4px}.la-ball-zig-zag.la-2x{height:64px;width:64px}.la-ball-zig-zag.la-2x>div{height:20px;margin-left:-10px;margin-top:-10px;width:20px}.la-ball-zig-zag.la-3x{height:96px;width:96px}.la-ball-zig-zag.la-3x>div{height:30px;margin-left:-15px;margin-top:-15px;width:30px}@-webkit-keyframes ball-zig-effect{0%{transform:translate(0)}33%{transform:translate(-75%,-150%)}66%{transform:translate(75%,-150%)}to{transform:translate(0)}}@keyframes ball-zig-effect{0%{transform:translate(0)}33%{transform:translate(-75%,-150%)}66%{transform:translate(75%,-150%)}to{transform:translate(0)}}@-webkit-keyframes ball-zag-effect{0%{transform:translate(0)}33%{transform:translate(75%,150%)}66%{transform:translate(-75%,150%)}to{transform:translate(0)}}@keyframes ball-zag-effect{0%{transform:translate(0)}33%{transform:translate(75%,150%)}66%{transform:translate(-75%,150%)}to{transform:translate(0)}}.la-cog,.la-cog>div{box-sizing:border-box;position:relative}.la-cog{color:#fff;display:block;font-size:0}.la-cog.la-dark{color:#333}.la-cog>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-cog{height:31px;width:31px}.la-cog>div{-webkit-animation:cog-rotate 4s linear infinite;animation:cog-rotate 4s linear infinite;background-color:transparent;border-radius:100%;border-style:dashed;border-width:2px;height:100%;width:100%}.la-cog>div:after{border:2px solid;border-radius:100%;content:\"\";height:100%;left:0;position:absolute;top:0;width:100%}.la-cog.la-sm{height:15px;width:15px}.la-cog.la-sm>div,.la-cog.la-sm>div:after{border-width:1px}.la-cog.la-2x{height:61px;width:61px}.la-cog.la-2x>div,.la-cog.la-2x>div:after{border-width:4px}.la-cog.la-3x{height:91px;width:91px}.la-cog.la-3x>div,.la-cog.la-3x>div:after{border-width:6px}@-webkit-keyframes cog-rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes cog-rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.la-cube-transition,.la-cube-transition>div{box-sizing:border-box;position:relative}.la-cube-transition{color:#fff;display:block;font-size:0}.la-cube-transition.la-dark{color:#333}.la-cube-transition>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-cube-transition{height:32px;width:32px}.la-cube-transition>div{-webkit-animation:cube-transition 1.6s ease-in-out 0s infinite;animation:cube-transition 1.6s ease-in-out 0s infinite;border-radius:0;height:14px;left:0;margin-left:-7px;margin-top:-7px;position:absolute;top:0;width:14px}.la-cube-transition>div:last-child{-webkit-animation-delay:-.8s;animation-delay:-.8s}.la-cube-transition.la-sm{height:16px;width:16px}.la-cube-transition.la-sm>div{height:6px;margin-left:-3px;margin-top:-3px;width:6px}.la-cube-transition.la-2x{height:64px;width:64px}.la-cube-transition.la-2x>div{height:28px;margin-left:-14px;margin-top:-14px;width:28px}.la-cube-transition.la-3x{height:96px;width:96px}.la-cube-transition.la-3x>div{height:42px;margin-left:-21px;margin-top:-21px;width:42px}@-webkit-keyframes cube-transition{25%{left:100%;top:0;transform:scale(.5) rotate(-90deg)}50%{left:100%;top:100%;transform:scale(1) rotate(-180deg)}75%{left:0;top:100%;transform:scale(.5) rotate(-270deg)}to{left:0;top:0;transform:scale(1) rotate(-1turn)}}@keyframes cube-transition{25%{left:100%;top:0;transform:scale(.5) rotate(-90deg)}50%{left:100%;top:100%;transform:scale(1) rotate(-180deg)}75%{left:0;top:100%;transform:scale(.5) rotate(-270deg)}to{left:0;top:0;transform:scale(1) rotate(-1turn)}}.la-fire,.la-fire>div{box-sizing:border-box;position:relative}.la-fire{color:#fff;display:block;font-size:0}.la-fire.la-dark{color:#333}.la-fire>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-fire{height:32px;width:32px}.la-fire>div{-webkit-animation:fire-diamonds 1.5s linear infinite;animation:fire-diamonds 1.5s linear infinite;border-radius:0;border-radius:2px;bottom:0;height:12px;left:50%;position:absolute;transform:translateY(0) translateX(-50%) rotate(45deg) scale(0);width:12px}.la-fire>div:first-child{-webkit-animation-delay:-.85s;animation-delay:-.85s}.la-fire>div:nth-child(2){-webkit-animation-delay:-1.85s;animation-delay:-1.85s}.la-fire>div:nth-child(3){-webkit-animation-delay:-2.85s;animation-delay:-2.85s}.la-fire.la-sm{height:16px;width:16px}.la-fire.la-sm>div{height:6px;width:6px}.la-fire.la-2x{height:64px;width:64px}.la-fire.la-2x>div{height:24px;width:24px}.la-fire.la-3x{height:96px;width:96px}.la-fire.la-3x>div{height:36px;width:36px}@-webkit-keyframes fire-diamonds{0%{transform:translateY(75%) translateX(-50%) rotate(45deg) scale(0)}50%{transform:translateY(-87.5%) translateX(-50%) rotate(45deg) scale(1)}to{transform:translateY(-212.5%) translateX(-50%) rotate(45deg) scale(0)}}@keyframes fire-diamonds{0%{transform:translateY(75%) translateX(-50%) rotate(45deg) scale(0)}50%{transform:translateY(-87.5%) translateX(-50%) rotate(45deg) scale(1)}to{transform:translateY(-212.5%) translateX(-50%) rotate(45deg) scale(0)}}.la-line-scale-party,.la-line-scale-party>div{box-sizing:border-box;position:relative}.la-line-scale-party{color:#fff;display:block;font-size:0}.la-line-scale-party.la-dark{color:#333}.la-line-scale-party>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-line-scale-party{height:32px;width:40px}.la-line-scale-party>div{-webkit-animation-iteration-count:infinite;-webkit-animation-name:line-scale-party;animation-iteration-count:infinite;animation-name:line-scale-party;border-radius:0;height:32px;margin:0 2px;width:4px}.la-line-scale-party>div:first-child{-webkit-animation-delay:-.23s;-webkit-animation-duration:.43s;animation-delay:-.23s;animation-duration:.43s}.la-line-scale-party>div:nth-child(2){-webkit-animation-delay:-.32s;-webkit-animation-duration:.62s;animation-delay:-.32s;animation-duration:.62s}.la-line-scale-party>div:nth-child(3){-webkit-animation-delay:-.44s;-webkit-animation-duration:.43s;animation-delay:-.44s;animation-duration:.43s}.la-line-scale-party>div:nth-child(4){-webkit-animation-delay:-.31s;-webkit-animation-duration:.8s;animation-delay:-.31s;animation-duration:.8s}.la-line-scale-party>div:nth-child(5){-webkit-animation-delay:-.24s;-webkit-animation-duration:.74s;animation-delay:-.24s;animation-duration:.74s}.la-line-scale-party.la-sm{height:16px;width:20px}.la-line-scale-party.la-sm>div{height:16px;margin:0 1px;width:2px}.la-line-scale-party.la-2x{height:64px;width:80px}.la-line-scale-party.la-2x>div{height:64px;margin:0 4px;width:8px}.la-line-scale-party.la-3x{height:96px;width:120px}.la-line-scale-party.la-3x>div{height:96px;margin:0 6px;width:12px}@-webkit-keyframes line-scale-party{0%{transform:scaleY(1)}50%{transform:scaleY(.3)}to{transform:scaleY(1)}}@keyframes line-scale-party{0%{transform:scaleY(1)}50%{transform:scaleY(.3)}to{transform:scaleY(1)}}.la-line-scale-pulse-out-rapid,.la-line-scale-pulse-out-rapid>div{box-sizing:border-box;position:relative}.la-line-scale-pulse-out-rapid{color:#fff;display:block;font-size:0}.la-line-scale-pulse-out-rapid.la-dark{color:#333}.la-line-scale-pulse-out-rapid>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-line-scale-pulse-out-rapid{height:32px;width:40px}.la-line-scale-pulse-out-rapid>div{-webkit-animation:line-scale-pulse-out-rapid .9s cubic-bezier(.11,.49,.38,.78) infinite;animation:line-scale-pulse-out-rapid .9s cubic-bezier(.11,.49,.38,.78) infinite;border-radius:0;height:32px;margin:0 2px;width:4px}.la-line-scale-pulse-out-rapid>div:nth-child(3){-webkit-animation-delay:-.9s;animation-delay:-.9s}.la-line-scale-pulse-out-rapid>div:nth-child(2),.la-line-scale-pulse-out-rapid>div:nth-child(4){-webkit-animation-delay:-.65s;animation-delay:-.65s}.la-line-scale-pulse-out-rapid>div:first-child,.la-line-scale-pulse-out-rapid>div:nth-child(5){-webkit-animation-delay:-.4s;animation-delay:-.4s}.la-line-scale-pulse-out-rapid.la-sm{height:16px;width:20px}.la-line-scale-pulse-out-rapid.la-sm>div{height:16px;margin:0 1px;width:2px}.la-line-scale-pulse-out-rapid.la-2x{height:64px;width:80px}.la-line-scale-pulse-out-rapid.la-2x>div{height:64px;margin:0 4px;width:8px}.la-line-scale-pulse-out-rapid.la-3x{height:96px;width:120px}.la-line-scale-pulse-out-rapid.la-3x>div{height:96px;margin:0 6px;width:12px}@-webkit-keyframes line-scale-pulse-out-rapid{0%{transform:scaley(1)}80%{transform:scaley(.3)}90%{transform:scaley(1)}}@keyframes line-scale-pulse-out-rapid{0%{transform:scaley(1)}80%{transform:scaley(.3)}90%{transform:scaley(1)}}.la-line-scale-pulse-out,.la-line-scale-pulse-out>div{box-sizing:border-box;position:relative}.la-line-scale-pulse-out{color:#fff;display:block;font-size:0}.la-line-scale-pulse-out.la-dark{color:#333}.la-line-scale-pulse-out>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-line-scale-pulse-out{height:32px;width:40px}.la-line-scale-pulse-out>div{-webkit-animation:line-scale-pulse-out .9s cubic-bezier(.85,.25,.37,.85) infinite;animation:line-scale-pulse-out .9s cubic-bezier(.85,.25,.37,.85) infinite;border-radius:0;height:32px;margin:0 2px;width:4px}.la-line-scale-pulse-out>div:nth-child(3){-webkit-animation-delay:-.9s;animation-delay:-.9s}.la-line-scale-pulse-out>div:nth-child(2),.la-line-scale-pulse-out>div:nth-child(4){-webkit-animation-delay:-.7s;animation-delay:-.7s}.la-line-scale-pulse-out>div:first-child,.la-line-scale-pulse-out>div:nth-child(5){-webkit-animation-delay:-.5s;animation-delay:-.5s}.la-line-scale-pulse-out.la-sm{height:16px;width:20px}.la-line-scale-pulse-out.la-sm>div{height:16px;margin:0 1px;width:2px}.la-line-scale-pulse-out.la-2x{height:64px;width:80px}.la-line-scale-pulse-out.la-2x>div{height:64px;margin:0 4px;width:8px}.la-line-scale-pulse-out.la-3x{height:96px;width:120px}.la-line-scale-pulse-out.la-3x>div{height:96px;margin:0 6px;width:12px}@-webkit-keyframes line-scale-pulse-out{0%{transform:scaley(1)}50%{transform:scaley(.3)}to{transform:scaley(1)}}@keyframes line-scale-pulse-out{0%{transform:scaley(1)}50%{transform:scaley(.3)}to{transform:scaley(1)}}.la-line-scale,.la-line-scale>div{box-sizing:border-box;position:relative}.la-line-scale{color:#fff;display:block;font-size:0}.la-line-scale.la-dark{color:#333}.la-line-scale>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-line-scale{height:32px;width:40px}.la-line-scale>div{-webkit-animation:line-scale 1.2s ease infinite;animation:line-scale 1.2s ease infinite;border-radius:0;height:32px;margin:0 2px;width:4px}.la-line-scale>div:first-child{-webkit-animation-delay:-1.2s;animation-delay:-1.2s}.la-line-scale>div:nth-child(2){-webkit-animation-delay:-1.1s;animation-delay:-1.1s}.la-line-scale>div:nth-child(3){-webkit-animation-delay:-1s;animation-delay:-1s}.la-line-scale>div:nth-child(4){-webkit-animation-delay:-.9s;animation-delay:-.9s}.la-line-scale>div:nth-child(5){-webkit-animation-delay:-.8s;animation-delay:-.8s}.la-line-scale.la-sm{height:16px;width:20px}.la-line-scale.la-sm>div{height:16px;margin:0 1px;width:2px}.la-line-scale.la-2x{height:64px;width:80px}.la-line-scale.la-2x>div{height:64px;margin:0 4px;width:8px}.la-line-scale.la-3x{height:96px;width:120px}.la-line-scale.la-3x>div{height:96px;margin:0 6px;width:12px}@-webkit-keyframes line-scale{0%,40%,to{transform:scaleY(.4)}20%{transform:scaleY(1)}}@keyframes line-scale{0%,40%,to{transform:scaleY(.4)}20%{transform:scaleY(1)}}.la-line-spin-clockwise-fade-rotating,.la-line-spin-clockwise-fade-rotating>div{box-sizing:border-box;position:relative}.la-line-spin-clockwise-fade-rotating{color:#fff;display:block;font-size:0}.la-line-spin-clockwise-fade-rotating.la-dark{color:#333}.la-line-spin-clockwise-fade-rotating>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-line-spin-clockwise-fade-rotating{-webkit-animation:line-spin-clockwise-fade-rotating-rotate 6s linear infinite;animation:line-spin-clockwise-fade-rotating-rotate 6s linear infinite;height:32px;width:32px}.la-line-spin-clockwise-fade-rotating>div{-webkit-animation:line-spin-clockwise-fade-rotating 1s ease-in-out infinite;animation:line-spin-clockwise-fade-rotating 1s ease-in-out infinite;border-radius:0;height:10px;margin:-5px 2px 2px -1px;position:absolute;width:2px}.la-line-spin-clockwise-fade-rotating>div:first-child{-webkit-animation-delay:-.875s;animation-delay:-.875s;left:50%;top:15%;transform:rotate(0deg)}.la-line-spin-clockwise-fade-rotating>div:nth-child(2){-webkit-animation-delay:-.75s;animation-delay:-.75s;left:74.7487373415%;top:25.2512626585%;transform:rotate(45deg)}.la-line-spin-clockwise-fade-rotating>div:nth-child(3){-webkit-animation-delay:-.625s;animation-delay:-.625s;left:85%;top:50%;transform:rotate(90deg)}.la-line-spin-clockwise-fade-rotating>div:nth-child(4){-webkit-animation-delay:-.5s;animation-delay:-.5s;left:74.7487373415%;top:74.7487373415%;transform:rotate(135deg)}.la-line-spin-clockwise-fade-rotating>div:nth-child(5){-webkit-animation-delay:-.375s;animation-delay:-.375s;left:50.0000000004%;top:84.9999999974%;transform:rotate(180deg)}.la-line-spin-clockwise-fade-rotating>div:nth-child(6){-webkit-animation-delay:-.25s;animation-delay:-.25s;left:25.2512627193%;top:74.7487369862%;transform:rotate(225deg)}.la-line-spin-clockwise-fade-rotating>div:nth-child(7){-webkit-animation-delay:-.125s;animation-delay:-.125s;left:15.0000039834%;top:49.9999806189%;transform:rotate(270deg)}.la-line-spin-clockwise-fade-rotating>div:nth-child(8){-webkit-animation-delay:0s;animation-delay:0s;left:25.2513989292%;top:25.2506949798%;transform:rotate(315deg)}.la-line-spin-clockwise-fade-rotating.la-sm{height:16px;width:16px}.la-line-spin-clockwise-fade-rotating.la-sm>div{height:4px;margin-left:0;margin-top:-2px;width:1px}.la-line-spin-clockwise-fade-rotating.la-2x{height:64px;width:64px}.la-line-spin-clockwise-fade-rotating.la-2x>div{height:20px;margin-left:-2px;margin-top:-10px;width:4px}.la-line-spin-clockwise-fade-rotating.la-3x{height:96px;width:96px}.la-line-spin-clockwise-fade-rotating.la-3x>div{height:30px;margin-left:-3px;margin-top:-15px;width:6px}@-webkit-keyframes line-spin-clockwise-fade-rotating-rotate{to{transform:rotate(-1turn)}}@keyframes line-spin-clockwise-fade-rotating-rotate{to{transform:rotate(-1turn)}}@-webkit-keyframes line-spin-clockwise-fade-rotating{50%{opacity:.2}to{opacity:1}}@keyframes line-spin-clockwise-fade-rotating{50%{opacity:.2}to{opacity:1}}.la-line-spin-clockwise-fade,.la-line-spin-clockwise-fade>div{box-sizing:border-box;position:relative}.la-line-spin-clockwise-fade{color:#fff;display:block;font-size:0}.la-line-spin-clockwise-fade.la-dark{color:#333}.la-line-spin-clockwise-fade>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-line-spin-clockwise-fade{height:32px;width:32px}.la-line-spin-clockwise-fade>div{-webkit-animation:line-spin-clockwise-fade 1s ease-in-out infinite;animation:line-spin-clockwise-fade 1s ease-in-out infinite;border-radius:0;height:10px;margin:-5px 2px 2px -1px;position:absolute;width:2px}.la-line-spin-clockwise-fade>div:first-child{-webkit-animation-delay:-.875s;animation-delay:-.875s;left:50%;top:15%;transform:rotate(0deg)}.la-line-spin-clockwise-fade>div:nth-child(2){-webkit-animation-delay:-.75s;animation-delay:-.75s;left:74.7487373415%;top:25.2512626585%;transform:rotate(45deg)}.la-line-spin-clockwise-fade>div:nth-child(3){-webkit-animation-delay:-.625s;animation-delay:-.625s;left:85%;top:50%;transform:rotate(90deg)}.la-line-spin-clockwise-fade>div:nth-child(4){-webkit-animation-delay:-.5s;animation-delay:-.5s;left:74.7487373415%;top:74.7487373415%;transform:rotate(135deg)}.la-line-spin-clockwise-fade>div:nth-child(5){-webkit-animation-delay:-.375s;animation-delay:-.375s;left:50.0000000004%;top:84.9999999974%;transform:rotate(180deg)}.la-line-spin-clockwise-fade>div:nth-child(6){-webkit-animation-delay:-.25s;animation-delay:-.25s;left:25.2512627193%;top:74.7487369862%;transform:rotate(225deg)}.la-line-spin-clockwise-fade>div:nth-child(7){-webkit-animation-delay:-.125s;animation-delay:-.125s;left:15.0000039834%;top:49.9999806189%;transform:rotate(270deg)}.la-line-spin-clockwise-fade>div:nth-child(8){-webkit-animation-delay:0s;animation-delay:0s;left:25.2513989292%;top:25.2506949798%;transform:rotate(315deg)}.la-line-spin-clockwise-fade.la-sm{height:16px;width:16px}.la-line-spin-clockwise-fade.la-sm>div{height:4px;margin-left:0;margin-top:-2px;width:1px}.la-line-spin-clockwise-fade.la-2x{height:64px;width:64px}.la-line-spin-clockwise-fade.la-2x>div{height:20px;margin-left:-2px;margin-top:-10px;width:4px}.la-line-spin-clockwise-fade.la-3x{height:96px;width:96px}.la-line-spin-clockwise-fade.la-3x>div{height:30px;margin-left:-3px;margin-top:-15px;width:6px}@-webkit-keyframes line-spin-clockwise-fade{50%{opacity:.2}to{opacity:1}}@keyframes line-spin-clockwise-fade{50%{opacity:.2}to{opacity:1}}.la-line-spin-fade-rotating,.la-line-spin-fade-rotating>div{box-sizing:border-box;position:relative}.la-line-spin-fade-rotating{color:#fff;display:block;font-size:0}.la-line-spin-fade-rotating.la-dark{color:#333}.la-line-spin-fade-rotating>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-line-spin-fade-rotating{-webkit-animation:ball-spin-fade-rotating-rotate 6s linear infinite;animation:ball-spin-fade-rotating-rotate 6s linear infinite;height:32px;width:32px}.la-line-spin-fade-rotating>div{-webkit-animation:line-spin-fade-rotating 1s ease-in-out infinite;animation:line-spin-fade-rotating 1s ease-in-out infinite;border-radius:0;height:10px;margin:-5px 2px 2px -1px;position:absolute;width:2px}.la-line-spin-fade-rotating>div:first-child{-webkit-animation-delay:-1.125s;animation-delay:-1.125s;left:50%;top:15%;transform:rotate(0deg)}.la-line-spin-fade-rotating>div:nth-child(2){-webkit-animation-delay:-1.25s;animation-delay:-1.25s;left:74.7487373415%;top:25.2512626585%;transform:rotate(45deg)}.la-line-spin-fade-rotating>div:nth-child(3){-webkit-animation-delay:-1.375s;animation-delay:-1.375s;left:85%;top:50%;transform:rotate(90deg)}.la-line-spin-fade-rotating>div:nth-child(4){-webkit-animation-delay:-1.5s;animation-delay:-1.5s;left:74.7487373415%;top:74.7487373415%;transform:rotate(135deg)}.la-line-spin-fade-rotating>div:nth-child(5){-webkit-animation-delay:-1.625s;animation-delay:-1.625s;left:50.0000000004%;top:84.9999999974%;transform:rotate(180deg)}.la-line-spin-fade-rotating>div:nth-child(6){-webkit-animation-delay:-1.75s;animation-delay:-1.75s;left:25.2512627193%;top:74.7487369862%;transform:rotate(225deg)}.la-line-spin-fade-rotating>div:nth-child(7){-webkit-animation-delay:-1.875s;animation-delay:-1.875s;left:15.0000039834%;top:49.9999806189%;transform:rotate(270deg)}.la-line-spin-fade-rotating>div:nth-child(8){-webkit-animation-delay:-2s;animation-delay:-2s;left:25.2513989292%;top:25.2506949798%;transform:rotate(315deg)}.la-line-spin-fade-rotating.la-sm{height:16px;width:16px}.la-line-spin-fade-rotating.la-sm>div{height:4px;margin-left:0;margin-top:-2px;width:1px}.la-line-spin-fade-rotating.la-2x{height:64px;width:64px}.la-line-spin-fade-rotating.la-2x>div{height:20px;margin-left:-2px;margin-top:-10px;width:4px}.la-line-spin-fade-rotating.la-3x{height:96px;width:96px}.la-line-spin-fade-rotating.la-3x>div{height:30px;margin-left:-3px;margin-top:-15px;width:6px}@-webkit-keyframes ball-spin-fade-rotating-rotate{to{transform:rotate(1turn)}}@keyframes ball-spin-fade-rotating-rotate{to{transform:rotate(1turn)}}@-webkit-keyframes line-spin-fade-rotating{50%{opacity:.2}to{opacity:1}}@keyframes line-spin-fade-rotating{50%{opacity:.2}to{opacity:1}}.la-line-spin-fade,.la-line-spin-fade>div{box-sizing:border-box;position:relative}.la-line-spin-fade{color:#fff;display:block;font-size:0}.la-line-spin-fade.la-dark{color:#333}.la-line-spin-fade>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-line-spin-fade{height:32px;width:32px}.la-line-spin-fade>div{-webkit-animation:line-spin-fade 1s ease-in-out infinite;animation:line-spin-fade 1s ease-in-out infinite;border-radius:0;height:10px;margin:-5px 2px 2px -1px;position:absolute;width:2px}.la-line-spin-fade>div:first-child{-webkit-animation-delay:-1.125s;animation-delay:-1.125s;left:50%;top:15%;transform:rotate(0deg)}.la-line-spin-fade>div:nth-child(2){-webkit-animation-delay:-1.25s;animation-delay:-1.25s;left:74.7487373415%;top:25.2512626585%;transform:rotate(45deg)}.la-line-spin-fade>div:nth-child(3){-webkit-animation-delay:-1.375s;animation-delay:-1.375s;left:85%;top:50%;transform:rotate(90deg)}.la-line-spin-fade>div:nth-child(4){-webkit-animation-delay:-1.5s;animation-delay:-1.5s;left:74.7487373415%;top:74.7487373415%;transform:rotate(135deg)}.la-line-spin-fade>div:nth-child(5){-webkit-animation-delay:-1.625s;animation-delay:-1.625s;left:50.0000000004%;top:84.9999999974%;transform:rotate(180deg)}.la-line-spin-fade>div:nth-child(6){-webkit-animation-delay:-1.75s;animation-delay:-1.75s;left:25.2512627193%;top:74.7487369862%;transform:rotate(225deg)}.la-line-spin-fade>div:nth-child(7){-webkit-animation-delay:-1.875s;animation-delay:-1.875s;left:15.0000039834%;top:49.9999806189%;transform:rotate(270deg)}.la-line-spin-fade>div:nth-child(8){-webkit-animation-delay:-2s;animation-delay:-2s;left:25.2513989292%;top:25.2506949798%;transform:rotate(315deg)}.la-line-spin-fade.la-sm{height:16px;width:16px}.la-line-spin-fade.la-sm>div{height:4px;margin-left:0;margin-top:-2px;width:1px}.la-line-spin-fade.la-2x{height:64px;width:64px}.la-line-spin-fade.la-2x>div{height:20px;margin-left:-2px;margin-top:-10px;width:4px}.la-line-spin-fade.la-3x{height:96px;width:96px}.la-line-spin-fade.la-3x>div{height:30px;margin-left:-3px;margin-top:-15px;width:6px}@-webkit-keyframes line-spin-fade{50%{opacity:.2}to{opacity:1}}@keyframes line-spin-fade{50%{opacity:.2}to{opacity:1}}.la-pacman,.la-pacman>div{box-sizing:border-box;position:relative}.la-pacman{color:#fff;display:block;font-size:0}.la-pacman.la-dark{color:#333}.la-pacman>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-pacman{height:32px;width:32px}.la-pacman>div:first-child,.la-pacman>div:nth-child(2){-webkit-animation:pacman-rotate-half-up .5s 0s infinite;animation:pacman-rotate-half-up .5s 0s infinite;background:transparent;border-radius:100%;border-right:solid transparent;border-style:solid;border-width:16px;height:0;position:absolute;width:0}.la-pacman>div:nth-child(2){-webkit-animation-name:pacman-rotate-half-down;animation-name:pacman-rotate-half-down;top:0}.la-pacman>div:nth-child(3),.la-pacman>div:nth-child(4),.la-pacman>div:nth-child(5),.la-pacman>div:nth-child(6){-webkit-animation:pacman-balls 2s linear 0s infinite;animation:pacman-balls 2s linear 0s infinite;border-radius:100%;height:8px;left:200%;opacity:0;position:absolute;top:50%;width:8px}.la-pacman>div:nth-child(3){-webkit-animation-delay:-1.44s;animation-delay:-1.44s}.la-pacman>div:nth-child(4){-webkit-animation-delay:-1.94s;animation-delay:-1.94s}.la-pacman>div:nth-child(5){-webkit-animation-delay:-2.44s;animation-delay:-2.44s}.la-pacman>div:nth-child(6){-webkit-animation-delay:-2.94s;animation-delay:-2.94s}.la-pacman.la-sm{height:16px;width:16px}.la-pacman.la-sm>div:first-child,.la-pacman.la-sm>div:nth-child(2){border-width:8px;position:absolute}.la-pacman.la-sm>div:nth-child(2){top:0}.la-pacman.la-sm>div:nth-child(3),.la-pacman.la-sm>div:nth-child(4),.la-pacman.la-sm>div:nth-child(5),.la-pacman.la-sm>div:nth-child(6){height:4px;width:4px}.la-pacman.la-2x{height:64px;width:64px}.la-pacman.la-2x>div:first-child,.la-pacman.la-2x>div:nth-child(2){border-width:32px;position:absolute}.la-pacman.la-2x>div:nth-child(2){top:0}.la-pacman.la-2x>div:nth-child(3),.la-pacman.la-2x>div:nth-child(4),.la-pacman.la-2x>div:nth-child(5),.la-pacman.la-2x>div:nth-child(6){height:16px;width:16px}.la-pacman.la-3x{height:96px;width:96px}.la-pacman.la-3x>div:first-child,.la-pacman.la-3x>div:nth-child(2){border-width:48px;position:absolute}.la-pacman.la-3x>div:nth-child(2){top:0}.la-pacman.la-3x>div:nth-child(3),.la-pacman.la-3x>div:nth-child(4),.la-pacman.la-3x>div:nth-child(5),.la-pacman.la-3x>div:nth-child(6){height:24px;width:24px}@-webkit-keyframes pacman-rotate-half-up{0%,to{transform:rotate(270deg)}50%{transform:rotate(1turn)}}@keyframes pacman-rotate-half-up{0%,to{transform:rotate(270deg)}50%{transform:rotate(1turn)}}@-webkit-keyframes pacman-rotate-half-down{0%,to{transform:rotate(90deg)}50%{transform:rotate(0deg)}}@keyframes pacman-rotate-half-down{0%,to{transform:rotate(90deg)}50%{transform:rotate(0deg)}}@-webkit-keyframes pacman-balls{0%{left:200%;opacity:0;transform:translateY(-50%)}5%{opacity:.5}66%{opacity:1}67%{opacity:0}to{left:0;transform:translateY(-50%)}}@keyframes pacman-balls{0%{left:200%;opacity:0;transform:translateY(-50%)}5%{opacity:.5}66%{opacity:1}67%{opacity:0}to{left:0;transform:translateY(-50%)}}.la-square-jelly-box,.la-square-jelly-box>div{box-sizing:border-box;position:relative}.la-square-jelly-box{color:#fff;display:block;font-size:0}.la-square-jelly-box.la-dark{color:#333}.la-square-jelly-box>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-square-jelly-box{height:32px;width:32px}.la-square-jelly-box>div:first-child,.la-square-jelly-box>div:nth-child(2){left:0;position:absolute;width:100%}.la-square-jelly-box>div:first-child{-webkit-animation:square-jelly-box-animate .6s linear -.1s infinite;animation:square-jelly-box-animate .6s linear -.1s infinite;border-radius:10%;height:100%;top:-25%;z-index:1}.la-square-jelly-box>div:nth-child(2){-webkit-animation:square-jelly-box-shadow .6s linear -.1s infinite;animation:square-jelly-box-shadow .6s linear -.1s infinite;background:#000;border-radius:50%;bottom:-9%;height:10%;opacity:.2}.la-square-jelly-box.la-sm{height:16px;width:16px}.la-square-jelly-box.la-2x{height:64px;width:64px}.la-square-jelly-box.la-3x{height:96px;width:96px}@-webkit-keyframes square-jelly-box-animate{17%{border-bottom-right-radius:10%}25%{transform:translateY(25%) rotate(22.5deg)}50%{border-bottom-right-radius:100%;transform:translateY(50%) scaleY(.9) rotate(45deg)}75%{transform:translateY(25%) rotate(67.5deg)}to{transform:translateY(0) rotate(90deg)}}@keyframes square-jelly-box-animate{17%{border-bottom-right-radius:10%}25%{transform:translateY(25%) rotate(22.5deg)}50%{border-bottom-right-radius:100%;transform:translateY(50%) scaleY(.9) rotate(45deg)}75%{transform:translateY(25%) rotate(67.5deg)}to{transform:translateY(0) rotate(90deg)}}@-webkit-keyframes square-jelly-box-shadow{50%{transform:scaleX(1.25)}}@keyframes square-jelly-box-shadow{50%{transform:scaleX(1.25)}}.la-square-loader,.la-square-loader>div{box-sizing:border-box;position:relative}.la-square-loader{color:#fff;display:block;font-size:0}.la-square-loader.la-dark{color:#333}.la-square-loader>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-square-loader{height:32px;width:32px}.la-square-loader>div{-webkit-animation:square-loader 2s ease infinite;animation:square-loader 2s ease infinite;background:transparent;border-radius:0;border-width:2px;height:100%;width:100%}.la-square-loader>div:after{-webkit-animation:square-loader-inner 2s ease-in infinite;animation:square-loader-inner 2s ease-in infinite;background-color:currentColor;content:\"\";display:inline-block;vertical-align:top;width:100%}.la-square-loader.la-sm{height:16px;width:16px}.la-square-loader.la-sm>div{border-width:1px}.la-square-loader.la-2x{height:64px;width:64px}.la-square-loader.la-2x>div{border-width:4px}.la-square-loader.la-3x{height:96px;width:96px}.la-square-loader.la-3x>div{border-width:6px}@-webkit-keyframes square-loader{0%{transform:rotate(0deg)}25%{transform:rotate(180deg)}50%{transform:rotate(180deg)}75%{transform:rotate(1turn)}to{transform:rotate(1turn)}}@keyframes square-loader{0%{transform:rotate(0deg)}25%{transform:rotate(180deg)}50%{transform:rotate(180deg)}75%{transform:rotate(1turn)}to{transform:rotate(1turn)}}@-webkit-keyframes square-loader-inner{0%{height:0}25%{height:0}50%{height:100%}75%{height:100%}to{height:0}}@keyframes square-loader-inner{0%{height:0}25%{height:0}50%{height:100%}75%{height:100%}to{height:0}}.la-square-spin,.la-square-spin>div{box-sizing:border-box;position:relative}.la-square-spin{color:#fff;display:block;font-size:0}.la-square-spin.la-dark{color:#333}.la-square-spin>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-square-spin{height:32px;width:32px}.la-square-spin>div{-webkit-animation:square-spin 3s cubic-bezier(.09,.57,.49,.9) 0s infinite;animation:square-spin 3s cubic-bezier(.09,.57,.49,.9) 0s infinite;border-radius:0;height:100%;width:100%}.la-square-spin.la-sm{height:16px;width:16px}.la-square-spin.la-2x{height:64px;width:64px}.la-square-spin.la-3x{height:96px;width:96px}@-webkit-keyframes square-spin{0%{transform:perspective(100px) rotateX(0) rotateY(0)}25%{transform:perspective(100px) rotateX(180deg) rotateY(0)}50%{transform:perspective(100px) rotateX(180deg) rotateY(180deg)}75%{transform:perspective(100px) rotateX(0) rotateY(180deg)}to{transform:perspective(100px) rotateX(0) rotateY(1turn)}}@keyframes square-spin{0%{transform:perspective(100px) rotateX(0) rotateY(0)}25%{transform:perspective(100px) rotateX(180deg) rotateY(0)}50%{transform:perspective(100px) rotateX(180deg) rotateY(180deg)}75%{transform:perspective(100px) rotateX(0) rotateY(180deg)}to{transform:perspective(100px) rotateX(0) rotateY(1turn)}}.la-timer,.la-timer>div{box-sizing:border-box;position:relative}.la-timer{color:#fff;display:block;font-size:0}.la-timer.la-dark{color:#333}.la-timer>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-timer,.la-timer>div{height:32px;width:32px}.la-timer>div{background:transparent;border-radius:100%;border-width:2px}.la-timer>div:after,.la-timer>div:before{-webkit-animation:timer-loader 1.25s linear infinite;-webkit-animation-delay:-625ms;animation:timer-loader 1.25s linear infinite;animation-delay:-625ms;background:currentColor;border-radius:2px;content:\"\";display:block;left:14px;margin-left:-1px;margin-top:-1px;position:absolute;top:14px;transform-origin:1px 1px 0;width:2px}.la-timer>div:before{height:12px}.la-timer>div:after{-webkit-animation-delay:-7.5s;-webkit-animation-duration:15s;animation-delay:-7.5s;animation-duration:15s;height:8px}.la-timer.la-sm,.la-timer.la-sm>div{height:16px;width:16px}.la-timer.la-sm>div{border-width:1px}.la-timer.la-sm>div:after,.la-timer.la-sm>div:before{border-radius:1px;left:7px;margin-left:-.5px;margin-top:-.5px;top:7px;transform-origin:.5px .5px 0;width:1px}.la-timer.la-sm>div:before{height:6px}.la-timer.la-sm>div:after{height:4px}.la-timer.la-2x,.la-timer.la-2x>div{height:64px;width:64px}.la-timer.la-2x>div{border-width:4px}.la-timer.la-2x>div:after,.la-timer.la-2x>div:before{border-radius:4px;left:28px;margin-left:-2px;margin-top:-2px;top:28px;transform-origin:2px 2px 0;width:4px}.la-timer.la-2x>div:before{height:24px}.la-timer.la-2x>div:after{height:16px}.la-timer.la-3x,.la-timer.la-3x>div{height:96px;width:96px}.la-timer.la-3x>div{border-width:6px}.la-timer.la-3x>div:after,.la-timer.la-3x>div:before{border-radius:6px;left:42px;margin-left:-3px;margin-top:-3px;top:42px;transform-origin:3px 3px 0;width:6px}.la-timer.la-3x>div:before{height:36px}.la-timer.la-3x>div:after{height:24px}@-webkit-keyframes timer-loader{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes timer-loader{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.la-triangle-skew-spin,.la-triangle-skew-spin>div{box-sizing:border-box;position:relative}.la-triangle-skew-spin{color:#fff;display:block;font-size:0}.la-triangle-skew-spin.la-dark{color:#333}.la-triangle-skew-spin>div{background-color:currentColor;border:0 solid;display:inline-block;float:none}.la-triangle-skew-spin{height:16px;width:32px}.la-triangle-skew-spin>div{-webkit-animation:triangle-skew-spin 3s cubic-bezier(.09,.57,.49,.9) 0s infinite;animation:triangle-skew-spin 3s cubic-bezier(.09,.57,.49,.9) 0s infinite;background:transparent;border-color:currentcolor transparent;border-left:none;border-right:none;border-style:solid;border-width:0 16px 16px;height:0;width:0}.la-triangle-skew-spin.la-sm{height:8px;width:16px}.la-triangle-skew-spin.la-sm>div{border-width:0 8px 8px}.la-triangle-skew-spin.la-2x{height:32px;width:64px}.la-triangle-skew-spin.la-2x>div{border-width:0 32px 32px}.la-triangle-skew-spin.la-3x{height:48px;width:96px}.la-triangle-skew-spin.la-3x>div{border-width:0 48px 48px}@-webkit-keyframes triangle-skew-spin{0%{transform:perspective(100px) rotateX(0) rotateY(0)}25%{transform:perspective(100px) rotateX(180deg) rotateY(0)}50%{transform:perspective(100px) rotateX(180deg) rotateY(180deg)}75%{transform:perspective(100px) rotateX(0) rotateY(180deg)}to{transform:perspective(100px) rotateX(0) rotateY(1turn)}}@keyframes triangle-skew-spin{0%{transform:perspective(100px) rotateX(0) rotateY(0)}25%{transform:perspective(100px) rotateX(180deg) rotateY(0)}50%{transform:perspective(100px) rotateX(180deg) rotateY(180deg)}75%{transform:perspective(100px) rotateX(0) rotateY(180deg)}to{transform:perspective(100px) rotateX(0) rotateY(1turn)}}.overlay{height:100%;left:0;position:fixed;top:0;width:100%}.overlay>div:not(.loading-text){left:50%;margin:0;position:absolute;top:50%;transform:translate(-50%,-50%)}.loading-text{left:50%;position:absolute;top:60%;transform:translate(-50%,-60%)}"]
- }]
- }], function () { return [{ type: NgxSpinnerService }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }]; }, { bdColor: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], zIndex: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], color: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], type: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], size: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], fullScreen: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], name: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], template: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class SafeHtmlPipe {
- constructor(_sanitizer) {
- this._sanitizer = _sanitizer;
- }
- transform(v) {
- if (v) {
- return this._sanitizer.bypassSecurityTrustHtml(v);
- }
- }
- }
- SafeHtmlPipe.ɵfac = function SafeHtmlPipe_Factory(t) { return new (t || SafeHtmlPipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_platform_browser__WEBPACK_IMPORTED_MODULE_5__["DomSanitizer"])); };
- SafeHtmlPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ name: "safeHtml", type: SafeHtmlPipe, pure: true });
- SafeHtmlPipe.ctorParameters = () => [
- { type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_5__["DomSanitizer"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](SafeHtmlPipe, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
- args: [{
- name: 'safeHtml'
- }]
- }], function () { return [{ type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_5__["DomSanitizer"] }]; }, null); })();
- class NgxSpinnerModule {
- }
- NgxSpinnerModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgxSpinnerModule });
- NgxSpinnerModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgxSpinnerModule_Factory(t) { return new (t || NgxSpinnerModule)(); }, imports: [[
- _angular_common__WEBPACK_IMPORTED_MODULE_4__["CommonModule"]
- ]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgxSpinnerModule, { declarations: function () { return [NgxSpinnerComponent, SafeHtmlPipe]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_4__["CommonModule"]]; }, exports: function () { return [NgxSpinnerComponent]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgxSpinnerModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- imports: [
- _angular_common__WEBPACK_IMPORTED_MODULE_4__["CommonModule"]
- ],
- declarations: [NgxSpinnerComponent, SafeHtmlPipe],
- exports: [NgxSpinnerComponent]
- }]
- }], null, null); })();
- /*
- * Public API Surface of ngx-spinner
- */
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=ngx-spinner.js.map
- /***/ }),
- /***/ "K7De":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/findIndex.js ***!
- \********************************************************************/
- /*! exports provided: findIndex */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findIndex", function() { return findIndex; });
- /* harmony import */ var _operators_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../operators/find */ "cBqT");
- function findIndex(predicate, thisArg) {
- return (source) => source.lift(new _operators_find__WEBPACK_IMPORTED_MODULE_0__["FindValueOperator"](predicate, source, true, thisArg));
- }
- //# sourceMappingURL=findIndex.js.map
- /***/ }),
- /***/ "KXWd":
- /*!********************************************************************************************************!*\
- !*** ./node_modules/ng2-handy-syntax-highlighter/__ivy_ngcc__/esm2015/ng2-handy-syntax-highlighter.js ***!
- \********************************************************************************************************/
- /*! exports provided: Ng2HandySyntaxHighlighterModule, ɵb, ɵa */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Ng2HandySyntaxHighlighterModule", function() { return Ng2HandySyntaxHighlighterModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵb", function() { return HandySyntaxHighlighterComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵa", function() { return HighlighterDirective; });
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes} checked by tsc
- */
- class HighlighterDirective {
- /**
- * @param {?} eltRef
- */
- constructor(eltRef) {
- this.eltRef = eltRef;
- }
- /**
- * @return {?}
- */
- ngAfterViewInit() {
- this.eltRef.nativeElement.innerHTML = Prism.highlight(this.content, Prism.languages[this.language]);
- }
- }
- HighlighterDirective.ɵfac = function HighlighterDirective_Factory(t) { return new (t || HighlighterDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- HighlighterDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: HighlighterDirective, selectors: [["", "highlighter", ""]], inputs: { language: "language", content: "content" } });
- /** @nocollapse */
- HighlighterDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], },
- ];
- HighlighterDirective.propDecorators = {
- "language": [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] },],
- "content": [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] },],
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HighlighterDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[highlighter]'
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, { language: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], content: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes} checked by tsc
- */
- class HandySyntaxHighlighterComponent {
- }
- HandySyntaxHighlighterComponent.ɵfac = function HandySyntaxHighlighterComponent_Factory(t) { return new (t || HandySyntaxHighlighterComponent)(); };
- HandySyntaxHighlighterComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: HandySyntaxHighlighterComponent, selectors: [["handy-syntax-highlighter"]], inputs: { language: "language", content: "content" }, decls: 4, vars: 5, consts: [["highlighter", "", 3, "language", "content"]], template: function HandySyntaxHighlighterComponent_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "pre");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1, " ");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "code", 0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](3, "\n ");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMapInterpolate1"]("language-", ctx.language, "");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("language", ctx.language)("content", ctx.content);
- } }, directives: [HighlighterDirective], styles: [".tag[_ngcontent-%COMP%]{font-size:14px!important;padding:0!important}.h1-top[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:#1f2021}pre[_ngcontent-%COMP%]{font-size:14px!important;line-height:1.4!important;padding-bottom:0!important}"] });
- /** @nocollapse */
- HandySyntaxHighlighterComponent.ctorParameters = () => [];
- HandySyntaxHighlighterComponent.propDecorators = {
- "language": [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] },],
- "content": [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] },],
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HandySyntaxHighlighterComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'handy-syntax-highlighter',
- styles: [`.tag{font-size:14px!important;padding:0!important}.h1-top a{color:#1f2021}pre{font-size:14px!important;line-height:1.4!important;padding-bottom:0!important}`],
- template: `
- <pre class="language-{{language}}">
- <code highlighter [language]="language" [content]="content"></code>
- </pre>
- `
- }]
- }], null, { language: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], content: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes} checked by tsc
- */
- class Ng2HandySyntaxHighlighterModule {
- }
- Ng2HandySyntaxHighlighterModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: Ng2HandySyntaxHighlighterModule });
- Ng2HandySyntaxHighlighterModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function Ng2HandySyntaxHighlighterModule_Factory(t) { return new (t || Ng2HandySyntaxHighlighterModule)(); } });
- /** @nocollapse */
- Ng2HandySyntaxHighlighterModule.ctorParameters = () => [];
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](Ng2HandySyntaxHighlighterModule, { declarations: [HighlighterDirective, HandySyntaxHighlighterComponent], exports: [HandySyntaxHighlighterComponent] }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Ng2HandySyntaxHighlighterModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- declarations: [HighlighterDirective, HandySyntaxHighlighterComponent],
- exports: [HandySyntaxHighlighterComponent]
- }]
- }], null, null); })();
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes} checked by tsc
- */
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes} checked by tsc
- */
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=ng2-handy-syntax-highlighter.js.map
- /***/ }),
- /***/ "Kj3r":
- /*!***********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/debounceTime.js ***!
- \***********************************************************************/
- /*! exports provided: debounceTime */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "debounceTime", function() { return debounceTime; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../scheduler/async */ "D0XW");
- function debounceTime(dueTime, scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"]) {
- return (source) => source.lift(new DebounceTimeOperator(dueTime, scheduler));
- }
- class DebounceTimeOperator {
- constructor(dueTime, scheduler) {
- this.dueTime = dueTime;
- this.scheduler = scheduler;
- }
- call(subscriber, source) {
- return source.subscribe(new DebounceTimeSubscriber(subscriber, this.dueTime, this.scheduler));
- }
- }
- class DebounceTimeSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, dueTime, scheduler) {
- super(destination);
- this.dueTime = dueTime;
- this.scheduler = scheduler;
- this.debouncedSubscription = null;
- this.lastValue = null;
- this.hasValue = false;
- }
- _next(value) {
- this.clearDebounce();
- this.lastValue = value;
- this.hasValue = true;
- this.add(this.debouncedSubscription = this.scheduler.schedule(dispatchNext, this.dueTime, this));
- }
- _complete() {
- this.debouncedNext();
- this.destination.complete();
- }
- debouncedNext() {
- this.clearDebounce();
- if (this.hasValue) {
- const { lastValue } = this;
- this.lastValue = null;
- this.hasValue = false;
- this.destination.next(lastValue);
- }
- }
- clearDebounce() {
- const debouncedSubscription = this.debouncedSubscription;
- if (debouncedSubscription !== null) {
- this.remove(debouncedSubscription);
- debouncedSubscription.unsubscribe();
- this.debouncedSubscription = null;
- }
- }
- }
- function dispatchNext(subscriber) {
- subscriber.debouncedNext();
- }
- //# sourceMappingURL=debounceTime.js.map
- /***/ }),
- /***/ "Kqap":
- /*!***************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/scan.js ***!
- \***************************************************************/
- /*! exports provided: scan */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scan", function() { return scan; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function scan(accumulator, seed) {
- let hasSeed = false;
- if (arguments.length >= 2) {
- hasSeed = true;
- }
- return function scanOperatorFunction(source) {
- return source.lift(new ScanOperator(accumulator, seed, hasSeed));
- };
- }
- class ScanOperator {
- constructor(accumulator, seed, hasSeed = false) {
- this.accumulator = accumulator;
- this.seed = seed;
- this.hasSeed = hasSeed;
- }
- call(subscriber, source) {
- return source.subscribe(new ScanSubscriber(subscriber, this.accumulator, this.seed, this.hasSeed));
- }
- }
- class ScanSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, accumulator, _seed, hasSeed) {
- super(destination);
- this.accumulator = accumulator;
- this._seed = _seed;
- this.hasSeed = hasSeed;
- this.index = 0;
- }
- get seed() {
- return this._seed;
- }
- set seed(value) {
- this.hasSeed = true;
- this._seed = value;
- }
- _next(value) {
- if (!this.hasSeed) {
- this.seed = value;
- this.destination.next(value);
- }
- else {
- return this._tryNext(value);
- }
- }
- _tryNext(value) {
- const index = this.index++;
- let result;
- try {
- result = this.accumulator(this.seed, value, index);
- }
- catch (err) {
- this.destination.error(err);
- }
- this.seed = result;
- this.destination.next(result);
- }
- }
- //# sourceMappingURL=scan.js.map
- /***/ }),
- /***/ "KqfI":
- /*!**********************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/noop.js ***!
- \**********************************************************/
- /*! exports provided: noop */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "noop", function() { return noop; });
- function noop() { }
- //# sourceMappingURL=noop.js.map
- /***/ }),
- /***/ "LRne":
- /*!**************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/of.js ***!
- \**************************************************************/
- /*! exports provided: of */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "of", function() { return of; });
- /* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/isScheduler */ "z+Ro");
- /* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fromArray */ "yCtX");
- /* harmony import */ var _scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../scheduled/scheduleArray */ "jZKg");
- function of(...args) {
- let scheduler = args[args.length - 1];
- if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__["isScheduler"])(scheduler)) {
- args.pop();
- return Object(_scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__["scheduleArray"])(args, scheduler);
- }
- else {
- return Object(_fromArray__WEBPACK_IMPORTED_MODULE_1__["fromArray"])(args);
- }
- }
- //# sourceMappingURL=of.js.map
- /***/ }),
- /***/ "Lhse":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/symbol/iterator.js ***!
- \****************************************************************/
- /*! exports provided: getSymbolIterator, iterator, $$iterator */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSymbolIterator", function() { return getSymbolIterator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "iterator", function() { return iterator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$$iterator", function() { return $$iterator; });
- function getSymbolIterator() {
- if (typeof Symbol !== 'function' || !Symbol.iterator) {
- return '@@iterator';
- }
- return Symbol.iterator;
- }
- const iterator = getSymbolIterator();
- const $$iterator = iterator;
- //# sourceMappingURL=iterator.js.map
- /***/ }),
- /***/ "Ljk9":
- /*!***********************************************************************************!*\
- !*** ./node_modules/angular-gridster2/__ivy_ngcc__/fesm2015/angular-gridster2.js ***!
- \***********************************************************************************/
- /*! exports provided: CompactType, DirTypes, DisplayGrid, GridType, GridsterComponent, GridsterComponentInterface, GridsterConfigService, GridsterItemComponent, GridsterItemComponentInterface, GridsterModule, GridsterPush, GridsterPushResize, GridsterSwap, ɵa */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompactType", function() { return CompactType; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DirTypes", function() { return DirTypes; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DisplayGrid", function() { return DisplayGrid; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GridType", function() { return GridType; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GridsterComponent", function() { return GridsterComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GridsterComponentInterface", function() { return GridsterComponentInterface; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GridsterConfigService", function() { return GridsterConfigService; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GridsterItemComponent", function() { return GridsterItemComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GridsterItemComponentInterface", function() { return GridsterItemComponentInterface; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GridsterModule", function() { return GridsterModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GridsterPush", function() { return GridsterPush; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GridsterPushResize", function() { return GridsterPushResize; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GridsterSwap", function() { return GridsterSwap; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵa", function() { return GridsterPreviewComponent; });
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ "ofXK");
- function GridsterComponent_div_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 3);
- } if (rf & 2) {
- const i_r3 = ctx.index;
- const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngStyle", ctx_r0.gridRenderer.getGridColumnStyle(i_r3));
- } }
- function GridsterComponent_div_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 4);
- } if (rf & 2) {
- const i_r5 = ctx.index;
- const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngStyle", ctx_r1.gridRenderer.getGridRowStyle(i_r5));
- } }
- const _c0 = ["*"];
- function GridsterItemComponent_div_1_Template(rf, ctx) { if (rf & 1) {
- const _r9 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 8);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mousedown", function GridsterItemComponent_div_1_Template_div_mousedown_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r9); const ctx_r8 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r8.resize.dragStartDelay($event); })("touchstart", function GridsterItemComponent_div_1_Template_div_touchstart_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r9); const ctx_r10 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r10.resize.dragStartDelay($event); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }
- function GridsterItemComponent_div_2_Template(rf, ctx) { if (rf & 1) {
- const _r12 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 9);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mousedown", function GridsterItemComponent_div_2_Template_div_mousedown_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r12); const ctx_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r11.resize.dragStartDelay($event); })("touchstart", function GridsterItemComponent_div_2_Template_div_touchstart_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r12); const ctx_r13 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r13.resize.dragStartDelay($event); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }
- function GridsterItemComponent_div_3_Template(rf, ctx) { if (rf & 1) {
- const _r15 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 10);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mousedown", function GridsterItemComponent_div_3_Template_div_mousedown_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r15); const ctx_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r14.resize.dragStartDelay($event); })("touchstart", function GridsterItemComponent_div_3_Template_div_touchstart_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r15); const ctx_r16 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r16.resize.dragStartDelay($event); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }
- function GridsterItemComponent_div_4_Template(rf, ctx) { if (rf & 1) {
- const _r18 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 11);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mousedown", function GridsterItemComponent_div_4_Template_div_mousedown_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r18); const ctx_r17 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r17.resize.dragStartDelay($event); })("touchstart", function GridsterItemComponent_div_4_Template_div_touchstart_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r18); const ctx_r19 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r19.resize.dragStartDelay($event); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }
- function GridsterItemComponent_div_5_Template(rf, ctx) { if (rf & 1) {
- const _r21 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 12);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mousedown", function GridsterItemComponent_div_5_Template_div_mousedown_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r21); const ctx_r20 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r20.resize.dragStartDelay($event); })("touchstart", function GridsterItemComponent_div_5_Template_div_touchstart_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r21); const ctx_r22 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r22.resize.dragStartDelay($event); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }
- function GridsterItemComponent_div_6_Template(rf, ctx) { if (rf & 1) {
- const _r24 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 13);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mousedown", function GridsterItemComponent_div_6_Template_div_mousedown_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r24); const ctx_r23 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r23.resize.dragStartDelay($event); })("touchstart", function GridsterItemComponent_div_6_Template_div_touchstart_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r24); const ctx_r25 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r25.resize.dragStartDelay($event); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }
- function GridsterItemComponent_div_7_Template(rf, ctx) { if (rf & 1) {
- const _r27 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 14);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mousedown", function GridsterItemComponent_div_7_Template_div_mousedown_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r27); const ctx_r26 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r26.resize.dragStartDelay($event); })("touchstart", function GridsterItemComponent_div_7_Template_div_touchstart_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r27); const ctx_r28 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r28.resize.dragStartDelay($event); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }
- function GridsterItemComponent_div_8_Template(rf, ctx) { if (rf & 1) {
- const _r30 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 15);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mousedown", function GridsterItemComponent_div_8_Template_div_mousedown_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r30); const ctx_r29 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r29.resize.dragStartDelay($event); })("touchstart", function GridsterItemComponent_div_8_Template_div_touchstart_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r30); const ctx_r31 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r31.resize.dragStartDelay($event); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } }
- class GridsterComponentInterface {
- }
- var GridType;
- (function (GridType) {
- GridType["Fit"] = "fit";
- GridType["ScrollVertical"] = "scrollVertical";
- GridType["ScrollHorizontal"] = "scrollHorizontal";
- GridType["Fixed"] = "fixed";
- GridType["VerticalFixed"] = "verticalFixed";
- GridType["HorizontalFixed"] = "horizontalFixed";
- })(GridType || (GridType = {}));
- var DisplayGrid;
- (function (DisplayGrid) {
- DisplayGrid["Always"] = "always";
- DisplayGrid["OnDragAndResize"] = "onDrag&Resize";
- DisplayGrid["None"] = "none";
- })(DisplayGrid || (DisplayGrid = {}));
- var CompactType;
- (function (CompactType) {
- CompactType["None"] = "none";
- CompactType["CompactUp"] = "compactUp";
- CompactType["CompactLeft"] = "compactLeft";
- CompactType["CompactUpAndLeft"] = "compactUp&Left";
- CompactType["CompactLeftAndUp"] = "compactLeft&Up";
- CompactType["CompactRight"] = "compactRight";
- CompactType["CompactUpAndRight"] = "compactUp&Right";
- CompactType["CompactRightAndUp"] = "compactRight&Up";
- })(CompactType || (CompactType = {}));
- var DirTypes;
- (function (DirTypes) {
- DirTypes["LTR"] = "ltr";
- DirTypes["RTL"] = "rtl";
- })(DirTypes || (DirTypes = {}));
- class GridsterCompact {
- constructor(gridster) {
- this.gridster = gridster;
- }
- destroy() {
- // @ts-ignore
- delete this.gridster;
- }
- checkCompact() {
- if (this.gridster.$options.compactType !== CompactType.None) {
- if (this.gridster.$options.compactType === CompactType.CompactUp) {
- this.checkCompactUp();
- }
- else if (this.gridster.$options.compactType === CompactType.CompactLeft) {
- this.checkCompactLeft();
- }
- else if (this.gridster.$options.compactType === CompactType.CompactUpAndLeft) {
- this.checkCompactUp();
- this.checkCompactLeft();
- }
- else if (this.gridster.$options.compactType === CompactType.CompactLeftAndUp) {
- this.checkCompactLeft();
- this.checkCompactUp();
- }
- else if (this.gridster.$options.compactType === CompactType.CompactRight) {
- this.checkCompactRight();
- }
- else if (this.gridster.$options.compactType === CompactType.CompactUpAndRight) {
- this.checkCompactUp();
- this.checkCompactRight();
- }
- else if (this.gridster.$options.compactType === CompactType.CompactRightAndUp) {
- this.checkCompactRight();
- this.checkCompactUp();
- }
- }
- }
- checkCompactItem(item) {
- if (this.gridster.$options.compactType !== CompactType.None) {
- if (this.gridster.$options.compactType === CompactType.CompactUp) {
- this.moveUpTillCollision(item);
- }
- else if (this.gridster.$options.compactType === CompactType.CompactLeft) {
- this.moveLeftTillCollision(item);
- }
- else if (this.gridster.$options.compactType === CompactType.CompactUpAndLeft) {
- this.moveUpTillCollision(item);
- this.moveLeftTillCollision(item);
- }
- else if (this.gridster.$options.compactType === CompactType.CompactLeftAndUp) {
- this.moveLeftTillCollision(item);
- this.moveUpTillCollision(item);
- }
- else if (this.gridster.$options.compactType === CompactType.CompactUpAndRight) {
- this.moveUpTillCollision(item);
- this.moveRightTillCollision(item);
- }
- }
- }
- checkCompactUp() {
- let widgetMovedUp = false;
- let widget;
- let moved;
- const l = this.gridster.grid.length;
- for (let i = 0; i < l; i++) {
- widget = this.gridster.grid[i];
- if (widget.$item.compactEnabled === false) {
- continue;
- }
- moved = this.moveUpTillCollision(widget.$item);
- if (moved) {
- widgetMovedUp = true;
- widget.item.y = widget.$item.y;
- widget.itemChanged();
- }
- }
- if (widgetMovedUp) {
- this.checkCompact();
- }
- }
- moveUpTillCollision(item) {
- item.y -= 1;
- if (this.gridster.checkCollision(item)) {
- item.y += 1;
- return false;
- }
- else {
- this.moveUpTillCollision(item);
- return true;
- }
- }
- checkCompactLeft() {
- let widgetMovedUp = false;
- let widget;
- let moved;
- const l = this.gridster.grid.length;
- for (let i = 0; i < l; i++) {
- widget = this.gridster.grid[i];
- if (widget.$item.compactEnabled === false) {
- continue;
- }
- moved = this.moveLeftTillCollision(widget.$item);
- if (moved) {
- widgetMovedUp = true;
- widget.item.x = widget.$item.x;
- widget.itemChanged();
- }
- }
- if (widgetMovedUp) {
- this.checkCompact();
- }
- }
- checkCompactRight() {
- let widgetMovedUp = false;
- let widget;
- let moved;
- const l = this.gridster.grid.length;
- for (let i = 0; i < l; i++) {
- widget = this.gridster.grid[i];
- if (widget.$item.compactEnabled === false) {
- continue;
- }
- moved = this.moveRightTillCollision(widget.$item);
- if (moved) {
- widgetMovedUp = true;
- widget.item.x = widget.$item.x;
- widget.itemChanged();
- }
- }
- if (widgetMovedUp) {
- this.checkCompact();
- }
- }
- moveLeftTillCollision(item) {
- item.x -= 1;
- if (this.gridster.checkCollision(item)) {
- item.x += 1;
- return false;
- }
- else {
- this.moveLeftTillCollision(item);
- return true;
- }
- }
- moveRightTillCollision(item) {
- item.x += 1;
- if (this.gridster.checkCollision(item)) {
- item.x -= 1;
- return false;
- }
- else {
- this.moveRightTillCollision(item);
- return true;
- }
- }
- }
- GridsterCompact.ɵfac = function GridsterCompact_Factory(t) { return new (t || GridsterCompact)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](GridsterComponentInterface)); };
- GridsterCompact.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: GridsterCompact, factory: GridsterCompact.ɵfac });
- GridsterCompact.ctorParameters = () => [
- { type: GridsterComponentInterface }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](GridsterCompact, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: GridsterComponentInterface }]; }, null); })();
- const GridsterConfigService = {
- gridType: GridType.Fit,
- scale: 1,
- // 'scrollVertical' will fit on width and height of the items will be the same as the width
- // 'scrollHorizontal' will fit on height and width of the items will be the same as the height
- // 'fixed' will set the rows and columns dimensions based on fixedColWidth and fixedRowHeight options
- // 'verticalFixed' will set the rows to fixedRowHeight and columns width will fit the space available
- // 'horizontalFixed' will set the columns to fixedColWidth and rows height will fit the space available
- fixedColWidth: 250,
- fixedRowHeight: 250,
- keepFixedHeightInMobile: false,
- keepFixedWidthInMobile: false,
- setGridSize: false,
- compactType: CompactType.None,
- mobileBreakpoint: 640,
- allowMultiLayer: false,
- defaultLayerIndex: 0,
- maxLayerIndex: 2,
- baseLayerIndex: 1,
- minCols: 1,
- maxCols: 100,
- minRows: 1,
- maxRows: 100,
- defaultItemCols: 1,
- defaultItemRows: 1,
- maxItemCols: 50,
- maxItemRows: 50,
- minItemCols: 1,
- minItemRows: 1,
- minItemArea: 1,
- maxItemArea: 2500,
- margin: 10,
- outerMargin: true,
- outerMarginTop: null,
- outerMarginRight: null,
- outerMarginBottom: null,
- outerMarginLeft: null,
- useTransformPositioning: true,
- scrollSensitivity: 10,
- scrollSpeed: 20,
- initCallback: undefined,
- destroyCallback: undefined,
- gridSizeChangedCallback: undefined,
- itemChangeCallback: undefined,
- // Arguments: gridsterItem, gridsterItemComponent
- itemResizeCallback: undefined,
- // Arguments: gridsterItem, gridsterItemComponent
- itemInitCallback: undefined,
- // Arguments: gridsterItem, gridsterItemComponent
- itemRemovedCallback: undefined,
- // Arguments: gridsterItem, gridsterItemComponent
- itemValidateCallback: undefined,
- // Arguments: gridsterItem
- enableEmptyCellClick: false,
- enableEmptyCellContextMenu: false,
- enableEmptyCellDrop: false,
- enableEmptyCellDrag: false,
- enableOccupiedCellDrop: false,
- emptyCellClickCallback: undefined,
- emptyCellContextMenuCallback: undefined,
- emptyCellDropCallback: undefined,
- emptyCellDragCallback: undefined,
- emptyCellDragMaxCols: 50,
- emptyCellDragMaxRows: 50,
- // Arguments: event, gridsterItem{x, y, rows: defaultItemRows, cols: defaultItemCols}
- ignoreMarginInRow: false,
- draggable: {
- delayStart: 0,
- enabled: false,
- ignoreContentClass: 'gridster-item-content',
- ignoreContent: false,
- dragHandleClass: 'drag-handler',
- stop: undefined,
- start: undefined,
- // Arguments: item, gridsterItem, event
- dropOverItems: false,
- dropOverItemsCallback: undefined // callback on drop over another item
- // Arguments: source, target, gridComponent
- },
- resizable: {
- delayStart: 0,
- enabled: false,
- handles: {
- s: true,
- e: true,
- n: true,
- w: true,
- se: true,
- ne: true,
- sw: true,
- nw: true
- },
- stop: undefined,
- start: undefined // callback when resizing an item starts.
- // Arguments: item, gridsterItem, event
- },
- swap: true,
- swapWhileDragging: false,
- pushItems: false,
- disablePushOnDrag: false,
- disablePushOnResize: false,
- pushDirections: { north: true, east: true, south: true, west: true },
- pushResizeItems: false,
- displayGrid: DisplayGrid.OnDragAndResize,
- disableWindowResize: false,
- disableWarnings: false,
- scrollToNewItems: false,
- disableScrollHorizontal: false,
- disableScrollVertical: false,
- disableAutoPositionOnConflict: false,
- dirType: DirTypes.LTR,
- };
- class GridsterUtils {
- // tslint:disable-next-line:no-any
- static merge(obj1, obj2, properties) {
- for (const p in obj2) {
- if (obj2[p] !== void 0 && properties.hasOwnProperty(p)) {
- if (typeof obj2[p] === 'object') {
- obj1[p] = GridsterUtils.merge(obj1[p], obj2[p], properties[p]);
- }
- else {
- obj1[p] = obj2[p];
- }
- }
- }
- return obj1;
- }
- static debounce(func, wait) {
- let timeout;
- return function () {
- const context = this;
- const args = arguments;
- const later = () => {
- timeout = undefined;
- func.apply(context, args);
- };
- clearTimeout(timeout);
- timeout = setTimeout(later, wait);
- };
- }
- // tslint:disable-next-line:no-any
- static checkTouchEvent(e) {
- if (e.clientX === undefined && e.touches) {
- if (e.touches && e.touches.length) {
- e.clientX = e.touches[0].clientX;
- e.clientY = e.touches[0].clientY;
- }
- else if (e.changedTouches && e.changedTouches.length) {
- e.clientX = e.changedTouches[0].clientX;
- e.clientY = e.changedTouches[0].clientY;
- }
- }
- }
- static checkContentClassForEvent(gridster, e) {
- if (gridster.$options.draggable.ignoreContent) {
- if (!GridsterUtils.checkDragHandleClass(e.target, e.currentTarget, gridster.$options.draggable.dragHandleClass, gridster.$options.draggable.ignoreContentClass)) {
- return true;
- }
- }
- else {
- if (GridsterUtils.checkContentClass(e.target, e.currentTarget, gridster.$options.draggable.ignoreContentClass)) {
- return true;
- }
- }
- return false;
- }
- static checkContentClassForEmptyCellClickEvent(gridster, e) {
- return GridsterUtils.checkContentClass(e.target, e.currentTarget, gridster.$options.draggable.ignoreContentClass)
- || GridsterUtils.checkContentClass(e.target, e.currentTarget, gridster.$options.draggable.dragHandleClass);
- }
- static checkDragHandleClass(target, current, dragHandleClass, ignoreContentClass) {
- if (!target || target === current) {
- return false;
- }
- if (target.hasAttribute('class')) {
- // @ts-ignore
- const classnames = target.getAttribute('class').split(' ');
- if (classnames.indexOf(dragHandleClass) > -1) {
- return true;
- }
- if (classnames.indexOf(ignoreContentClass) > -1) {
- return false;
- }
- }
- // @ts-ignore
- return GridsterUtils.checkDragHandleClass(target.parentNode, current, dragHandleClass, ignoreContentClass);
- }
- static checkContentClass(target, current, contentClass) {
- if (!target || target === current) {
- return false;
- }
- // @ts-ignore
- if (target.hasAttribute('class') && target.getAttribute('class').split(' ').indexOf(contentClass) > -1) {
- return true;
- }
- else {
- // @ts-ignore
- return GridsterUtils.checkContentClass(target.parentNode, current, contentClass);
- }
- }
- static compareItems(a, b) {
- if (a.y > b.y) {
- return -1;
- }
- else if (a.y < b.y) {
- return 1;
- }
- else if (a.x > b.x) {
- return -1;
- }
- else {
- return 1;
- }
- }
- }
- GridsterUtils.ɵfac = function GridsterUtils_Factory(t) { return new (t || GridsterUtils)(); };
- GridsterUtils.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: GridsterUtils, factory: GridsterUtils.ɵfac });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](GridsterUtils, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- class GridsterEmptyCell {
- constructor(gridster) {
- this.gridster = gridster;
- }
- destroy() {
- // @ts-ignore
- delete this.initialItem;
- // @ts-ignore
- delete this.gridster.movingItem;
- if (this.gridster.previewStyle) {
- this.gridster.previewStyle();
- }
- // @ts-ignore
- delete this.gridster;
- if (this.emptyCellExit) {
- this.emptyCellExit();
- this.emptyCellExit = null;
- }
- }
- updateOptions() {
- if (this.gridster.$options.enableEmptyCellClick && !this.emptyCellClick && this.gridster.options.emptyCellClickCallback) {
- this.emptyCellClick = this.gridster.renderer.listen(this.gridster.el, 'click', this.emptyCellClickCb.bind(this));
- this.emptyCellClickTouch = this.gridster.renderer.listen(this.gridster.el, 'touchend', this.emptyCellClickCb.bind(this));
- }
- else if (!this.gridster.$options.enableEmptyCellClick && this.emptyCellClick && this.emptyCellClickTouch) {
- this.emptyCellClick();
- this.emptyCellClickTouch();
- this.emptyCellClick = null;
- this.emptyCellClickTouch = null;
- }
- if (this.gridster.$options.enableEmptyCellContextMenu && !this.emptyCellContextMenu &&
- this.gridster.options.emptyCellContextMenuCallback) {
- this.emptyCellContextMenu = this.gridster.renderer.listen(this.gridster.el, 'contextmenu', this.emptyCellContextMenuCb.bind(this));
- }
- else if (!this.gridster.$options.enableEmptyCellContextMenu && this.emptyCellContextMenu) {
- this.emptyCellContextMenu();
- this.emptyCellContextMenu = null;
- }
- if (this.gridster.$options.enableEmptyCellDrop && !this.emptyCellDrop && this.gridster.options.emptyCellDropCallback) {
- this.emptyCellDrop = this.gridster.renderer.listen(this.gridster.el, 'drop', this.emptyCellDragDrop.bind(this));
- this.gridster.zone.runOutsideAngular(() => {
- this.emptyCellMove = this.gridster.renderer.listen(this.gridster.el, 'dragover', this.emptyCellDragOver.bind(this));
- });
- this.emptyCellExit = this.gridster.renderer.listen('document', 'dragend', () => {
- this.gridster.movingItem = null;
- this.gridster.previewStyle();
- });
- }
- else if (!this.gridster.$options.enableEmptyCellDrop && this.emptyCellDrop && this.emptyCellMove && this.emptyCellExit) {
- this.emptyCellDrop();
- this.emptyCellMove();
- this.emptyCellExit();
- this.emptyCellMove = null;
- this.emptyCellDrop = null;
- this.emptyCellExit = null;
- }
- if (this.gridster.$options.enableEmptyCellDrag && !this.emptyCellDrag && this.gridster.options.emptyCellDragCallback) {
- this.emptyCellDrag = this.gridster.renderer.listen(this.gridster.el, 'mousedown', this.emptyCellMouseDown.bind(this));
- this.emptyCellDragTouch = this.gridster.renderer.listen(this.gridster.el, 'touchstart', this.emptyCellMouseDown.bind(this));
- }
- else if (!this.gridster.$options.enableEmptyCellDrag && this.emptyCellDrag && this.emptyCellDragTouch) {
- this.emptyCellDrag();
- this.emptyCellDragTouch();
- this.emptyCellDrag = null;
- this.emptyCellDragTouch = null;
- }
- }
- emptyCellClickCb(e) {
- if (this.gridster.movingItem || GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)) {
- return;
- }
- const item = this.getValidItemFromEvent(e);
- if (!item) {
- return;
- }
- if (this.gridster.options.emptyCellClickCallback) {
- this.gridster.options.emptyCellClickCallback(e, item);
- }
- this.gridster.cdRef.markForCheck();
- }
- emptyCellContextMenuCb(e) {
- if (this.gridster.movingItem || GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)) {
- return;
- }
- e.preventDefault();
- e.stopPropagation();
- const item = this.getValidItemFromEvent(e);
- if (!item) {
- return;
- }
- if (this.gridster.options.emptyCellContextMenuCallback) {
- this.gridster.options.emptyCellContextMenuCallback(e, item);
- }
- this.gridster.cdRef.markForCheck();
- }
- emptyCellDragDrop(e) {
- const item = this.getValidItemFromEvent(e);
- if (!item) {
- return;
- }
- if (this.gridster.options.emptyCellDropCallback) {
- this.gridster.options.emptyCellDropCallback(e, item);
- }
- this.gridster.cdRef.markForCheck();
- }
- emptyCellDragOver(e) {
- e.preventDefault();
- e.stopPropagation();
- const item = this.getValidItemFromEvent(e);
- if (item) {
- if (e.dataTransfer) {
- e.dataTransfer.dropEffect = 'move';
- }
- this.gridster.movingItem = item;
- }
- else {
- if (e.dataTransfer) {
- e.dataTransfer.dropEffect = 'none';
- }
- this.gridster.movingItem = null;
- }
- this.gridster.previewStyle();
- }
- emptyCellMouseDown(e) {
- if (GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)) {
- return;
- }
- e.preventDefault();
- e.stopPropagation();
- const item = this.getValidItemFromEvent(e);
- const leftMouseButtonCode = 1;
- if (!item || e.buttons !== leftMouseButtonCode) {
- return;
- }
- this.initialItem = item;
- this.gridster.movingItem = item;
- this.gridster.previewStyle();
- this.gridster.zone.runOutsideAngular(() => {
- this.emptyCellMMove = this.gridster.renderer.listen('window', 'mousemove', this.emptyCellMouseMove.bind(this));
- this.emptyCellMMoveTouch = this.gridster.renderer.listen('window', 'touchmove', this.emptyCellMouseMove.bind(this));
- });
- this.emptyCellUp = this.gridster.renderer.listen('window', 'mouseup', this.emptyCellMouseUp.bind(this));
- this.emptyCellUpTouch = this.gridster.renderer.listen('window', 'touchend', this.emptyCellMouseUp.bind(this));
- }
- emptyCellMouseMove(e) {
- e.preventDefault();
- e.stopPropagation();
- const item = this.getValidItemFromEvent(e, this.initialItem);
- if (!item) {
- return;
- }
- this.gridster.movingItem = item;
- this.gridster.previewStyle();
- }
- emptyCellMouseUp(e) {
- this.emptyCellMMove();
- this.emptyCellMMoveTouch();
- this.emptyCellUp();
- this.emptyCellUpTouch();
- const item = this.getValidItemFromEvent(e, this.initialItem);
- if (item) {
- this.gridster.movingItem = item;
- }
- if (this.gridster.options.emptyCellDragCallback && this.gridster.movingItem) {
- this.gridster.options.emptyCellDragCallback(e, this.gridster.movingItem);
- }
- setTimeout(() => {
- this.initialItem = null;
- if (this.gridster) {
- this.gridster.movingItem = null;
- this.gridster.previewStyle();
- }
- });
- this.gridster.cdRef.markForCheck();
- }
- getPixelsX(e, rect) {
- const scale = this.gridster.options.scale;
- if (scale) {
- return (e.clientX - rect.left) / scale + this.gridster.el.scrollLeft - this.gridster.gridRenderer.getLeftMargin();
- }
- return e.clientX + this.gridster.el.scrollLeft - rect.left - this.gridster.gridRenderer.getLeftMargin();
- }
- getPixelsY(e, rect) {
- const scale = this.gridster.options.scale;
- if (scale) {
- return (e.clientY - rect.top) / scale + this.gridster.el.scrollTop - this.gridster.gridRenderer.getTopMargin();
- }
- return e.clientY + this.gridster.el.scrollTop - rect.top - this.gridster.gridRenderer.getTopMargin();
- }
- getValidItemFromEvent(e, oldItem) {
- e.preventDefault();
- e.stopPropagation();
- GridsterUtils.checkTouchEvent(e);
- const rect = this.gridster.el.getBoundingClientRect();
- const x = this.getPixelsX(e, rect);
- const y = this.getPixelsY(e, rect);
- const item = {
- x: this.gridster.pixelsToPositionX(x, Math.floor, true),
- y: this.gridster.pixelsToPositionY(y, Math.floor, true),
- cols: this.gridster.$options.defaultItemCols,
- rows: this.gridster.$options.defaultItemRows
- };
- if (oldItem) {
- item.cols = Math.min(Math.abs(oldItem.x - item.x) + 1, this.gridster.$options.emptyCellDragMaxCols);
- item.rows = Math.min(Math.abs(oldItem.y - item.y) + 1, this.gridster.$options.emptyCellDragMaxRows);
- if (oldItem.x < item.x) {
- item.x = oldItem.x;
- }
- else if (oldItem.x - item.x > this.gridster.$options.emptyCellDragMaxCols - 1) {
- item.x = this.gridster.movingItem ? this.gridster.movingItem.x : 0;
- }
- if (oldItem.y < item.y) {
- item.y = oldItem.y;
- }
- else if (oldItem.y - item.y > this.gridster.$options.emptyCellDragMaxRows - 1) {
- item.y = this.gridster.movingItem ? this.gridster.movingItem.y : 0;
- }
- }
- if (!this.gridster.$options.enableOccupiedCellDrop && this.gridster.checkCollision(item)) {
- return;
- }
- return item;
- }
- }
- GridsterEmptyCell.ɵfac = function GridsterEmptyCell_Factory(t) { return new (t || GridsterEmptyCell)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](GridsterComponentInterface)); };
- GridsterEmptyCell.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: GridsterEmptyCell, factory: GridsterEmptyCell.ɵfac });
- GridsterEmptyCell.ctorParameters = () => [
- { type: GridsterComponentInterface }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](GridsterEmptyCell, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: GridsterComponentInterface }]; }, null); })();
- class GridsterRenderer {
- constructor(gridster) {
- this.gridster = gridster;
- }
- destroy() {
- // @ts-ignore
- delete this.gridster;
- }
- updateItem(el, item, renderer) {
- if (this.gridster.mobile) {
- this.clearCellPosition(renderer, el);
- if (this.gridster.$options.keepFixedHeightInMobile) {
- renderer.setStyle(el, 'height', (item.rows * this.gridster.$options.fixedRowHeight) + 'px');
- }
- else {
- renderer.setStyle(el, 'height', (item.rows * this.gridster.curWidth / item.cols) + 'px');
- }
- if (this.gridster.$options.keepFixedWidthInMobile) {
- renderer.setStyle(el, 'width', this.gridster.$options.fixedColWidth + 'px');
- }
- else {
- renderer.setStyle(el, 'width', '');
- }
- renderer.setStyle(el, 'margin-bottom', this.gridster.$options.margin + 'px');
- renderer.setStyle(el, DirTypes.LTR ? 'margin-right' : 'margin-left', '');
- }
- else {
- const x = Math.round(this.gridster.curColWidth * item.x);
- const y = Math.round(this.gridster.curRowHeight * item.y);
- const width = this.gridster.curColWidth * item.cols - this.gridster.$options.margin;
- const height = (this.gridster.curRowHeight * item.rows - this.gridster.$options.margin);
- // set the cell style
- this.setCellPosition(renderer, el, x, y);
- renderer.setStyle(el, 'width', width + 'px');
- renderer.setStyle(el, 'height', height + 'px');
- let marginBottom = null;
- let marginRight = null;
- if (this.gridster.$options.outerMargin) {
- if (this.gridster.rows === item.rows + item.y) {
- if (this.gridster.$options.outerMarginBottom !== null) {
- marginBottom = this.gridster.$options.outerMarginBottom + 'px';
- }
- else {
- marginBottom = this.gridster.$options.margin + 'px';
- }
- }
- if (this.gridster.columns === item.cols + item.x) {
- if (this.gridster.$options.outerMarginBottom !== null) {
- marginRight = this.gridster.$options.outerMarginRight + 'px';
- }
- else {
- marginRight = this.gridster.$options.margin + 'px';
- }
- }
- }
- renderer.setStyle(el, 'margin-bottom', marginBottom);
- renderer.setStyle(el, DirTypes.LTR ? 'margin-right' : 'margin-left', marginRight);
- }
- }
- updateGridster() {
- let addClass = '';
- let removeClass1 = '';
- let removeClass2 = '';
- let removeClass3 = '';
- if (this.gridster.$options.gridType === GridType.Fit) {
- addClass = GridType.Fit;
- removeClass1 = GridType.ScrollVertical;
- removeClass2 = GridType.ScrollHorizontal;
- removeClass3 = GridType.Fixed;
- }
- else if (this.gridster.$options.gridType === GridType.ScrollVertical) {
- this.gridster.curRowHeight = this.gridster.curColWidth;
- addClass = GridType.ScrollVertical;
- removeClass1 = GridType.Fit;
- removeClass2 = GridType.ScrollHorizontal;
- removeClass3 = GridType.Fixed;
- }
- else if (this.gridster.$options.gridType === GridType.ScrollHorizontal) {
- this.gridster.curColWidth = this.gridster.curRowHeight;
- addClass = GridType.ScrollHorizontal;
- removeClass1 = GridType.Fit;
- removeClass2 = GridType.ScrollVertical;
- removeClass3 = GridType.Fixed;
- }
- else if (this.gridster.$options.gridType === GridType.Fixed) {
- this.gridster.curColWidth = this.gridster.$options.fixedColWidth +
- (this.gridster.$options.ignoreMarginInRow ? 0 : this.gridster.$options.margin);
- this.gridster.curRowHeight = this.gridster.$options.fixedRowHeight +
- (this.gridster.$options.ignoreMarginInRow ? 0 : this.gridster.$options.margin);
- addClass = GridType.Fixed;
- removeClass1 = GridType.Fit;
- removeClass2 = GridType.ScrollVertical;
- removeClass3 = GridType.ScrollHorizontal;
- }
- else if (this.gridster.$options.gridType === GridType.VerticalFixed) {
- this.gridster.curRowHeight = this.gridster.$options.fixedRowHeight +
- (this.gridster.$options.ignoreMarginInRow ? 0 : this.gridster.$options.margin);
- addClass = GridType.ScrollVertical;
- removeClass1 = GridType.Fit;
- removeClass2 = GridType.ScrollHorizontal;
- removeClass3 = GridType.Fixed;
- }
- else if (this.gridster.$options.gridType === GridType.HorizontalFixed) {
- this.gridster.curColWidth = this.gridster.$options.fixedColWidth +
- (this.gridster.$options.ignoreMarginInRow ? 0 : this.gridster.$options.margin);
- addClass = GridType.ScrollHorizontal;
- removeClass1 = GridType.Fit;
- removeClass2 = GridType.ScrollVertical;
- removeClass3 = GridType.Fixed;
- }
- if (this.gridster.mobile || this.gridster.$options.setGridSize && this.gridster.$options.gridType !== GridType.Fit) {
- this.gridster.renderer.removeClass(this.gridster.el, addClass);
- }
- else {
- this.gridster.renderer.addClass(this.gridster.el, addClass);
- }
- this.gridster.renderer.removeClass(this.gridster.el, removeClass1);
- this.gridster.renderer.removeClass(this.gridster.el, removeClass2);
- this.gridster.renderer.removeClass(this.gridster.el, removeClass3);
- }
- getGridColumnStyle(i) {
- return Object.assign(Object.assign({}, this.getLeftPosition(this.gridster.curColWidth * i)), { width: this.gridster.curColWidth - this.gridster.$options.margin + 'px', height: this.gridster.gridRows.length * this.gridster.curRowHeight - this.gridster.$options.margin + 'px' });
- }
- getGridRowStyle(i) {
- return Object.assign(Object.assign({}, this.getTopPosition(this.gridster.curRowHeight * i)), { width: this.gridster.gridColumns.length * this.gridster.curColWidth - this.gridster.$options.margin + 'px', height: this.gridster.curRowHeight - this.gridster.$options.margin + 'px' });
- }
- getLeftPosition(d) {
- const dPosition = this.gridster.$options.dirType === DirTypes.RTL ? -d : d;
- if (this.gridster.$options.useTransformPositioning) {
- return {
- transform: 'translateX(' + dPosition + 'px)',
- };
- }
- else {
- return {
- left: (this.getLeftMargin() + dPosition) + 'px'
- };
- }
- }
- getTopPosition(d) {
- if (this.gridster.$options.useTransformPositioning) {
- return {
- transform: 'translateY(' + d + 'px)',
- };
- }
- else {
- return {
- top: this.getTopMargin() + d + 'px'
- };
- }
- }
- clearCellPosition(renderer, el) {
- if (this.gridster.$options.useTransformPositioning) {
- renderer.setStyle(el, 'transform', '');
- }
- else {
- renderer.setStyle(el, 'top', '');
- renderer.setStyle(el, 'left', '');
- }
- }
- setCellPosition(renderer, el, x, y) {
- const xPosition = this.gridster.$options.dirType === DirTypes.RTL ? -x : x;
- if (this.gridster.$options.useTransformPositioning) {
- const transform = 'translate3d(' + xPosition + 'px, ' + y + 'px, 0)';
- renderer.setStyle(el, 'transform', transform);
- }
- else {
- renderer.setStyle(el, 'left', this.getLeftMargin() + xPosition + 'px');
- renderer.setStyle(el, 'top', this.getTopMargin() + y + 'px');
- }
- }
- getLeftMargin() {
- if (this.gridster.$options.outerMargin) {
- if (this.gridster.$options.outerMarginLeft !== null) {
- return this.gridster.$options.outerMarginLeft;
- }
- else {
- return this.gridster.$options.margin;
- }
- }
- else {
- return 0;
- }
- }
- getTopMargin() {
- if (this.gridster.$options.outerMargin) {
- if (this.gridster.$options.outerMarginTop !== null) {
- return this.gridster.$options.outerMarginTop;
- }
- else {
- return this.gridster.$options.margin;
- }
- }
- else {
- return 0;
- }
- }
- }
- GridsterRenderer.ɵfac = function GridsterRenderer_Factory(t) { return new (t || GridsterRenderer)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](GridsterComponentInterface)); };
- GridsterRenderer.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: GridsterRenderer, factory: GridsterRenderer.ɵfac });
- GridsterRenderer.ctorParameters = () => [
- { type: GridsterComponentInterface }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](GridsterRenderer, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: GridsterComponentInterface }]; }, null); })();
- class GridsterComponent {
- constructor(el, renderer, cdRef, zone) {
- this.renderer = renderer;
- this.cdRef = cdRef;
- this.zone = zone;
- this.columns = 0;
- this.rows = 0;
- this.gridColumns = [];
- this.gridRows = [];
- this.el = el.nativeElement;
- this.$options = JSON.parse(JSON.stringify(GridsterConfigService));
- this.calculateLayoutDebounce = GridsterUtils.debounce(this.calculateLayout.bind(this), 0);
- this.mobile = false;
- this.curWidth = 0;
- this.curHeight = 0;
- this.grid = [];
- this.curColWidth = 0;
- this.curRowHeight = 0;
- this.dragInProgress = false;
- this.emptyCell = new GridsterEmptyCell(this);
- this.compact = new GridsterCompact(this);
- this.gridRenderer = new GridsterRenderer(this);
- }
- // ------ Function for swapWhileDragging option
- // identical to checkCollision() except that here we add boundaries.
- static checkCollisionTwoItemsForSwaping(item, item2) {
- // if the cols or rows of the items are 1 , doesnt make any sense to set a boundary. Only if the item is bigger we set a boundary
- const horizontalBoundaryItem1 = item.cols === 1 ? 0 : 1;
- const horizontalBoundaryItem2 = item2.cols === 1 ? 0 : 1;
- const verticalBoundaryItem1 = item.rows === 1 ? 0 : 1;
- const verticalBoundaryItem2 = item2.rows === 1 ? 0 : 1;
- return item.x + horizontalBoundaryItem1 < item2.x + item2.cols
- && item.x + item.cols > item2.x + horizontalBoundaryItem2
- && item.y + verticalBoundaryItem1 < item2.y + item2.rows
- && item.y + item.rows > item2.y + verticalBoundaryItem2;
- }
- checkCollisionTwoItems(item, item2) {
- const collision = item.x < item2.x + item2.cols
- && item.x + item.cols > item2.x
- && item.y < item2.y + item2.rows
- && item.y + item.rows > item2.y;
- if (!collision) {
- return false;
- }
- if (!this.$options.allowMultiLayer) {
- return true;
- }
- const defaultLayerIndex = this.$options.defaultLayerIndex;
- const layerIndex = item.layerIndex === undefined ? defaultLayerIndex : item.layerIndex;
- const layerIndex2 = item2.layerIndex === undefined ? defaultLayerIndex : item2.layerIndex;
- return layerIndex === layerIndex2;
- }
- ngOnInit() {
- if (this.options.initCallback) {
- this.options.initCallback(this);
- }
- }
- ngOnChanges(changes) {
- if (changes.options) {
- this.setOptions();
- this.options.api = {
- optionsChanged: this.optionsChanged.bind(this),
- resize: this.onResize.bind(this),
- getNextPossiblePosition: this.getNextPossiblePosition.bind(this),
- getFirstPossiblePosition: this.getFirstPossiblePosition.bind(this),
- getLastPossiblePosition: this.getLastPossiblePosition.bind(this),
- getItemComponent: (item) => this.getItemComponent(item)
- };
- this.columns = this.$options.minCols;
- this.rows = this.$options.minRows;
- this.setGridSize();
- this.calculateLayout();
- }
- }
- resize() {
- let height;
- let width;
- if (this.$options.gridType === 'fit' && !this.mobile) {
- width = this.el.offsetWidth;
- height = this.el.offsetHeight;
- }
- else {
- width = this.el.clientWidth;
- height = this.el.clientHeight;
- }
- if ((width !== this.curWidth || height !== this.curHeight) && this.checkIfToResize()) {
- this.onResize();
- }
- }
- setOptions() {
- this.$options = GridsterUtils.merge(this.$options, this.options, this.$options);
- if (!this.$options.disableWindowResize && !this.windowResize) {
- this.windowResize = this.renderer.listen('window', 'resize', this.onResize.bind(this));
- }
- else if (this.$options.disableWindowResize && this.windowResize) {
- this.windowResize();
- this.windowResize = null;
- }
- this.emptyCell.updateOptions();
- }
- optionsChanged() {
- this.setOptions();
- let widgetsIndex = this.grid.length - 1;
- let widget;
- for (; widgetsIndex >= 0; widgetsIndex--) {
- widget = this.grid[widgetsIndex];
- widget.updateOptions();
- }
- this.calculateLayout();
- }
- ngOnDestroy() {
- if (this.windowResize) {
- this.windowResize();
- }
- if (this.options && this.options.destroyCallback) {
- this.options.destroyCallback(this);
- }
- if (this.options && this.options.api) {
- this.options.api.resize = undefined;
- this.options.api.optionsChanged = undefined;
- this.options.api.getNextPossiblePosition = undefined;
- this.options.api = undefined;
- }
- this.emptyCell.destroy();
- // @ts-ignore
- delete this.emptyCell;
- this.compact.destroy();
- // @ts-ignore
- delete this.compact;
- }
- onResize() {
- if (this.options.setGridSize) { // reset width/height so the size is recalculated afterwards
- this.renderer.setStyle(this.el, 'width', '');
- this.renderer.setStyle(this.el, 'height', '');
- }
- this.setGridSize();
- this.calculateLayout();
- }
- checkIfToResize() {
- const clientWidth = this.el.clientWidth;
- const offsetWidth = this.el.offsetWidth;
- const scrollWidth = this.el.scrollWidth;
- const clientHeight = this.el.clientHeight;
- const offsetHeight = this.el.offsetHeight;
- const scrollHeight = this.el.scrollHeight;
- const verticalScrollPresent = clientWidth < offsetWidth && scrollHeight > offsetHeight
- && scrollHeight - offsetHeight < offsetWidth - clientWidth;
- const horizontalScrollPresent = clientHeight < offsetHeight
- && scrollWidth > offsetWidth && scrollWidth - offsetWidth < offsetHeight - clientHeight;
- if (verticalScrollPresent) {
- return false;
- }
- return !horizontalScrollPresent;
- }
- setGridSize() {
- const el = this.el;
- let width;
- let height;
- if (this.$options.setGridSize || this.$options.gridType === GridType.Fit && !this.mobile) {
- width = el.offsetWidth;
- height = el.offsetHeight;
- }
- else {
- width = el.clientWidth;
- height = el.clientHeight;
- }
- this.curWidth = width;
- this.curHeight = height;
- }
- setGridDimensions() {
- this.setGridSize();
- if (!this.mobile && this.$options.mobileBreakpoint > this.curWidth) {
- this.mobile = !this.mobile;
- this.renderer.addClass(this.el, 'mobile');
- }
- else if (this.mobile && this.$options.mobileBreakpoint < this.curWidth) {
- this.mobile = !this.mobile;
- this.renderer.removeClass(this.el, 'mobile');
- }
- let rows = this.$options.minRows;
- let columns = this.$options.minCols;
- let widgetsIndex = this.grid.length - 1;
- let widget;
- for (; widgetsIndex >= 0; widgetsIndex--) {
- widget = this.grid[widgetsIndex];
- if (!widget.notPlaced) {
- rows = Math.max(rows, widget.$item.y + widget.$item.rows);
- columns = Math.max(columns, widget.$item.x + widget.$item.cols);
- }
- }
- if (this.columns !== columns || this.rows !== rows) {
- this.columns = columns;
- this.rows = rows;
- if (this.options.gridSizeChangedCallback) {
- this.options.gridSizeChangedCallback(this);
- }
- }
- }
- calculateLayout() {
- if (this.compact) {
- this.compact.checkCompact();
- }
- this.setGridDimensions();
- if (this.$options.outerMargin) {
- let marginWidth = -this.$options.margin;
- if (this.$options.outerMarginLeft !== null) {
- marginWidth += this.$options.outerMarginLeft;
- this.renderer.setStyle(this.el, 'padding-left', this.$options.outerMarginLeft + 'px');
- }
- else {
- marginWidth += this.$options.margin;
- this.renderer.setStyle(this.el, 'padding-left', this.$options.margin + 'px');
- }
- if (this.$options.outerMarginRight !== null) {
- marginWidth += this.$options.outerMarginRight;
- this.renderer.setStyle(this.el, 'padding-right', this.$options.outerMarginRight + 'px');
- }
- else {
- marginWidth += this.$options.margin;
- this.renderer.setStyle(this.el, 'padding-right', this.$options.margin + 'px');
- }
- this.curColWidth = (this.curWidth - marginWidth) / this.columns;
- let marginHeight = -this.$options.margin;
- if (this.$options.outerMarginTop !== null) {
- marginHeight += this.$options.outerMarginTop;
- this.renderer.setStyle(this.el, 'padding-top', this.$options.outerMarginTop + 'px');
- }
- else {
- marginHeight += this.$options.margin;
- this.renderer.setStyle(this.el, 'padding-top', this.$options.margin + 'px');
- }
- if (this.$options.outerMarginBottom !== null) {
- marginHeight += this.$options.outerMarginBottom;
- this.renderer.setStyle(this.el, 'padding-bottom', this.$options.outerMarginBottom + 'px');
- }
- else {
- marginHeight += this.$options.margin;
- this.renderer.setStyle(this.el, 'padding-bottom', this.$options.margin + 'px');
- }
- this.curRowHeight = (this.curHeight - marginHeight) / this.rows;
- }
- else {
- this.curColWidth = (this.curWidth + this.$options.margin) / this.columns;
- this.curRowHeight = (this.curHeight + this.$options.margin) / this.rows;
- this.renderer.setStyle(this.el, 'padding-left', 0 + 'px');
- this.renderer.setStyle(this.el, 'padding-right', 0 + 'px');
- this.renderer.setStyle(this.el, 'padding-top', 0 + 'px');
- this.renderer.setStyle(this.el, 'padding-bottom', 0 + 'px');
- }
- this.gridRenderer.updateGridster();
- if (this.$options.setGridSize) {
- this.renderer.addClass(this.el, 'gridSize');
- if (!this.mobile) {
- this.renderer.setStyle(this.el, 'width', (this.columns * this.curColWidth + this.$options.margin) + 'px');
- this.renderer.setStyle(this.el, 'height', (this.rows * this.curRowHeight + this.$options.margin) + 'px');
- }
- }
- else {
- this.renderer.removeClass(this.el, 'gridSize');
- this.renderer.setStyle(this.el, 'width', '');
- this.renderer.setStyle(this.el, 'height', '');
- }
- this.updateGrid();
- let widgetsIndex = this.grid.length - 1;
- let widget;
- for (; widgetsIndex >= 0; widgetsIndex--) {
- widget = this.grid[widgetsIndex];
- widget.setSize();
- widget.drag.toggle();
- widget.resize.toggle();
- }
- setTimeout(this.resize.bind(this), 100);
- }
- updateGrid() {
- if (this.$options.displayGrid === 'always' && !this.mobile) {
- this.renderer.addClass(this.el, 'display-grid');
- }
- else if (this.$options.displayGrid === 'onDrag&Resize' && this.dragInProgress) {
- this.renderer.addClass(this.el, 'display-grid');
- }
- else if (this.$options.displayGrid === 'none' || !this.dragInProgress || this.mobile) {
- this.renderer.removeClass(this.el, 'display-grid');
- }
- this.setGridDimensions();
- this.gridColumns.length = GridsterComponent.getNewArrayLength(this.columns, this.curWidth, this.curColWidth);
- this.gridRows.length = GridsterComponent.getNewArrayLength(this.rows, this.curHeight, this.curRowHeight);
- this.cdRef.markForCheck();
- }
- addItem(itemComponent) {
- if (itemComponent.$item.cols === undefined) {
- itemComponent.$item.cols = this.$options.defaultItemCols;
- itemComponent.item.cols = itemComponent.$item.cols;
- itemComponent.itemChanged();
- }
- if (itemComponent.$item.rows === undefined) {
- itemComponent.$item.rows = this.$options.defaultItemRows;
- itemComponent.item.rows = itemComponent.$item.rows;
- itemComponent.itemChanged();
- }
- if (itemComponent.$item.x === -1 || itemComponent.$item.y === -1) {
- this.autoPositionItem(itemComponent);
- }
- else if (this.checkCollision(itemComponent.$item)) {
- if (!this.$options.disableWarnings) {
- itemComponent.notPlaced = true;
- console.warn('Can\'t be placed in the bounds of the dashboard, trying to auto position!/n' +
- JSON.stringify(itemComponent.item, ['cols', 'rows', 'x', 'y']));
- }
- if (!this.$options.disableAutoPositionOnConflict) {
- this.autoPositionItem(itemComponent);
- }
- else {
- itemComponent.notPlaced = true;
- }
- }
- this.grid.push(itemComponent);
- this.calculateLayoutDebounce();
- }
- removeItem(itemComponent) {
- this.grid.splice(this.grid.indexOf(itemComponent), 1);
- this.calculateLayoutDebounce();
- if (this.options.itemRemovedCallback) {
- this.options.itemRemovedCallback(itemComponent.item, itemComponent);
- }
- }
- checkCollision(item) {
- let collision = false;
- if (this.options.itemValidateCallback) {
- collision = !this.options.itemValidateCallback(item);
- }
- if (!collision && this.checkGridCollision(item)) {
- collision = true;
- }
- if (!collision) {
- const c = this.findItemWithItem(item);
- if (c) {
- collision = c;
- }
- }
- return collision;
- }
- checkGridCollision(item) {
- const noNegativePosition = item.y > -1 && item.x > -1;
- const maxGridCols = item.cols + item.x <= this.$options.maxCols;
- const maxGridRows = item.rows + item.y <= this.$options.maxRows;
- const maxItemCols = item.maxItemCols === undefined ? this.$options.maxItemCols : item.maxItemCols;
- const minItemCols = item.minItemCols === undefined ? this.$options.minItemCols : item.minItemCols;
- const maxItemRows = item.maxItemRows === undefined ? this.$options.maxItemRows : item.maxItemRows;
- const minItemRows = item.minItemRows === undefined ? this.$options.minItemRows : item.minItemRows;
- const inColsLimits = item.cols <= maxItemCols && item.cols >= minItemCols;
- const inRowsLimits = item.rows <= maxItemRows && item.rows >= minItemRows;
- const minAreaLimit = item.minItemArea === undefined ? this.$options.minItemArea : item.minItemArea;
- const maxAreaLimit = item.maxItemArea === undefined ? this.$options.maxItemArea : item.maxItemArea;
- const area = item.cols * item.rows;
- const inMinArea = minAreaLimit <= area;
- const inMaxArea = maxAreaLimit >= area;
- return !(noNegativePosition && maxGridCols && maxGridRows && inColsLimits && inRowsLimits && inMinArea && inMaxArea);
- }
- findItemWithItem(item) {
- let widgetsIndex = 0;
- let widget;
- for (; widgetsIndex < this.grid.length; widgetsIndex++) {
- widget = this.grid[widgetsIndex];
- if (widget.$item !== item && this.checkCollisionTwoItems(widget.$item, item)) {
- return widget;
- }
- }
- return false;
- }
- findItemsWithItem(item) {
- const a = [];
- let widgetsIndex = 0;
- let widget;
- for (; widgetsIndex < this.grid.length; widgetsIndex++) {
- widget = this.grid[widgetsIndex];
- if (widget.$item !== item && this.checkCollisionTwoItems(widget.$item, item)) {
- a.push(widget);
- }
- }
- return a;
- }
- autoPositionItem(itemComponent) {
- if (this.getNextPossiblePosition(itemComponent.$item)) {
- itemComponent.notPlaced = false;
- itemComponent.item.x = itemComponent.$item.x;
- itemComponent.item.y = itemComponent.$item.y;
- itemComponent.itemChanged();
- }
- else {
- itemComponent.notPlaced = true;
- if (!this.$options.disableWarnings) {
- console.warn('Can\'t be placed in the bounds of the dashboard!/n' +
- JSON.stringify(itemComponent.item, ['cols', 'rows', 'x', 'y']));
- }
- }
- }
- getNextPossiblePosition(newItem, startingFrom = {}) {
- if (newItem.cols === -1) {
- newItem.cols = this.$options.defaultItemCols;
- }
- if (newItem.rows === -1) {
- newItem.rows = this.$options.defaultItemRows;
- }
- this.setGridDimensions();
- let rowsIndex = startingFrom.y || 0;
- let colsIndex;
- for (; rowsIndex < this.rows; rowsIndex++) {
- newItem.y = rowsIndex;
- colsIndex = startingFrom.x || 0;
- for (; colsIndex < this.columns; colsIndex++) {
- newItem.x = colsIndex;
- if (!this.checkCollision(newItem)) {
- return true;
- }
- }
- }
- const canAddToRows = this.$options.maxRows >= this.rows + newItem.rows;
- const canAddToColumns = this.$options.maxCols >= this.columns + newItem.cols;
- const addToRows = this.rows <= this.columns && canAddToRows;
- if (!addToRows && canAddToColumns) {
- newItem.x = this.columns;
- newItem.y = 0;
- return true;
- }
- else if (canAddToRows) {
- newItem.y = this.rows;
- newItem.x = 0;
- return true;
- }
- return false;
- }
- getFirstPossiblePosition(item) {
- const tmpItem = Object.assign({}, item);
- this.getNextPossiblePosition(tmpItem);
- return tmpItem;
- }
- getLastPossiblePosition(item) {
- let farthestItem = { y: 0, x: 0 };
- farthestItem = this.grid.reduce((prev, curr) => {
- const currCoords = { y: curr.$item.y + curr.$item.rows - 1, x: curr.$item.x + curr.$item.cols - 1 };
- if (GridsterUtils.compareItems(prev, currCoords) === 1) {
- return currCoords;
- }
- else {
- return prev;
- }
- }, farthestItem);
- const tmpItem = Object.assign({}, item);
- this.getNextPossiblePosition(tmpItem, farthestItem);
- return tmpItem;
- }
- pixelsToPositionX(x, roundingMethod, noLimit) {
- const position = roundingMethod(x / this.curColWidth);
- if (noLimit) {
- return position;
- }
- else {
- return Math.max(position, 0);
- }
- }
- pixelsToPositionY(y, roundingMethod, noLimit) {
- const position = roundingMethod(y / this.curRowHeight);
- if (noLimit) {
- return position;
- }
- else {
- return Math.max(position, 0);
- }
- }
- positionXToPixels(x) {
- return x * this.curColWidth;
- }
- positionYToPixels(y) {
- return y * this.curRowHeight;
- }
- getItemComponent(item) {
- return this.grid.find(c => c.item === item);
- }
- // ------ Functions for swapWhileDragging option
- // identical to checkCollision() except that this function calls findItemWithItemForSwaping() instead of findItemWithItem()
- checkCollisionForSwaping(item) {
- let collision = false;
- if (this.options.itemValidateCallback) {
- collision = !this.options.itemValidateCallback(item);
- }
- if (!collision && this.checkGridCollision(item)) {
- collision = true;
- }
- if (!collision) {
- const c = this.findItemWithItemForSwaping(item);
- if (c) {
- collision = c;
- }
- }
- return collision;
- }
- // identical to findItemWithItem() except that this function calls checkCollisionTwoItemsForSwaping() instead of checkCollisionTwoItems()
- findItemWithItemForSwaping(item) {
- let widgetsIndex = this.grid.length - 1;
- let widget;
- for (; widgetsIndex > -1; widgetsIndex--) {
- widget = this.grid[widgetsIndex];
- if (widget.$item !== item && GridsterComponent.checkCollisionTwoItemsForSwaping(widget.$item, item)) {
- return widget;
- }
- }
- return false;
- }
- // ------ End of functions for swapWhileDragging option
- // tslint:disable-next-line:member-ordering
- static getNewArrayLength(length, overallSize, size) {
- const newLength = Math.max(length, Math.floor(overallSize / size));
- if (newLength < 0) {
- return 0;
- }
- if (Number.isFinite(newLength)) {
- return Math.floor(newLength);
- }
- return 0;
- }
- }
- GridsterComponent.ɵfac = function GridsterComponent_Factory(t) { return new (t || GridsterComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"])); };
- GridsterComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: GridsterComponent, selectors: [["gridster"]], inputs: { options: "options" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], ngContentSelectors: _c0, decls: 4, vars: 2, consts: [["class", "gridster-column", 3, "ngStyle", 4, "ngFor", "ngForOf"], ["class", "gridster-row", 3, "ngStyle", 4, "ngFor", "ngForOf"], [1, "gridster-preview"], [1, "gridster-column", 3, "ngStyle"], [1, "gridster-row", 3, "ngStyle"]], template: function GridsterComponent_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, GridsterComponent_div_0_Template, 1, 1, "div", 0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, GridsterComponent_div_1_Template, 1, 1, "div", 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](3, "gridster-preview", 2);
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.gridColumns);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.gridRows);
- } }, directives: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], GridsterPreviewComponent, _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgStyle"]]; }, styles: ["gridster{-ms-user-select:none;-webkit-user-select:none;background:grey;box-sizing:border-box;display:block;height:100%;position:relative;user-select:none;width:100%}gridster.fit{overflow-x:hidden;overflow-y:hidden}gridster.scrollVertical{overflow-x:hidden;overflow-y:auto}gridster.scrollHorizontal{overflow-x:auto;overflow-y:hidden}gridster.fixed{overflow:auto}gridster.mobile{overflow-x:hidden;overflow-y:auto}gridster.mobile gridster-item{position:relative}gridster.gridSize{height:auto;width:auto}gridster.gridSize.fit{height:100%;width:100%}gridster .gridster-column,gridster .gridster-row{box-sizing:border-box;display:none;position:absolute;transition:.3s}gridster.display-grid .gridster-column,gridster.display-grid .gridster-row{display:block}gridster .gridster-column{border-left:1px solid #fff;border-right:1px solid #fff}gridster .gridster-row{border-bottom:1px solid #fff;border-top:1px solid #fff}"], encapsulation: 2 });
- GridsterComponent.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"],] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"], decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"],] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"], decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"],] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"],] }] }
- ];
- GridsterComponent.propDecorators = {
- options: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](GridsterComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- // tslint:disable-next-line:component-selector
- selector: 'gridster',
- template: "<div class=\"gridster-column\" *ngFor=\"let column of gridColumns; let i = index;\"\n [ngStyle]=\"gridRenderer.getGridColumnStyle(i)\"></div>\n<div class=\"gridster-row\" *ngFor=\"let row of gridRows; let i = index;\"\n [ngStyle]=\"gridRenderer.getGridRowStyle(i)\"></div>\n<ng-content></ng-content>\n<gridster-preview class=\"gridster-preview\"></gridster-preview>\n",
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- styles: ["gridster{-ms-user-select:none;-webkit-user-select:none;background:grey;box-sizing:border-box;display:block;height:100%;position:relative;user-select:none;width:100%}gridster.fit{overflow-x:hidden;overflow-y:hidden}gridster.scrollVertical{overflow-x:hidden;overflow-y:auto}gridster.scrollHorizontal{overflow-x:auto;overflow-y:hidden}gridster.fixed{overflow:auto}gridster.mobile{overflow-x:hidden;overflow-y:auto}gridster.mobile gridster-item{position:relative}gridster.gridSize{height:auto;width:auto}gridster.gridSize.fit{height:100%;width:100%}gridster .gridster-column,gridster .gridster-row{box-sizing:border-box;display:none;position:absolute;transition:.3s}gridster.display-grid .gridster-column,gridster.display-grid .gridster-row{display:block}gridster .gridster-column{border-left:1px solid #fff;border-right:1px solid #fff}gridster .gridster-row{border-bottom:1px solid #fff;border-top:1px solid #fff}"]
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"], decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"], decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]]
- }] }]; }, { options: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class GridsterItemComponentInterface {
- }
- class GridsterPush {
- constructor(gridsterItem) {
- this.iteration = 0;
- this.pushedItems = [];
- this.pushedItemsTemp = [];
- this.pushedItemsTempPath = [];
- this.pushedItemsPath = [];
- this.gridsterItem = gridsterItem;
- this.gridster = gridsterItem.gridster;
- this.tryPattern = {
- fromEast: [this.tryWest, this.trySouth, this.tryNorth, this.tryEast],
- fromWest: [this.tryEast, this.trySouth, this.tryNorth, this.tryWest],
- fromNorth: [this.trySouth, this.tryEast, this.tryWest, this.tryNorth],
- fromSouth: [this.tryNorth, this.tryEast, this.tryWest, this.trySouth]
- };
- this.fromSouth = 'fromSouth';
- this.fromNorth = 'fromNorth';
- this.fromEast = 'fromEast';
- this.fromWest = 'fromWest';
- }
- destroy() {
- // @ts-ignore
- delete this.gridster;
- // @ts-ignore
- delete this.gridsterItem;
- }
- pushItems(direction, disable) {
- if (this.gridster.$options.pushItems && !disable) {
- this.pushedItemsOrder = [];
- this.iteration = 0;
- const pushed = this.push(this.gridsterItem, direction);
- if (!pushed) {
- this.restoreTempItems();
- }
- this.pushedItemsOrder = [];
- this.pushedItemsTemp = [];
- this.pushedItemsTempPath = [];
- return pushed;
- }
- else {
- return false;
- }
- }
- restoreTempItems() {
- let i = this.pushedItemsTemp.length - 1;
- for (; i > -1; i--) {
- this.removeFromTempPushed(this.pushedItemsTemp[i]);
- }
- }
- restoreItems() {
- let i = 0;
- const l = this.pushedItems.length;
- let pushedItem;
- for (; i < l; i++) {
- pushedItem = this.pushedItems[i];
- pushedItem.$item.x = pushedItem.item.x || 0;
- pushedItem.$item.y = pushedItem.item.y || 0;
- pushedItem.setSize();
- }
- this.pushedItems = [];
- this.pushedItemsPath = [];
- }
- setPushedItems() {
- let i = 0;
- const l = this.pushedItems.length;
- let pushedItem;
- for (; i < l; i++) {
- pushedItem = this.pushedItems[i];
- pushedItem.checkItemChanges(pushedItem.$item, pushedItem.item);
- }
- this.pushedItems = [];
- this.pushedItemsPath = [];
- }
- checkPushBack() {
- let i = this.pushedItems.length - 1;
- let change = false;
- for (; i > -1; i--) {
- if (this.checkPushedItem(this.pushedItems[i], i)) {
- change = true;
- }
- }
- if (change) {
- this.checkPushBack();
- }
- }
- push(gridsterItem, direction) {
- if (this.iteration > 100) {
- console.warn('max iteration reached');
- return false;
- }
- if (this.gridster.checkGridCollision(gridsterItem.$item)) {
- return false;
- }
- if (direction === '') {
- return false;
- }
- const conflicts = this.gridster.findItemsWithItem(gridsterItem.$item);
- const invert = direction === this.fromNorth || direction === this.fromWest;
- // sort the list of conflicts in order of [y,x]. Invert when the push is from north and west
- // this is done so they don't conflict witch each other and revert positions, keeping the previous order
- conflicts.sort((a, b) => {
- if (invert) {
- return b.$item.y - a.$item.y || b.$item.x - a.$item.x;
- }
- else {
- return a.$item.y - b.$item.y || a.$item.x - b.$item.x;
- }
- });
- let i = 0;
- let itemCollision;
- let makePush = true;
- const pushedItems = [];
- for (; i < conflicts.length; i++) {
- itemCollision = conflicts[i];
- if (itemCollision === this.gridsterItem) {
- continue;
- }
- if (!itemCollision.canBeDragged()) {
- makePush = false;
- break;
- }
- const p = this.pushedItemsTemp.indexOf(itemCollision);
- if (p > -1 && this.pushedItemsTempPath[p].length > 10) { // stop if item is pushed more than 10 times to break infinite loops
- makePush = false;
- break;
- }
- if (this.tryPattern[direction][0].call(this, itemCollision, gridsterItem)) {
- this.pushedItemsOrder.push(itemCollision);
- pushedItems.push(itemCollision);
- }
- else if (this.tryPattern[direction][1].call(this, itemCollision, gridsterItem)) {
- this.pushedItemsOrder.push(itemCollision);
- pushedItems.push(itemCollision);
- }
- else if (this.tryPattern[direction][2].call(this, itemCollision, gridsterItem)) {
- this.pushedItemsOrder.push(itemCollision);
- pushedItems.push(itemCollision);
- }
- else if (this.tryPattern[direction][3].call(this, itemCollision, gridsterItem)) {
- this.pushedItemsOrder.push(itemCollision);
- pushedItems.push(itemCollision);
- }
- else {
- makePush = false;
- break;
- }
- }
- if (!makePush) {
- i = this.pushedItemsOrder.lastIndexOf(pushedItems[0]);
- if (i > -1) {
- let j = this.pushedItemsOrder.length - 1;
- for (; j >= i; j--) {
- itemCollision = this.pushedItemsOrder[j];
- this.pushedItemsOrder.pop();
- this.removeFromTempPushed(itemCollision);
- this.removeFromPushedItem(itemCollision);
- }
- }
- }
- this.iteration++;
- return makePush;
- }
- trySouth(gridsterItemCollide, gridsterItem) {
- if (!this.gridster.$options.pushDirections.south) {
- return false;
- }
- this.addToTempPushed(gridsterItemCollide);
- gridsterItemCollide.$item.y = gridsterItem.$item.y + gridsterItem.$item.rows;
- if (this.push(gridsterItemCollide, this.fromNorth)) {
- gridsterItemCollide.setSize();
- this.addToPushed(gridsterItemCollide);
- return true;
- }
- else {
- this.removeFromTempPushed(gridsterItemCollide);
- }
- return false;
- }
- tryNorth(gridsterItemCollide, gridsterItem) {
- if (!this.gridster.$options.pushDirections.north) {
- return false;
- }
- this.addToTempPushed(gridsterItemCollide);
- gridsterItemCollide.$item.y = gridsterItem.$item.y - gridsterItemCollide.$item.rows;
- if (this.push(gridsterItemCollide, this.fromSouth)) {
- gridsterItemCollide.setSize();
- this.addToPushed(gridsterItemCollide);
- return true;
- }
- else {
- this.removeFromTempPushed(gridsterItemCollide);
- }
- return false;
- }
- tryEast(gridsterItemCollide, gridsterItem) {
- if (!this.gridster.$options.pushDirections.east) {
- return false;
- }
- this.addToTempPushed(gridsterItemCollide);
- gridsterItemCollide.$item.x = gridsterItem.$item.x + gridsterItem.$item.cols;
- if (this.push(gridsterItemCollide, this.fromWest)) {
- gridsterItemCollide.setSize();
- this.addToPushed(gridsterItemCollide);
- return true;
- }
- else {
- this.removeFromTempPushed(gridsterItemCollide);
- }
- return false;
- }
- tryWest(gridsterItemCollide, gridsterItem) {
- if (!this.gridster.$options.pushDirections.west) {
- return false;
- }
- this.addToTempPushed(gridsterItemCollide);
- gridsterItemCollide.$item.x = gridsterItem.$item.x - gridsterItemCollide.$item.cols;
- if (this.push(gridsterItemCollide, this.fromEast)) {
- gridsterItemCollide.setSize();
- this.addToPushed(gridsterItemCollide);
- return true;
- }
- else {
- this.removeFromTempPushed(gridsterItemCollide);
- }
- return false;
- }
- addToTempPushed(gridsterItem) {
- let i = this.pushedItemsTemp.indexOf(gridsterItem);
- if (i === -1) {
- i = this.pushedItemsTemp.push(gridsterItem) - 1;
- this.pushedItemsTempPath[i] = [];
- }
- this.pushedItemsTempPath[i].push({ x: gridsterItem.$item.x, y: gridsterItem.$item.y });
- }
- removeFromTempPushed(gridsterItem) {
- const i = this.pushedItemsTemp.indexOf(gridsterItem);
- const tempPosition = this.pushedItemsTempPath[i].pop();
- if (!tempPosition) {
- return;
- }
- gridsterItem.$item.x = tempPosition.x;
- gridsterItem.$item.y = tempPosition.y;
- gridsterItem.setSize();
- if (!this.pushedItemsTempPath[i].length) {
- this.pushedItemsTemp.splice(i, 1);
- this.pushedItemsTempPath.splice(i, 1);
- }
- }
- addToPushed(gridsterItem) {
- if (this.pushedItems.indexOf(gridsterItem) < 0) {
- this.pushedItems.push(gridsterItem);
- this.pushedItemsPath.push([{ x: gridsterItem.item.x || 0, y: gridsterItem.item.y || 0 },
- { x: gridsterItem.$item.x, y: gridsterItem.$item.y }]);
- }
- else {
- const i = this.pushedItems.indexOf(gridsterItem);
- this.pushedItemsPath[i].push({ x: gridsterItem.$item.x, y: gridsterItem.$item.y });
- }
- }
- removeFromPushed(i) {
- if (i > -1) {
- this.pushedItems.splice(i, 1);
- this.pushedItemsPath.splice(i, 1);
- }
- }
- removeFromPushedItem(gridsterItem) {
- const i = this.pushedItems.indexOf(gridsterItem);
- if (i > -1) {
- this.pushedItemsPath[i].pop();
- if (!this.pushedItemsPath.length) {
- this.pushedItems.splice(i, 1);
- this.pushedItemsPath.splice(i, 1);
- }
- }
- }
- checkPushedItem(pushedItem, i) {
- const path = this.pushedItemsPath[i];
- let j = path.length - 2;
- let lastPosition;
- let x;
- let y;
- let change = false;
- for (; j > -1; j--) {
- lastPosition = path[j];
- x = pushedItem.$item.x;
- y = pushedItem.$item.y;
- pushedItem.$item.x = lastPosition.x;
- pushedItem.$item.y = lastPosition.y;
- if (!this.gridster.findItemWithItem(pushedItem.$item)) {
- pushedItem.setSize();
- path.splice(j + 1, path.length - j - 1);
- change = true;
- }
- else {
- pushedItem.$item.x = x;
- pushedItem.$item.y = y;
- }
- }
- if (path.length < 2) {
- this.removeFromPushed(i);
- }
- return change;
- }
- }
- GridsterPush.ɵfac = function GridsterPush_Factory(t) { return new (t || GridsterPush)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](GridsterItemComponentInterface)); };
- GridsterPush.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: GridsterPush, factory: GridsterPush.ɵfac });
- GridsterPush.ctorParameters = () => [
- { type: GridsterItemComponentInterface }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](GridsterPush, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: GridsterItemComponentInterface }]; }, null); })();
- let scrollSensitivity;
- let scrollSpeed;
- const intervalDuration = 50;
- let gridsterElement;
- let resizeEvent;
- let resizeEventType;
- let intervalE;
- let intervalW;
- let intervalN;
- let intervalS;
- function scroll(gridster, left, top, width, height, e, lastMouse, calculateItemPosition, resize, resizeEventScrollType) {
- scrollSensitivity = gridster.$options.scrollSensitivity;
- scrollSpeed = gridster.$options.scrollSpeed;
- gridsterElement = gridster.el;
- resizeEvent = resize;
- resizeEventType = resizeEventScrollType;
- const offsetWidth = gridsterElement.offsetWidth;
- const offsetHeight = gridsterElement.offsetHeight;
- const offsetLeft = gridsterElement.scrollLeft;
- const offsetTop = gridsterElement.scrollTop;
- const elemTopOffset = top - offsetTop;
- const elemBottomOffset = offsetHeight + offsetTop - top - height;
- if (!gridster.$options.disableScrollVertical) {
- if (lastMouse.clientY < e.clientY && elemBottomOffset < scrollSensitivity) {
- cancelN();
- if ((resizeEvent && resizeEventType && !resizeEventType.s) || intervalS) {
- return;
- }
- intervalS = startVertical(1, calculateItemPosition, lastMouse);
- }
- else if (lastMouse.clientY > e.clientY && offsetTop > 0 && elemTopOffset < scrollSensitivity) {
- cancelS();
- if ((resizeEvent && resizeEventType && !resizeEventType.n) || intervalN) {
- return;
- }
- intervalN = startVertical(-1, calculateItemPosition, lastMouse);
- }
- else if (lastMouse.clientY !== e.clientY) {
- cancelVertical();
- }
- }
- const elemRightOffset = offsetLeft + offsetWidth - left - width;
- const elemLeftOffset = left - offsetLeft;
- if (!gridster.$options.disableScrollHorizontal) {
- if (lastMouse.clientX < e.clientX && elemRightOffset <= scrollSensitivity) {
- cancelW();
- if ((resizeEvent && resizeEventType && !resizeEventType.e) || intervalE) {
- return;
- }
- intervalE = startHorizontal(1, calculateItemPosition, lastMouse);
- }
- else if (lastMouse.clientX > e.clientX && offsetLeft > 0 && elemLeftOffset < scrollSensitivity) {
- cancelE();
- if ((resizeEvent && resizeEventType && !resizeEventType.w) || intervalW) {
- return;
- }
- intervalW = startHorizontal(-1, calculateItemPosition, lastMouse);
- }
- else if (lastMouse.clientX !== e.clientX) {
- cancelHorizontal();
- }
- }
- }
- function startVertical(sign, calculateItemPosition, lastMouse) {
- let clientY = lastMouse.clientY;
- return setInterval(() => {
- if (!gridsterElement || sign === -1 && gridsterElement.scrollTop - scrollSpeed < 0) {
- cancelVertical();
- }
- // @ts-ignore
- gridsterElement.scrollTop += sign * scrollSpeed;
- clientY += sign * scrollSpeed;
- calculateItemPosition({ clientX: lastMouse.clientX, clientY });
- }, intervalDuration);
- }
- function startHorizontal(sign, calculateItemPosition, lastMouse) {
- let clientX = lastMouse.clientX;
- return setInterval(() => {
- if (!gridsterElement || sign === -1 && gridsterElement.scrollLeft - scrollSpeed < 0) {
- cancelHorizontal();
- }
- // @ts-ignore
- gridsterElement.scrollLeft += sign * scrollSpeed;
- clientX += sign * scrollSpeed;
- calculateItemPosition({ clientX, clientY: lastMouse.clientY });
- }, intervalDuration);
- }
- function cancelScroll() {
- cancelHorizontal();
- cancelVertical();
- gridsterElement = null;
- }
- function cancelHorizontal() {
- cancelE();
- cancelW();
- }
- function cancelVertical() {
- cancelN();
- cancelS();
- }
- function cancelE() {
- if (intervalE) {
- clearInterval(intervalE);
- intervalE = 0;
- }
- }
- function cancelW() {
- if (intervalW) {
- clearInterval(intervalW);
- intervalW = 0;
- }
- }
- function cancelS() {
- if (intervalS) {
- clearInterval(intervalS);
- intervalS = 0;
- }
- }
- function cancelN() {
- if (intervalN) {
- clearInterval(intervalN);
- intervalN = 0;
- }
- }
- class GridsterSwap {
- constructor(gridsterItem) {
- this.gridsterItem = gridsterItem;
- this.gridster = gridsterItem.gridster;
- }
- destroy() {
- // @ts-ignore
- delete this.gridster;
- // @ts-ignore
- delete this.gridsterItem;
- delete this.swapedItem;
- }
- swapItems() {
- if (this.gridster.$options.swap) {
- this.checkSwapBack();
- this.checkSwap(this.gridsterItem);
- }
- }
- checkSwapBack() {
- if (this.swapedItem) {
- const x = this.swapedItem.$item.x;
- const y = this.swapedItem.$item.y;
- this.swapedItem.$item.x = this.swapedItem.item.x || 0;
- this.swapedItem.$item.y = this.swapedItem.item.y || 0;
- if (this.gridster.checkCollision(this.swapedItem.$item)) {
- this.swapedItem.$item.x = x;
- this.swapedItem.$item.y = y;
- }
- else {
- this.swapedItem.setSize();
- this.gridsterItem.$item.x = this.gridsterItem.item.x || 0;
- this.gridsterItem.$item.y = this.gridsterItem.item.y || 0;
- this.swapedItem = undefined;
- }
- }
- }
- restoreSwapItem() {
- if (this.swapedItem) {
- this.swapedItem.$item.x = this.swapedItem.item.x || 0;
- this.swapedItem.$item.y = this.swapedItem.item.y || 0;
- this.swapedItem.setSize();
- this.swapedItem = undefined;
- }
- }
- setSwapItem() {
- if (this.swapedItem) {
- this.swapedItem.checkItemChanges(this.swapedItem.$item, this.swapedItem.item);
- this.swapedItem = undefined;
- }
- }
- checkSwap(pushedBy) {
- let gridsterItemCollision;
- if (this.gridster.$options.swapWhileDragging) {
- gridsterItemCollision = this.gridster.checkCollisionForSwaping(pushedBy.$item);
- }
- else {
- gridsterItemCollision = this.gridster.checkCollision(pushedBy.$item);
- }
- if (gridsterItemCollision && gridsterItemCollision !== true && gridsterItemCollision.canBeDragged()) {
- const gridsterItemCollide = gridsterItemCollision;
- const copyCollisionX = gridsterItemCollide.$item.x;
- const copyCollisionY = gridsterItemCollide.$item.y;
- const copyX = pushedBy.$item.x;
- const copyY = pushedBy.$item.y;
- gridsterItemCollide.$item.x = pushedBy.item.x || 0;
- gridsterItemCollide.$item.y = pushedBy.item.y || 0;
- pushedBy.$item.x = gridsterItemCollide.item.x || 0;
- pushedBy.$item.y = gridsterItemCollide.item.y || 0;
- if (this.gridster.checkCollision(gridsterItemCollide.$item) || this.gridster.checkCollision(pushedBy.$item)) {
- pushedBy.$item.x = copyX;
- pushedBy.$item.y = copyY;
- gridsterItemCollide.$item.x = copyCollisionX;
- gridsterItemCollide.$item.y = copyCollisionY;
- }
- else {
- gridsterItemCollide.setSize();
- this.swapedItem = gridsterItemCollide;
- if (this.gridster.$options.swapWhileDragging) {
- this.gridsterItem.checkItemChanges(this.gridsterItem.$item, this.gridsterItem.item);
- this.setSwapItem();
- }
- }
- }
- }
- }
- GridsterSwap.ɵfac = function GridsterSwap_Factory(t) { return new (t || GridsterSwap)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](GridsterItemComponentInterface)); };
- GridsterSwap.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: GridsterSwap, factory: GridsterSwap.ɵfac });
- GridsterSwap.ctorParameters = () => [
- { type: GridsterItemComponentInterface }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](GridsterSwap, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: GridsterItemComponentInterface }]; }, null); })();
- class GridsterDraggable {
- constructor(gridsterItem, gridster, zone) {
- this.zone = zone;
- this.collision = false;
- this.gridsterItem = gridsterItem;
- this.gridster = gridster;
- this.lastMouse = {
- clientX: 0,
- clientY: 0
- };
- this.path = [];
- }
- destroy() {
- if (this.gridster.previewStyle) {
- this.gridster.previewStyle(true);
- }
- // @ts-ignore
- delete this.gridsterItem;
- // @ts-ignore
- delete this.gridster;
- // @ts-ignore
- delete this.collision;
- if (this.mousedown) {
- this.mousedown();
- this.touchstart();
- }
- }
- dragStart(e) {
- if (e.which && e.which !== 1) {
- return;
- }
- if (this.gridster.options.draggable && this.gridster.options.draggable.start) {
- this.gridster.options.draggable.start(this.gridsterItem.item, this.gridsterItem, e);
- }
- e.stopPropagation();
- e.preventDefault();
- this.dragFunction = this.dragMove.bind(this);
- this.dragStopFunction = this.dragStop.bind(this);
- this.zone.runOutsideAngular(() => {
- this.mousemove = this.gridsterItem.renderer.listen('document', 'mousemove', this.dragFunction);
- this.touchmove = this.gridster.renderer.listen(this.gridster.el, 'touchmove', this.dragFunction);
- });
- this.mouseup = this.gridsterItem.renderer.listen('document', 'mouseup', this.dragStopFunction);
- this.mouseleave = this.gridsterItem.renderer.listen('document', 'mouseleave', this.dragStopFunction);
- this.cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', this.dragStopFunction);
- this.touchend = this.gridsterItem.renderer.listen('document', 'touchend', this.dragStopFunction);
- this.touchcancel = this.gridsterItem.renderer.listen('document', 'touchcancel', this.dragStopFunction);
- this.gridsterItem.renderer.addClass(this.gridsterItem.el, 'gridster-item-moving');
- this.margin = this.gridster.$options.margin;
- this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;
- this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;
- this.left = this.gridsterItem.left - this.margin;
- this.top = this.gridsterItem.top - this.margin;
- this.originalClientX = e.clientX;
- this.originalClientY = e.clientY;
- this.width = this.gridsterItem.width;
- this.height = this.gridsterItem.height;
- if (this.gridster.$options.dirType === DirTypes.RTL) {
- this.diffLeft = (e.clientX - this.gridster.el.scrollWidth + this.gridsterItem.left);
- }
- else {
- this.diffLeft = e.clientX + this.offsetLeft - this.margin - this.left;
- }
- this.diffTop = e.clientY + this.offsetTop - this.margin - this.top;
- this.gridster.movingItem = this.gridsterItem.$item;
- this.gridster.previewStyle(true);
- this.push = new GridsterPush(this.gridsterItem);
- this.swap = new GridsterSwap(this.gridsterItem);
- this.gridster.dragInProgress = true;
- this.gridster.updateGrid();
- this.path.push({ x: this.gridsterItem.item.x || 0, y: this.gridsterItem.item.y || 0 });
- }
- dragMove(e) {
- e.stopPropagation();
- e.preventDefault();
- GridsterUtils.checkTouchEvent(e);
- this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;
- this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;
- scroll(this.gridster, this.left, this.top, this.width, this.height, e, this.lastMouse, this.calculateItemPositionFromMousePosition.bind(this));
- this.calculateItemPositionFromMousePosition(e);
- }
- calculateItemPositionFromMousePosition(e) {
- if (this.gridster.options.scale) {
- this.calculateItemPositionWithScale(e, this.gridster.options.scale);
- }
- else {
- this.calculateItemPositionWithoutScale(e);
- }
- this.calculateItemPosition();
- this.lastMouse.clientX = e.clientX;
- this.lastMouse.clientY = e.clientY;
- this.zone.run(() => {
- this.gridster.updateGrid();
- });
- }
- calculateItemPositionWithScale(e, scale) {
- if (this.gridster.$options.dirType === DirTypes.RTL) {
- this.left = this.gridster.el.scrollWidth - this.originalClientX + ((e.clientX - this.originalClientX) / scale) + this.diffLeft;
- }
- else {
- this.left = this.originalClientX + ((e.clientX - this.originalClientX) / scale) + this.offsetLeft - this.diffLeft;
- }
- this.top = this.originalClientY + ((e.clientY - this.originalClientY) / scale) + this.offsetTop - this.diffTop;
- }
- calculateItemPositionWithoutScale(e) {
- if (this.gridster.$options.dirType === DirTypes.RTL) {
- this.left = this.gridster.el.scrollWidth - e.clientX + this.diffLeft;
- }
- else {
- this.left = e.clientX + this.offsetLeft - this.diffLeft;
- }
- this.top = e.clientY + this.offsetTop - this.diffTop;
- }
- dragStop(e) {
- e.stopPropagation();
- e.preventDefault();
- cancelScroll();
- this.cancelOnBlur();
- this.mousemove();
- this.mouseup();
- this.mouseleave();
- this.touchmove();
- this.touchend();
- this.touchcancel();
- this.gridsterItem.renderer.removeClass(this.gridsterItem.el, 'gridster-item-moving');
- this.gridster.dragInProgress = false;
- this.gridster.updateGrid();
- this.path = [];
- if (this.gridster.options.draggable && this.gridster.options.draggable.stop) {
- Promise.resolve(this.gridster.options.draggable.stop(this.gridsterItem.item, this.gridsterItem, e))
- .then(this.makeDrag.bind(this), this.cancelDrag.bind(this));
- }
- else {
- this.makeDrag();
- }
- setTimeout(() => {
- if (this.gridster) {
- this.gridster.movingItem = null;
- this.gridster.previewStyle(true);
- }
- });
- }
- cancelDrag() {
- this.gridsterItem.$item.x = this.gridsterItem.item.x || 0;
- this.gridsterItem.$item.y = this.gridsterItem.item.y || 0;
- this.gridsterItem.setSize();
- if (this.push) {
- this.push.restoreItems();
- }
- if (this.swap) {
- this.swap.restoreSwapItem();
- }
- if (this.push) {
- this.push.destroy();
- // @ts-ignore
- delete this.push;
- }
- if (this.swap) {
- this.swap.destroy();
- // @ts-ignore
- delete this.swap;
- }
- }
- makeDrag() {
- if (this.gridster.$options.draggable.dropOverItems && this.gridster.options.draggable
- && this.gridster.options.draggable.dropOverItemsCallback
- && this.collision && this.collision !== true && this.collision.$item) {
- this.gridster.options.draggable.dropOverItemsCallback(this.gridsterItem.item, this.collision.item, this.gridster);
- }
- this.collision = false;
- this.gridsterItem.setSize();
- this.gridsterItem.checkItemChanges(this.gridsterItem.$item, this.gridsterItem.item);
- if (this.push) {
- this.push.setPushedItems();
- }
- if (this.swap) {
- this.swap.setSwapItem();
- }
- if (this.push) {
- this.push.destroy();
- // @ts-ignore
- delete this.push;
- }
- if (this.swap) {
- this.swap.destroy();
- // @ts-ignore
- delete this.swap;
- }
- }
- calculateItemPosition() {
- this.gridster.movingItem = this.gridsterItem.$item;
- this.positionX = this.gridster.pixelsToPositionX(this.left, Math.round);
- this.positionY = this.gridster.pixelsToPositionY(this.top, Math.round);
- this.positionXBackup = this.gridsterItem.$item.x;
- this.positionYBackup = this.gridsterItem.$item.y;
- this.gridsterItem.$item.x = this.positionX;
- if (this.gridster.checkGridCollision(this.gridsterItem.$item)) {
- this.gridsterItem.$item.x = this.positionXBackup;
- }
- this.gridsterItem.$item.y = this.positionY;
- if (this.gridster.checkGridCollision(this.gridsterItem.$item)) {
- this.gridsterItem.$item.y = this.positionYBackup;
- }
- this.gridster.gridRenderer.setCellPosition(this.gridsterItem.renderer, this.gridsterItem.el, this.left, this.top);
- if (this.positionXBackup !== this.gridsterItem.$item.x || this.positionYBackup !== this.gridsterItem.$item.y) {
- const lastPosition = this.path[this.path.length - 1];
- let direction = '';
- if (lastPosition.x < this.gridsterItem.$item.x) {
- direction = this.push.fromWest;
- }
- else if (lastPosition.x > this.gridsterItem.$item.x) {
- direction = this.push.fromEast;
- }
- else if (lastPosition.y < this.gridsterItem.$item.y) {
- direction = this.push.fromNorth;
- }
- else if (lastPosition.y > this.gridsterItem.$item.y) {
- direction = this.push.fromSouth;
- }
- this.push.pushItems(direction, this.gridster.$options.disablePushOnDrag);
- this.swap.swapItems();
- this.collision = this.gridster.checkCollision(this.gridsterItem.$item);
- if (this.collision) {
- this.gridsterItem.$item.x = this.positionXBackup;
- this.gridsterItem.$item.y = this.positionYBackup;
- if (this.gridster.$options.draggable.dropOverItems && this.collision !== true && this.collision.$item) {
- this.gridster.movingItem = null;
- }
- }
- else {
- this.path.push({ x: this.gridsterItem.$item.x, y: this.gridsterItem.$item.y });
- }
- this.push.checkPushBack();
- }
- this.gridster.previewStyle(true);
- }
- toggle() {
- const enableDrag = this.gridsterItem.canBeDragged();
- if (!this.enabled && enableDrag) {
- this.enabled = !this.enabled;
- this.dragStartFunction = this.dragStartDelay.bind(this);
- this.mousedown = this.gridsterItem.renderer.listen(this.gridsterItem.el, 'mousedown', this.dragStartFunction);
- this.touchstart = this.gridsterItem.renderer.listen(this.gridsterItem.el, 'touchstart', this.dragStartFunction);
- }
- else if (this.enabled && !enableDrag) {
- this.enabled = !this.enabled;
- this.mousedown();
- this.touchstart();
- }
- }
- dragStartDelay(e) {
- if (e.target.hasAttribute('class') && e.target.getAttribute('class').split(' ').indexOf('gridster-item-resizable-handler') > -1) {
- return;
- }
- if (GridsterUtils.checkContentClassForEvent(this.gridster, e)) {
- return;
- }
- GridsterUtils.checkTouchEvent(e);
- if (!this.gridster.$options.draggable.delayStart) {
- this.dragStart(e);
- return;
- }
- const timeout = setTimeout(() => {
- this.dragStart(e);
- cancelDrag();
- }, this.gridster.$options.draggable.delayStart);
- const cancelMouse = this.gridsterItem.renderer.listen('document', 'mouseup', cancelDrag);
- const cancelMouseLeave = this.gridsterItem.renderer.listen('document', 'mouseleave', cancelDrag);
- const cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', cancelDrag);
- const cancelTouchMove = this.gridsterItem.renderer.listen('document', 'touchmove', cancelMove);
- const cancelTouchEnd = this.gridsterItem.renderer.listen('document', 'touchend', cancelDrag);
- const cancelTouchCancel = this.gridsterItem.renderer.listen('document', 'touchcancel', cancelDrag);
- function cancelMove(eventMove) {
- GridsterUtils.checkTouchEvent(eventMove);
- if (Math.abs(eventMove.clientX - e.clientX) > 9 || Math.abs(eventMove.clientY - e.clientY) > 9) {
- cancelDrag();
- }
- }
- function cancelDrag() {
- clearTimeout(timeout);
- cancelOnBlur();
- cancelMouse();
- cancelMouseLeave();
- cancelTouchMove();
- cancelTouchEnd();
- cancelTouchCancel();
- }
- }
- }
- GridsterDraggable.ɵfac = function GridsterDraggable_Factory(t) { return new (t || GridsterDraggable)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](GridsterItemComponentInterface), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](GridsterComponentInterface), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"])); };
- GridsterDraggable.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: GridsterDraggable, factory: GridsterDraggable.ɵfac });
- GridsterDraggable.ctorParameters = () => [
- { type: GridsterItemComponentInterface },
- { type: GridsterComponentInterface },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](GridsterDraggable, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: GridsterItemComponentInterface }, { type: GridsterComponentInterface }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }]; }, null); })();
- class GridsterPushResize {
- constructor(gridsterItem) {
- this.pushedItems = [];
- this.pushedItemsPath = [];
- this.gridsterItem = gridsterItem;
- this.gridster = gridsterItem.gridster;
- this.tryPattern = {
- fromEast: this.tryWest,
- fromWest: this.tryEast,
- fromNorth: this.trySouth,
- fromSouth: this.tryNorth
- };
- this.fromSouth = 'fromSouth';
- this.fromNorth = 'fromNorth';
- this.fromEast = 'fromEast';
- this.fromWest = 'fromWest';
- }
- destroy() {
- // @ts-ignore
- delete this.gridster;
- // @ts-ignore
- delete this.gridsterItem;
- }
- pushItems(direction) {
- if (this.gridster.$options.pushResizeItems) {
- return this.push(this.gridsterItem, direction);
- }
- else {
- return false;
- }
- }
- restoreItems() {
- let i = 0;
- const l = this.pushedItems.length;
- let pushedItem;
- for (; i < l; i++) {
- pushedItem = this.pushedItems[i];
- pushedItem.$item.x = pushedItem.item.x || 0;
- pushedItem.$item.y = pushedItem.item.y || 0;
- pushedItem.$item.cols = pushedItem.item.cols || 1;
- pushedItem.$item.row = pushedItem.item.row || 1;
- pushedItem.setSize();
- }
- this.pushedItems = [];
- this.pushedItemsPath = [];
- }
- setPushedItems() {
- let i = 0;
- const l = this.pushedItems.length;
- let pushedItem;
- for (; i < l; i++) {
- pushedItem = this.pushedItems[i];
- pushedItem.checkItemChanges(pushedItem.$item, pushedItem.item);
- }
- this.pushedItems = [];
- this.pushedItemsPath = [];
- }
- checkPushBack() {
- let i = this.pushedItems.length - 1;
- let change = false;
- for (; i > -1; i--) {
- if (this.checkPushedItem(this.pushedItems[i], i)) {
- change = true;
- }
- }
- if (change) {
- this.checkPushBack();
- }
- }
- push(gridsterItem, direction) {
- const gridsterItemCollision = this.gridster.checkCollision(gridsterItem.$item);
- if (gridsterItemCollision && gridsterItemCollision !== true &&
- gridsterItemCollision !== this.gridsterItem && gridsterItemCollision.canBeResized()) {
- if (this.tryPattern[direction].call(this, gridsterItemCollision, gridsterItem, direction)) {
- return true;
- }
- }
- else if (gridsterItemCollision === false) {
- return true;
- }
- return false;
- }
- trySouth(gridsterItemCollide, gridsterItem, direction) {
- const backUpY = gridsterItemCollide.$item.y;
- const backUpRows = gridsterItemCollide.$item.rows;
- gridsterItemCollide.$item.y = gridsterItem.$item.y + gridsterItem.$item.rows;
- gridsterItemCollide.$item.rows = backUpRows + backUpY - gridsterItemCollide.$item.y;
- if (!this.gridster.checkCollisionTwoItems(gridsterItemCollide.$item, gridsterItem.$item)
- && !this.gridster.checkGridCollision(gridsterItemCollide.$item)) {
- gridsterItemCollide.setSize();
- this.addToPushed(gridsterItemCollide);
- this.push(gridsterItem, direction);
- return true;
- }
- else {
- gridsterItemCollide.$item.y = backUpY;
- gridsterItemCollide.$item.rows = backUpRows;
- }
- return false;
- }
- tryNorth(gridsterItemCollide, gridsterItem, direction) {
- const backUpRows = gridsterItemCollide.$item.rows;
- gridsterItemCollide.$item.rows = gridsterItem.$item.y - gridsterItemCollide.$item.y;
- if (!this.gridster.checkCollisionTwoItems(gridsterItemCollide.$item, gridsterItem.$item)
- && !this.gridster.checkGridCollision(gridsterItemCollide.$item)) {
- gridsterItemCollide.setSize();
- this.addToPushed(gridsterItemCollide);
- this.push(gridsterItem, direction);
- return true;
- }
- else {
- gridsterItemCollide.$item.rows = backUpRows;
- }
- return false;
- }
- tryEast(gridsterItemCollide, gridsterItem, direction) {
- const backUpX = gridsterItemCollide.$item.x;
- const backUpCols = gridsterItemCollide.$item.cols;
- gridsterItemCollide.$item.x = gridsterItem.$item.x + gridsterItem.$item.cols;
- gridsterItemCollide.$item.cols = backUpCols + backUpX - gridsterItemCollide.$item.x;
- if (!this.gridster.checkCollisionTwoItems(gridsterItemCollide.$item, gridsterItem.$item)
- && !this.gridster.checkGridCollision(gridsterItemCollide.$item)) {
- gridsterItemCollide.setSize();
- this.addToPushed(gridsterItemCollide);
- this.push(gridsterItem, direction);
- return true;
- }
- else {
- gridsterItemCollide.$item.x = backUpX;
- gridsterItemCollide.$item.cols = backUpCols;
- }
- return false;
- }
- tryWest(gridsterItemCollide, gridsterItem, direction) {
- const backUpCols = gridsterItemCollide.$item.cols;
- gridsterItemCollide.$item.cols = gridsterItem.$item.x - gridsterItemCollide.$item.x;
- if (!this.gridster.checkCollisionTwoItems(gridsterItemCollide.$item, gridsterItem.$item)
- && !this.gridster.checkGridCollision(gridsterItemCollide.$item)) {
- gridsterItemCollide.setSize();
- this.addToPushed(gridsterItemCollide);
- this.push(gridsterItem, direction);
- return true;
- }
- else {
- gridsterItemCollide.$item.cols = backUpCols;
- }
- return false;
- }
- addToPushed(gridsterItem) {
- if (this.pushedItems.indexOf(gridsterItem) < 0) {
- this.pushedItems.push(gridsterItem);
- this.pushedItemsPath.push([
- {
- x: gridsterItem.item.x || 0,
- y: gridsterItem.item.y || 0,
- cols: gridsterItem.item.cols || 0,
- rows: gridsterItem.item.rows || 0
- },
- {
- x: gridsterItem.$item.x,
- y: gridsterItem.$item.y,
- cols: gridsterItem.$item.cols,
- rows: gridsterItem.$item.rows
- }
- ]);
- }
- else {
- const i = this.pushedItems.indexOf(gridsterItem);
- this.pushedItemsPath[i].push({
- x: gridsterItem.$item.x,
- y: gridsterItem.$item.y,
- cols: gridsterItem.$item.cols,
- rows: gridsterItem.$item.rows
- });
- }
- }
- removeFromPushed(i) {
- if (i > -1) {
- this.pushedItems.splice(i, 1);
- this.pushedItemsPath.splice(i, 1);
- }
- }
- checkPushedItem(pushedItem, i) {
- const path = this.pushedItemsPath[i];
- let j = path.length - 2;
- let lastPosition;
- let x;
- let y;
- let cols;
- let rows;
- for (; j > -1; j--) {
- lastPosition = path[j];
- x = pushedItem.$item.x;
- y = pushedItem.$item.y;
- cols = pushedItem.$item.cols;
- rows = pushedItem.$item.rows;
- pushedItem.$item.x = lastPosition.x;
- pushedItem.$item.y = lastPosition.y;
- pushedItem.$item.cols = lastPosition.cols;
- pushedItem.$item.rows = lastPosition.rows;
- if (!this.gridster.findItemWithItem(pushedItem.$item)) {
- pushedItem.setSize();
- path.splice(j + 1, path.length - 1 - j);
- }
- else {
- pushedItem.$item.x = x;
- pushedItem.$item.y = y;
- pushedItem.$item.cols = cols;
- pushedItem.$item.rows = rows;
- }
- }
- if (path.length < 2) {
- this.removeFromPushed(i);
- return true;
- }
- return false;
- }
- }
- GridsterPushResize.ɵfac = function GridsterPushResize_Factory(t) { return new (t || GridsterPushResize)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](GridsterItemComponentInterface)); };
- GridsterPushResize.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: GridsterPushResize, factory: GridsterPushResize.ɵfac });
- GridsterPushResize.ctorParameters = () => [
- { type: GridsterItemComponentInterface }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](GridsterPushResize, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: GridsterItemComponentInterface }]; }, null); })();
- class GridsterResizable {
- constructor(gridsterItem, gridster, zone) {
- this.zone = zone;
- this.gridsterItem = gridsterItem;
- this.gridster = gridster;
- this.lastMouse = {
- clientX: 0,
- clientY: 0
- };
- this.itemBackup = [0, 0, 0, 0];
- this.resizeEventScrollType = { w: false, e: false, n: false, s: false };
- }
- destroy() {
- if (this.gridster.previewStyle) {
- this.gridster.previewStyle();
- }
- // @ts-ignore
- delete this.gridsterItem;
- // @ts-ignore
- delete this.gridster;
- }
- dragStart(e) {
- var _a, _b, _c;
- if (e.which && e.which !== 1) {
- return;
- }
- if (this.gridster.options.resizable && this.gridster.options.resizable.start) {
- this.gridster.options.resizable.start(this.gridsterItem.item, this.gridsterItem, e);
- }
- e.stopPropagation();
- e.preventDefault();
- this.dragFunction = this.dragMove.bind(this);
- this.dragStopFunction = this.dragStop.bind(this);
- this.zone.runOutsideAngular(() => {
- this.mousemove = this.gridsterItem.renderer.listen('document', 'mousemove', this.dragFunction);
- this.touchmove = this.gridster.renderer.listen(this.gridster.el, 'touchmove', this.dragFunction);
- });
- this.mouseup = this.gridsterItem.renderer.listen('document', 'mouseup', this.dragStopFunction);
- this.mouseleave = this.gridsterItem.renderer.listen('document', 'mouseleave', this.dragStopFunction);
- this.cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', this.dragStopFunction);
- this.touchend = this.gridsterItem.renderer.listen('document', 'touchend', this.dragStopFunction);
- this.touchcancel = this.gridsterItem.renderer.listen('document', 'touchcancel', this.dragStopFunction);
- this.gridsterItem.renderer.addClass(this.gridsterItem.el, 'gridster-item-resizing');
- this.lastMouse.clientX = e.clientX;
- this.lastMouse.clientY = e.clientY;
- this.left = this.gridsterItem.left;
- this.top = this.gridsterItem.top;
- this.originalClientX = e.clientX;
- this.originalClientY = e.clientY;
- this.width = this.gridsterItem.width;
- this.height = this.gridsterItem.height;
- this.bottom = this.gridsterItem.top + this.gridsterItem.height;
- this.right = this.gridsterItem.left + this.gridsterItem.width;
- this.margin = this.gridster.$options.margin;
- this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;
- this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;
- this.diffLeft = e.clientX + this.offsetLeft - this.left;
- this.diffRight = e.clientX + this.offsetLeft - this.right;
- this.diffTop = e.clientY + this.offsetTop - this.top;
- this.diffBottom = e.clientY + this.offsetTop - this.bottom;
- this.minHeight = this.gridster.positionYToPixels(this.gridsterItem.$item.minItemRows || this.gridster.$options.minItemRows)
- - this.margin;
- this.minWidth = this.gridster.positionXToPixels(this.gridsterItem.$item.minItemCols || this.gridster.$options.minItemCols)
- - this.margin;
- this.gridster.movingItem = this.gridsterItem.$item;
- this.gridster.previewStyle();
- this.push = new GridsterPush(this.gridsterItem);
- this.pushResize = new GridsterPushResize(this.gridsterItem);
- this.gridster.dragInProgress = true;
- this.gridster.updateGrid();
- if (((_a = e.target) === null || _a === void 0 ? void 0 : _a.hasAttribute('class')) && e.target.getAttribute('class').split(' ').indexOf('handle-n') > -1) {
- this.resizeEventScrollType.n = true;
- this.directionFunction = this.handleN;
- }
- else if (((_b = e.target) === null || _b === void 0 ? void 0 : _b.hasAttribute('class')) && e.target.getAttribute('class').split(' ').indexOf('handle-w') > -1) {
- if (this.gridster.$options.dirType === DirTypes.RTL) {
- this.resizeEventScrollType.e = true;
- this.directionFunction = this.handleE;
- }
- else {
- this.resizeEventScrollType.w = true;
- this.directionFunction = this.handleW;
- }
- }
- else if (((_c = e.target) === null || _c === void 0 ? void 0 : _c.hasAttribute('class')) && e.target.getAttribute('class').split(' ').indexOf('handle-s') > -1) {
- this.resizeEventScrollType.s = true;
- this.directionFunction = this.handleS;
- }
- else if (e.target.hasAttribute('class') && e.target.getAttribute('class').split(' ').indexOf('handle-e') > -1) {
- if (this.gridster.$options.dirType === DirTypes.RTL) {
- this.resizeEventScrollType.w = true;
- this.directionFunction = this.handleW;
- }
- else {
- this.resizeEventScrollType.e = true;
- this.directionFunction = this.handleE;
- }
- }
- else if (e.target.hasAttribute('class') && e.target.getAttribute('class').split(' ').indexOf('handle-nw') > -1) {
- if (this.gridster.$options.dirType === DirTypes.RTL) {
- this.resizeEventScrollType.n = true;
- this.resizeEventScrollType.e = true;
- this.directionFunction = this.handleNE;
- }
- else {
- this.resizeEventScrollType.n = true;
- this.resizeEventScrollType.w = true;
- this.directionFunction = this.handleNW;
- }
- }
- else if (e.target.hasAttribute('class') && e.target.getAttribute('class').split(' ').indexOf('handle-ne') > -1) {
- if (this.gridster.$options.dirType === DirTypes.RTL) {
- this.resizeEventScrollType.n = true;
- this.resizeEventScrollType.w = true;
- this.directionFunction = this.handleNW;
- }
- else {
- this.resizeEventScrollType.n = true;
- this.resizeEventScrollType.e = true;
- this.directionFunction = this.handleNE;
- }
- }
- else if (e.target.hasAttribute('class') && e.target.getAttribute('class').split(' ').indexOf('handle-sw') > -1) {
- if (this.gridster.$options.dirType === DirTypes.RTL) {
- this.resizeEventScrollType.s = true;
- this.resizeEventScrollType.e = true;
- this.directionFunction = this.handleSE;
- }
- else {
- this.resizeEventScrollType.s = true;
- this.resizeEventScrollType.w = true;
- this.directionFunction = this.handleSW;
- }
- }
- else if (e.target.hasAttribute('class') && e.target.getAttribute('class').split(' ').indexOf('handle-se') > -1) {
- if (this.gridster.$options.dirType === DirTypes.RTL) {
- this.resizeEventScrollType.s = true;
- this.resizeEventScrollType.w = true;
- this.directionFunction = this.handleSW;
- }
- else {
- this.resizeEventScrollType.s = true;
- this.resizeEventScrollType.e = true;
- this.directionFunction = this.handleSE;
- }
- }
- }
- dragMove(e) {
- e.stopPropagation();
- e.preventDefault();
- GridsterUtils.checkTouchEvent(e);
- this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;
- this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;
- scroll(this.gridster, this.left, this.top, this.width, this.height, e, this.lastMouse, this.directionFunction.bind(this), true, this.resizeEventScrollType);
- const scale = this.gridster.options.scale || 1;
- this.directionFunction({
- clientX: this.originalClientX + (e.clientX - this.originalClientX) / scale,
- clientY: this.originalClientY + (e.clientY - this.originalClientY) / scale
- });
- this.lastMouse.clientX = e.clientX;
- this.lastMouse.clientY = e.clientY;
- this.zone.run(() => {
- this.gridster.updateGrid();
- });
- }
- dragStop(e) {
- e.stopPropagation();
- e.preventDefault();
- cancelScroll();
- this.mousemove();
- this.mouseup();
- this.mouseleave();
- this.cancelOnBlur();
- this.touchmove();
- this.touchend();
- this.touchcancel();
- this.gridster.dragInProgress = false;
- this.gridster.updateGrid();
- if (this.gridster.options.resizable && this.gridster.options.resizable.stop) {
- Promise.resolve(this.gridster.options.resizable.stop(this.gridsterItem.item, this.gridsterItem, e))
- .then(this.makeResize.bind(this), this.cancelResize.bind(this));
- }
- else {
- this.makeResize();
- }
- setTimeout(() => {
- this.gridsterItem.renderer.removeClass(this.gridsterItem.el, 'gridster-item-resizing');
- if (this.gridster) {
- this.gridster.movingItem = null;
- this.gridster.previewStyle();
- }
- });
- }
- cancelResize() {
- this.gridsterItem.$item.cols = this.gridsterItem.item.cols || 1;
- this.gridsterItem.$item.rows = this.gridsterItem.item.rows || 1;
- this.gridsterItem.$item.x = this.gridsterItem.item.x || 0;
- this.gridsterItem.$item.y = this.gridsterItem.item.y || 0;
- this.gridsterItem.setSize();
- this.push.restoreItems();
- this.pushResize.restoreItems();
- this.push.destroy();
- // @ts-ignore
- delete this.push;
- this.pushResize.destroy();
- // @ts-ignore
- delete this.pushResize;
- }
- makeResize() {
- this.gridsterItem.setSize();
- this.gridsterItem.checkItemChanges(this.gridsterItem.$item, this.gridsterItem.item);
- this.push.setPushedItems();
- this.pushResize.setPushedItems();
- this.push.destroy();
- // @ts-ignore
- delete this.push;
- this.pushResize.destroy();
- // @ts-ignore
- delete this.pushResize;
- }
- handleN(e) {
- this.top = e.clientY + this.offsetTop - this.diffTop;
- this.height = this.bottom - this.top;
- if (this.minHeight > this.height) {
- this.height = this.minHeight;
- this.top = this.bottom - this.minHeight;
- }
- this.newPosition = this.gridster.pixelsToPositionY(this.top + this.margin, Math.floor);
- if (this.gridsterItem.$item.y !== this.newPosition) {
- this.itemBackup[1] = this.gridsterItem.$item.y;
- this.itemBackup[3] = this.gridsterItem.$item.rows;
- this.gridsterItem.$item.rows += this.gridsterItem.$item.y - this.newPosition;
- this.gridsterItem.$item.y = this.newPosition;
- this.pushResize.pushItems(this.pushResize.fromSouth);
- this.push.pushItems(this.push.fromSouth, this.gridster.$options.disablePushOnResize);
- if (this.gridster.checkCollision(this.gridsterItem.$item)) {
- this.gridsterItem.$item.y = this.itemBackup[1];
- this.gridsterItem.$item.rows = this.itemBackup[3];
- this.setItemTop(this.gridster.positionYToPixels(this.gridsterItem.$item.y));
- this.setItemHeight(this.gridster.positionYToPixels(this.gridsterItem.$item.rows) - this.margin);
- return;
- }
- else {
- this.gridster.previewStyle();
- }
- this.pushResize.checkPushBack();
- this.push.checkPushBack();
- }
- this.setItemTop(this.top);
- this.setItemHeight(this.height);
- }
- handleW(e) {
- this.left = e.clientX + this.offsetLeft - this.diffLeft;
- this.width = this.right - this.left;
- if (this.minWidth > this.width) {
- this.width = this.minWidth;
- this.left = this.right - this.minWidth;
- }
- this.newPosition = this.gridster.pixelsToPositionX(this.left + this.margin, Math.floor);
- if (this.gridsterItem.$item.x !== this.newPosition) {
- this.itemBackup[0] = this.gridsterItem.$item.x;
- this.itemBackup[2] = this.gridsterItem.$item.cols;
- this.gridsterItem.$item.cols += this.gridsterItem.$item.x - this.newPosition;
- this.gridsterItem.$item.x = this.newPosition;
- this.pushResize.pushItems(this.pushResize.fromEast);
- this.push.pushItems(this.push.fromEast, this.gridster.$options.disablePushOnResize);
- if (this.gridster.checkCollision(this.gridsterItem.$item)) {
- this.gridsterItem.$item.x = this.itemBackup[0];
- this.gridsterItem.$item.cols = this.itemBackup[2];
- this.setItemLeft(this.gridster.positionXToPixels(this.gridsterItem.$item.x));
- this.setItemWidth(this.gridster.positionXToPixels(this.gridsterItem.$item.cols) - this.margin);
- return;
- }
- else {
- this.gridster.previewStyle();
- }
- this.pushResize.checkPushBack();
- this.push.checkPushBack();
- }
- this.setItemLeft(this.left);
- this.setItemWidth(this.width);
- }
- handleS(e) {
- this.height = e.clientY + this.offsetTop - this.diffBottom - this.top;
- if (this.minHeight > this.height) {
- this.height = this.minHeight;
- }
- this.bottom = this.top + this.height;
- this.newPosition = this.gridster.pixelsToPositionY(this.bottom, Math.ceil);
- if ((this.gridsterItem.$item.y + this.gridsterItem.$item.rows) !== this.newPosition) {
- this.itemBackup[3] = this.gridsterItem.$item.rows;
- this.gridsterItem.$item.rows = this.newPosition - this.gridsterItem.$item.y;
- this.pushResize.pushItems(this.pushResize.fromNorth);
- this.push.pushItems(this.push.fromNorth, this.gridster.$options.disablePushOnResize);
- if (this.gridster.checkCollision(this.gridsterItem.$item)) {
- this.gridsterItem.$item.rows = this.itemBackup[3];
- this.setItemHeight(this.gridster.positionYToPixels(this.gridsterItem.$item.rows) - this.margin);
- return;
- }
- else {
- this.gridster.previewStyle();
- }
- this.pushResize.checkPushBack();
- this.push.checkPushBack();
- }
- this.setItemHeight(this.height);
- }
- handleE(e) {
- this.width = e.clientX + this.offsetLeft - this.diffRight - this.left;
- if (this.minWidth > this.width) {
- this.width = this.minWidth;
- }
- this.right = this.left + this.width;
- this.newPosition = this.gridster.pixelsToPositionX(this.right, Math.ceil);
- if ((this.gridsterItem.$item.x + this.gridsterItem.$item.cols) !== this.newPosition) {
- this.itemBackup[2] = this.gridsterItem.$item.cols;
- this.gridsterItem.$item.cols = this.newPosition - this.gridsterItem.$item.x;
- this.pushResize.pushItems(this.pushResize.fromWest);
- this.push.pushItems(this.push.fromWest, this.gridster.$options.disablePushOnResize);
- if (this.gridster.checkCollision(this.gridsterItem.$item)) {
- this.gridsterItem.$item.cols = this.itemBackup[2];
- this.setItemWidth(this.gridster.positionXToPixels(this.gridsterItem.$item.cols) - this.margin);
- return;
- }
- else {
- this.gridster.previewStyle();
- }
- this.pushResize.checkPushBack();
- this.push.checkPushBack();
- }
- this.setItemWidth(this.width);
- }
- handleNW(e) {
- this.handleN(e);
- this.handleW(e);
- }
- handleNE(e) {
- this.handleN(e);
- this.handleE(e);
- }
- handleSW(e) {
- this.handleS(e);
- this.handleW(e);
- }
- handleSE(e) {
- this.handleS(e);
- this.handleE(e);
- }
- toggle() {
- this.resizeEnabled = this.gridsterItem.canBeResized();
- }
- dragStartDelay(e) {
- GridsterUtils.checkTouchEvent(e);
- if (!this.gridster.$options.resizable.delayStart) {
- this.dragStart(e);
- return;
- }
- const timeout = setTimeout(() => {
- this.dragStart(e);
- cancelDrag();
- }, this.gridster.$options.resizable.delayStart);
- const cancelMouse = this.gridsterItem.renderer.listen('document', 'mouseup', cancelDrag);
- const cancelMouseLeave = this.gridsterItem.renderer.listen('document', 'mouseleave', cancelDrag);
- const cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', cancelDrag);
- const cancelTouchMove = this.gridsterItem.renderer.listen('document', 'touchmove', cancelMove);
- const cancelTouchEnd = this.gridsterItem.renderer.listen('document', 'touchend', cancelDrag);
- const cancelTouchCancel = this.gridsterItem.renderer.listen('document', 'touchcancel', cancelDrag);
- function cancelMove(eventMove) {
- GridsterUtils.checkTouchEvent(eventMove);
- if (Math.abs(eventMove.clientX - e.clientX) > 9
- || Math.abs(eventMove.clientY - e.clientY) > 9) {
- cancelDrag();
- }
- }
- function cancelDrag() {
- clearTimeout(timeout);
- cancelOnBlur();
- cancelMouse();
- cancelMouseLeave();
- cancelTouchMove();
- cancelTouchEnd();
- cancelTouchCancel();
- }
- }
- setItemTop(top) {
- this.gridster.gridRenderer.setCellPosition(this.gridsterItem.renderer, this.gridsterItem.el, this.left, top);
- }
- setItemLeft(left) {
- this.gridster.gridRenderer.setCellPosition(this.gridsterItem.renderer, this.gridsterItem.el, left, this.top);
- }
- setItemHeight(height) {
- this.gridsterItem.renderer.setStyle(this.gridsterItem.el, 'height', height + 'px');
- }
- setItemWidth(width) {
- this.gridsterItem.renderer.setStyle(this.gridsterItem.el, 'width', width + 'px');
- }
- }
- GridsterResizable.ɵfac = function GridsterResizable_Factory(t) { return new (t || GridsterResizable)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](GridsterItemComponentInterface), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](GridsterComponentInterface), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"])); };
- GridsterResizable.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: GridsterResizable, factory: GridsterResizable.ɵfac });
- GridsterResizable.ctorParameters = () => [
- { type: GridsterItemComponentInterface },
- { type: GridsterComponentInterface },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](GridsterResizable, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: GridsterItemComponentInterface }, { type: GridsterComponentInterface }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }]; }, null); })();
- class GridsterItemComponent {
- constructor(el, gridster, renderer, zone) {
- this.renderer = renderer;
- this.zone = zone;
- this.el = el.nativeElement;
- this.$item = {
- cols: -1,
- rows: -1,
- x: -1,
- y: -1,
- };
- this.gridster = gridster;
- this.drag = new GridsterDraggable(this, gridster, this.zone);
- this.resize = new GridsterResizable(this, gridster, this.zone);
- }
- get zIndex() {
- return this.getLayerIndex() + this.gridster.$options.baseLayerIndex;
- }
- ngOnInit() {
- this.gridster.addItem(this);
- }
- ngOnChanges(changes) {
- if (changes.item) {
- this.updateOptions();
- if (!this.init) {
- this.gridster.calculateLayoutDebounce();
- }
- }
- }
- updateOptions() {
- this.$item = GridsterUtils.merge(this.$item, this.item, {
- cols: undefined,
- rows: undefined,
- x: undefined,
- y: undefined,
- layerIndex: undefined,
- dragEnabled: undefined,
- resizeEnabled: undefined,
- compactEnabled: undefined,
- maxItemRows: undefined,
- minItemRows: undefined,
- maxItemCols: undefined,
- minItemCols: undefined,
- maxItemArea: undefined,
- minItemArea: undefined,
- });
- }
- ngOnDestroy() {
- this.gridster.removeItem(this);
- // @ts-ignore
- delete this.gridster;
- this.drag.destroy();
- // @ts-ignore
- delete this.drag;
- this.resize.destroy();
- // @ts-ignore
- delete this.resize;
- }
- setSize() {
- this.renderer.setStyle(this.el, 'display', this.notPlaced ? '' : 'block');
- this.gridster.gridRenderer.updateItem(this.el, this.$item, this.renderer);
- this.updateItemSize();
- }
- updateItemSize() {
- const top = this.$item.y * this.gridster.curRowHeight;
- const left = this.$item.x * this.gridster.curColWidth;
- const width = this.$item.cols * this.gridster.curColWidth - this.gridster.$options.margin;
- const height = this.$item.rows * this.gridster.curRowHeight - this.gridster.$options.margin;
- this.top = top;
- this.left = left;
- if (!this.init && width > 0 && height > 0) {
- this.init = true;
- if (this.item.initCallback) {
- this.item.initCallback(this.item, this);
- }
- if (this.gridster.options.itemInitCallback) {
- this.gridster.options.itemInitCallback(this.item, this);
- }
- if (this.gridster.$options.scrollToNewItems) {
- this.el.scrollIntoView(false);
- }
- }
- if (width !== this.width || height !== this.height) {
- this.width = width;
- this.height = height;
- if (this.gridster.options.itemResizeCallback) {
- this.gridster.options.itemResizeCallback(this.item, this);
- }
- }
- }
- itemChanged() {
- if (this.gridster.options.itemChangeCallback) {
- this.gridster.options.itemChangeCallback(this.item, this);
- }
- }
- checkItemChanges(newValue, oldValue) {
- if (newValue.rows === oldValue.rows && newValue.cols === oldValue.cols && newValue.x === oldValue.x && newValue.y === oldValue.y) {
- return;
- }
- if (this.gridster.checkCollision(this.$item)) {
- this.$item.x = oldValue.x || 0;
- this.$item.y = oldValue.y || 0;
- this.$item.cols = oldValue.cols || 1;
- this.$item.rows = oldValue.rows || 1;
- this.setSize();
- }
- else {
- this.item.cols = this.$item.cols;
- this.item.rows = this.$item.rows;
- this.item.x = this.$item.x;
- this.item.y = this.$item.y;
- this.gridster.calculateLayoutDebounce();
- this.itemChanged();
- }
- }
- canBeDragged() {
- return !this.gridster.mobile &&
- (this.$item.dragEnabled === undefined ? this.gridster.$options.draggable.enabled : this.$item.dragEnabled);
- }
- canBeResized() {
- return !this.gridster.mobile &&
- (this.$item.resizeEnabled === undefined ? this.gridster.$options.resizable.enabled : this.$item.resizeEnabled);
- }
- bringToFront(offset) {
- if (offset && offset <= 0) {
- return;
- }
- const layerIndex = this.getLayerIndex();
- const topIndex = this.gridster.$options.maxLayerIndex;
- if (layerIndex < topIndex) {
- const targetIndex = offset ? layerIndex + offset : topIndex;
- this.item.layerIndex = this.$item.layerIndex = targetIndex > topIndex ? topIndex : targetIndex;
- }
- }
- sendToBack(offset) {
- if (offset && offset <= 0) {
- return;
- }
- const layerIndex = this.getLayerIndex();
- if (layerIndex > 0) {
- const targetIndex = offset ? layerIndex - offset : 0;
- this.item.layerIndex = this.$item.layerIndex = targetIndex < 0 ? 0 : targetIndex;
- }
- }
- getLayerIndex() {
- if (this.item.layerIndex !== undefined) {
- return this.item.layerIndex;
- }
- if (this.gridster.$options.defaultLayerIndex !== undefined) {
- return this.gridster.$options.defaultLayerIndex;
- }
- return 0;
- }
- }
- GridsterItemComponent.ɵfac = function GridsterItemComponent_Factory(t) { return new (t || GridsterItemComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](GridsterComponent), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"])); };
- GridsterItemComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: GridsterItemComponent, selectors: [["gridster-item"]], hostVars: 2, hostBindings: function GridsterItemComponent_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("z-index", ctx.zIndex);
- } }, inputs: { item: "item" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], ngContentSelectors: _c0, decls: 9, vars: 8, consts: [["class", "gridster-item-resizable-handler handle-s", 3, "mousedown", "touchstart", 4, "ngIf"], ["class", "gridster-item-resizable-handler handle-e", 3, "mousedown", "touchstart", 4, "ngIf"], ["class", "gridster-item-resizable-handler handle-n", 3, "mousedown", "touchstart", 4, "ngIf"], ["class", "gridster-item-resizable-handler handle-w", 3, "mousedown", "touchstart", 4, "ngIf"], ["class", "gridster-item-resizable-handler handle-se", 3, "mousedown", "touchstart", 4, "ngIf"], ["class", "gridster-item-resizable-handler handle-ne", 3, "mousedown", "touchstart", 4, "ngIf"], ["class", "gridster-item-resizable-handler handle-sw", 3, "mousedown", "touchstart", 4, "ngIf"], ["class", "gridster-item-resizable-handler handle-nw", 3, "mousedown", "touchstart", 4, "ngIf"], [1, "gridster-item-resizable-handler", "handle-s", 3, "mousedown", "touchstart"], [1, "gridster-item-resizable-handler", "handle-e", 3, "mousedown", "touchstart"], [1, "gridster-item-resizable-handler", "handle-n", 3, "mousedown", "touchstart"], [1, "gridster-item-resizable-handler", "handle-w", 3, "mousedown", "touchstart"], [1, "gridster-item-resizable-handler", "handle-se", 3, "mousedown", "touchstart"], [1, "gridster-item-resizable-handler", "handle-ne", 3, "mousedown", "touchstart"], [1, "gridster-item-resizable-handler", "handle-sw", 3, "mousedown", "touchstart"], [1, "gridster-item-resizable-handler", "handle-nw", 3, "mousedown", "touchstart"]], template: function GridsterItemComponent_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, GridsterItemComponent_div_1_Template, 1, 0, "div", 0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, GridsterItemComponent_div_2_Template, 1, 0, "div", 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, GridsterItemComponent_div_3_Template, 1, 0, "div", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, GridsterItemComponent_div_4_Template, 1, 0, "div", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](5, GridsterItemComponent_div_5_Template, 1, 0, "div", 4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](6, GridsterItemComponent_div_6_Template, 1, 0, "div", 5);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](7, GridsterItemComponent_div_7_Template, 1, 0, "div", 6);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](8, GridsterItemComponent_div_8_Template, 1, 0, "div", 7);
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.gridster.$options.resizable.handles.s && ctx.resize.resizeEnabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.gridster.$options.resizable.handles.e && ctx.resize.resizeEnabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.gridster.$options.resizable.handles.n && ctx.resize.resizeEnabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.gridster.$options.resizable.handles.w && ctx.resize.resizeEnabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.gridster.$options.resizable.handles.se && ctx.resize.resizeEnabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.gridster.$options.resizable.handles.ne && ctx.resize.resizeEnabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.gridster.$options.resizable.handles.sw && ctx.resize.resizeEnabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.gridster.$options.resizable.handles.nw && ctx.resize.resizeEnabled);
- } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"]], styles: ["gridster-item{-ms-user-select:text;-webkit-user-select:text;background:#fff;box-sizing:border-box;display:none;overflow:hidden;position:absolute;transition:.3s;user-select:text;z-index:1}gridster-item.gridster-item-moving{cursor:move}gridster-item.gridster-item-moving,gridster-item.gridster-item-resizing{box-shadow:0 0 5px 5px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12);transition:0s;z-index:2}.gridster-item-resizable-handler{position:absolute;z-index:2}.gridster-item-resizable-handler.handle-n{cursor:ns-resize;height:10px;left:0;right:0;top:0}.gridster-item-resizable-handler.handle-e{bottom:0;cursor:ew-resize;right:0;top:0;width:10px}.gridster-item-resizable-handler.handle-s{bottom:0;cursor:ns-resize;height:10px;left:0;right:0}.gridster-item-resizable-handler.handle-w{bottom:0;cursor:ew-resize;left:0;top:0;width:10px}.gridster-item-resizable-handler.handle-ne{cursor:ne-resize;height:10px;right:0;top:0;width:10px}.gridster-item-resizable-handler.handle-nw{cursor:nw-resize;height:10px;left:0;top:0;width:10px}.gridster-item-resizable-handler.handle-se{border-color:transparent;border-style:solid;border-width:0 0 10px 10px;bottom:0;cursor:se-resize;height:0;right:0;width:0}.gridster-item-resizable-handler.handle-sw{bottom:0;cursor:sw-resize;height:10px;left:0;width:10px}gridster-item:hover .gridster-item-resizable-handler.handle-se{border-color:transparent transparent #ccc}"], encapsulation: 2 });
- GridsterItemComponent.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"],] }] },
- { type: GridsterComponent },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"], decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"],] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"],] }] }
- ];
- GridsterItemComponent.propDecorators = {
- item: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- zIndex: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"], args: ['style.z-index',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](GridsterItemComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'gridster-item',
- template: "<ng-content></ng-content>\n<div (mousedown)=\"resize.dragStartDelay($event)\" (touchstart)=\"resize.dragStartDelay($event)\"\n *ngIf=\"gridster.$options.resizable.handles.s && resize.resizeEnabled\"\n class=\"gridster-item-resizable-handler handle-s\"></div>\n<div (mousedown)=\"resize.dragStartDelay($event)\" (touchstart)=\"resize.dragStartDelay($event)\"\n *ngIf=\"gridster.$options.resizable.handles.e && resize.resizeEnabled\"\n class=\"gridster-item-resizable-handler handle-e\"></div>\n<div (mousedown)=\"resize.dragStartDelay($event)\" (touchstart)=\"resize.dragStartDelay($event)\"\n *ngIf=\"gridster.$options.resizable.handles.n && resize.resizeEnabled\"\n class=\"gridster-item-resizable-handler handle-n\"></div>\n<div (mousedown)=\"resize.dragStartDelay($event)\" (touchstart)=\"resize.dragStartDelay($event)\"\n *ngIf=\"gridster.$options.resizable.handles.w && resize.resizeEnabled\"\n class=\"gridster-item-resizable-handler handle-w\"></div>\n<div (mousedown)=\"resize.dragStartDelay($event)\" (touchstart)=\"resize.dragStartDelay($event)\"\n *ngIf=\"gridster.$options.resizable.handles.se && resize.resizeEnabled\"\n class=\"gridster-item-resizable-handler handle-se\"></div>\n<div (mousedown)=\"resize.dragStartDelay($event)\" (touchstart)=\"resize.dragStartDelay($event)\"\n *ngIf=\"gridster.$options.resizable.handles.ne && resize.resizeEnabled\"\n class=\"gridster-item-resizable-handler handle-ne\"></div>\n<div (mousedown)=\"resize.dragStartDelay($event)\" (touchstart)=\"resize.dragStartDelay($event)\"\n *ngIf=\"gridster.$options.resizable.handles.sw && resize.resizeEnabled\"\n class=\"gridster-item-resizable-handler handle-sw\"></div>\n<div (mousedown)=\"resize.dragStartDelay($event)\" (touchstart)=\"resize.dragStartDelay($event)\"\n *ngIf=\"gridster.$options.resizable.handles.nw && resize.resizeEnabled\"\n class=\"gridster-item-resizable-handler handle-nw\"></div>\n",
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- styles: ["gridster-item{-ms-user-select:text;-webkit-user-select:text;background:#fff;box-sizing:border-box;display:none;overflow:hidden;position:absolute;transition:.3s;user-select:text;z-index:1}gridster-item.gridster-item-moving{cursor:move}gridster-item.gridster-item-moving,gridster-item.gridster-item-resizing{box-shadow:0 0 5px 5px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12);transition:0s;z-index:2}.gridster-item-resizable-handler{position:absolute;z-index:2}.gridster-item-resizable-handler.handle-n{cursor:ns-resize;height:10px;left:0;right:0;top:0}.gridster-item-resizable-handler.handle-e{bottom:0;cursor:ew-resize;right:0;top:0;width:10px}.gridster-item-resizable-handler.handle-s{bottom:0;cursor:ns-resize;height:10px;left:0;right:0}.gridster-item-resizable-handler.handle-w{bottom:0;cursor:ew-resize;left:0;top:0;width:10px}.gridster-item-resizable-handler.handle-ne{cursor:ne-resize;height:10px;right:0;top:0;width:10px}.gridster-item-resizable-handler.handle-nw{cursor:nw-resize;height:10px;left:0;top:0;width:10px}.gridster-item-resizable-handler.handle-se{border-color:transparent;border-style:solid;border-width:0 0 10px 10px;bottom:0;cursor:se-resize;height:0;right:0;width:0}.gridster-item-resizable-handler.handle-sw{bottom:0;cursor:sw-resize;height:10px;left:0;width:10px}gridster-item:hover .gridster-item-resizable-handler.handle-se{border-color:transparent transparent #ccc}"]
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]]
- }] }, { type: GridsterComponent }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"], decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]]
- }] }]; }, { zIndex: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
- args: ['style.z-index']
- }], item: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class GridsterPreviewComponent {
- constructor(el, gridster, renderer) {
- this.renderer = renderer;
- this.el = el.nativeElement;
- this.gridster = gridster;
- this.gridster.previewStyle = this.previewStyle.bind(this);
- }
- ngOnDestroy() {
- // @ts-ignore
- delete this.el;
- // @ts-ignore
- delete this.gridster.previewStyle;
- // @ts-ignore
- delete this.gridster;
- }
- previewStyle(drag) {
- if (!this.gridster.movingItem) {
- this.renderer.setStyle(this.el, 'display', '');
- }
- else {
- if (this.gridster.compact && drag) {
- this.gridster.compact.checkCompactItem(this.gridster.movingItem);
- }
- this.renderer.setStyle(this.el, 'display', 'block');
- this.gridster.gridRenderer.updateItem(this.el, this.gridster.movingItem, this.renderer);
- }
- }
- }
- GridsterPreviewComponent.ɵfac = function GridsterPreviewComponent_Factory(t) { return new (t || GridsterPreviewComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](GridsterComponent), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"])); };
- GridsterPreviewComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: GridsterPreviewComponent, selectors: [["gridster-preview"]], decls: 0, vars: 0, template: function GridsterPreviewComponent_Template(rf, ctx) { }, styles: ["gridster-preview{background:rgba(0,0,0,.15);display:none;position:absolute}"], encapsulation: 2 });
- GridsterPreviewComponent.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"],] }] },
- { type: GridsterComponent },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"], decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](GridsterPreviewComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'gridster-preview',
- template: '',
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- styles: ["gridster-preview{background:rgba(0,0,0,.15);display:none;position:absolute}"]
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]]
- }] }, { type: GridsterComponent }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"], decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]]
- }] }]; }, null); })();
- class GridsterModule {
- }
- GridsterModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: GridsterModule });
- GridsterModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function GridsterModule_Factory(t) { return new (t || GridsterModule)(); }, imports: [[
- _angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]
- ]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](GridsterModule, { declarations: function () { return [GridsterComponent, GridsterItemComponent, GridsterPreviewComponent]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]; }, exports: function () { return [GridsterComponent, GridsterItemComponent]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](GridsterModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- declarations: [
- GridsterComponent,
- GridsterItemComponent,
- GridsterPreviewComponent
- ],
- imports: [
- _angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]
- ],
- exports: [GridsterComponent, GridsterItemComponent]
- }]
- }], null, null); })();
- /*
- * Public API Surface of gridster
- */
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=angular-gridster2.js.map
- /***/ }),
- /***/ "MBAA":
- /*!***************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduled/scheduleIterable.js ***!
- \***************************************************************************/
- /*! exports provided: scheduleIterable */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheduleIterable", function() { return scheduleIterable; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Subscription */ "quSY");
- /* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../symbol/iterator */ "Lhse");
- function scheduleIterable(input, scheduler) {
- if (!input) {
- throw new Error('Iterable cannot be null');
- }
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- const sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
- let iterator;
- sub.add(() => {
- if (iterator && typeof iterator.return === 'function') {
- iterator.return();
- }
- });
- sub.add(scheduler.schedule(() => {
- iterator = input[_symbol_iterator__WEBPACK_IMPORTED_MODULE_2__["iterator"]]();
- sub.add(scheduler.schedule(function () {
- if (subscriber.closed) {
- return;
- }
- let value;
- let done;
- try {
- const result = iterator.next();
- value = result.value;
- done = result.done;
- }
- catch (err) {
- subscriber.error(err);
- return;
- }
- if (done) {
- subscriber.complete();
- }
- else {
- subscriber.next(value);
- this.schedule();
- }
- }));
- }));
- return sub;
- });
- }
- //# sourceMappingURL=scheduleIterable.js.map
- /***/ }),
- /***/ "MtjB":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/retryWhen.js ***!
- \********************************************************************/
- /*! exports provided: retryWhen */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "retryWhen", function() { return retryWhen; });
- /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subject */ "XNiG");
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function retryWhen(notifier) {
- return (source) => source.lift(new RetryWhenOperator(notifier, source));
- }
- class RetryWhenOperator {
- constructor(notifier, source) {
- this.notifier = notifier;
- this.source = source;
- }
- call(subscriber, source) {
- return source.subscribe(new RetryWhenSubscriber(subscriber, this.notifier, this.source));
- }
- }
- class RetryWhenSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"] {
- constructor(destination, notifier, source) {
- super(destination);
- this.notifier = notifier;
- this.source = source;
- }
- error(err) {
- if (!this.isStopped) {
- let errors = this.errors;
- let retries = this.retries;
- let retriesSubscription = this.retriesSubscription;
- if (!retries) {
- errors = new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]();
- try {
- const { notifier } = this;
- retries = notifier(errors);
- }
- catch (e) {
- return super.error(e);
- }
- retriesSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, retries);
- }
- else {
- this.errors = null;
- this.retriesSubscription = null;
- }
- this._unsubscribeAndRecycle();
- this.errors = errors;
- this.retries = retries;
- this.retriesSubscription = retriesSubscription;
- errors.next(err);
- }
- }
- _unsubscribe() {
- const { errors, retriesSubscription } = this;
- if (errors) {
- errors.unsubscribe();
- this.errors = null;
- }
- if (retriesSubscription) {
- retriesSubscription.unsubscribe();
- this.retriesSubscription = null;
- }
- this.retries = null;
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- const { _unsubscribe } = this;
- this._unsubscribe = null;
- this._unsubscribeAndRecycle();
- this._unsubscribe = _unsubscribe;
- this.source.subscribe(this);
- }
- }
- //# sourceMappingURL=retryWhen.js.map
- /***/ }),
- /***/ "NH6c":
- /*!******************************************!*\
- !*** ./node_modules/vkbeautify/index.js ***!
- \******************************************/
- /*! no static exports found */
- /***/ (function(module, exports) {
- /**
- * vkBeautify - javascript plugin to pretty-print or minify text in XML, JSON, CSS and SQL formats.
- *
- * Copyright (c) 2012 Vadim Kiryukhin
- * vkiryukhin @ gmail.com
- * http://www.eslinstructor.net/vkbeautify/
- *
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- *
- * Pretty print
- *
- * vkbeautify.xml(text [,indent_pattern]);
- * vkbeautify.json(text [,indent_pattern]);
- * vkbeautify.css(text [,indent_pattern]);
- * vkbeautify.sql(text [,indent_pattern]);
- *
- * @text - String; text to beatufy;
- * @indent_pattern - Integer | String;
- * Integer: number of white spaces;
- * String: character string to visualize indentation ( can also be a set of white spaces )
- * Minify
- *
- * vkbeautify.xmlmin(text [,preserve_comments]);
- * vkbeautify.jsonmin(text);
- * vkbeautify.cssmin(text [,preserve_comments]);
- * vkbeautify.sqlmin(text);
- *
- * @text - String; text to minify;
- * @preserve_comments - Bool; [optional];
- * Set this flag to true to prevent removing comments from @text ( minxml and mincss functions only. )
- *
- * Examples:
- * vkbeautify.xml(text); // pretty print XML
- * vkbeautify.json(text, 4 ); // pretty print JSON
- * vkbeautify.css(text, '. . . .'); // pretty print CSS
- * vkbeautify.sql(text, '----'); // pretty print SQL
- *
- * vkbeautify.xmlmin(text, true);// minify XML, preserve comments
- * vkbeautify.jsonmin(text);// minify JSON
- * vkbeautify.cssmin(text);// minify CSS, remove comments ( default )
- * vkbeautify.sqlmin(text);// minify SQL
- *
- */
- function createShiftArr(step) {
- var space = ' ';
- if ( isNaN(parseInt(step)) ) { // argument is string
- space = step;
- } else { // argument is integer
- switch(step) {
- case 1: space = ' '; break;
- case 2: space = ' '; break;
- case 3: space = ' '; break;
- case 4: space = ' '; break;
- case 5: space = ' '; break;
- case 6: space = ' '; break;
- case 7: space = ' '; break;
- case 8: space = ' '; break;
- case 9: space = ' '; break;
- case 10: space = ' '; break;
- case 11: space = ' '; break;
- case 12: space = ' '; break;
- }
- }
- var shift = ['\n']; // array of shifts
- for(var ix=0;ix<100;ix++) {
- shift.push(shift[ix]+space);
- }
- return shift;
- }
- function vkbeautify(){
- this.step = ' '; // 4 spaces
- this.shift = createShiftArr(this.step);
- };
- vkbeautify.prototype.xml = function(text,step) {
- var ar = text.replace(/>\s{0,}</g,"><")
- .replace(/</g,"~::~<")
- .replace(/\s*xmlns\:/g,"~::~xmlns:")
- .replace(/\s*xmlns\=/g,"~::~xmlns=")
- .split('~::~'),
- len = ar.length,
- inComment = false,
- deep = 0,
- str = '',
- ix = 0,
- shift = step ? createShiftArr(step) : this.shift;
- for(ix=0;ix<len;ix++) {
- // start comment or <![CDATA[...]]> or <!DOCTYPE //
- if(ar[ix].search(/<!/) > -1) {
- str += shift[deep]+ar[ix];
- inComment = true;
- // end comment or <![CDATA[...]]> //
- if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1 || ar[ix].search(/!DOCTYPE/) > -1 ) {
- inComment = false;
- }
- } else
- // end comment or <![CDATA[...]]> //
- if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1) {
- str += ar[ix];
- inComment = false;
- } else
- // <elm></elm> //
- if( /^<\w/.exec(ar[ix-1]) && /^<\/\w/.exec(ar[ix]) &&
- /^<[\w:\-\.\,]+/.exec(ar[ix-1]) == /^<\/[\w:\-\.\,]+/.exec(ar[ix])[0].replace('/','')) {
- str += ar[ix];
- if(!inComment) deep--;
- } else
- // <elm> //
- if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) == -1 && ar[ix].search(/\/>/) == -1 ) {
- str = !inComment ? str += shift[deep++]+ar[ix] : str += ar[ix];
- } else
- // <elm>...</elm> //
- if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) > -1) {
- str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
- } else
- // </elm> //
- if(ar[ix].search(/<\//) > -1) {
- str = !inComment ? str += shift[--deep]+ar[ix] : str += ar[ix];
- } else
- // <elm/> //
- if(ar[ix].search(/\/>/) > -1 ) {
- str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
- } else
- // <? xml ... ?> //
- if(ar[ix].search(/<\?/) > -1) {
- str += shift[deep]+ar[ix];
- } else
- // xmlns //
- if( ar[ix].search(/xmlns\:/) > -1 || ar[ix].search(/xmlns\=/) > -1) {
- str += shift[deep]+ar[ix];
- }
- else {
- str += ar[ix];
- }
- }
- return (str[0] == '\n') ? str.slice(1) : str;
- }
- vkbeautify.prototype.json = function(text,step) {
- var step = step ? step : this.step;
- if (typeof JSON === 'undefined' ) return text;
- if ( typeof text === "string" ) return JSON.stringify(JSON.parse(text), null, step);
- if ( typeof text === "object" ) return JSON.stringify(text, null, step);
- return text; // text is not string nor object
- }
- vkbeautify.prototype.css = function(text, step) {
- var ar = text.replace(/\s{1,}/g,' ')
- .replace(/\{/g,"{~::~")
- .replace(/\}/g,"~::~}~::~")
- .replace(/\;/g,";~::~")
- .replace(/\/\*/g,"~::~/*")
- .replace(/\*\//g,"*/~::~")
- .replace(/~::~\s{0,}~::~/g,"~::~")
- .split('~::~'),
- len = ar.length,
- deep = 0,
- str = '',
- ix = 0,
- shift = step ? createShiftArr(step) : this.shift;
- for(ix=0;ix<len;ix++) {
- if( /\{/.exec(ar[ix])) {
- str += shift[deep++]+ar[ix];
- } else
- if( /\}/.exec(ar[ix])) {
- str += shift[--deep]+ar[ix];
- } else
- if( /\*\\/.exec(ar[ix])) {
- str += shift[deep]+ar[ix];
- }
- else {
- str += shift[deep]+ar[ix];
- }
- }
- return str.replace(/^\n{1,}/,'');
- }
- //----------------------------------------------------------------------------
- function isSubquery(str, parenthesisLevel) {
- return parenthesisLevel - (str.replace(/\(/g,'').length - str.replace(/\)/g,'').length )
- }
- function split_sql(str, tab) {
- return str.replace(/\s{1,}/g," ")
- .replace(/ AND /ig,"~::~"+tab+tab+"AND ")
- .replace(/ BETWEEN /ig,"~::~"+tab+"BETWEEN ")
- .replace(/ CASE /ig,"~::~"+tab+"CASE ")
- .replace(/ ELSE /ig,"~::~"+tab+"ELSE ")
- .replace(/ END /ig,"~::~"+tab+"END ")
- .replace(/ FROM /ig,"~::~FROM ")
- .replace(/ GROUP\s{1,}BY/ig,"~::~GROUP BY ")
- .replace(/ HAVING /ig,"~::~HAVING ")
- //.replace(/ SET /ig," SET~::~")
- .replace(/ IN /ig," IN ")
- .replace(/ JOIN /ig,"~::~JOIN ")
- .replace(/ CROSS~::~{1,}JOIN /ig,"~::~CROSS JOIN ")
- .replace(/ INNER~::~{1,}JOIN /ig,"~::~INNER JOIN ")
- .replace(/ LEFT~::~{1,}JOIN /ig,"~::~LEFT JOIN ")
- .replace(/ RIGHT~::~{1,}JOIN /ig,"~::~RIGHT JOIN ")
- .replace(/ ON /ig,"~::~"+tab+"ON ")
- .replace(/ OR /ig,"~::~"+tab+tab+"OR ")
- .replace(/ ORDER\s{1,}BY/ig,"~::~ORDER BY ")
- .replace(/ OVER /ig,"~::~"+tab+"OVER ")
- .replace(/\(\s{0,}SELECT /ig,"~::~(SELECT ")
- .replace(/\)\s{0,}SELECT /ig,")~::~SELECT ")
- .replace(/ THEN /ig," THEN~::~"+tab+"")
- .replace(/ UNION /ig,"~::~UNION~::~")
- .replace(/ USING /ig,"~::~USING ")
- .replace(/ WHEN /ig,"~::~"+tab+"WHEN ")
- .replace(/ WHERE /ig,"~::~WHERE ")
- .replace(/ WITH /ig,"~::~WITH ")
- //.replace(/\,\s{0,}\(/ig,",~::~( ")
- //.replace(/\,/ig,",~::~"+tab+tab+"")
- .replace(/ ALL /ig," ALL ")
- .replace(/ AS /ig," AS ")
- .replace(/ ASC /ig," ASC ")
- .replace(/ DESC /ig," DESC ")
- .replace(/ DISTINCT /ig," DISTINCT ")
- .replace(/ EXISTS /ig," EXISTS ")
- .replace(/ NOT /ig," NOT ")
- .replace(/ NULL /ig," NULL ")
- .replace(/ LIKE /ig," LIKE ")
- .replace(/\s{0,}SELECT /ig,"SELECT ")
- .replace(/\s{0,}UPDATE /ig,"UPDATE ")
- .replace(/ SET /ig," SET ")
- .replace(/~::~{1,}/g,"~::~")
- .split('~::~');
- }
- vkbeautify.prototype.sql = function(text,step) {
- var ar_by_quote = text.replace(/\s{1,}/g," ")
- .replace(/\'/ig,"~::~\'")
- .split('~::~'),
- len = ar_by_quote.length,
- ar = [],
- deep = 0,
- tab = this.step,//+this.step,
- inComment = true,
- inQuote = false,
- parenthesisLevel = 0,
- str = '',
- ix = 0,
- shift = step ? createShiftArr(step) : this.shift;;
- for(ix=0;ix<len;ix++) {
- if(ix%2) {
- ar = ar.concat(ar_by_quote[ix]);
- } else {
- ar = ar.concat(split_sql(ar_by_quote[ix], tab) );
- }
- }
- len = ar.length;
- for(ix=0;ix<len;ix++) {
- parenthesisLevel = isSubquery(ar[ix], parenthesisLevel);
- if( /\s{0,}\s{0,}SELECT\s{0,}/.exec(ar[ix])) {
- ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
- }
- if( /\s{0,}\s{0,}SET\s{0,}/.exec(ar[ix])) {
- ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
- }
- if( /\s{0,}\(\s{0,}SELECT\s{0,}/.exec(ar[ix])) {
- deep++;
- str += shift[deep]+ar[ix];
- } else
- if( /\'/.exec(ar[ix]) ) {
- if(parenthesisLevel<1 && deep) {
- deep--;
- }
- str += ar[ix];
- }
- else {
- str += shift[deep]+ar[ix];
- if(parenthesisLevel<1 && deep) {
- deep--;
- }
- }
- var junk = 0;
- }
- str = str.replace(/^\n{1,}/,'').replace(/\n{1,}/g,"\n");
- return str;
- }
- vkbeautify.prototype.xmlmin = function(text, preserveComments) {
- var str = preserveComments ? text
- : text.replace(/\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>/g,"")
- .replace(/[ \r\n\t]{1,}xmlns/g, ' xmlns');
- return str.replace(/>\s{0,}</g,"><");
- }
- vkbeautify.prototype.jsonmin = function(text) {
- if (typeof JSON === 'undefined' ) return text;
- return JSON.stringify(JSON.parse(text), null, 0);
- }
- vkbeautify.prototype.cssmin = function(text, preserveComments) {
- var str = preserveComments ? text
- : text.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g,"") ;
- return str.replace(/\s{1,}/g,' ')
- .replace(/\{\s{1,}/g,"{")
- .replace(/\}\s{1,}/g,"}")
- .replace(/\;\s{1,}/g,";")
- .replace(/\/\*\s{1,}/g,"/*")
- .replace(/\*\/\s{1,}/g,"*/");
- }
- vkbeautify.prototype.sqlmin = function(text) {
- return text.replace(/\s{1,}/g," ").replace(/\s{1,}\(/,"(").replace(/\s{1,}\)/,")");
- }
- module.exports = new vkbeautify();
- /***/ }),
- /***/ "NHP+":
- /*!*************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/AsyncSubject.js ***!
- \*************************************************************/
- /*! exports provided: AsyncSubject */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsyncSubject", function() { return AsyncSubject; });
- /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Subject */ "XNiG");
- /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Subscription */ "quSY");
- class AsyncSubject extends _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"] {
- constructor() {
- super(...arguments);
- this.value = null;
- this.hasNext = false;
- this.hasCompleted = false;
- }
- _subscribe(subscriber) {
- if (this.hasError) {
- subscriber.error(this.thrownError);
- return _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"].EMPTY;
- }
- else if (this.hasCompleted && this.hasNext) {
- subscriber.next(this.value);
- subscriber.complete();
- return _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"].EMPTY;
- }
- return super._subscribe(subscriber);
- }
- next(value) {
- if (!this.hasCompleted) {
- this.value = value;
- this.hasNext = true;
- }
- }
- error(error) {
- if (!this.hasCompleted) {
- super.error(error);
- }
- }
- complete() {
- this.hasCompleted = true;
- if (this.hasNext) {
- super.next(this.value);
- }
- super.complete();
- }
- }
- //# sourceMappingURL=AsyncSubject.js.map
- /***/ }),
- /***/ "NJ4a":
- /*!*********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/hostReportError.js ***!
- \*********************************************************************/
- /*! exports provided: hostReportError */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hostReportError", function() { return hostReportError; });
- function hostReportError(err) {
- setTimeout(() => { throw err; }, 0);
- }
- //# sourceMappingURL=hostReportError.js.map
- /***/ }),
- /***/ "NJ9Y":
- /*!***************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/last.js ***!
- \***************************************************************/
- /*! exports provided: last */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "last", function() { return last; });
- /* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/EmptyError */ "sVev");
- /* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./filter */ "pLZG");
- /* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./takeLast */ "BFxc");
- /* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./throwIfEmpty */ "XDbj");
- /* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./defaultIfEmpty */ "xbPD");
- /* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/identity */ "SpAZ");
- function last(predicate, defaultValue) {
- const hasDefaultValue = arguments.length >= 2;
- return (source) => source.pipe(predicate ? Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])((v, i) => predicate(v, i, source)) : _util_identity__WEBPACK_IMPORTED_MODULE_5__["identity"], Object(_takeLast__WEBPACK_IMPORTED_MODULE_2__["takeLast"])(1), hasDefaultValue ? Object(_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_4__["defaultIfEmpty"])(defaultValue) : Object(_throwIfEmpty__WEBPACK_IMPORTED_MODULE_3__["throwIfEmpty"])(() => new _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__["EmptyError"]()));
- }
- //# sourceMappingURL=last.js.map
- /***/ }),
- /***/ "NNCq":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/range.js ***!
- \*****************************************************************/
- /*! exports provided: range, dispatch */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "range", function() { return range; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dispatch", function() { return dispatch; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- function range(start = 0, count, scheduler) {
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- if (count === undefined) {
- count = start;
- start = 0;
- }
- let index = 0;
- let current = start;
- if (scheduler) {
- return scheduler.schedule(dispatch, 0, {
- index, count, start, subscriber
- });
- }
- else {
- do {
- if (index++ >= count) {
- subscriber.complete();
- break;
- }
- subscriber.next(current++);
- if (subscriber.closed) {
- break;
- }
- } while (true);
- }
- return undefined;
- });
- }
- function dispatch(state) {
- const { start, index, count, subscriber } = state;
- if (index >= count) {
- subscriber.complete();
- return;
- }
- subscriber.next(start);
- if (subscriber.closed) {
- return;
- }
- state.index = index + 1;
- state.start = start + 1;
- this.schedule(state);
- }
- //# sourceMappingURL=range.js.map
- /***/ }),
- /***/ "NXyV":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/defer.js ***!
- \*****************************************************************/
- /*! exports provided: defer */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defer", function() { return defer; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./from */ "Cfvw");
- /* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./empty */ "EY2u");
- function defer(observableFactory) {
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- let input;
- try {
- input = observableFactory();
- }
- catch (err) {
- subscriber.error(err);
- return undefined;
- }
- const source = input ? Object(_from__WEBPACK_IMPORTED_MODULE_1__["from"])(input) : Object(_empty__WEBPACK_IMPORTED_MODULE_2__["empty"])();
- return source.subscribe(subscriber);
- });
- }
- //# sourceMappingURL=defer.js.map
- /***/ }),
- /***/ "NfdI":
- /*!******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/publish.js ***!
- \******************************************************************/
- /*! exports provided: publish */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publish", function() { return publish; });
- /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subject */ "XNiG");
- /* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./multicast */ "oB13");
- function publish(selector) {
- return selector ?
- Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(() => new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"](), selector) :
- Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]());
- }
- //# sourceMappingURL=publish.js.map
- /***/ }),
- /***/ "Nv8m":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/race.js ***!
- \****************************************************************/
- /*! exports provided: race, RaceOperator, RaceSubscriber */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "race", function() { return race; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RaceOperator", function() { return RaceOperator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RaceSubscriber", function() { return RaceSubscriber; });
- /* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/isArray */ "DH7j");
- /* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fromArray */ "yCtX");
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function race(...observables) {
- if (observables.length === 1) {
- if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(observables[0])) {
- observables = observables[0];
- }
- else {
- return observables[0];
- }
- }
- return Object(_fromArray__WEBPACK_IMPORTED_MODULE_1__["fromArray"])(observables, undefined).lift(new RaceOperator());
- }
- class RaceOperator {
- call(subscriber, source) {
- return source.subscribe(new RaceSubscriber(subscriber));
- }
- }
- class RaceSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"] {
- constructor(destination) {
- super(destination);
- this.hasFirst = false;
- this.observables = [];
- this.subscriptions = [];
- }
- _next(observable) {
- this.observables.push(observable);
- }
- _complete() {
- const observables = this.observables;
- const len = observables.length;
- if (len === 0) {
- this.destination.complete();
- }
- else {
- for (let i = 0; i < len && !this.hasFirst; i++) {
- let observable = observables[i];
- let subscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, observable, observable, i);
- if (this.subscriptions) {
- this.subscriptions.push(subscription);
- }
- this.add(subscription);
- }
- this.observables = null;
- }
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- if (!this.hasFirst) {
- this.hasFirst = true;
- for (let i = 0; i < this.subscriptions.length; i++) {
- if (i !== outerIndex) {
- let subscription = this.subscriptions[i];
- subscription.unsubscribe();
- this.remove(subscription);
- }
- }
- this.subscriptions = null;
- }
- this.destination.next(innerValue);
- }
- }
- //# sourceMappingURL=race.js.map
- /***/ }),
- /***/ "O4y0":
- /*!*********************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/SubscribeOnObservable.js ***!
- \*********************************************************************************/
- /*! exports provided: SubscribeOnObservable */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubscribeOnObservable", function() { return SubscribeOnObservable; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _scheduler_asap__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../scheduler/asap */ "7Hc7");
- /* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/isNumeric */ "Y7HM");
- class SubscribeOnObservable extends _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"] {
- constructor(source, delayTime = 0, scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_1__["asap"]) {
- super();
- this.source = source;
- this.delayTime = delayTime;
- this.scheduler = scheduler;
- if (!Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__["isNumeric"])(delayTime) || delayTime < 0) {
- this.delayTime = 0;
- }
- if (!scheduler || typeof scheduler.schedule !== 'function') {
- this.scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_1__["asap"];
- }
- }
- static create(source, delay = 0, scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_1__["asap"]) {
- return new SubscribeOnObservable(source, delay, scheduler);
- }
- static dispatch(arg) {
- const { source, subscriber } = arg;
- return this.add(source.subscribe(subscriber));
- }
- _subscribe(subscriber) {
- const delay = this.delayTime;
- const source = this.source;
- const scheduler = this.scheduler;
- return scheduler.schedule(SubscribeOnObservable.dispatch, delay, {
- source, subscriber
- });
- }
- }
- //# sourceMappingURL=SubscribeOnObservable.js.map
- /***/ }),
- /***/ "OQgR":
- /*!******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/groupBy.js ***!
- \******************************************************************/
- /*! exports provided: groupBy, GroupedObservable */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "groupBy", function() { return groupBy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GroupedObservable", function() { return GroupedObservable; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Subscription */ "quSY");
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Subject */ "XNiG");
- function groupBy(keySelector, elementSelector, durationSelector, subjectSelector) {
- return (source) => source.lift(new GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector));
- }
- class GroupByOperator {
- constructor(keySelector, elementSelector, durationSelector, subjectSelector) {
- this.keySelector = keySelector;
- this.elementSelector = elementSelector;
- this.durationSelector = durationSelector;
- this.subjectSelector = subjectSelector;
- }
- call(subscriber, source) {
- return source.subscribe(new GroupBySubscriber(subscriber, this.keySelector, this.elementSelector, this.durationSelector, this.subjectSelector));
- }
- }
- class GroupBySubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, keySelector, elementSelector, durationSelector, subjectSelector) {
- super(destination);
- this.keySelector = keySelector;
- this.elementSelector = elementSelector;
- this.durationSelector = durationSelector;
- this.subjectSelector = subjectSelector;
- this.groups = null;
- this.attemptedToUnsubscribe = false;
- this.count = 0;
- }
- _next(value) {
- let key;
- try {
- key = this.keySelector(value);
- }
- catch (err) {
- this.error(err);
- return;
- }
- this._group(value, key);
- }
- _group(value, key) {
- let groups = this.groups;
- if (!groups) {
- groups = this.groups = new Map();
- }
- let group = groups.get(key);
- let element;
- if (this.elementSelector) {
- try {
- element = this.elementSelector(value);
- }
- catch (err) {
- this.error(err);
- }
- }
- else {
- element = value;
- }
- if (!group) {
- group = (this.subjectSelector ? this.subjectSelector() : new _Subject__WEBPACK_IMPORTED_MODULE_3__["Subject"]());
- groups.set(key, group);
- const groupedObservable = new GroupedObservable(key, group, this);
- this.destination.next(groupedObservable);
- if (this.durationSelector) {
- let duration;
- try {
- duration = this.durationSelector(new GroupedObservable(key, group));
- }
- catch (err) {
- this.error(err);
- return;
- }
- this.add(duration.subscribe(new GroupDurationSubscriber(key, group, this)));
- }
- }
- if (!group.closed) {
- group.next(element);
- }
- }
- _error(err) {
- const groups = this.groups;
- if (groups) {
- groups.forEach((group, key) => {
- group.error(err);
- });
- groups.clear();
- }
- this.destination.error(err);
- }
- _complete() {
- const groups = this.groups;
- if (groups) {
- groups.forEach((group, key) => {
- group.complete();
- });
- groups.clear();
- }
- this.destination.complete();
- }
- removeGroup(key) {
- this.groups.delete(key);
- }
- unsubscribe() {
- if (!this.closed) {
- this.attemptedToUnsubscribe = true;
- if (this.count === 0) {
- super.unsubscribe();
- }
- }
- }
- }
- class GroupDurationSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(key, group, parent) {
- super(group);
- this.key = key;
- this.group = group;
- this.parent = parent;
- }
- _next(value) {
- this.complete();
- }
- _unsubscribe() {
- const { parent, key } = this;
- this.key = this.parent = null;
- if (parent) {
- parent.removeGroup(key);
- }
- }
- }
- class GroupedObservable extends _Observable__WEBPACK_IMPORTED_MODULE_2__["Observable"] {
- constructor(key, groupSubject, refCountSubscription) {
- super();
- this.key = key;
- this.groupSubject = groupSubject;
- this.refCountSubscription = refCountSubscription;
- }
- _subscribe(subscriber) {
- const subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
- const { refCountSubscription, groupSubject } = this;
- if (refCountSubscription && !refCountSubscription.closed) {
- subscription.add(new InnerRefCountSubscription(refCountSubscription));
- }
- subscription.add(groupSubject.subscribe(subscriber));
- return subscription;
- }
- }
- class InnerRefCountSubscription extends _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"] {
- constructor(parent) {
- super();
- this.parent = parent;
- parent.count++;
- }
- unsubscribe() {
- const parent = this.parent;
- if (!parent.closed && !this.closed) {
- super.unsubscribe();
- parent.count -= 1;
- if (parent.count === 0 && parent.attemptedToUnsubscribe) {
- parent.unsubscribe();
- }
- }
- }
- }
- //# sourceMappingURL=groupBy.js.map
- /***/ }),
- /***/ "OsX3":
- /*!*********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/bufferTime.js ***!
- \*********************************************************************/
- /*! exports provided: bufferTime */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bufferTime", function() { return bufferTime; });
- /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scheduler/async */ "D0XW");
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/isScheduler */ "z+Ro");
- function bufferTime(bufferTimeSpan) {
- let length = arguments.length;
- let scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
- if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_2__["isScheduler"])(arguments[arguments.length - 1])) {
- scheduler = arguments[arguments.length - 1];
- length--;
- }
- let bufferCreationInterval = null;
- if (length >= 2) {
- bufferCreationInterval = arguments[1];
- }
- let maxBufferSize = Number.POSITIVE_INFINITY;
- if (length >= 3) {
- maxBufferSize = arguments[2];
- }
- return function bufferTimeOperatorFunction(source) {
- return source.lift(new BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler));
- };
- }
- class BufferTimeOperator {
- constructor(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
- this.bufferTimeSpan = bufferTimeSpan;
- this.bufferCreationInterval = bufferCreationInterval;
- this.maxBufferSize = maxBufferSize;
- this.scheduler = scheduler;
- }
- call(subscriber, source) {
- return source.subscribe(new BufferTimeSubscriber(subscriber, this.bufferTimeSpan, this.bufferCreationInterval, this.maxBufferSize, this.scheduler));
- }
- }
- class Context {
- constructor() {
- this.buffer = [];
- }
- }
- class BufferTimeSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"] {
- constructor(destination, bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
- super(destination);
- this.bufferTimeSpan = bufferTimeSpan;
- this.bufferCreationInterval = bufferCreationInterval;
- this.maxBufferSize = maxBufferSize;
- this.scheduler = scheduler;
- this.contexts = [];
- const context = this.openContext();
- this.timespanOnly = bufferCreationInterval == null || bufferCreationInterval < 0;
- if (this.timespanOnly) {
- const timeSpanOnlyState = { subscriber: this, context, bufferTimeSpan };
- this.add(context.closeAction = scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
- }
- else {
- const closeState = { subscriber: this, context };
- const creationState = { bufferTimeSpan, bufferCreationInterval, subscriber: this, scheduler };
- this.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, closeState));
- this.add(scheduler.schedule(dispatchBufferCreation, bufferCreationInterval, creationState));
- }
- }
- _next(value) {
- const contexts = this.contexts;
- const len = contexts.length;
- let filledBufferContext;
- for (let i = 0; i < len; i++) {
- const context = contexts[i];
- const buffer = context.buffer;
- buffer.push(value);
- if (buffer.length == this.maxBufferSize) {
- filledBufferContext = context;
- }
- }
- if (filledBufferContext) {
- this.onBufferFull(filledBufferContext);
- }
- }
- _error(err) {
- this.contexts.length = 0;
- super._error(err);
- }
- _complete() {
- const { contexts, destination } = this;
- while (contexts.length > 0) {
- const context = contexts.shift();
- destination.next(context.buffer);
- }
- super._complete();
- }
- _unsubscribe() {
- this.contexts = null;
- }
- onBufferFull(context) {
- this.closeContext(context);
- const closeAction = context.closeAction;
- closeAction.unsubscribe();
- this.remove(closeAction);
- if (!this.closed && this.timespanOnly) {
- context = this.openContext();
- const bufferTimeSpan = this.bufferTimeSpan;
- const timeSpanOnlyState = { subscriber: this, context, bufferTimeSpan };
- this.add(context.closeAction = this.scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
- }
- }
- openContext() {
- const context = new Context();
- this.contexts.push(context);
- return context;
- }
- closeContext(context) {
- this.destination.next(context.buffer);
- const contexts = this.contexts;
- const spliceIndex = contexts ? contexts.indexOf(context) : -1;
- if (spliceIndex >= 0) {
- contexts.splice(contexts.indexOf(context), 1);
- }
- }
- }
- function dispatchBufferTimeSpanOnly(state) {
- const subscriber = state.subscriber;
- const prevContext = state.context;
- if (prevContext) {
- subscriber.closeContext(prevContext);
- }
- if (!subscriber.closed) {
- state.context = subscriber.openContext();
- state.context.closeAction = this.schedule(state, state.bufferTimeSpan);
- }
- }
- function dispatchBufferCreation(state) {
- const { bufferCreationInterval, bufferTimeSpan, subscriber, scheduler } = state;
- const context = subscriber.openContext();
- const action = this;
- if (!subscriber.closed) {
- subscriber.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, { subscriber, context }));
- action.schedule(state, bufferCreationInterval);
- }
- }
- function dispatchBufferClose(arg) {
- const { subscriber, context } = arg;
- subscriber.closeContext(context);
- }
- //# sourceMappingURL=bufferTime.js.map
- /***/ }),
- /***/ "PZkE":
- /*!**********************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/distinctUntilKeyChanged.js ***!
- \**********************************************************************************/
- /*! exports provided: distinctUntilKeyChanged */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "distinctUntilKeyChanged", function() { return distinctUntilKeyChanged; });
- /* harmony import */ var _distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./distinctUntilChanged */ "/uUt");
- function distinctUntilKeyChanged(key, compare) {
- return Object(_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__["distinctUntilChanged"])((x, y) => compare ? compare(x[key], y[key]) : x[key] === y[key]);
- }
- //# sourceMappingURL=distinctUntilKeyChanged.js.map
- /***/ }),
- /***/ "PfrF":
- /*!*********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/bufferWhen.js ***!
- \*********************************************************************/
- /*! exports provided: bufferWhen */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bufferWhen", function() { return bufferWhen; });
- /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscription */ "quSY");
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function bufferWhen(closingSelector) {
- return function (source) {
- return source.lift(new BufferWhenOperator(closingSelector));
- };
- }
- class BufferWhenOperator {
- constructor(closingSelector) {
- this.closingSelector = closingSelector;
- }
- call(subscriber, source) {
- return source.subscribe(new BufferWhenSubscriber(subscriber, this.closingSelector));
- }
- }
- class BufferWhenSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"] {
- constructor(destination, closingSelector) {
- super(destination);
- this.closingSelector = closingSelector;
- this.subscribing = false;
- this.openBuffer();
- }
- _next(value) {
- this.buffer.push(value);
- }
- _complete() {
- const buffer = this.buffer;
- if (buffer) {
- this.destination.next(buffer);
- }
- super._complete();
- }
- _unsubscribe() {
- this.buffer = null;
- this.subscribing = false;
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.openBuffer();
- }
- notifyComplete() {
- if (this.subscribing) {
- this.complete();
- }
- else {
- this.openBuffer();
- }
- }
- openBuffer() {
- let { closingSubscription } = this;
- if (closingSubscription) {
- this.remove(closingSubscription);
- closingSubscription.unsubscribe();
- }
- const buffer = this.buffer;
- if (this.buffer) {
- this.destination.next(buffer);
- }
- this.buffer = [];
- let closingNotifier;
- try {
- const { closingSelector } = this;
- closingNotifier = closingSelector();
- }
- catch (err) {
- return this.error(err);
- }
- closingSubscription = new _Subscription__WEBPACK_IMPORTED_MODULE_0__["Subscription"]();
- this.closingSubscription = closingSubscription;
- this.add(closingSubscription);
- this.subscribing = true;
- closingSubscription.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, closingNotifier));
- this.subscribing = false;
- }
- }
- //# sourceMappingURL=bufferWhen.js.map
- /***/ }),
- /***/ "PqYM":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/timer.js ***!
- \*****************************************************************/
- /*! exports provided: timer */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timer", function() { return timer; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../scheduler/async */ "D0XW");
- /* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/isNumeric */ "Y7HM");
- /* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/isScheduler */ "z+Ro");
- function timer(dueTime = 0, periodOrScheduler, scheduler) {
- let period = -1;
- if (Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__["isNumeric"])(periodOrScheduler)) {
- period = Number(periodOrScheduler) < 1 && 1 || Number(periodOrScheduler);
- }
- else if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_3__["isScheduler"])(periodOrScheduler)) {
- scheduler = periodOrScheduler;
- }
- if (!Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_3__["isScheduler"])(scheduler)) {
- scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
- }
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- const due = Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__["isNumeric"])(dueTime)
- ? dueTime
- : (+dueTime - scheduler.now());
- return scheduler.schedule(dispatch, due, {
- index: 0, period, subscriber
- });
- });
- }
- function dispatch(state) {
- const { index, period, subscriber } = state;
- subscriber.next(index);
- if (subscriber.closed) {
- return;
- }
- else if (period === -1) {
- return subscriber.complete();
- }
- state.index = index + 1;
- this.schedule(state, period);
- }
- //# sourceMappingURL=timer.js.map
- /***/ }),
- /***/ "Pz8W":
- /*!*********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduler/AsapAction.js ***!
- \*********************************************************************/
- /*! exports provided: AsapAction */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsapAction", function() { return AsapAction; });
- /* harmony import */ var _util_Immediate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/Immediate */ "c7jc");
- /* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AsyncAction */ "3N8a");
- class AsapAction extends _AsyncAction__WEBPACK_IMPORTED_MODULE_1__["AsyncAction"] {
- constructor(scheduler, work) {
- super(scheduler, work);
- this.scheduler = scheduler;
- this.work = work;
- }
- requestAsyncId(scheduler, id, delay = 0) {
- if (delay !== null && delay > 0) {
- return super.requestAsyncId(scheduler, id, delay);
- }
- scheduler.actions.push(this);
- return scheduler.scheduled || (scheduler.scheduled = _util_Immediate__WEBPACK_IMPORTED_MODULE_0__["Immediate"].setImmediate(scheduler.flush.bind(scheduler, null)));
- }
- recycleAsyncId(scheduler, id, delay = 0) {
- if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
- return super.recycleAsyncId(scheduler, id, delay);
- }
- if (scheduler.actions.length === 0) {
- _util_Immediate__WEBPACK_IMPORTED_MODULE_0__["Immediate"].clearImmediate(id);
- scheduler.scheduled = undefined;
- }
- return undefined;
- }
- }
- //# sourceMappingURL=AsapAction.js.map
- /***/ }),
- /***/ "QIAL":
- /*!*************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/isInteropObservable.js ***!
- \*************************************************************************/
- /*! exports provided: isInteropObservable */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isInteropObservable", function() { return isInteropObservable; });
- /* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../symbol/observable */ "kJWO");
- function isInteropObservable(input) {
- return input && typeof input[_symbol_observable__WEBPACK_IMPORTED_MODULE_0__["observable"]] === 'function';
- }
- //# sourceMappingURL=isInteropObservable.js.map
- /***/ }),
- /***/ "Qn8I":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/using.js ***!
- \*****************************************************************/
- /*! exports provided: using */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "using", function() { return using; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./from */ "Cfvw");
- /* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./empty */ "EY2u");
- function using(resourceFactory, observableFactory) {
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- let resource;
- try {
- resource = resourceFactory();
- }
- catch (err) {
- subscriber.error(err);
- return undefined;
- }
- let result;
- try {
- result = observableFactory(resource);
- }
- catch (err) {
- subscriber.error(err);
- return undefined;
- }
- const source = result ? Object(_from__WEBPACK_IMPORTED_MODULE_1__["from"])(result) : _empty__WEBPACK_IMPORTED_MODULE_2__["EMPTY"];
- const subscription = source.subscribe(subscriber);
- return () => {
- subscription.unsubscribe();
- if (resource) {
- resource.unsubscribe();
- }
- };
- });
- }
- //# sourceMappingURL=using.js.map
- /***/ }),
- /***/ "QqCr":
- /*!************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/bindCallback.js ***!
- \************************************************************************/
- /*! exports provided: bindCallback */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bindCallback", function() { return bindCallback; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../AsyncSubject */ "NHP+");
- /* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../operators/map */ "lJxs");
- /* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/canReportError */ "8Qeq");
- /* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/isArray */ "DH7j");
- /* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/isScheduler */ "z+Ro");
- function bindCallback(callbackFunc, resultSelector, scheduler) {
- if (resultSelector) {
- if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_5__["isScheduler"])(resultSelector)) {
- scheduler = resultSelector;
- }
- else {
- return (...args) => bindCallback(callbackFunc, scheduler)(...args).pipe(Object(_operators_map__WEBPACK_IMPORTED_MODULE_2__["map"])((args) => Object(_util_isArray__WEBPACK_IMPORTED_MODULE_4__["isArray"])(args) ? resultSelector(...args) : resultSelector(args)));
- }
- }
- return function (...args) {
- const context = this;
- let subject;
- const params = {
- context,
- subject,
- callbackFunc,
- scheduler,
- };
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- if (!scheduler) {
- if (!subject) {
- subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
- const handler = (...innerArgs) => {
- subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
- subject.complete();
- };
- try {
- callbackFunc.apply(context, [...args, handler]);
- }
- catch (err) {
- if (Object(_util_canReportError__WEBPACK_IMPORTED_MODULE_3__["canReportError"])(subject)) {
- subject.error(err);
- }
- else {
- console.warn(err);
- }
- }
- }
- return subject.subscribe(subscriber);
- }
- else {
- const state = {
- args, subscriber, params,
- };
- return scheduler.schedule(dispatch, 0, state);
- }
- });
- };
- }
- function dispatch(state) {
- const self = this;
- const { args, subscriber, params } = state;
- const { callbackFunc, context, scheduler } = params;
- let { subject } = params;
- if (!subject) {
- subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
- const handler = (...innerArgs) => {
- const value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
- this.add(scheduler.schedule(dispatchNext, 0, { value, subject }));
- };
- try {
- callbackFunc.apply(context, [...args, handler]);
- }
- catch (err) {
- subject.error(err);
- }
- }
- this.add(subject.subscribe(subscriber));
- }
- function dispatchNext(state) {
- const { value, subject } = state;
- subject.next(value);
- subject.complete();
- }
- function dispatchError(state) {
- const { err, subject } = state;
- subject.error(err);
- }
- //# sourceMappingURL=bindCallback.js.map
- /***/ }),
- /***/ "R0Ic":
- /*!******************************************************************************!*\
- !*** ./node_modules/@angular/animations/__ivy_ngcc__/fesm2015/animations.js ***!
- \******************************************************************************/
- /*! exports provided: AUTO_STYLE, AnimationBuilder, AnimationFactory, NoopAnimationPlayer, animate, animateChild, animation, group, keyframes, query, sequence, stagger, state, style, transition, trigger, useAnimation, ɵAnimationGroupPlayer, ɵPRE_STYLE */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AUTO_STYLE", function() { return AUTO_STYLE; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationBuilder", function() { return AnimationBuilder; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationFactory", function() { return AnimationFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NoopAnimationPlayer", function() { return NoopAnimationPlayer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "animate", function() { return animate; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "animateChild", function() { return animateChild; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "animation", function() { return animation; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "group", function() { return group; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keyframes", function() { return keyframes; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "query", function() { return query; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequence", function() { return sequence; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stagger", function() { return stagger; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "state", function() { return state; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "style", function() { return style; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "transition", function() { return transition; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "trigger", function() { return trigger; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useAnimation", function() { return useAnimation; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵAnimationGroupPlayer", function() { return AnimationGroupPlayer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵPRE_STYLE", function() { return ɵPRE_STYLE; });
- /**
- * @license Angular v11.0.4
- * (c) 2010-2020 Google LLC. https://angular.io/
- * License: MIT
- */
- /**
- * An injectable service that produces an animation sequence programmatically within an
- * Angular component or directive.
- * Provided by the `BrowserAnimationsModule` or `NoopAnimationsModule`.
- *
- * @usageNotes
- *
- * To use this service, add it to your component or directive as a dependency.
- * The service is instantiated along with your component.
- *
- * Apps do not typically need to create their own animation players, but if you
- * do need to, follow these steps:
- *
- * 1. Use the `build()` method to create a programmatic animation using the
- * `animate()` function. The method returns an `AnimationFactory` instance.
- *
- * 2. Use the factory object to create an `AnimationPlayer` and attach it to a DOM element.
- *
- * 3. Use the player object to control the animation programmatically.
- *
- * For example:
- *
- * ```ts
- * // import the service from BrowserAnimationsModule
- * import {AnimationBuilder} from '@angular/animations';
- * // require the service as a dependency
- * class MyCmp {
- * constructor(private _builder: AnimationBuilder) {}
- *
- * makeAnimation(element: any) {
- * // first define a reusable animation
- * const myAnimation = this._builder.build([
- * style({ width: 0 }),
- * animate(1000, style({ width: '100px' }))
- * ]);
- *
- * // use the returned factory object to create a player
- * const player = myAnimation.create(element);
- *
- * player.play();
- * }
- * }
- * ```
- *
- * @publicApi
- */
- class AnimationBuilder {
- }
- /**
- * A factory object returned from the `AnimationBuilder`.`build()` method.
- *
- * @publicApi
- */
- class AnimationFactory {
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Specifies automatic styling.
- *
- * @publicApi
- */
- const AUTO_STYLE = '*';
- /**
- * Creates a named animation trigger, containing a list of `state()`
- * and `transition()` entries to be evaluated when the expression
- * bound to the trigger changes.
- *
- * @param name An identifying string.
- * @param definitions An animation definition object, containing an array of `state()`
- * and `transition()` declarations.
- *
- * @return An object that encapsulates the trigger data.
- *
- * @usageNotes
- * Define an animation trigger in the `animations` section of `@Component` metadata.
- * In the template, reference the trigger by name and bind it to a trigger expression that
- * evaluates to a defined animation state, using the following format:
- *
- * `[@triggerName]="expression"`
- *
- * Animation trigger bindings convert all values to strings, and then match the
- * previous and current values against any linked transitions.
- * Booleans can be specified as `1` or `true` and `0` or `false`.
- *
- * ### Usage Example
- *
- * The following example creates an animation trigger reference based on the provided
- * name value.
- * The provided animation value is expected to be an array consisting of state and
- * transition declarations.
- *
- * ```typescript
- * @Component({
- * selector: "my-component",
- * templateUrl: "my-component-tpl.html",
- * animations: [
- * trigger("myAnimationTrigger", [
- * state(...),
- * state(...),
- * transition(...),
- * transition(...)
- * ])
- * ]
- * })
- * class MyComponent {
- * myStatusExp = "something";
- * }
- * ```
- *
- * The template associated with this component makes use of the defined trigger
- * by binding to an element within its template code.
- *
- * ```html
- * <!-- somewhere inside of my-component-tpl.html -->
- * <div [@myAnimationTrigger]="myStatusExp">...</div>
- * ```
- *
- * ### Using an inline function
- * The `transition` animation method also supports reading an inline function which can decide
- * if its associated animation should be run.
- *
- * ```typescript
- * // this method is run each time the `myAnimationTrigger` trigger value changes.
- * function myInlineMatcherFn(fromState: string, toState: string, element: any, params: {[key:
- string]: any}): boolean {
- * // notice that `element` and `params` are also available here
- * return toState == 'yes-please-animate';
- * }
- *
- * @Component({
- * selector: 'my-component',
- * templateUrl: 'my-component-tpl.html',
- * animations: [
- * trigger('myAnimationTrigger', [
- * transition(myInlineMatcherFn, [
- * // the animation sequence code
- * ]),
- * ])
- * ]
- * })
- * class MyComponent {
- * myStatusExp = "yes-please-animate";
- * }
- * ```
- *
- * ### Disabling Animations
- * When true, the special animation control binding `@.disabled` binding prevents
- * all animations from rendering.
- * Place the `@.disabled` binding on an element to disable
- * animations on the element itself, as well as any inner animation triggers
- * within the element.
- *
- * The following example shows how to use this feature:
- *
- * ```typescript
- * @Component({
- * selector: 'my-component',
- * template: `
- * <div [@.disabled]="isDisabled">
- * <div [@childAnimation]="exp"></div>
- * </div>
- * `,
- * animations: [
- * trigger("childAnimation", [
- * // ...
- * ])
- * ]
- * })
- * class MyComponent {
- * isDisabled = true;
- * exp = '...';
- * }
- * ```
- *
- * When `@.disabled` is true, it prevents the `@childAnimation` trigger from animating,
- * along with any inner animations.
- *
- * ### Disable animations application-wide
- * When an area of the template is set to have animations disabled,
- * **all** inner components have their animations disabled as well.
- * This means that you can disable all animations for an app
- * by placing a host binding set on `@.disabled` on the topmost Angular component.
- *
- * ```typescript
- * import {Component, HostBinding} from '@angular/core';
- *
- * @Component({
- * selector: 'app-component',
- * templateUrl: 'app.component.html',
- * })
- * class AppComponent {
- * @HostBinding('@.disabled')
- * public animationsDisabled = true;
- * }
- * ```
- *
- * ### Overriding disablement of inner animations
- * Despite inner animations being disabled, a parent animation can `query()`
- * for inner elements located in disabled areas of the template and still animate
- * them if needed. This is also the case for when a sub animation is
- * queried by a parent and then later animated using `animateChild()`.
- *
- * ### Detecting when an animation is disabled
- * If a region of the DOM (or the entire application) has its animations disabled, the animation
- * trigger callbacks still fire, but for zero seconds. When the callback fires, it provides
- * an instance of an `AnimationEvent`. If animations are disabled,
- * the `.disabled` flag on the event is true.
- *
- * @publicApi
- */
- function trigger(name, definitions) {
- return { type: 7 /* Trigger */, name, definitions, options: {} };
- }
- /**
- * Defines an animation step that combines styling information with timing information.
- *
- * @param timings Sets `AnimateTimings` for the parent animation.
- * A string in the format "duration [delay] [easing]".
- * - Duration and delay are expressed as a number and optional time unit,
- * such as "1s" or "10ms" for one second and 10 milliseconds, respectively.
- * The default unit is milliseconds.
- * - The easing value controls how the animation accelerates and decelerates
- * during its runtime. Value is one of `ease`, `ease-in`, `ease-out`,
- * `ease-in-out`, or a `cubic-bezier()` function call.
- * If not supplied, no easing is applied.
- *
- * For example, the string "1s 100ms ease-out" specifies a duration of
- * 1000 milliseconds, and delay of 100 ms, and the "ease-out" easing style,
- * which decelerates near the end of the duration.
- * @param styles Sets AnimationStyles for the parent animation.
- * A function call to either `style()` or `keyframes()`
- * that returns a collection of CSS style entries to be applied to the parent animation.
- * When null, uses the styles from the destination state.
- * This is useful when describing an animation step that will complete an animation;
- * see "Animating to the final state" in `transitions()`.
- * @returns An object that encapsulates the animation step.
- *
- * @usageNotes
- * Call within an animation `sequence()`, `{@link animations/group group()}`, or
- * `transition()` call to specify an animation step
- * that applies given style data to the parent animation for a given amount of time.
- *
- * ### Syntax Examples
- * **Timing examples**
- *
- * The following examples show various `timings` specifications.
- * - `animate(500)` : Duration is 500 milliseconds.
- * - `animate("1s")` : Duration is 1000 milliseconds.
- * - `animate("100ms 0.5s")` : Duration is 100 milliseconds, delay is 500 milliseconds.
- * - `animate("5s ease-in")` : Duration is 5000 milliseconds, easing in.
- * - `animate("5s 10ms cubic-bezier(.17,.67,.88,.1)")` : Duration is 5000 milliseconds, delay is 10
- * milliseconds, easing according to a bezier curve.
- *
- * **Style examples**
- *
- * The following example calls `style()` to set a single CSS style.
- * ```typescript
- * animate(500, style({ background: "red" }))
- * ```
- * The following example calls `keyframes()` to set a CSS style
- * to different values for successive keyframes.
- * ```typescript
- * animate(500, keyframes(
- * [
- * style({ background: "blue" }),
- * style({ background: "red" })
- * ])
- * ```
- *
- * @publicApi
- */
- function animate(timings, styles = null) {
- return { type: 4 /* Animate */, styles, timings };
- }
- /**
- * @description Defines a list of animation steps to be run in parallel.
- *
- * @param steps An array of animation step objects.
- * - When steps are defined by `style()` or `animate()`
- * function calls, each call within the group is executed instantly.
- * - To specify offset styles to be applied at a later time, define steps with
- * `keyframes()`, or use `animate()` calls with a delay value.
- * For example:
- *
- * ```typescript
- * group([
- * animate("1s", style({ background: "black" })),
- * animate("2s", style({ color: "white" }))
- * ])
- * ```
- *
- * @param options An options object containing a delay and
- * developer-defined parameters that provide styling defaults and
- * can be overridden on invocation.
- *
- * @return An object that encapsulates the group data.
- *
- * @usageNotes
- * Grouped animations are useful when a series of styles must be
- * animated at different starting times and closed off at different ending times.
- *
- * When called within a `sequence()` or a
- * `transition()` call, does not continue to the next
- * instruction until all of the inner animation steps have completed.
- *
- * @publicApi
- */
- function group(steps, options = null) {
- return { type: 3 /* Group */, steps, options };
- }
- /**
- * Defines a list of animation steps to be run sequentially, one by one.
- *
- * @param steps An array of animation step objects.
- * - Steps defined by `style()` calls apply the styling data immediately.
- * - Steps defined by `animate()` calls apply the styling data over time
- * as specified by the timing data.
- *
- * ```typescript
- * sequence([
- * style({ opacity: 0 }),
- * animate("1s", style({ opacity: 1 }))
- * ])
- * ```
- *
- * @param options An options object containing a delay and
- * developer-defined parameters that provide styling defaults and
- * can be overridden on invocation.
- *
- * @return An object that encapsulates the sequence data.
- *
- * @usageNotes
- * When you pass an array of steps to a
- * `transition()` call, the steps run sequentially by default.
- * Compare this to the `{@link animations/group group()}` call, which runs animation steps in
- *parallel.
- *
- * When a sequence is used within a `{@link animations/group group()}` or a `transition()` call,
- * execution continues to the next instruction only after each of the inner animation
- * steps have completed.
- *
- * @publicApi
- **/
- function sequence(steps, options = null) {
- return { type: 2 /* Sequence */, steps, options };
- }
- /**
- * Declares a key/value object containing CSS properties/styles that
- * can then be used for an animation `state`, within an animation `sequence`,
- * or as styling data for calls to `animate()` and `keyframes()`.
- *
- * @param tokens A set of CSS styles or HTML styles associated with an animation state.
- * The value can be any of the following:
- * - A key-value style pair associating a CSS property with a value.
- * - An array of key-value style pairs.
- * - An asterisk (*), to use auto-styling, where styles are derived from the element
- * being animated and applied to the animation when it starts.
- *
- * Auto-styling can be used to define a state that depends on layout or other
- * environmental factors.
- *
- * @return An object that encapsulates the style data.
- *
- * @usageNotes
- * The following examples create animation styles that collect a set of
- * CSS property values:
- *
- * ```typescript
- * // string values for CSS properties
- * style({ background: "red", color: "blue" })
- *
- * // numerical pixel values
- * style({ width: 100, height: 0 })
- * ```
- *
- * The following example uses auto-styling to allow a component to animate from
- * a height of 0 up to the height of the parent element:
- *
- * ```
- * style({ height: 0 }),
- * animate("1s", style({ height: "*" }))
- * ```
- *
- * @publicApi
- **/
- function style(tokens) {
- return { type: 6 /* Style */, styles: tokens, offset: null };
- }
- /**
- * Declares an animation state within a trigger attached to an element.
- *
- * @param name One or more names for the defined state in a comma-separated string.
- * The following reserved state names can be supplied to define a style for specific use
- * cases:
- *
- * - `void` You can associate styles with this name to be used when
- * the element is detached from the application. For example, when an `ngIf` evaluates
- * to false, the state of the associated element is void.
- * - `*` (asterisk) Indicates the default state. You can associate styles with this name
- * to be used as the fallback when the state that is being animated is not declared
- * within the trigger.
- *
- * @param styles A set of CSS styles associated with this state, created using the
- * `style()` function.
- * This set of styles persists on the element once the state has been reached.
- * @param options Parameters that can be passed to the state when it is invoked.
- * 0 or more key-value pairs.
- * @return An object that encapsulates the new state data.
- *
- * @usageNotes
- * Use the `trigger()` function to register states to an animation trigger.
- * Use the `transition()` function to animate between states.
- * When a state is active within a component, its associated styles persist on the element,
- * even when the animation ends.
- *
- * @publicApi
- **/
- function state(name, styles, options) {
- return { type: 0 /* State */, name, styles, options };
- }
- /**
- * Defines a set of animation styles, associating each style with an optional `offset` value.
- *
- * @param steps A set of animation styles with optional offset data.
- * The optional `offset` value for a style specifies a percentage of the total animation
- * time at which that style is applied.
- * @returns An object that encapsulates the keyframes data.
- *
- * @usageNotes
- * Use with the `animate()` call. Instead of applying animations
- * from the current state
- * to the destination state, keyframes describe how each style entry is applied and at what point
- * within the animation arc.
- * Compare [CSS Keyframe Animations](https://www.w3schools.com/css/css3_animations.asp).
- *
- * ### Usage
- *
- * In the following example, the offset values describe
- * when each `backgroundColor` value is applied. The color is red at the start, and changes to
- * blue when 20% of the total time has elapsed.
- *
- * ```typescript
- * // the provided offset values
- * animate("5s", keyframes([
- * style({ backgroundColor: "red", offset: 0 }),
- * style({ backgroundColor: "blue", offset: 0.2 }),
- * style({ backgroundColor: "orange", offset: 0.3 }),
- * style({ backgroundColor: "black", offset: 1 })
- * ]))
- * ```
- *
- * If there are no `offset` values specified in the style entries, the offsets
- * are calculated automatically.
- *
- * ```typescript
- * animate("5s", keyframes([
- * style({ backgroundColor: "red" }) // offset = 0
- * style({ backgroundColor: "blue" }) // offset = 0.33
- * style({ backgroundColor: "orange" }) // offset = 0.66
- * style({ backgroundColor: "black" }) // offset = 1
- * ]))
- *```
- * @publicApi
- */
- function keyframes(steps) {
- return { type: 5 /* Keyframes */, steps };
- }
- /**
- * Declares an animation transition as a sequence of animation steps to run when a given
- * condition is satisfied. The condition is a Boolean expression or function that compares
- * the previous and current animation states, and returns true if this transition should occur.
- * When the state criteria of a defined transition are met, the associated animation is
- * triggered.
- *
- * @param stateChangeExpr A Boolean expression or function that compares the previous and current
- * animation states, and returns true if this transition should occur. Note that "true" and "false"
- * match 1 and 0, respectively. An expression is evaluated each time a state change occurs in the
- * animation trigger element.
- * The animation steps run when the expression evaluates to true.
- *
- * - A state-change string takes the form "state1 => state2", where each side is a defined animation
- * state, or an asterix (*) to refer to a dynamic start or end state.
- * - The expression string can contain multiple comma-separated statements;
- * for example "state1 => state2, state3 => state4".
- * - Special values `:enter` and `:leave` initiate a transition on the entry and exit states,
- * equivalent to "void => *" and "* => void".
- * - Special values `:increment` and `:decrement` initiate a transition when a numeric value has
- * increased or decreased in value.
- * - A function is executed each time a state change occurs in the animation trigger element.
- * The animation steps run when the function returns true.
- *
- * @param steps One or more animation objects, as returned by the `animate()` or
- * `sequence()` function, that form a transformation from one state to another.
- * A sequence is used by default when you pass an array.
- * @param options An options object that can contain a delay value for the start of the animation,
- * and additional developer-defined parameters. Provided values for additional parameters are used
- * as defaults, and override values can be passed to the caller on invocation.
- * @returns An object that encapsulates the transition data.
- *
- * @usageNotes
- * The template associated with a component binds an animation trigger to an element.
- *
- * ```HTML
- * <!-- somewhere inside of my-component-tpl.html -->
- * <div [@myAnimationTrigger]="myStatusExp">...</div>
- * ```
- *
- * All transitions are defined within an animation trigger,
- * along with named states that the transitions change to and from.
- *
- * ```typescript
- * trigger("myAnimationTrigger", [
- * // define states
- * state("on", style({ background: "green" })),
- * state("off", style({ background: "grey" })),
- * ...]
- * ```
- *
- * Note that when you call the `sequence()` function within a `{@link animations/group group()}`
- * or a `transition()` call, execution does not continue to the next instruction
- * until each of the inner animation steps have completed.
- *
- * ### Syntax examples
- *
- * The following examples define transitions between the two defined states (and default states),
- * using various options:
- *
- * ```typescript
- * // Transition occurs when the state value
- * // bound to "myAnimationTrigger" changes from "on" to "off"
- * transition("on => off", animate(500))
- * // Run the same animation for both directions
- * transition("on <=> off", animate(500))
- * // Define multiple state-change pairs separated by commas
- * transition("on => off, off => void", animate(500))
- * ```
- *
- * ### Special values for state-change expressions
- *
- * - Catch-all state change for when an element is inserted into the page and the
- * destination state is unknown:
- *
- * ```typescript
- * transition("void => *", [
- * style({ opacity: 0 }),
- * animate(500)
- * ])
- * ```
- *
- * - Capture a state change between any states:
- *
- * `transition("* => *", animate("1s 0s"))`
- *
- * - Entry and exit transitions:
- *
- * ```typescript
- * transition(":enter", [
- * style({ opacity: 0 }),
- * animate(500, style({ opacity: 1 }))
- * ]),
- * transition(":leave", [
- * animate(500, style({ opacity: 0 }))
- * ])
- * ```
- *
- * - Use `:increment` and `:decrement` to initiate transitions:
- *
- * ```typescript
- * transition(":increment", group([
- * query(':enter', [
- * style({ left: '100%' }),
- * animate('0.5s ease-out', style('*'))
- * ]),
- * query(':leave', [
- * animate('0.5s ease-out', style({ left: '-100%' }))
- * ])
- * ]))
- *
- * transition(":decrement", group([
- * query(':enter', [
- * style({ left: '100%' }),
- * animate('0.5s ease-out', style('*'))
- * ]),
- * query(':leave', [
- * animate('0.5s ease-out', style({ left: '-100%' }))
- * ])
- * ]))
- * ```
- *
- * ### State-change functions
- *
- * Here is an example of a `fromState` specified as a state-change function that invokes an
- * animation when true:
- *
- * ```typescript
- * transition((fromState, toState) =>
- * {
- * return fromState == "off" && toState == "on";
- * },
- * animate("1s 0s"))
- * ```
- *
- * ### Animating to the final state
- *
- * If the final step in a transition is a call to `animate()` that uses a timing value
- * with no style data, that step is automatically considered the final animation arc,
- * for the element to reach the final state. Angular automatically adds or removes
- * CSS styles to ensure that the element is in the correct final state.
- *
- * The following example defines a transition that starts by hiding the element,
- * then makes sure that it animates properly to whatever state is currently active for trigger:
- *
- * ```typescript
- * transition("void => *", [
- * style({ opacity: 0 }),
- * animate(500)
- * ])
- * ```
- * ### Boolean value matching
- * If a trigger binding value is a Boolean, it can be matched using a transition expression
- * that compares true and false or 1 and 0. For example:
- *
- * ```
- * // in the template
- * <div [@openClose]="open ? true : false">...</div>
- * // in the component metadata
- * trigger('openClose', [
- * state('true', style({ height: '*' })),
- * state('false', style({ height: '0px' })),
- * transition('false <=> true', animate(500))
- * ])
- * ```
- *
- * @publicApi
- **/
- function transition(stateChangeExpr, steps, options = null) {
- return { type: 1 /* Transition */, expr: stateChangeExpr, animation: steps, options };
- }
- /**
- * Produces a reusable animation that can be invoked in another animation or sequence,
- * by calling the `useAnimation()` function.
- *
- * @param steps One or more animation objects, as returned by the `animate()`
- * or `sequence()` function, that form a transformation from one state to another.
- * A sequence is used by default when you pass an array.
- * @param options An options object that can contain a delay value for the start of the
- * animation, and additional developer-defined parameters.
- * Provided values for additional parameters are used as defaults,
- * and override values can be passed to the caller on invocation.
- * @returns An object that encapsulates the animation data.
- *
- * @usageNotes
- * The following example defines a reusable animation, providing some default parameter
- * values.
- *
- * ```typescript
- * var fadeAnimation = animation([
- * style({ opacity: '{{ start }}' }),
- * animate('{{ time }}',
- * style({ opacity: '{{ end }}'}))
- * ],
- * { params: { time: '1000ms', start: 0, end: 1 }});
- * ```
- *
- * The following invokes the defined animation with a call to `useAnimation()`,
- * passing in override parameter values.
- *
- * ```js
- * useAnimation(fadeAnimation, {
- * params: {
- * time: '2s',
- * start: 1,
- * end: 0
- * }
- * })
- * ```
- *
- * If any of the passed-in parameter values are missing from this call,
- * the default values are used. If one or more parameter values are missing before a step is
- * animated, `useAnimation()` throws an error.
- *
- * @publicApi
- */
- function animation(steps, options = null) {
- return { type: 8 /* Reference */, animation: steps, options };
- }
- /**
- * Executes a queried inner animation element within an animation sequence.
- *
- * @param options An options object that can contain a delay value for the start of the
- * animation, and additional override values for developer-defined parameters.
- * @return An object that encapsulates the child animation data.
- *
- * @usageNotes
- * Each time an animation is triggered in Angular, the parent animation
- * has priority and any child animations are blocked. In order
- * for a child animation to run, the parent animation must query each of the elements
- * containing child animations, and run them using this function.
- *
- * Note that this feature is designed to be used with `query()` and it will only work
- * with animations that are assigned using the Angular animation library. CSS keyframes
- * and transitions are not handled by this API.
- *
- * @publicApi
- */
- function animateChild(options = null) {
- return { type: 9 /* AnimateChild */, options };
- }
- /**
- * Starts a reusable animation that is created using the `animation()` function.
- *
- * @param animation The reusable animation to start.
- * @param options An options object that can contain a delay value for the start of
- * the animation, and additional override values for developer-defined parameters.
- * @return An object that contains the animation parameters.
- *
- * @publicApi
- */
- function useAnimation(animation, options = null) {
- return { type: 10 /* AnimateRef */, animation, options };
- }
- /**
- * Finds one or more inner elements within the current element that is
- * being animated within a sequence. Use with `animate()`.
- *
- * @param selector The element to query, or a set of elements that contain Angular-specific
- * characteristics, specified with one or more of the following tokens.
- * - `query(":enter")` or `query(":leave")` : Query for newly inserted/removed elements.
- * - `query(":animating")` : Query all currently animating elements.
- * - `query("@triggerName")` : Query elements that contain an animation trigger.
- * - `query("@*")` : Query all elements that contain an animation triggers.
- * - `query(":self")` : Include the current element into the animation sequence.
- *
- * @param animation One or more animation steps to apply to the queried element or elements.
- * An array is treated as an animation sequence.
- * @param options An options object. Use the 'limit' field to limit the total number of
- * items to collect.
- * @return An object that encapsulates the query data.
- *
- * @usageNotes
- * Tokens can be merged into a combined query selector string. For example:
- *
- * ```typescript
- * query(':self, .record:enter, .record:leave, @subTrigger', [...])
- * ```
- *
- * The `query()` function collects multiple elements and works internally by using
- * `element.querySelectorAll`. Use the `limit` field of an options object to limit
- * the total number of items to be collected. For example:
- *
- * ```js
- * query('div', [
- * animate(...),
- * animate(...)
- * ], { limit: 1 })
- * ```
- *
- * By default, throws an error when zero items are found. Set the
- * `optional` flag to ignore this error. For example:
- *
- * ```js
- * query('.some-element-that-may-not-be-there', [
- * animate(...),
- * animate(...)
- * ], { optional: true })
- * ```
- *
- * ### Usage Example
- *
- * The following example queries for inner elements and animates them
- * individually using `animate()`.
- *
- * ```typescript
- * @Component({
- * selector: 'inner',
- * template: `
- * <div [@queryAnimation]="exp">
- * <h1>Title</h1>
- * <div class="content">
- * Blah blah blah
- * </div>
- * </div>
- * `,
- * animations: [
- * trigger('queryAnimation', [
- * transition('* => goAnimate', [
- * // hide the inner elements
- * query('h1', style({ opacity: 0 })),
- * query('.content', style({ opacity: 0 })),
- *
- * // animate the inner elements in, one by one
- * query('h1', animate(1000, style({ opacity: 1 }))),
- * query('.content', animate(1000, style({ opacity: 1 }))),
- * ])
- * ])
- * ]
- * })
- * class Cmp {
- * exp = '';
- *
- * goAnimate() {
- * this.exp = 'goAnimate';
- * }
- * }
- * ```
- *
- * @publicApi
- */
- function query(selector, animation, options = null) {
- return { type: 11 /* Query */, selector, animation, options };
- }
- /**
- * Use within an animation `query()` call to issue a timing gap after
- * each queried item is animated.
- *
- * @param timings A delay value.
- * @param animation One ore more animation steps.
- * @returns An object that encapsulates the stagger data.
- *
- * @usageNotes
- * In the following example, a container element wraps a list of items stamped out
- * by an `ngFor`. The container element contains an animation trigger that will later be set
- * to query for each of the inner items.
- *
- * Each time items are added, the opacity fade-in animation runs,
- * and each removed item is faded out.
- * When either of these animations occur, the stagger effect is
- * applied after each item's animation is started.
- *
- * ```html
- * <!-- list.component.html -->
- * <button (click)="toggle()">Show / Hide Items</button>
- * <hr />
- * <div [@listAnimation]="items.length">
- * <div *ngFor="let item of items">
- * {{ item }}
- * </div>
- * </div>
- * ```
- *
- * Here is the component code:
- *
- * ```typescript
- * import {trigger, transition, style, animate, query, stagger} from '@angular/animations';
- * @Component({
- * templateUrl: 'list.component.html',
- * animations: [
- * trigger('listAnimation', [
- * ...
- * ])
- * ]
- * })
- * class ListComponent {
- * items = [];
- *
- * showItems() {
- * this.items = [0,1,2,3,4];
- * }
- *
- * hideItems() {
- * this.items = [];
- * }
- *
- * toggle() {
- * this.items.length ? this.hideItems() : this.showItems();
- * }
- * }
- * ```
- *
- * Here is the animation trigger code:
- *
- * ```typescript
- * trigger('listAnimation', [
- * transition('* => *', [ // each time the binding value changes
- * query(':leave', [
- * stagger(100, [
- * animate('0.5s', style({ opacity: 0 }))
- * ])
- * ]),
- * query(':enter', [
- * style({ opacity: 0 }),
- * stagger(100, [
- * animate('0.5s', style({ opacity: 1 }))
- * ])
- * ])
- * ])
- * ])
- * ```
- *
- * @publicApi
- */
- function stagger(timings, animation) {
- return { type: 12 /* Stagger */, timings, animation };
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function scheduleMicroTask(cb) {
- Promise.resolve(null).then(cb);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * An empty programmatic controller for reusable animations.
- * Used internally when animations are disabled, to avoid
- * checking for the null case when an animation player is expected.
- *
- * @see `animate()`
- * @see `AnimationPlayer`
- * @see `GroupPlayer`
- *
- * @publicApi
- */
- class NoopAnimationPlayer {
- constructor(duration = 0, delay = 0) {
- this._onDoneFns = [];
- this._onStartFns = [];
- this._onDestroyFns = [];
- this._started = false;
- this._destroyed = false;
- this._finished = false;
- this._position = 0;
- this.parentPlayer = null;
- this.totalTime = duration + delay;
- }
- _onFinish() {
- if (!this._finished) {
- this._finished = true;
- this._onDoneFns.forEach(fn => fn());
- this._onDoneFns = [];
- }
- }
- onStart(fn) {
- this._onStartFns.push(fn);
- }
- onDone(fn) {
- this._onDoneFns.push(fn);
- }
- onDestroy(fn) {
- this._onDestroyFns.push(fn);
- }
- hasStarted() {
- return this._started;
- }
- init() { }
- play() {
- if (!this.hasStarted()) {
- this._onStart();
- this.triggerMicrotask();
- }
- this._started = true;
- }
- /** @internal */
- triggerMicrotask() {
- scheduleMicroTask(() => this._onFinish());
- }
- _onStart() {
- this._onStartFns.forEach(fn => fn());
- this._onStartFns = [];
- }
- pause() { }
- restart() { }
- finish() {
- this._onFinish();
- }
- destroy() {
- if (!this._destroyed) {
- this._destroyed = true;
- if (!this.hasStarted()) {
- this._onStart();
- }
- this.finish();
- this._onDestroyFns.forEach(fn => fn());
- this._onDestroyFns = [];
- }
- }
- reset() { }
- setPosition(position) {
- this._position = this.totalTime ? position * this.totalTime : 1;
- }
- getPosition() {
- return this.totalTime ? this._position / this.totalTime : 1;
- }
- /** @internal */
- triggerCallback(phaseName) {
- const methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns;
- methods.forEach(fn => fn());
- methods.length = 0;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * A programmatic controller for a group of reusable animations.
- * Used internally to control animations.
- *
- * @see `AnimationPlayer`
- * @see `{@link animations/group group()}`
- *
- */
- class AnimationGroupPlayer {
- constructor(_players) {
- this._onDoneFns = [];
- this._onStartFns = [];
- this._finished = false;
- this._started = false;
- this._destroyed = false;
- this._onDestroyFns = [];
- this.parentPlayer = null;
- this.totalTime = 0;
- this.players = _players;
- let doneCount = 0;
- let destroyCount = 0;
- let startCount = 0;
- const total = this.players.length;
- if (total == 0) {
- scheduleMicroTask(() => this._onFinish());
- }
- else {
- this.players.forEach(player => {
- player.onDone(() => {
- if (++doneCount == total) {
- this._onFinish();
- }
- });
- player.onDestroy(() => {
- if (++destroyCount == total) {
- this._onDestroy();
- }
- });
- player.onStart(() => {
- if (++startCount == total) {
- this._onStart();
- }
- });
- });
- }
- this.totalTime = this.players.reduce((time, player) => Math.max(time, player.totalTime), 0);
- }
- _onFinish() {
- if (!this._finished) {
- this._finished = true;
- this._onDoneFns.forEach(fn => fn());
- this._onDoneFns = [];
- }
- }
- init() {
- this.players.forEach(player => player.init());
- }
- onStart(fn) {
- this._onStartFns.push(fn);
- }
- _onStart() {
- if (!this.hasStarted()) {
- this._started = true;
- this._onStartFns.forEach(fn => fn());
- this._onStartFns = [];
- }
- }
- onDone(fn) {
- this._onDoneFns.push(fn);
- }
- onDestroy(fn) {
- this._onDestroyFns.push(fn);
- }
- hasStarted() {
- return this._started;
- }
- play() {
- if (!this.parentPlayer) {
- this.init();
- }
- this._onStart();
- this.players.forEach(player => player.play());
- }
- pause() {
- this.players.forEach(player => player.pause());
- }
- restart() {
- this.players.forEach(player => player.restart());
- }
- finish() {
- this._onFinish();
- this.players.forEach(player => player.finish());
- }
- destroy() {
- this._onDestroy();
- }
- _onDestroy() {
- if (!this._destroyed) {
- this._destroyed = true;
- this._onFinish();
- this.players.forEach(player => player.destroy());
- this._onDestroyFns.forEach(fn => fn());
- this._onDestroyFns = [];
- }
- }
- reset() {
- this.players.forEach(player => player.reset());
- this._destroyed = false;
- this._finished = false;
- this._started = false;
- }
- setPosition(p) {
- const timeAtPosition = p * this.totalTime;
- this.players.forEach(player => {
- const position = player.totalTime ? Math.min(1, timeAtPosition / player.totalTime) : 1;
- player.setPosition(position);
- });
- }
- getPosition() {
- const longestPlayer = this.players.reduce((longestSoFar, player) => {
- const newPlayerIsLongest = longestSoFar === null || player.totalTime > longestSoFar.totalTime;
- return newPlayerIsLongest ? player : longestSoFar;
- }, null);
- return longestPlayer != null ? longestPlayer.getPosition() : 0;
- }
- beforeDestroy() {
- this.players.forEach(player => {
- if (player.beforeDestroy) {
- player.beforeDestroy();
- }
- });
- }
- /** @internal */
- triggerCallback(phaseName) {
- const methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns;
- methods.forEach(fn => fn());
- methods.length = 0;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ɵPRE_STYLE = '!';
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=animations.js.map
- /***/ }),
- /***/ "R1ws":
- /*!************************************************************************************!*\
- !*** ./node_modules/@angular/platform-browser/__ivy_ngcc__/fesm2015/animations.js ***!
- \************************************************************************************/
- /*! exports provided: ANIMATION_MODULE_TYPE, BrowserAnimationsModule, NoopAnimationsModule, ɵAnimationRenderer, ɵAnimationRendererFactory, ɵBrowserAnimationBuilder, ɵBrowserAnimationFactory, ɵInjectableAnimationEngine, ɵangular_packages_platform_browser_animations_animations_a, ɵangular_packages_platform_browser_animations_animations_b, ɵangular_packages_platform_browser_animations_animations_c, ɵangular_packages_platform_browser_animations_animations_d, ɵangular_packages_platform_browser_animations_animations_e, ɵangular_packages_platform_browser_animations_animations_f */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ANIMATION_MODULE_TYPE", function() { return ANIMATION_MODULE_TYPE; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BrowserAnimationsModule", function() { return BrowserAnimationsModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NoopAnimationsModule", function() { return NoopAnimationsModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵAnimationRenderer", function() { return AnimationRenderer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵAnimationRendererFactory", function() { return AnimationRendererFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵBrowserAnimationBuilder", function() { return BrowserAnimationBuilder; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵBrowserAnimationFactory", function() { return BrowserAnimationFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵInjectableAnimationEngine", function() { return InjectableAnimationEngine; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_animations_animations_a", function() { return instantiateSupportedAnimationDriver; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_animations_animations_b", function() { return instantiateDefaultStyleNormalizer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_animations_animations_c", function() { return instantiateRendererFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_animations_animations_d", function() { return BROWSER_ANIMATIONS_PROVIDERS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_animations_animations_e", function() { return BROWSER_NOOP_ANIMATIONS_PROVIDERS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_animations_animations_f", function() { return BaseAnimationRenderer; });
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/platform-browser */ "jhN1");
- /* harmony import */ var _angular_animations__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/animations */ "R0Ic");
- /* harmony import */ var _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/animations/browser */ "t9l1");
- /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/common */ "ofXK");
- /**
- * @license Angular v11.0.4
- * (c) 2010-2020 Google LLC. https://angular.io/
- * License: MIT
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class BrowserAnimationBuilder extends _angular_animations__WEBPACK_IMPORTED_MODULE_2__["AnimationBuilder"] {
- constructor(rootRenderer, doc) {
- super();
- this._nextAnimationId = 0;
- const typeData = { id: '0', encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None, styles: [], data: { animation: [] } };
- this._renderer = rootRenderer.createRenderer(doc.body, typeData);
- }
- build(animation) {
- const id = this._nextAnimationId.toString();
- this._nextAnimationId++;
- const entry = Array.isArray(animation) ? Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["sequence"])(animation) : animation;
- issueAnimationCommand(this._renderer, null, id, 'register', [entry]);
- return new BrowserAnimationFactory(id, this._renderer);
- }
- }
- BrowserAnimationBuilder.ɵfac = function BrowserAnimationBuilder_Factory(t) { return new (t || BrowserAnimationBuilder)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"])); };
- BrowserAnimationBuilder.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: BrowserAnimationBuilder, factory: BrowserAnimationBuilder.ɵfac });
- BrowserAnimationBuilder.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"] },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BrowserAnimationBuilder, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"] }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
- }] }]; }, null); })();
- class BrowserAnimationFactory extends _angular_animations__WEBPACK_IMPORTED_MODULE_2__["AnimationFactory"] {
- constructor(_id, _renderer) {
- super();
- this._id = _id;
- this._renderer = _renderer;
- }
- create(element, options) {
- return new RendererAnimationPlayer(this._id, element, options || {}, this._renderer);
- }
- }
- class RendererAnimationPlayer {
- constructor(id, element, options, _renderer) {
- this.id = id;
- this.element = element;
- this._renderer = _renderer;
- this.parentPlayer = null;
- this._started = false;
- this.totalTime = 0;
- this._command('create', options);
- }
- _listen(eventName, callback) {
- return this._renderer.listen(this.element, `@@${this.id}:${eventName}`, callback);
- }
- _command(command, ...args) {
- return issueAnimationCommand(this._renderer, this.element, this.id, command, args);
- }
- onDone(fn) {
- this._listen('done', fn);
- }
- onStart(fn) {
- this._listen('start', fn);
- }
- onDestroy(fn) {
- this._listen('destroy', fn);
- }
- init() {
- this._command('init');
- }
- hasStarted() {
- return this._started;
- }
- play() {
- this._command('play');
- this._started = true;
- }
- pause() {
- this._command('pause');
- }
- restart() {
- this._command('restart');
- }
- finish() {
- this._command('finish');
- }
- destroy() {
- this._command('destroy');
- }
- reset() {
- this._command('reset');
- }
- setPosition(p) {
- this._command('setPosition', p);
- }
- getPosition() {
- var _a, _b;
- return (_b = (_a = this._renderer.engine.players[+this.id]) === null || _a === void 0 ? void 0 : _a.getPosition()) !== null && _b !== void 0 ? _b : 0;
- }
- }
- function issueAnimationCommand(renderer, element, id, command, args) {
- return renderer.setProperty(element, `@@${id}:${command}`, args);
- }
- const ANIMATION_PREFIX = '@';
- const DISABLE_ANIMATIONS_FLAG = '@.disabled';
- class AnimationRendererFactory {
- constructor(delegate, engine, _zone) {
- this.delegate = delegate;
- this.engine = engine;
- this._zone = _zone;
- this._currentId = 0;
- this._microtaskId = 1;
- this._animationCallbacksBuffer = [];
- this._rendererCache = new Map();
- this._cdRecurDepth = 0;
- this.promise = Promise.resolve(0);
- engine.onRemovalComplete = (element, delegate) => {
- // Note: if an component element has a leave animation, and the component
- // a host leave animation, the view engine will call `removeChild` for the parent
- // component renderer as well as for the child component renderer.
- // Therefore, we need to check if we already removed the element.
- if (delegate && delegate.parentNode(element)) {
- delegate.removeChild(element.parentNode, element);
- }
- };
- }
- createRenderer(hostElement, type) {
- const EMPTY_NAMESPACE_ID = '';
- // cache the delegates to find out which cached delegate can
- // be used by which cached renderer
- const delegate = this.delegate.createRenderer(hostElement, type);
- if (!hostElement || !type || !type.data || !type.data['animation']) {
- let renderer = this._rendererCache.get(delegate);
- if (!renderer) {
- renderer = new BaseAnimationRenderer(EMPTY_NAMESPACE_ID, delegate, this.engine);
- // only cache this result when the base renderer is used
- this._rendererCache.set(delegate, renderer);
- }
- return renderer;
- }
- const componentId = type.id;
- const namespaceId = type.id + '-' + this._currentId;
- this._currentId++;
- this.engine.register(namespaceId, hostElement);
- const registerTrigger = (trigger) => {
- if (Array.isArray(trigger)) {
- trigger.forEach(registerTrigger);
- }
- else {
- this.engine.registerTrigger(componentId, namespaceId, hostElement, trigger.name, trigger);
- }
- };
- const animationTriggers = type.data['animation'];
- animationTriggers.forEach(registerTrigger);
- return new AnimationRenderer(this, namespaceId, delegate, this.engine);
- }
- begin() {
- this._cdRecurDepth++;
- if (this.delegate.begin) {
- this.delegate.begin();
- }
- }
- _scheduleCountTask() {
- // always use promise to schedule microtask instead of use Zone
- this.promise.then(() => {
- this._microtaskId++;
- });
- }
- /** @internal */
- scheduleListenerCallback(count, fn, data) {
- if (count >= 0 && count < this._microtaskId) {
- this._zone.run(() => fn(data));
- return;
- }
- if (this._animationCallbacksBuffer.length == 0) {
- Promise.resolve(null).then(() => {
- this._zone.run(() => {
- this._animationCallbacksBuffer.forEach(tuple => {
- const [fn, data] = tuple;
- fn(data);
- });
- this._animationCallbacksBuffer = [];
- });
- });
- }
- this._animationCallbacksBuffer.push([fn, data]);
- }
- end() {
- this._cdRecurDepth--;
- // this is to prevent animations from running twice when an inner
- // component does CD when a parent component instead has inserted it
- if (this._cdRecurDepth == 0) {
- this._zone.runOutsideAngular(() => {
- this._scheduleCountTask();
- this.engine.flush(this._microtaskId);
- });
- }
- if (this.delegate.end) {
- this.delegate.end();
- }
- }
- whenRenderingDone() {
- return this.engine.whenRenderingDone();
- }
- }
- AnimationRendererFactory.ɵfac = function AnimationRendererFactory_Factory(t) { return new (t || AnimationRendererFactory)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationEngine"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"])); };
- AnimationRendererFactory.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: AnimationRendererFactory, factory: AnimationRendererFactory.ɵfac });
- AnimationRendererFactory.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"] },
- { type: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationEngine"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AnimationRendererFactory, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"] }, { type: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationEngine"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }]; }, null); })();
- class BaseAnimationRenderer {
- constructor(namespaceId, delegate, engine) {
- this.namespaceId = namespaceId;
- this.delegate = delegate;
- this.engine = engine;
- this.destroyNode = this.delegate.destroyNode ? (n) => delegate.destroyNode(n) : null;
- }
- get data() {
- return this.delegate.data;
- }
- destroy() {
- this.engine.destroy(this.namespaceId, this.delegate);
- this.delegate.destroy();
- }
- createElement(name, namespace) {
- return this.delegate.createElement(name, namespace);
- }
- createComment(value) {
- return this.delegate.createComment(value);
- }
- createText(value) {
- return this.delegate.createText(value);
- }
- appendChild(parent, newChild) {
- this.delegate.appendChild(parent, newChild);
- this.engine.onInsert(this.namespaceId, newChild, parent, false);
- }
- insertBefore(parent, newChild, refChild, isMove = true) {
- this.delegate.insertBefore(parent, newChild, refChild);
- // If `isMove` true than we should animate this insert.
- this.engine.onInsert(this.namespaceId, newChild, parent, isMove);
- }
- removeChild(parent, oldChild, isHostElement) {
- this.engine.onRemove(this.namespaceId, oldChild, this.delegate, isHostElement);
- }
- selectRootElement(selectorOrNode, preserveContent) {
- return this.delegate.selectRootElement(selectorOrNode, preserveContent);
- }
- parentNode(node) {
- return this.delegate.parentNode(node);
- }
- nextSibling(node) {
- return this.delegate.nextSibling(node);
- }
- setAttribute(el, name, value, namespace) {
- this.delegate.setAttribute(el, name, value, namespace);
- }
- removeAttribute(el, name, namespace) {
- this.delegate.removeAttribute(el, name, namespace);
- }
- addClass(el, name) {
- this.delegate.addClass(el, name);
- }
- removeClass(el, name) {
- this.delegate.removeClass(el, name);
- }
- setStyle(el, style, value, flags) {
- this.delegate.setStyle(el, style, value, flags);
- }
- removeStyle(el, style, flags) {
- this.delegate.removeStyle(el, style, flags);
- }
- setProperty(el, name, value) {
- if (name.charAt(0) == ANIMATION_PREFIX && name == DISABLE_ANIMATIONS_FLAG) {
- this.disableAnimations(el, !!value);
- }
- else {
- this.delegate.setProperty(el, name, value);
- }
- }
- setValue(node, value) {
- this.delegate.setValue(node, value);
- }
- listen(target, eventName, callback) {
- return this.delegate.listen(target, eventName, callback);
- }
- disableAnimations(element, value) {
- this.engine.disableAnimations(element, value);
- }
- }
- class AnimationRenderer extends BaseAnimationRenderer {
- constructor(factory, namespaceId, delegate, engine) {
- super(namespaceId, delegate, engine);
- this.factory = factory;
- this.namespaceId = namespaceId;
- }
- setProperty(el, name, value) {
- if (name.charAt(0) == ANIMATION_PREFIX) {
- if (name.charAt(1) == '.' && name == DISABLE_ANIMATIONS_FLAG) {
- value = value === undefined ? true : !!value;
- this.disableAnimations(el, value);
- }
- else {
- this.engine.process(this.namespaceId, el, name.substr(1), value);
- }
- }
- else {
- this.delegate.setProperty(el, name, value);
- }
- }
- listen(target, eventName, callback) {
- if (eventName.charAt(0) == ANIMATION_PREFIX) {
- const element = resolveElementFromTarget(target);
- let name = eventName.substr(1);
- let phase = '';
- // @listener.phase is for trigger animation callbacks
- // @@listener is for animation builder callbacks
- if (name.charAt(0) != ANIMATION_PREFIX) {
- [name, phase] = parseTriggerCallbackName(name);
- }
- return this.engine.listen(this.namespaceId, element, name, phase, event => {
- const countId = event['_data'] || -1;
- this.factory.scheduleListenerCallback(countId, callback, event);
- });
- }
- return this.delegate.listen(target, eventName, callback);
- }
- }
- function resolveElementFromTarget(target) {
- switch (target) {
- case 'body':
- return document.body;
- case 'document':
- return document;
- case 'window':
- return window;
- default:
- return target;
- }
- }
- function parseTriggerCallbackName(triggerName) {
- const dotIndex = triggerName.indexOf('.');
- const trigger = triggerName.substring(0, dotIndex);
- const phase = triggerName.substr(dotIndex + 1);
- return [trigger, phase];
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class InjectableAnimationEngine extends _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationEngine"] {
- constructor(doc, driver, normalizer) {
- super(doc.body, driver, normalizer);
- }
- }
- InjectableAnimationEngine.ɵfac = function InjectableAnimationEngine_Factory(t) { return new (t || InjectableAnimationEngine)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["AnimationDriver"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationStyleNormalizer"])); };
- InjectableAnimationEngine.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: InjectableAnimationEngine, factory: InjectableAnimationEngine.ɵfac });
- InjectableAnimationEngine.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"],] }] },
- { type: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["AnimationDriver"] },
- { type: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationStyleNormalizer"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](InjectableAnimationEngine, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
- }] }, { type: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["AnimationDriver"] }, { type: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationStyleNormalizer"] }]; }, null); })();
- function instantiateSupportedAnimationDriver() {
- return Object(_angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵsupportsWebAnimations"])() ? new _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵWebAnimationsDriver"]() : new _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵCssKeyframesDriver"]();
- }
- function instantiateDefaultStyleNormalizer() {
- return new _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵWebAnimationsStyleNormalizer"]();
- }
- function instantiateRendererFactory(renderer, engine, zone) {
- return new AnimationRendererFactory(renderer, engine, zone);
- }
- /**
- * @publicApi
- */
- const ANIMATION_MODULE_TYPE = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('AnimationModuleType');
- const SHARED_ANIMATION_PROVIDERS = [
- { provide: _angular_animations__WEBPACK_IMPORTED_MODULE_2__["AnimationBuilder"], useClass: BrowserAnimationBuilder },
- { provide: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationStyleNormalizer"], useFactory: instantiateDefaultStyleNormalizer },
- { provide: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationEngine"], useClass: InjectableAnimationEngine }, {
- provide: _angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"],
- useFactory: instantiateRendererFactory,
- deps: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["ɵDomRendererFactory2"], _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationEngine"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]]
- }
- ];
- /**
- * Separate providers from the actual module so that we can do a local modification in Google3 to
- * include them in the BrowserModule.
- */
- const BROWSER_ANIMATIONS_PROVIDERS = [
- { provide: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["AnimationDriver"], useFactory: instantiateSupportedAnimationDriver },
- { provide: ANIMATION_MODULE_TYPE, useValue: 'BrowserAnimations' }, ...SHARED_ANIMATION_PROVIDERS
- ];
- /**
- * Separate providers from the actual module so that we can do a local modification in Google3 to
- * include them in the BrowserTestingModule.
- */
- const BROWSER_NOOP_ANIMATIONS_PROVIDERS = [
- { provide: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["AnimationDriver"], useClass: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵNoopAnimationDriver"] },
- { provide: ANIMATION_MODULE_TYPE, useValue: 'NoopAnimations' }, ...SHARED_ANIMATION_PROVIDERS
- ];
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Exports `BrowserModule` with additional [dependency-injection providers](guide/glossary#provider)
- * for use with animations. See [Animations](guide/animations).
- * @publicApi
- */
- class BrowserAnimationsModule {
- }
- BrowserAnimationsModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: BrowserAnimationsModule });
- BrowserAnimationsModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function BrowserAnimationsModule_Factory(t) { return new (t || BrowserAnimationsModule)(); }, providers: BROWSER_ANIMATIONS_PROVIDERS, imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["BrowserModule"]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](BrowserAnimationsModule, { exports: function () { return [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["BrowserModule"]]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BrowserAnimationsModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- exports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["BrowserModule"]],
- providers: BROWSER_ANIMATIONS_PROVIDERS
- }]
- }], null, null); })();
- /**
- * A null player that must be imported to allow disabling of animations.
- * @publicApi
- */
- class NoopAnimationsModule {
- }
- NoopAnimationsModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NoopAnimationsModule });
- NoopAnimationsModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NoopAnimationsModule_Factory(t) { return new (t || NoopAnimationsModule)(); }, providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS, imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["BrowserModule"]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NoopAnimationsModule, { exports: function () { return [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["BrowserModule"]]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NoopAnimationsModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- exports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["BrowserModule"]],
- providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS
- }]
- }], null, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=animations.js.map
- /***/ }),
- /***/ "RUbi":
- /*!************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduler/AsapScheduler.js ***!
- \************************************************************************/
- /*! exports provided: AsapScheduler */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsapScheduler", function() { return AsapScheduler; });
- /* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsyncScheduler */ "IjjT");
- class AsapScheduler extends _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__["AsyncScheduler"] {
- flush(action) {
- this.active = true;
- this.scheduled = undefined;
- const { actions } = this;
- let error;
- let index = -1;
- let count = actions.length;
- action = action || actions.shift();
- do {
- if (error = action.execute(action.state, action.delay)) {
- break;
- }
- } while (++index < count && (action = actions.shift()));
- this.active = false;
- if (error) {
- while (++index < count && (action = actions.shift())) {
- action.unsubscribe();
- }
- throw error;
- }
- }
- }
- //# sourceMappingURL=AsapScheduler.js.map
- /***/ }),
- /***/ "SeVD":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/subscribeTo.js ***!
- \*****************************************************************/
- /*! exports provided: subscribeTo */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeTo", function() { return subscribeTo; });
- /* harmony import */ var _subscribeToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./subscribeToArray */ "ngJS");
- /* harmony import */ var _subscribeToPromise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./subscribeToPromise */ "a7t3");
- /* harmony import */ var _subscribeToIterable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./subscribeToIterable */ "pLzU");
- /* harmony import */ var _subscribeToObservable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./subscribeToObservable */ "CRDf");
- /* harmony import */ var _isArrayLike__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./isArrayLike */ "I55L");
- /* harmony import */ var _isPromise__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isPromise */ "c2HN");
- /* harmony import */ var _isObject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isObject */ "XoHu");
- /* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../symbol/iterator */ "Lhse");
- /* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../symbol/observable */ "kJWO");
- const subscribeTo = (result) => {
- if (!!result && typeof result[_symbol_observable__WEBPACK_IMPORTED_MODULE_8__["observable"]] === 'function') {
- return Object(_subscribeToObservable__WEBPACK_IMPORTED_MODULE_3__["subscribeToObservable"])(result);
- }
- else if (Object(_isArrayLike__WEBPACK_IMPORTED_MODULE_4__["isArrayLike"])(result)) {
- return Object(_subscribeToArray__WEBPACK_IMPORTED_MODULE_0__["subscribeToArray"])(result);
- }
- else if (Object(_isPromise__WEBPACK_IMPORTED_MODULE_5__["isPromise"])(result)) {
- return Object(_subscribeToPromise__WEBPACK_IMPORTED_MODULE_1__["subscribeToPromise"])(result);
- }
- else if (!!result && typeof result[_symbol_iterator__WEBPACK_IMPORTED_MODULE_7__["iterator"]] === 'function') {
- return Object(_subscribeToIterable__WEBPACK_IMPORTED_MODULE_2__["subscribeToIterable"])(result);
- }
- else {
- const value = Object(_isObject__WEBPACK_IMPORTED_MODULE_6__["isObject"])(result) ? 'an invalid object' : `'${result}'`;
- const msg = `You provided ${value} where a stream was expected.`
- + ' You can provide an Observable, Promise, Array, or Iterable.';
- throw new TypeError(msg);
- }
- };
- //# sourceMappingURL=subscribeTo.js.map
- /***/ }),
- /***/ "SpAZ":
- /*!**************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/identity.js ***!
- \**************************************************************/
- /*! exports provided: identity */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });
- function identity(x) {
- return x;
- }
- //# sourceMappingURL=identity.js.map
- /***/ }),
- /***/ "SxV6":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/first.js ***!
- \****************************************************************/
- /*! exports provided: first */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "first", function() { return first; });
- /* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/EmptyError */ "sVev");
- /* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./filter */ "pLZG");
- /* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./take */ "IzEk");
- /* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./defaultIfEmpty */ "xbPD");
- /* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./throwIfEmpty */ "XDbj");
- /* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/identity */ "SpAZ");
- function first(predicate, defaultValue) {
- const hasDefaultValue = arguments.length >= 2;
- return (source) => source.pipe(predicate ? Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])((v, i) => predicate(v, i, source)) : _util_identity__WEBPACK_IMPORTED_MODULE_5__["identity"], Object(_take__WEBPACK_IMPORTED_MODULE_2__["take"])(1), hasDefaultValue ? Object(_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__["defaultIfEmpty"])(defaultValue) : Object(_throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__["throwIfEmpty"])(() => new _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__["EmptyError"]()));
- }
- //# sourceMappingURL=first.js.map
- /***/ }),
- /***/ "Texg":
- /*!*******************************************!*\
- !*** ./node_modules/dexie/dist/dexie.mjs ***!
- \*******************************************/
- /*! exports provided: default */
- /***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /*
- * Dexie.js - a minimalistic wrapper for IndexedDB
- * ===============================================
- *
- * By David Fahlander, david.fahlander@gmail.com
- *
- * Version 3.0.2, Fri Jul 31 2020
- *
- * http://dexie.org
- *
- * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/
- */
-
- var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- function __spreadArrays() {
- for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
- for (var r = Array(s), k = 0, i = 0; i < il; i++)
- for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
- r[k] = a[j];
- return r;
- }
- var keys = Object.keys;
- var isArray = Array.isArray;
- var _global = typeof self !== 'undefined' ? self :
- typeof window !== 'undefined' ? window :
- global;
- if (typeof Promise !== 'undefined' && !_global.Promise) {
- _global.Promise = Promise;
- }
- function extend(obj, extension) {
- if (typeof extension !== 'object')
- return obj;
- keys(extension).forEach(function (key) {
- obj[key] = extension[key];
- });
- return obj;
- }
- var getProto = Object.getPrototypeOf;
- var _hasOwn = {}.hasOwnProperty;
- function hasOwn(obj, prop) {
- return _hasOwn.call(obj, prop);
- }
- function props(proto, extension) {
- if (typeof extension === 'function')
- extension = extension(getProto(proto));
- keys(extension).forEach(function (key) {
- setProp(proto, key, extension[key]);
- });
- }
- var defineProperty = Object.defineProperty;
- function setProp(obj, prop, functionOrGetSet, options) {
- defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, "get") && typeof functionOrGetSet.get === 'function' ?
- { get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true } :
- { value: functionOrGetSet, configurable: true, writable: true }, options));
- }
- function derive(Child) {
- return {
- from: function (Parent) {
- Child.prototype = Object.create(Parent.prototype);
- setProp(Child.prototype, "constructor", Child);
- return {
- extend: props.bind(null, Child.prototype)
- };
- }
- };
- }
- var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
- function getPropertyDescriptor(obj, prop) {
- var pd = getOwnPropertyDescriptor(obj, prop);
- var proto;
- return pd || (proto = getProto(obj)) && getPropertyDescriptor(proto, prop);
- }
- var _slice = [].slice;
- function slice(args, start, end) {
- return _slice.call(args, start, end);
- }
- function override(origFunc, overridedFactory) {
- return overridedFactory(origFunc);
- }
- function assert(b) {
- if (!b)
- throw new Error("Assertion Failed");
- }
- function asap(fn) {
- if (_global.setImmediate)
- setImmediate(fn);
- else
- setTimeout(fn, 0);
- }
- function arrayToObject(array, extractor) {
- return array.reduce(function (result, item, i) {
- var nameAndValue = extractor(item, i);
- if (nameAndValue)
- result[nameAndValue[0]] = nameAndValue[1];
- return result;
- }, {});
- }
- function tryCatch(fn, onerror, args) {
- try {
- fn.apply(null, args);
- }
- catch (ex) {
- onerror && onerror(ex);
- }
- }
- function getByKeyPath(obj, keyPath) {
- if (hasOwn(obj, keyPath))
- return obj[keyPath];
- if (!keyPath)
- return obj;
- if (typeof keyPath !== 'string') {
- var rv = [];
- for (var i = 0, l = keyPath.length; i < l; ++i) {
- var val = getByKeyPath(obj, keyPath[i]);
- rv.push(val);
- }
- return rv;
- }
- var period = keyPath.indexOf('.');
- if (period !== -1) {
- var innerObj = obj[keyPath.substr(0, period)];
- return innerObj === undefined ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1));
- }
- return undefined;
- }
- function setByKeyPath(obj, keyPath, value) {
- if (!obj || keyPath === undefined)
- return;
- if ('isFrozen' in Object && Object.isFrozen(obj))
- return;
- if (typeof keyPath !== 'string' && 'length' in keyPath) {
- assert(typeof value !== 'string' && 'length' in value);
- for (var i = 0, l = keyPath.length; i < l; ++i) {
- setByKeyPath(obj, keyPath[i], value[i]);
- }
- }
- else {
- var period = keyPath.indexOf('.');
- if (period !== -1) {
- var currentKeyPath = keyPath.substr(0, period);
- var remainingKeyPath = keyPath.substr(period + 1);
- if (remainingKeyPath === "")
- if (value === undefined) {
- if (isArray(obj) && !isNaN(parseInt(currentKeyPath)))
- obj.splice(currentKeyPath, 1);
- else
- delete obj[currentKeyPath];
- }
- else
- obj[currentKeyPath] = value;
- else {
- var innerObj = obj[currentKeyPath];
- if (!innerObj)
- innerObj = (obj[currentKeyPath] = {});
- setByKeyPath(innerObj, remainingKeyPath, value);
- }
- }
- else {
- if (value === undefined) {
- if (isArray(obj) && !isNaN(parseInt(keyPath)))
- obj.splice(keyPath, 1);
- else
- delete obj[keyPath];
- }
- else
- obj[keyPath] = value;
- }
- }
- }
- function delByKeyPath(obj, keyPath) {
- if (typeof keyPath === 'string')
- setByKeyPath(obj, keyPath, undefined);
- else if ('length' in keyPath)
- [].map.call(keyPath, function (kp) {
- setByKeyPath(obj, kp, undefined);
- });
- }
- function shallowClone(obj) {
- var rv = {};
- for (var m in obj) {
- if (hasOwn(obj, m))
- rv[m] = obj[m];
- }
- return rv;
- }
- var concat = [].concat;
- function flatten(a) {
- return concat.apply([], a);
- }
- var intrinsicTypeNames = "Boolean,String,Date,RegExp,Blob,File,FileList,ArrayBuffer,DataView,Uint8ClampedArray,ImageData,Map,Set"
- .split(',').concat(flatten([8, 16, 32, 64].map(function (num) { return ["Int", "Uint", "Float"].map(function (t) { return t + num + "Array"; }); }))).filter(function (t) { return _global[t]; });
- var intrinsicTypes = intrinsicTypeNames.map(function (t) { return _global[t]; });
- var intrinsicTypeNameSet = arrayToObject(intrinsicTypeNames, function (x) { return [x, true]; });
- function deepClone(any) {
- if (!any || typeof any !== 'object')
- return any;
- var rv;
- if (isArray(any)) {
- rv = [];
- for (var i = 0, l = any.length; i < l; ++i) {
- rv.push(deepClone(any[i]));
- }
- }
- else if (intrinsicTypes.indexOf(any.constructor) >= 0) {
- rv = any;
- }
- else {
- rv = any.constructor ? Object.create(any.constructor.prototype) : {};
- for (var prop in any) {
- if (hasOwn(any, prop)) {
- rv[prop] = deepClone(any[prop]);
- }
- }
- }
- return rv;
- }
- var toString = {}.toString;
- function toStringTag(o) {
- return toString.call(o).slice(8, -1);
- }
- var getValueOf = function (val, type) {
- return type === "Array" ? '' + val.map(function (v) { return getValueOf(v, toStringTag(v)); }) :
- type === "ArrayBuffer" ? '' + new Uint8Array(val) :
- type === "Date" ? val.getTime() :
- ArrayBuffer.isView(val) ? '' + new Uint8Array(val.buffer) :
- val;
- };
- function getObjectDiff(a, b, rv, prfx) {
- rv = rv || {};
- prfx = prfx || '';
- keys(a).forEach(function (prop) {
- if (!hasOwn(b, prop))
- rv[prfx + prop] = undefined;
- else {
- var ap = a[prop], bp = b[prop];
- if (typeof ap === 'object' && typeof bp === 'object' && ap && bp) {
- var apTypeName = toStringTag(ap);
- var bpTypeName = toStringTag(bp);
- if (apTypeName === bpTypeName) {
- if (intrinsicTypeNameSet[apTypeName]) {
- if (getValueOf(ap, apTypeName) !== getValueOf(bp, bpTypeName)) {
- rv[prfx + prop] = b[prop];
- }
- }
- else {
- getObjectDiff(ap, bp, rv, prfx + prop + ".");
- }
- }
- else {
- rv[prfx + prop] = b[prop];
- }
- }
- else if (ap !== bp)
- rv[prfx + prop] = b[prop];
- }
- });
- keys(b).forEach(function (prop) {
- if (!hasOwn(a, prop)) {
- rv[prfx + prop] = b[prop];
- }
- });
- return rv;
- }
- var iteratorSymbol = typeof Symbol !== 'undefined' && Symbol.iterator;
- var getIteratorOf = iteratorSymbol ? function (x) {
- var i;
- return x != null && (i = x[iteratorSymbol]) && i.apply(x);
- } : function () { return null; };
- var NO_CHAR_ARRAY = {};
- function getArrayOf(arrayLike) {
- var i, a, x, it;
- if (arguments.length === 1) {
- if (isArray(arrayLike))
- return arrayLike.slice();
- if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string')
- return [arrayLike];
- if ((it = getIteratorOf(arrayLike))) {
- a = [];
- while (x = it.next(), !x.done)
- a.push(x.value);
- return a;
- }
- if (arrayLike == null)
- return [arrayLike];
- i = arrayLike.length;
- if (typeof i === 'number') {
- a = new Array(i);
- while (i--)
- a[i] = arrayLike[i];
- return a;
- }
- return [arrayLike];
- }
- i = arguments.length;
- a = new Array(i);
- while (i--)
- a[i] = arguments[i];
- return a;
- }
- var isAsyncFunction = typeof Symbol !== 'undefined'
- ? function (fn) { return fn[Symbol.toStringTag] === 'AsyncFunction'; }
- : function () { return false; };
- var debug = typeof location !== 'undefined' &&
- /^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href);
- function setDebug(value, filter) {
- debug = value;
- libraryFilter = filter;
- }
- var libraryFilter = function () { return true; };
- var NEEDS_THROW_FOR_STACK = !new Error("").stack;
- function getErrorWithStack() {
- if (NEEDS_THROW_FOR_STACK)
- try {
- throw new Error();
- }
- catch (e) {
- return e;
- }
- return new Error();
- }
- function prettyStack(exception, numIgnoredFrames) {
- var stack = exception.stack;
- if (!stack)
- return "";
- numIgnoredFrames = (numIgnoredFrames || 0);
- if (stack.indexOf(exception.name) === 0)
- numIgnoredFrames += (exception.name + exception.message).split('\n').length;
- return stack.split('\n')
- .slice(numIgnoredFrames)
- .filter(libraryFilter)
- .map(function (frame) { return "\n" + frame; })
- .join('');
- }
- var dexieErrorNames = [
- 'Modify',
- 'Bulk',
- 'OpenFailed',
- 'VersionChange',
- 'Schema',
- 'Upgrade',
- 'InvalidTable',
- 'MissingAPI',
- 'NoSuchDatabase',
- 'InvalidArgument',
- 'SubTransaction',
- 'Unsupported',
- 'Internal',
- 'DatabaseClosed',
- 'PrematureCommit',
- 'ForeignAwait'
- ];
- var idbDomErrorNames = [
- 'Unknown',
- 'Constraint',
- 'Data',
- 'TransactionInactive',
- 'ReadOnly',
- 'Version',
- 'NotFound',
- 'InvalidState',
- 'InvalidAccess',
- 'Abort',
- 'Timeout',
- 'QuotaExceeded',
- 'Syntax',
- 'DataClone'
- ];
- var errorList = dexieErrorNames.concat(idbDomErrorNames);
- var defaultTexts = {
- VersionChanged: "Database version changed by other database connection",
- DatabaseClosed: "Database has been closed",
- Abort: "Transaction aborted",
- TransactionInactive: "Transaction has already completed or failed"
- };
- function DexieError(name, msg) {
- this._e = getErrorWithStack();
- this.name = name;
- this.message = msg;
- }
- derive(DexieError).from(Error).extend({
- stack: {
- get: function () {
- return this._stack ||
- (this._stack = this.name + ": " + this.message + prettyStack(this._e, 2));
- }
- },
- toString: function () { return this.name + ": " + this.message; }
- });
- function getMultiErrorMessage(msg, failures) {
- return msg + ". Errors: " + Object.keys(failures)
- .map(function (key) { return failures[key].toString(); })
- .filter(function (v, i, s) { return s.indexOf(v) === i; })
- .join('\n');
- }
- function ModifyError(msg, failures, successCount, failedKeys) {
- this._e = getErrorWithStack();
- this.failures = failures;
- this.failedKeys = failedKeys;
- this.successCount = successCount;
- this.message = getMultiErrorMessage(msg, failures);
- }
- derive(ModifyError).from(DexieError);
- function BulkError(msg, failures) {
- this._e = getErrorWithStack();
- this.name = "BulkError";
- this.failures = failures;
- this.message = getMultiErrorMessage(msg, failures);
- }
- derive(BulkError).from(DexieError);
- var errnames = errorList.reduce(function (obj, name) { return (obj[name] = name + "Error", obj); }, {});
- var BaseException = DexieError;
- var exceptions = errorList.reduce(function (obj, name) {
- var fullName = name + "Error";
- function DexieError(msgOrInner, inner) {
- this._e = getErrorWithStack();
- this.name = fullName;
- if (!msgOrInner) {
- this.message = defaultTexts[name] || fullName;
- this.inner = null;
- }
- else if (typeof msgOrInner === 'string') {
- this.message = "" + msgOrInner + (!inner ? '' : '\n ' + inner);
- this.inner = inner || null;
- }
- else if (typeof msgOrInner === 'object') {
- this.message = msgOrInner.name + " " + msgOrInner.message;
- this.inner = msgOrInner;
- }
- }
- derive(DexieError).from(BaseException);
- obj[name] = DexieError;
- return obj;
- }, {});
- exceptions.Syntax = SyntaxError;
- exceptions.Type = TypeError;
- exceptions.Range = RangeError;
- var exceptionMap = idbDomErrorNames.reduce(function (obj, name) {
- obj[name + "Error"] = exceptions[name];
- return obj;
- }, {});
- function mapError(domError, message) {
- if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name])
- return domError;
- var rv = new exceptionMap[domError.name](message || domError.message, domError);
- if ("stack" in domError) {
- setProp(rv, "stack", { get: function () {
- return this.inner.stack;
- } });
- }
- return rv;
- }
- var fullNameExceptions = errorList.reduce(function (obj, name) {
- if (["Syntax", "Type", "Range"].indexOf(name) === -1)
- obj[name + "Error"] = exceptions[name];
- return obj;
- }, {});
- fullNameExceptions.ModifyError = ModifyError;
- fullNameExceptions.DexieError = DexieError;
- fullNameExceptions.BulkError = BulkError;
- function nop() { }
- function mirror(val) { return val; }
- function pureFunctionChain(f1, f2) {
- if (f1 == null || f1 === mirror)
- return f2;
- return function (val) {
- return f2(f1(val));
- };
- }
- function callBoth(on1, on2) {
- return function () {
- on1.apply(this, arguments);
- on2.apply(this, arguments);
- };
- }
- function hookCreatingChain(f1, f2) {
- if (f1 === nop)
- return f2;
- return function () {
- var res = f1.apply(this, arguments);
- if (res !== undefined)
- arguments[0] = res;
- var onsuccess = this.onsuccess,
- onerror = this.onerror;
- this.onsuccess = null;
- this.onerror = null;
- var res2 = f2.apply(this, arguments);
- if (onsuccess)
- this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;
- if (onerror)
- this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;
- return res2 !== undefined ? res2 : res;
- };
- }
- function hookDeletingChain(f1, f2) {
- if (f1 === nop)
- return f2;
- return function () {
- f1.apply(this, arguments);
- var onsuccess = this.onsuccess,
- onerror = this.onerror;
- this.onsuccess = this.onerror = null;
- f2.apply(this, arguments);
- if (onsuccess)
- this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;
- if (onerror)
- this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;
- };
- }
- function hookUpdatingChain(f1, f2) {
- if (f1 === nop)
- return f2;
- return function (modifications) {
- var res = f1.apply(this, arguments);
- extend(modifications, res);
- var onsuccess = this.onsuccess,
- onerror = this.onerror;
- this.onsuccess = null;
- this.onerror = null;
- var res2 = f2.apply(this, arguments);
- if (onsuccess)
- this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;
- if (onerror)
- this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;
- return res === undefined ?
- (res2 === undefined ? undefined : res2) :
- (extend(res, res2));
- };
- }
- function reverseStoppableEventChain(f1, f2) {
- if (f1 === nop)
- return f2;
- return function () {
- if (f2.apply(this, arguments) === false)
- return false;
- return f1.apply(this, arguments);
- };
- }
- function promisableChain(f1, f2) {
- if (f1 === nop)
- return f2;
- return function () {
- var res = f1.apply(this, arguments);
- if (res && typeof res.then === 'function') {
- var thiz = this, i = arguments.length, args = new Array(i);
- while (i--)
- args[i] = arguments[i];
- return res.then(function () {
- return f2.apply(thiz, args);
- });
- }
- return f2.apply(this, arguments);
- };
- }
- var INTERNAL = {};
- var LONG_STACKS_CLIP_LIMIT = 100;
- var MAX_LONG_STACKS = 20;
- var ZONE_ECHO_LIMIT = 100;
- var _a = typeof Promise === 'undefined' ?
- [] :
- (function () {
- var globalP = Promise.resolve();
- if (typeof crypto === 'undefined' || !crypto.subtle)
- return [globalP, globalP.__proto__, globalP];
- var nativeP = crypto.subtle.digest("SHA-512", new Uint8Array([0]));
- return [
- nativeP,
- nativeP.__proto__,
- globalP
- ];
- })();
- var resolvedNativePromise = _a[0];
- var nativePromiseProto = _a[1];
- var resolvedGlobalPromise = _a[2];
- var nativePromiseThen = nativePromiseProto && nativePromiseProto.then;
- var NativePromise = resolvedNativePromise && resolvedNativePromise.constructor;
- var patchGlobalPromise = !!resolvedGlobalPromise;
- var stack_being_generated = false;
- var schedulePhysicalTick = resolvedGlobalPromise ?
- function () { resolvedGlobalPromise.then(physicalTick); }
- :
- _global.setImmediate ?
- setImmediate.bind(null, physicalTick) :
- _global.MutationObserver ?
- function () {
- var hiddenDiv = document.createElement("div");
- (new MutationObserver(function () {
- physicalTick();
- hiddenDiv = null;
- })).observe(hiddenDiv, { attributes: true });
- hiddenDiv.setAttribute('i', '1');
- } :
- function () { setTimeout(physicalTick, 0); };
- var asap$1 = function (callback, args) {
- microtickQueue.push([callback, args]);
- if (needsNewPhysicalTick) {
- schedulePhysicalTick();
- needsNewPhysicalTick = false;
- }
- };
- var isOutsideMicroTick = true;
- var needsNewPhysicalTick = true;
- var unhandledErrors = [];
- var rejectingErrors = [];
- var currentFulfiller = null;
- var rejectionMapper = mirror;
- var globalPSD = {
- id: 'global',
- global: true,
- ref: 0,
- unhandleds: [],
- onunhandled: globalError,
- pgp: false,
- env: {},
- finalize: function () {
- this.unhandleds.forEach(function (uh) {
- try {
- globalError(uh[0], uh[1]);
- }
- catch (e) { }
- });
- }
- };
- var PSD = globalPSD;
- var microtickQueue = [];
- var numScheduledCalls = 0;
- var tickFinalizers = [];
- function DexiePromise(fn) {
- if (typeof this !== 'object')
- throw new TypeError('Promises must be constructed via new');
- this._listeners = [];
- this.onuncatched = nop;
- this._lib = false;
- var psd = (this._PSD = PSD);
- if (debug) {
- this._stackHolder = getErrorWithStack();
- this._prev = null;
- this._numPrev = 0;
- }
- if (typeof fn !== 'function') {
- if (fn !== INTERNAL)
- throw new TypeError('Not a function');
- this._state = arguments[1];
- this._value = arguments[2];
- if (this._state === false)
- handleRejection(this, this._value);
- return;
- }
- this._state = null;
- this._value = null;
- ++psd.ref;
- executePromiseTask(this, fn);
- }
- var thenProp = {
- get: function () {
- var psd = PSD, microTaskId = totalEchoes;
- function then(onFulfilled, onRejected) {
- var _this = this;
- var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes);
- if (possibleAwait)
- decrementExpectedAwaits();
- var rv = new DexiePromise(function (resolve, reject) {
- propagateToListener(_this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait), resolve, reject, psd));
- });
- debug && linkToPreviousPromise(rv, this);
- return rv;
- }
- then.prototype = INTERNAL;
- return then;
- },
- set: function (value) {
- setProp(this, 'then', value && value.prototype === INTERNAL ?
- thenProp :
- {
- get: function () {
- return value;
- },
- set: thenProp.set
- });
- }
- };
- props(DexiePromise.prototype, {
- then: thenProp,
- _then: function (onFulfilled, onRejected) {
- propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD));
- },
- catch: function (onRejected) {
- if (arguments.length === 1)
- return this.then(null, onRejected);
- var type = arguments[0], handler = arguments[1];
- return typeof type === 'function' ? this.then(null, function (err) {
- return err instanceof type ? handler(err) : PromiseReject(err);
- })
- : this.then(null, function (err) {
- return err && err.name === type ? handler(err) : PromiseReject(err);
- });
- },
- finally: function (onFinally) {
- return this.then(function (value) {
- onFinally();
- return value;
- }, function (err) {
- onFinally();
- return PromiseReject(err);
- });
- },
- stack: {
- get: function () {
- if (this._stack)
- return this._stack;
- try {
- stack_being_generated = true;
- var stacks = getStack(this, [], MAX_LONG_STACKS);
- var stack = stacks.join("\nFrom previous: ");
- if (this._state !== null)
- this._stack = stack;
- return stack;
- }
- finally {
- stack_being_generated = false;
- }
- }
- },
- timeout: function (ms, msg) {
- var _this = this;
- return ms < Infinity ?
- new DexiePromise(function (resolve, reject) {
- var handle = setTimeout(function () { return reject(new exceptions.Timeout(msg)); }, ms);
- _this.then(resolve, reject).finally(clearTimeout.bind(null, handle));
- }) : this;
- }
- });
- if (typeof Symbol !== 'undefined' && Symbol.toStringTag)
- setProp(DexiePromise.prototype, Symbol.toStringTag, 'Dexie.Promise');
- globalPSD.env = snapShot();
- function Listener(onFulfilled, onRejected, resolve, reject, zone) {
- this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
- this.onRejected = typeof onRejected === 'function' ? onRejected : null;
- this.resolve = resolve;
- this.reject = reject;
- this.psd = zone;
- }
- props(DexiePromise, {
- all: function () {
- var values = getArrayOf.apply(null, arguments)
- .map(onPossibleParallellAsync);
- return new DexiePromise(function (resolve, reject) {
- if (values.length === 0)
- resolve([]);
- var remaining = values.length;
- values.forEach(function (a, i) { return DexiePromise.resolve(a).then(function (x) {
- values[i] = x;
- if (!--remaining)
- resolve(values);
- }, reject); });
- });
- },
- resolve: function (value) {
- if (value instanceof DexiePromise)
- return value;
- if (value && typeof value.then === 'function')
- return new DexiePromise(function (resolve, reject) {
- value.then(resolve, reject);
- });
- var rv = new DexiePromise(INTERNAL, true, value);
- linkToPreviousPromise(rv, currentFulfiller);
- return rv;
- },
- reject: PromiseReject,
- race: function () {
- var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);
- return new DexiePromise(function (resolve, reject) {
- values.map(function (value) { return DexiePromise.resolve(value).then(resolve, reject); });
- });
- },
- PSD: {
- get: function () { return PSD; },
- set: function (value) { return PSD = value; }
- },
- newPSD: newScope,
- usePSD: usePSD,
- scheduler: {
- get: function () { return asap$1; },
- set: function (value) { asap$1 = value; }
- },
- rejectionMapper: {
- get: function () { return rejectionMapper; },
- set: function (value) { rejectionMapper = value; }
- },
- follow: function (fn, zoneProps) {
- return new DexiePromise(function (resolve, reject) {
- return newScope(function (resolve, reject) {
- var psd = PSD;
- psd.unhandleds = [];
- psd.onunhandled = reject;
- psd.finalize = callBoth(function () {
- var _this = this;
- run_at_end_of_this_or_next_physical_tick(function () {
- _this.unhandleds.length === 0 ? resolve() : reject(_this.unhandleds[0]);
- });
- }, psd.finalize);
- fn();
- }, zoneProps, resolve, reject);
- });
- }
- });
- if (NativePromise) {
- if (NativePromise.allSettled)
- setProp(DexiePromise, "allSettled", function () {
- var possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);
- return new DexiePromise(function (resolve) {
- if (possiblePromises.length === 0)
- resolve([]);
- var remaining = possiblePromises.length;
- var results = new Array(remaining);
- possiblePromises.forEach(function (p, i) { return DexiePromise.resolve(p).then(function (value) { return results[i] = { status: "fulfilled", value: value }; }, function (reason) { return results[i] = { status: "rejected", reason: reason }; })
- .then(function () { return --remaining || resolve(results); }); });
- });
- });
- if (NativePromise.any && typeof AggregateError !== 'undefined')
- setProp(DexiePromise, "any", function () {
- var possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);
- return new DexiePromise(function (resolve, reject) {
- if (possiblePromises.length === 0)
- reject(new AggregateError([]));
- var remaining = possiblePromises.length;
- var failures = new Array(remaining);
- possiblePromises.forEach(function (p, i) { return DexiePromise.resolve(p).then(function (value) { return resolve(value); }, function (failure) {
- failures[i] = failure;
- if (!--remaining)
- reject(new AggregateError(failures));
- }); });
- });
- });
- }
- function executePromiseTask(promise, fn) {
- try {
- fn(function (value) {
- if (promise._state !== null)
- return;
- if (value === promise)
- throw new TypeError('A promise cannot be resolved with itself.');
- var shouldExecuteTick = promise._lib && beginMicroTickScope();
- if (value && typeof value.then === 'function') {
- executePromiseTask(promise, function (resolve, reject) {
- value instanceof DexiePromise ?
- value._then(resolve, reject) :
- value.then(resolve, reject);
- });
- }
- else {
- promise._state = true;
- promise._value = value;
- propagateAllListeners(promise);
- }
- if (shouldExecuteTick)
- endMicroTickScope();
- }, handleRejection.bind(null, promise));
- }
- catch (ex) {
- handleRejection(promise, ex);
- }
- }
- function handleRejection(promise, reason) {
- rejectingErrors.push(reason);
- if (promise._state !== null)
- return;
- var shouldExecuteTick = promise._lib && beginMicroTickScope();
- reason = rejectionMapper(reason);
- promise._state = false;
- promise._value = reason;
- debug && reason !== null && typeof reason === 'object' && !reason._promise && tryCatch(function () {
- var origProp = getPropertyDescriptor(reason, "stack");
- reason._promise = promise;
- setProp(reason, "stack", {
- get: function () {
- return stack_being_generated ?
- origProp && (origProp.get ?
- origProp.get.apply(reason) :
- origProp.value) :
- promise.stack;
- }
- });
- });
- addPossiblyUnhandledError(promise);
- propagateAllListeners(promise);
- if (shouldExecuteTick)
- endMicroTickScope();
- }
- function propagateAllListeners(promise) {
- var listeners = promise._listeners;
- promise._listeners = [];
- for (var i = 0, len = listeners.length; i < len; ++i) {
- propagateToListener(promise, listeners[i]);
- }
- var psd = promise._PSD;
- --psd.ref || psd.finalize();
- if (numScheduledCalls === 0) {
- ++numScheduledCalls;
- asap$1(function () {
- if (--numScheduledCalls === 0)
- finalizePhysicalTick();
- }, []);
- }
- }
- function propagateToListener(promise, listener) {
- if (promise._state === null) {
- promise._listeners.push(listener);
- return;
- }
- var cb = promise._state ? listener.onFulfilled : listener.onRejected;
- if (cb === null) {
- return (promise._state ? listener.resolve : listener.reject)(promise._value);
- }
- ++listener.psd.ref;
- ++numScheduledCalls;
- asap$1(callListener, [cb, promise, listener]);
- }
- function callListener(cb, promise, listener) {
- try {
- currentFulfiller = promise;
- var ret, value = promise._value;
- if (promise._state) {
- ret = cb(value);
- }
- else {
- if (rejectingErrors.length)
- rejectingErrors = [];
- ret = cb(value);
- if (rejectingErrors.indexOf(value) === -1)
- markErrorAsHandled(promise);
- }
- listener.resolve(ret);
- }
- catch (e) {
- listener.reject(e);
- }
- finally {
- currentFulfiller = null;
- if (--numScheduledCalls === 0)
- finalizePhysicalTick();
- --listener.psd.ref || listener.psd.finalize();
- }
- }
- function getStack(promise, stacks, limit) {
- if (stacks.length === limit)
- return stacks;
- var stack = "";
- if (promise._state === false) {
- var failure = promise._value, errorName, message;
- if (failure != null) {
- errorName = failure.name || "Error";
- message = failure.message || failure;
- stack = prettyStack(failure, 0);
- }
- else {
- errorName = failure;
- message = "";
- }
- stacks.push(errorName + (message ? ": " + message : "") + stack);
- }
- if (debug) {
- stack = prettyStack(promise._stackHolder, 2);
- if (stack && stacks.indexOf(stack) === -1)
- stacks.push(stack);
- if (promise._prev)
- getStack(promise._prev, stacks, limit);
- }
- return stacks;
- }
- function linkToPreviousPromise(promise, prev) {
- var numPrev = prev ? prev._numPrev + 1 : 0;
- if (numPrev < LONG_STACKS_CLIP_LIMIT) {
- promise._prev = prev;
- promise._numPrev = numPrev;
- }
- }
- function physicalTick() {
- beginMicroTickScope() && endMicroTickScope();
- }
- function beginMicroTickScope() {
- var wasRootExec = isOutsideMicroTick;
- isOutsideMicroTick = false;
- needsNewPhysicalTick = false;
- return wasRootExec;
- }
- function endMicroTickScope() {
- var callbacks, i, l;
- do {
- while (microtickQueue.length > 0) {
- callbacks = microtickQueue;
- microtickQueue = [];
- l = callbacks.length;
- for (i = 0; i < l; ++i) {
- var item = callbacks[i];
- item[0].apply(null, item[1]);
- }
- }
- } while (microtickQueue.length > 0);
- isOutsideMicroTick = true;
- needsNewPhysicalTick = true;
- }
- function finalizePhysicalTick() {
- var unhandledErrs = unhandledErrors;
- unhandledErrors = [];
- unhandledErrs.forEach(function (p) {
- p._PSD.onunhandled.call(null, p._value, p);
- });
- var finalizers = tickFinalizers.slice(0);
- var i = finalizers.length;
- while (i)
- finalizers[--i]();
- }
- function run_at_end_of_this_or_next_physical_tick(fn) {
- function finalizer() {
- fn();
- tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1);
- }
- tickFinalizers.push(finalizer);
- ++numScheduledCalls;
- asap$1(function () {
- if (--numScheduledCalls === 0)
- finalizePhysicalTick();
- }, []);
- }
- function addPossiblyUnhandledError(promise) {
- if (!unhandledErrors.some(function (p) { return p._value === promise._value; }))
- unhandledErrors.push(promise);
- }
- function markErrorAsHandled(promise) {
- var i = unhandledErrors.length;
- while (i)
- if (unhandledErrors[--i]._value === promise._value) {
- unhandledErrors.splice(i, 1);
- return;
- }
- }
- function PromiseReject(reason) {
- return new DexiePromise(INTERNAL, false, reason);
- }
- function wrap(fn, errorCatcher) {
- var psd = PSD;
- return function () {
- var wasRootExec = beginMicroTickScope(), outerScope = PSD;
- try {
- switchToZone(psd, true);
- return fn.apply(this, arguments);
- }
- catch (e) {
- errorCatcher && errorCatcher(e);
- }
- finally {
- switchToZone(outerScope, false);
- if (wasRootExec)
- endMicroTickScope();
- }
- };
- }
- var task = { awaits: 0, echoes: 0, id: 0 };
- var taskCounter = 0;
- var zoneStack = [];
- var zoneEchoes = 0;
- var totalEchoes = 0;
- var zone_id_counter = 0;
- function newScope(fn, props$$1, a1, a2) {
- var parent = PSD, psd = Object.create(parent);
- psd.parent = parent;
- psd.ref = 0;
- psd.global = false;
- psd.id = ++zone_id_counter;
- var globalEnv = globalPSD.env;
- psd.env = patchGlobalPromise ? {
- Promise: DexiePromise,
- PromiseProp: { value: DexiePromise, configurable: true, writable: true },
- all: DexiePromise.all,
- race: DexiePromise.race,
- allSettled: DexiePromise.allSettled,
- any: DexiePromise.any,
- resolve: DexiePromise.resolve,
- reject: DexiePromise.reject,
- nthen: getPatchedPromiseThen(globalEnv.nthen, psd),
- gthen: getPatchedPromiseThen(globalEnv.gthen, psd)
- } : {};
- if (props$$1)
- extend(psd, props$$1);
- ++parent.ref;
- psd.finalize = function () {
- --this.parent.ref || this.parent.finalize();
- };
- var rv = usePSD(psd, fn, a1, a2);
- if (psd.ref === 0)
- psd.finalize();
- return rv;
- }
- function incrementExpectedAwaits() {
- if (!task.id)
- task.id = ++taskCounter;
- ++task.awaits;
- task.echoes += ZONE_ECHO_LIMIT;
- return task.id;
- }
- function decrementExpectedAwaits(sourceTaskId) {
- if (!task.awaits || (sourceTaskId && sourceTaskId !== task.id))
- return;
- if (--task.awaits === 0)
- task.id = 0;
- task.echoes = task.awaits * ZONE_ECHO_LIMIT;
- }
- if (('' + nativePromiseThen).indexOf('[native code]') === -1) {
- incrementExpectedAwaits = decrementExpectedAwaits = nop;
- }
- function onPossibleParallellAsync(possiblePromise) {
- if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) {
- incrementExpectedAwaits();
- return possiblePromise.then(function (x) {
- decrementExpectedAwaits();
- return x;
- }, function (e) {
- decrementExpectedAwaits();
- return rejection(e);
- });
- }
- return possiblePromise;
- }
- function zoneEnterEcho(targetZone) {
- ++totalEchoes;
- if (!task.echoes || --task.echoes === 0) {
- task.echoes = task.id = 0;
- }
- zoneStack.push(PSD);
- switchToZone(targetZone, true);
- }
- function zoneLeaveEcho() {
- var zone = zoneStack[zoneStack.length - 1];
- zoneStack.pop();
- switchToZone(zone, false);
- }
- function switchToZone(targetZone, bEnteringZone) {
- var currentZone = PSD;
- if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) {
- enqueueNativeMicroTask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho);
- }
- if (targetZone === PSD)
- return;
- PSD = targetZone;
- if (currentZone === globalPSD)
- globalPSD.env = snapShot();
- if (patchGlobalPromise) {
- var GlobalPromise_1 = globalPSD.env.Promise;
- var targetEnv = targetZone.env;
- nativePromiseProto.then = targetEnv.nthen;
- GlobalPromise_1.prototype.then = targetEnv.gthen;
- if (currentZone.global || targetZone.global) {
- Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp);
- GlobalPromise_1.all = targetEnv.all;
- GlobalPromise_1.race = targetEnv.race;
- GlobalPromise_1.resolve = targetEnv.resolve;
- GlobalPromise_1.reject = targetEnv.reject;
- if (targetEnv.allSettled)
- GlobalPromise_1.allSettled = targetEnv.allSettled;
- if (targetEnv.any)
- GlobalPromise_1.any = targetEnv.any;
- }
- }
- }
- function snapShot() {
- var GlobalPromise = _global.Promise;
- return patchGlobalPromise ? {
- Promise: GlobalPromise,
- PromiseProp: Object.getOwnPropertyDescriptor(_global, "Promise"),
- all: GlobalPromise.all,
- race: GlobalPromise.race,
- allSettled: GlobalPromise.allSettled,
- any: GlobalPromise.any,
- resolve: GlobalPromise.resolve,
- reject: GlobalPromise.reject,
- nthen: nativePromiseProto.then,
- gthen: GlobalPromise.prototype.then
- } : {};
- }
- function usePSD(psd, fn, a1, a2, a3) {
- var outerScope = PSD;
- try {
- switchToZone(psd, true);
- return fn(a1, a2, a3);
- }
- finally {
- switchToZone(outerScope, false);
- }
- }
- function enqueueNativeMicroTask(job) {
- nativePromiseThen.call(resolvedNativePromise, job);
- }
- function nativeAwaitCompatibleWrap(fn, zone, possibleAwait) {
- return typeof fn !== 'function' ? fn : function () {
- var outerZone = PSD;
- if (possibleAwait)
- incrementExpectedAwaits();
- switchToZone(zone, true);
- try {
- return fn.apply(this, arguments);
- }
- finally {
- switchToZone(outerZone, false);
- }
- };
- }
- function getPatchedPromiseThen(origThen, zone) {
- return function (onResolved, onRejected) {
- return origThen.call(this, nativeAwaitCompatibleWrap(onResolved, zone, false), nativeAwaitCompatibleWrap(onRejected, zone, false));
- };
- }
- var UNHANDLEDREJECTION = "unhandledrejection";
- function globalError(err, promise) {
- var rv;
- try {
- rv = promise.onuncatched(err);
- }
- catch (e) { }
- if (rv !== false)
- try {
- var event, eventData = { promise: promise, reason: err };
- if (_global.document && document.createEvent) {
- event = document.createEvent('Event');
- event.initEvent(UNHANDLEDREJECTION, true, true);
- extend(event, eventData);
- }
- else if (_global.CustomEvent) {
- event = new CustomEvent(UNHANDLEDREJECTION, { detail: eventData });
- extend(event, eventData);
- }
- if (event && _global.dispatchEvent) {
- dispatchEvent(event);
- if (!_global.PromiseRejectionEvent && _global.onunhandledrejection)
- try {
- _global.onunhandledrejection(event);
- }
- catch (_) { }
- }
- if (debug && event && !event.defaultPrevented) {
- console.warn("Unhandled rejection: " + (err.stack || err));
- }
- }
- catch (e) { }
- }
- var rejection = DexiePromise.reject;
- function tempTransaction(db, mode, storeNames, fn) {
- if (!db._state.openComplete && (!PSD.letThrough)) {
- if (!db._state.isBeingOpened) {
- if (!db._options.autoOpen)
- return rejection(new exceptions.DatabaseClosed());
- db.open().catch(nop);
- }
- return db._state.dbReadyPromise.then(function () { return tempTransaction(db, mode, storeNames, fn); });
- }
- else {
- var trans = db._createTransaction(mode, storeNames, db._dbSchema);
- try {
- trans.create();
- }
- catch (ex) {
- return rejection(ex);
- }
- return trans._promise(mode, function (resolve, reject) {
- return newScope(function () {
- PSD.trans = trans;
- return fn(resolve, reject, trans);
- });
- }).then(function (result) {
- return trans._completion.then(function () { return result; });
- });
- }
- }
- var DEXIE_VERSION = '3.0.2';
- var maxString = String.fromCharCode(65535);
- var minKey = -Infinity;
- var INVALID_KEY_ARGUMENT = "Invalid key provided. Keys must be of type string, number, Date or Array<string | number | Date>.";
- var STRING_EXPECTED = "String expected.";
- var connections = [];
- var isIEOrEdge = typeof navigator !== 'undefined' && /(MSIE|Trident|Edge)/.test(navigator.userAgent);
- var hasIEDeleteObjectStoreBug = isIEOrEdge;
- var hangsOnDeleteLargeKeyRange = isIEOrEdge;
- var dexieStackFrameFilter = function (frame) { return !/(dexie\.js|dexie\.min\.js)/.test(frame); };
- var DBNAMES_DB = '__dbnames';
- var READONLY = 'readonly';
- var READWRITE = 'readwrite';
- function combine(filter1, filter2) {
- return filter1 ?
- filter2 ?
- function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } :
- filter1 :
- filter2;
- }
- var AnyRange = {
- type: 3 ,
- lower: -Infinity,
- lowerOpen: false,
- upper: [[]],
- upperOpen: false
- };
- var Table = (function () {
- function Table() {
- }
- Table.prototype._trans = function (mode, fn, writeLocked) {
- var trans = this._tx || PSD.trans;
- var tableName = this.name;
- function checkTableInTransaction(resolve, reject, trans) {
- if (!trans.schema[tableName])
- throw new exceptions.NotFound("Table " + tableName + " not part of transaction");
- return fn(trans.idbtrans, trans);
- }
- var wasRootExec = beginMicroTickScope();
- try {
- return trans && trans.db === this.db ?
- trans === PSD.trans ?
- trans._promise(mode, checkTableInTransaction, writeLocked) :
- newScope(function () { return trans._promise(mode, checkTableInTransaction, writeLocked); }, { trans: trans, transless: PSD.transless || PSD }) :
- tempTransaction(this.db, mode, [this.name], checkTableInTransaction);
- }
- finally {
- if (wasRootExec)
- endMicroTickScope();
- }
- };
- Table.prototype.get = function (keyOrCrit, cb) {
- var _this = this;
- if (keyOrCrit && keyOrCrit.constructor === Object)
- return this.where(keyOrCrit).first(cb);
- return this._trans('readonly', function (trans) {
- return _this.core.get({ trans: trans, key: keyOrCrit })
- .then(function (res) { return _this.hook.reading.fire(res); });
- }).then(cb);
- };
- Table.prototype.where = function (indexOrCrit) {
- if (typeof indexOrCrit === 'string')
- return new this.db.WhereClause(this, indexOrCrit);
- if (isArray(indexOrCrit))
- return new this.db.WhereClause(this, "[" + indexOrCrit.join('+') + "]");
- var keyPaths = keys(indexOrCrit);
- if (keyPaths.length === 1)
- return this
- .where(keyPaths[0])
- .equals(indexOrCrit[keyPaths[0]]);
- var compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(function (ix) {
- return ix.compound &&
- keyPaths.every(function (keyPath) { return ix.keyPath.indexOf(keyPath) >= 0; }) &&
- ix.keyPath.every(function (keyPath) { return keyPaths.indexOf(keyPath) >= 0; });
- })[0];
- if (compoundIndex && this.db._maxKey !== maxString)
- return this
- .where(compoundIndex.name)
- .equals(compoundIndex.keyPath.map(function (kp) { return indexOrCrit[kp]; }));
- if (!compoundIndex && debug)
- console.warn("The query " + JSON.stringify(indexOrCrit) + " on " + this.name + " would benefit of a " +
- ("compound index [" + keyPaths.join('+') + "]"));
- var idxByName = this.schema.idxByName;
- var idb = this.db._deps.indexedDB;
- function equals(a, b) {
- try {
- return idb.cmp(a, b) === 0;
- }
- catch (e) {
- return false;
- }
- }
- var _a = keyPaths.reduce(function (_a, keyPath) {
- var prevIndex = _a[0], prevFilterFn = _a[1];
- var index = idxByName[keyPath];
- var value = indexOrCrit[keyPath];
- return [
- prevIndex || index,
- prevIndex || !index ?
- combine(prevFilterFn, index && index.multi ?
- function (x) {
- var prop = getByKeyPath(x, keyPath);
- return isArray(prop) && prop.some(function (item) { return equals(value, item); });
- } : function (x) { return equals(value, getByKeyPath(x, keyPath)); })
- : prevFilterFn
- ];
- }, [null, null]), idx = _a[0], filterFunction = _a[1];
- return idx ?
- this.where(idx.name).equals(indexOrCrit[idx.keyPath])
- .filter(filterFunction) :
- compoundIndex ?
- this.filter(filterFunction) :
- this.where(keyPaths).equals('');
- };
- Table.prototype.filter = function (filterFunction) {
- return this.toCollection().and(filterFunction);
- };
- Table.prototype.count = function (thenShortcut) {
- return this.toCollection().count(thenShortcut);
- };
- Table.prototype.offset = function (offset) {
- return this.toCollection().offset(offset);
- };
- Table.prototype.limit = function (numRows) {
- return this.toCollection().limit(numRows);
- };
- Table.prototype.each = function (callback) {
- return this.toCollection().each(callback);
- };
- Table.prototype.toArray = function (thenShortcut) {
- return this.toCollection().toArray(thenShortcut);
- };
- Table.prototype.toCollection = function () {
- return new this.db.Collection(new this.db.WhereClause(this));
- };
- Table.prototype.orderBy = function (index) {
- return new this.db.Collection(new this.db.WhereClause(this, isArray(index) ?
- "[" + index.join('+') + "]" :
- index));
- };
- Table.prototype.reverse = function () {
- return this.toCollection().reverse();
- };
- Table.prototype.mapToClass = function (constructor) {
- this.schema.mappedClass = constructor;
- var readHook = function (obj) {
- if (!obj)
- return obj;
- var res = Object.create(constructor.prototype);
- for (var m in obj)
- if (hasOwn(obj, m))
- try {
- res[m] = obj[m];
- }
- catch (_) { }
- return res;
- };
- if (this.schema.readHook) {
- this.hook.reading.unsubscribe(this.schema.readHook);
- }
- this.schema.readHook = readHook;
- this.hook("reading", readHook);
- return constructor;
- };
- Table.prototype.defineClass = function () {
- function Class(content) {
- extend(this, content);
- }
-
- return this.mapToClass(Class);
- };
- Table.prototype.add = function (obj, key) {
- var _this = this;
- return this._trans('readwrite', function (trans) {
- return _this.core.mutate({ trans: trans, type: 'add', keys: key != null ? [key] : null, values: [obj] });
- }).then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult; })
- .then(function (lastResult) {
- if (!_this.core.schema.primaryKey.outbound) {
- try {
- setByKeyPath(obj, _this.core.schema.primaryKey.keyPath, lastResult);
- }
- catch (_) { }
-
- }
- return lastResult;
- });
- };
- Table.prototype.update = function (keyOrObject, modifications) {
- if (typeof modifications !== 'object' || isArray(modifications))
- throw new exceptions.InvalidArgument("Modifications must be an object.");
- if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) {
- keys(modifications).forEach(function (keyPath) {
- setByKeyPath(keyOrObject, keyPath, modifications[keyPath]);
- });
- var key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath);
- if (key === undefined)
- return rejection(new exceptions.InvalidArgument("Given object does not contain its primary key"));
- return this.where(":id").equals(key).modify(modifications);
- }
- else {
- return this.where(":id").equals(keyOrObject).modify(modifications);
- }
- };
- Table.prototype.put = function (obj, key) {
- var _this = this;
- return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'put', values: [obj], keys: key != null ? [key] : null }); })
- .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult; })
- .then(function (lastResult) {
- if (!_this.core.schema.primaryKey.outbound) {
- try {
- setByKeyPath(obj, _this.core.schema.primaryKey.keyPath, lastResult);
- }
- catch (_) { }
-
- }
- return lastResult;
- });
- };
- Table.prototype.delete = function (key) {
- var _this = this;
- return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'delete', keys: [key] }); })
- .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined; });
- };
- Table.prototype.clear = function () {
- var _this = this;
- return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'deleteRange', range: AnyRange }); })
- .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined; });
- };
- Table.prototype.bulkGet = function (keys$$1) {
- var _this = this;
- return this._trans('readonly', function (trans) {
- return _this.core.getMany({
- keys: keys$$1,
- trans: trans
- }).then(function (result) { return result.map(function (res) { return _this.hook.reading.fire(res); }); });
- });
- };
- Table.prototype.bulkAdd = function (objects, keysOrOptions, options) {
- var _this = this;
- var keys$$1 = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;
- options = options || (keys$$1 ? undefined : keysOrOptions);
- var wantResults = options ? options.allKeys : undefined;
- return this._trans('readwrite', function (trans) {
- var outbound = _this.core.schema.primaryKey.outbound;
- if (!outbound && keys$$1)
- throw new exceptions.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys");
- if (keys$$1 && keys$$1.length !== objects.length)
- throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length");
- var numObjects = objects.length;
- return _this.core.mutate({ trans: trans, type: 'add', keys: keys$$1, values: objects, wantResults: wantResults })
- .then(function (_a) {
- var numFailures = _a.numFailures, results = _a.results, lastResult = _a.lastResult, failures = _a.failures;
- var result = wantResults ? results : lastResult;
- if (numFailures === 0)
- return result;
- throw new BulkError(_this.name + ".bulkAdd(): " + numFailures + " of " + numObjects + " operations failed", Object.keys(failures).map(function (pos) { return failures[pos]; }));
- });
- });
- };
- Table.prototype.bulkPut = function (objects, keysOrOptions, options) {
- var _this = this;
- var keys$$1 = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;
- options = options || (keys$$1 ? undefined : keysOrOptions);
- var wantResults = options ? options.allKeys : undefined;
- return this._trans('readwrite', function (trans) {
- var outbound = _this.core.schema.primaryKey.outbound;
- if (!outbound && keys$$1)
- throw new exceptions.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys");
- if (keys$$1 && keys$$1.length !== objects.length)
- throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length");
- var numObjects = objects.length;
- return _this.core.mutate({ trans: trans, type: 'put', keys: keys$$1, values: objects, wantResults: wantResults })
- .then(function (_a) {
- var numFailures = _a.numFailures, results = _a.results, lastResult = _a.lastResult, failures = _a.failures;
- var result = wantResults ? results : lastResult;
- if (numFailures === 0)
- return result;
- throw new BulkError(_this.name + ".bulkPut(): " + numFailures + " of " + numObjects + " operations failed", Object.keys(failures).map(function (pos) { return failures[pos]; }));
- });
- });
- };
- Table.prototype.bulkDelete = function (keys$$1) {
- var _this = this;
- var numKeys = keys$$1.length;
- return this._trans('readwrite', function (trans) {
- return _this.core.mutate({ trans: trans, type: 'delete', keys: keys$$1 });
- }).then(function (_a) {
- var numFailures = _a.numFailures, lastResult = _a.lastResult, failures = _a.failures;
- if (numFailures === 0)
- return lastResult;
- throw new BulkError(_this.name + ".bulkDelete(): " + numFailures + " of " + numKeys + " operations failed", failures);
- });
- };
- return Table;
- }());
- function Events(ctx) {
- var evs = {};
- var rv = function (eventName, subscriber) {
- if (subscriber) {
- var i = arguments.length, args = new Array(i - 1);
- while (--i)
- args[i - 1] = arguments[i];
- evs[eventName].subscribe.apply(null, args);
- return ctx;
- }
- else if (typeof (eventName) === 'string') {
- return evs[eventName];
- }
- };
- rv.addEventType = add;
- for (var i = 1, l = arguments.length; i < l; ++i) {
- add(arguments[i]);
- }
- return rv;
- function add(eventName, chainFunction, defaultFunction) {
- if (typeof eventName === 'object')
- return addConfiguredEvents(eventName);
- if (!chainFunction)
- chainFunction = reverseStoppableEventChain;
- if (!defaultFunction)
- defaultFunction = nop;
- var context = {
- subscribers: [],
- fire: defaultFunction,
- subscribe: function (cb) {
- if (context.subscribers.indexOf(cb) === -1) {
- context.subscribers.push(cb);
- context.fire = chainFunction(context.fire, cb);
- }
- },
- unsubscribe: function (cb) {
- context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; });
- context.fire = context.subscribers.reduce(chainFunction, defaultFunction);
- }
- };
- evs[eventName] = rv[eventName] = context;
- return context;
- }
- function addConfiguredEvents(cfg) {
- keys(cfg).forEach(function (eventName) {
- var args = cfg[eventName];
- if (isArray(args)) {
- add(eventName, cfg[eventName][0], cfg[eventName][1]);
- }
- else if (args === 'asap') {
- var context = add(eventName, mirror, function fire() {
- var i = arguments.length, args = new Array(i);
- while (i--)
- args[i] = arguments[i];
- context.subscribers.forEach(function (fn) {
- asap(function fireEvent() {
- fn.apply(null, args);
- });
- });
- });
- }
- else
- throw new exceptions.InvalidArgument("Invalid event config");
- });
- }
- }
- function makeClassConstructor(prototype, constructor) {
- derive(constructor).from({ prototype: prototype });
- return constructor;
- }
- function createTableConstructor(db) {
- return makeClassConstructor(Table.prototype, function Table$$1(name, tableSchema, trans) {
- this.db = db;
- this._tx = trans;
- this.name = name;
- this.schema = tableSchema;
- this.hook = db._allTables[name] ? db._allTables[name].hook : Events(null, {
- "creating": [hookCreatingChain, nop],
- "reading": [pureFunctionChain, mirror],
- "updating": [hookUpdatingChain, nop],
- "deleting": [hookDeletingChain, nop]
- });
- });
- }
- function isPlainKeyRange(ctx, ignoreLimitFilter) {
- return !(ctx.filter || ctx.algorithm || ctx.or) &&
- (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter);
- }
- function addFilter(ctx, fn) {
- ctx.filter = combine(ctx.filter, fn);
- }
- function addReplayFilter(ctx, factory, isLimitFilter) {
- var curr = ctx.replayFilter;
- ctx.replayFilter = curr ? function () { return combine(curr(), factory()); } : factory;
- ctx.justLimit = isLimitFilter && !curr;
- }
- function addMatchFilter(ctx, fn) {
- ctx.isMatch = combine(ctx.isMatch, fn);
- }
- function getIndexOrStore(ctx, coreSchema) {
- if (ctx.isPrimKey)
- return coreSchema.primaryKey;
- var index = coreSchema.getIndexByKeyPath(ctx.index);
- if (!index)
- throw new exceptions.Schema("KeyPath " + ctx.index + " on object store " + coreSchema.name + " is not indexed");
- return index;
- }
- function openCursor(ctx, coreTable, trans) {
- var index = getIndexOrStore(ctx, coreTable.schema);
- return coreTable.openCursor({
- trans: trans,
- values: !ctx.keysOnly,
- reverse: ctx.dir === 'prev',
- unique: !!ctx.unique,
- query: {
- index: index,
- range: ctx.range
- }
- });
- }
- function iter(ctx, fn, coreTrans, coreTable) {
- var filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter;
- if (!ctx.or) {
- return iterate(openCursor(ctx, coreTable, coreTrans), combine(ctx.algorithm, filter), fn, !ctx.keysOnly && ctx.valueMapper);
- }
- else {
- var set_1 = {};
- var union = function (item, cursor, advance) {
- if (!filter || filter(cursor, advance, function (result) { return cursor.stop(result); }, function (err) { return cursor.fail(err); })) {
- var primaryKey = cursor.primaryKey;
- var key = '' + primaryKey;
- if (key === '[object ArrayBuffer]')
- key = '' + new Uint8Array(primaryKey);
- if (!hasOwn(set_1, key)) {
- set_1[key] = true;
- fn(item, cursor, advance);
- }
- }
- };
- return Promise.all([
- ctx.or._iterate(union, coreTrans),
- iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper)
- ]);
- }
- }
- function iterate(cursorPromise, filter, fn, valueMapper) {
- var mappedFn = valueMapper ? function (x, c, a) { return fn(valueMapper(x), c, a); } : fn;
- var wrappedFn = wrap(mappedFn);
- return cursorPromise.then(function (cursor) {
- if (cursor) {
- return cursor.start(function () {
- var c = function () { return cursor.continue(); };
- if (!filter || filter(cursor, function (advancer) { return c = advancer; }, function (val) { cursor.stop(val); c = nop; }, function (e) { cursor.fail(e); c = nop; }))
- wrappedFn(cursor.value, cursor, function (advancer) { return c = advancer; });
- c();
- });
- }
- });
- }
- var Collection = (function () {
- function Collection() {
- }
- Collection.prototype._read = function (fn, cb) {
- var ctx = this._ctx;
- return ctx.error ?
- ctx.table._trans(null, rejection.bind(null, ctx.error)) :
- ctx.table._trans('readonly', fn).then(cb);
- };
- Collection.prototype._write = function (fn) {
- var ctx = this._ctx;
- return ctx.error ?
- ctx.table._trans(null, rejection.bind(null, ctx.error)) :
- ctx.table._trans('readwrite', fn, "locked");
- };
- Collection.prototype._addAlgorithm = function (fn) {
- var ctx = this._ctx;
- ctx.algorithm = combine(ctx.algorithm, fn);
- };
- Collection.prototype._iterate = function (fn, coreTrans) {
- return iter(this._ctx, fn, coreTrans, this._ctx.table.core);
- };
- Collection.prototype.clone = function (props$$1) {
- var rv = Object.create(this.constructor.prototype), ctx = Object.create(this._ctx);
- if (props$$1)
- extend(ctx, props$$1);
- rv._ctx = ctx;
- return rv;
- };
- Collection.prototype.raw = function () {
- this._ctx.valueMapper = null;
- return this;
- };
- Collection.prototype.each = function (fn) {
- var ctx = this._ctx;
- return this._read(function (trans) { return iter(ctx, fn, trans, ctx.table.core); });
- };
- Collection.prototype.count = function (cb) {
- var _this = this;
- return this._read(function (trans) {
- var ctx = _this._ctx;
- var coreTable = ctx.table.core;
- if (isPlainKeyRange(ctx, true)) {
- return coreTable.count({
- trans: trans,
- query: {
- index: getIndexOrStore(ctx, coreTable.schema),
- range: ctx.range
- }
- }).then(function (count) { return Math.min(count, ctx.limit); });
- }
- else {
- var count = 0;
- return iter(ctx, function () { ++count; return false; }, trans, coreTable)
- .then(function () { return count; });
- }
- }).then(cb);
- };
- Collection.prototype.sortBy = function (keyPath, cb) {
- var parts = keyPath.split('.').reverse(), lastPart = parts[0], lastIndex = parts.length - 1;
- function getval(obj, i) {
- if (i)
- return getval(obj[parts[i]], i - 1);
- return obj[lastPart];
- }
- var order = this._ctx.dir === "next" ? 1 : -1;
- function sorter(a, b) {
- var aVal = getval(a, lastIndex), bVal = getval(b, lastIndex);
- return aVal < bVal ? -order : aVal > bVal ? order : 0;
- }
- return this.toArray(function (a) {
- return a.sort(sorter);
- }).then(cb);
- };
- Collection.prototype.toArray = function (cb) {
- var _this = this;
- return this._read(function (trans) {
- var ctx = _this._ctx;
- if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {
- var valueMapper_1 = ctx.valueMapper;
- var index = getIndexOrStore(ctx, ctx.table.core.schema);
- return ctx.table.core.query({
- trans: trans,
- limit: ctx.limit,
- values: true,
- query: {
- index: index,
- range: ctx.range
- }
- }).then(function (_a) {
- var result = _a.result;
- return valueMapper_1 ? result.map(valueMapper_1) : result;
- });
- }
- else {
- var a_1 = [];
- return iter(ctx, function (item) { return a_1.push(item); }, trans, ctx.table.core).then(function () { return a_1; });
- }
- }, cb);
- };
- Collection.prototype.offset = function (offset) {
- var ctx = this._ctx;
- if (offset <= 0)
- return this;
- ctx.offset += offset;
- if (isPlainKeyRange(ctx)) {
- addReplayFilter(ctx, function () {
- var offsetLeft = offset;
- return function (cursor, advance) {
- if (offsetLeft === 0)
- return true;
- if (offsetLeft === 1) {
- --offsetLeft;
- return false;
- }
- advance(function () {
- cursor.advance(offsetLeft);
- offsetLeft = 0;
- });
- return false;
- };
- });
- }
- else {
- addReplayFilter(ctx, function () {
- var offsetLeft = offset;
- return function () { return (--offsetLeft < 0); };
- });
- }
- return this;
- };
- Collection.prototype.limit = function (numRows) {
- this._ctx.limit = Math.min(this._ctx.limit, numRows);
- addReplayFilter(this._ctx, function () {
- var rowsLeft = numRows;
- return function (cursor, advance, resolve) {
- if (--rowsLeft <= 0)
- advance(resolve);
- return rowsLeft >= 0;
- };
- }, true);
- return this;
- };
- Collection.prototype.until = function (filterFunction, bIncludeStopEntry) {
- addFilter(this._ctx, function (cursor, advance, resolve) {
- if (filterFunction(cursor.value)) {
- advance(resolve);
- return bIncludeStopEntry;
- }
- else {
- return true;
- }
- });
- return this;
- };
- Collection.prototype.first = function (cb) {
- return this.limit(1).toArray(function (a) { return a[0]; }).then(cb);
- };
- Collection.prototype.last = function (cb) {
- return this.reverse().first(cb);
- };
- Collection.prototype.filter = function (filterFunction) {
- addFilter(this._ctx, function (cursor) {
- return filterFunction(cursor.value);
- });
- addMatchFilter(this._ctx, filterFunction);
- return this;
- };
- Collection.prototype.and = function (filter) {
- return this.filter(filter);
- };
- Collection.prototype.or = function (indexName) {
- return new this.db.WhereClause(this._ctx.table, indexName, this);
- };
- Collection.prototype.reverse = function () {
- this._ctx.dir = (this._ctx.dir === "prev" ? "next" : "prev");
- if (this._ondirectionchange)
- this._ondirectionchange(this._ctx.dir);
- return this;
- };
- Collection.prototype.desc = function () {
- return this.reverse();
- };
- Collection.prototype.eachKey = function (cb) {
- var ctx = this._ctx;
- ctx.keysOnly = !ctx.isMatch;
- return this.each(function (val, cursor) { cb(cursor.key, cursor); });
- };
- Collection.prototype.eachUniqueKey = function (cb) {
- this._ctx.unique = "unique";
- return this.eachKey(cb);
- };
- Collection.prototype.eachPrimaryKey = function (cb) {
- var ctx = this._ctx;
- ctx.keysOnly = !ctx.isMatch;
- return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); });
- };
- Collection.prototype.keys = function (cb) {
- var ctx = this._ctx;
- ctx.keysOnly = !ctx.isMatch;
- var a = [];
- return this.each(function (item, cursor) {
- a.push(cursor.key);
- }).then(function () {
- return a;
- }).then(cb);
- };
- Collection.prototype.primaryKeys = function (cb) {
- var ctx = this._ctx;
- if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {
- return this._read(function (trans) {
- var index = getIndexOrStore(ctx, ctx.table.core.schema);
- return ctx.table.core.query({
- trans: trans,
- values: false,
- limit: ctx.limit,
- query: {
- index: index,
- range: ctx.range
- }
- });
- }).then(function (_a) {
- var result = _a.result;
- return result;
- }).then(cb);
- }
- ctx.keysOnly = !ctx.isMatch;
- var a = [];
- return this.each(function (item, cursor) {
- a.push(cursor.primaryKey);
- }).then(function () {
- return a;
- }).then(cb);
- };
- Collection.prototype.uniqueKeys = function (cb) {
- this._ctx.unique = "unique";
- return this.keys(cb);
- };
- Collection.prototype.firstKey = function (cb) {
- return this.limit(1).keys(function (a) { return a[0]; }).then(cb);
- };
- Collection.prototype.lastKey = function (cb) {
- return this.reverse().firstKey(cb);
- };
- Collection.prototype.distinct = function () {
- var ctx = this._ctx, idx = ctx.index && ctx.table.schema.idxByName[ctx.index];
- if (!idx || !idx.multi)
- return this;
- var set = {};
- addFilter(this._ctx, function (cursor) {
- var strKey = cursor.primaryKey.toString();
- var found = hasOwn(set, strKey);
- set[strKey] = true;
- return !found;
- });
- return this;
- };
- Collection.prototype.modify = function (changes) {
- var _this = this;
- var ctx = this._ctx;
- return this._write(function (trans) {
- var modifyer;
- if (typeof changes === 'function') {
- modifyer = changes;
- }
- else {
- var keyPaths = keys(changes);
- var numKeys = keyPaths.length;
- modifyer = function (item) {
- var anythingModified = false;
- for (var i = 0; i < numKeys; ++i) {
- var keyPath = keyPaths[i], val = changes[keyPath];
- if (getByKeyPath(item, keyPath) !== val) {
- setByKeyPath(item, keyPath, val);
- anythingModified = true;
- }
- }
- return anythingModified;
- };
- }
- var coreTable = ctx.table.core;
- var _a = coreTable.schema.primaryKey, outbound = _a.outbound, extractKey = _a.extractKey;
- var limit = 'testmode' in Dexie ? 1 : 2000;
- var cmp = _this.db.core.cmp;
- var totalFailures = [];
- var successCount = 0;
- var failedKeys = [];
- var applyMutateResult = function (expectedCount, res) {
- var failures = res.failures, numFailures = res.numFailures;
- successCount += expectedCount - numFailures;
- for (var _i = 0, _a = keys(failures); _i < _a.length; _i++) {
- var pos = _a[_i];
- totalFailures.push(failures[pos]);
- }
- };
- return _this.clone().primaryKeys().then(function (keys$$1) {
- var nextChunk = function (offset) {
- var count = Math.min(limit, keys$$1.length - offset);
- return coreTable.getMany({ trans: trans, keys: keys$$1.slice(offset, offset + count) }).then(function (values) {
- var addValues = [];
- var putValues = [];
- var putKeys = outbound ? [] : null;
- var deleteKeys = [];
- for (var i = 0; i < count; ++i) {
- var origValue = values[i];
- var ctx_1 = {
- value: deepClone(origValue),
- primKey: keys$$1[offset + i]
- };
- if (modifyer.call(ctx_1, ctx_1.value, ctx_1) !== false) {
- if (ctx_1.value == null) {
- deleteKeys.push(keys$$1[offset + i]);
- }
- else if (!outbound && cmp(extractKey(origValue), extractKey(ctx_1.value)) !== 0) {
- deleteKeys.push(keys$$1[offset + i]);
- addValues.push(ctx_1.value);
- }
- else {
- putValues.push(ctx_1.value);
- if (outbound)
- putKeys.push(keys$$1[offset + i]);
- }
- }
- }
- return Promise.resolve(addValues.length > 0 &&
- coreTable.mutate({ trans: trans, type: 'add', values: addValues })
- .then(function (res) {
- for (var pos in res.failures) {
- deleteKeys.splice(parseInt(pos), 1);
- }
- applyMutateResult(addValues.length, res);
- })).then(function (res) { return putValues.length > 0 &&
- coreTable.mutate({ trans: trans, type: 'put', keys: putKeys, values: putValues })
- .then(function (res) { return applyMutateResult(putValues.length, res); }); }).then(function () { return deleteKeys.length > 0 &&
- coreTable.mutate({ trans: trans, type: 'delete', keys: deleteKeys })
- .then(function (res) { return applyMutateResult(deleteKeys.length, res); }); }).then(function () {
- return keys$$1.length > offset + count && nextChunk(offset + limit);
- });
- });
- };
- return nextChunk(0).then(function () {
- if (totalFailures.length > 0)
- throw new ModifyError("Error modifying one or more objects", totalFailures, successCount, failedKeys);
- return keys$$1.length;
- });
- });
- });
- };
- Collection.prototype.delete = function () {
- var ctx = this._ctx, range = ctx.range;
- if (isPlainKeyRange(ctx) &&
- ((ctx.isPrimKey && !hangsOnDeleteLargeKeyRange) || range.type === 3 ))
- {
- return this._write(function (trans) {
- var primaryKey = ctx.table.core.schema.primaryKey;
- var coreRange = range;
- return ctx.table.core.count({ trans: trans, query: { index: primaryKey, range: coreRange } }).then(function (count) {
- return ctx.table.core.mutate({ trans: trans, type: 'deleteRange', range: coreRange })
- .then(function (_a) {
- var failures = _a.failures, lastResult = _a.lastResult, results = _a.results, numFailures = _a.numFailures;
- if (numFailures)
- throw new ModifyError("Could not delete some values", Object.keys(failures).map(function (pos) { return failures[pos]; }), count - numFailures);
- return count - numFailures;
- });
- });
- });
- }
- return this.modify(function (value, ctx) { return ctx.value = null; });
- };
- return Collection;
- }());
- function createCollectionConstructor(db) {
- return makeClassConstructor(Collection.prototype, function Collection$$1(whereClause, keyRangeGenerator) {
- this.db = db;
- var keyRange = AnyRange, error = null;
- if (keyRangeGenerator)
- try {
- keyRange = keyRangeGenerator();
- }
- catch (ex) {
- error = ex;
- }
- var whereCtx = whereClause._ctx;
- var table = whereCtx.table;
- var readingHook = table.hook.reading.fire;
- this._ctx = {
- table: table,
- index: whereCtx.index,
- isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)),
- range: keyRange,
- keysOnly: false,
- dir: "next",
- unique: "",
- algorithm: null,
- filter: null,
- replayFilter: null,
- justLimit: true,
- isMatch: null,
- offset: 0,
- limit: Infinity,
- error: error,
- or: whereCtx.or,
- valueMapper: readingHook !== mirror ? readingHook : null
- };
- });
- }
- function simpleCompare(a, b) {
- return a < b ? -1 : a === b ? 0 : 1;
- }
- function simpleCompareReverse(a, b) {
- return a > b ? -1 : a === b ? 0 : 1;
- }
- function fail(collectionOrWhereClause, err, T) {
- var collection = collectionOrWhereClause instanceof WhereClause ?
- new collectionOrWhereClause.Collection(collectionOrWhereClause) :
- collectionOrWhereClause;
- collection._ctx.error = T ? new T(err) : new TypeError(err);
- return collection;
- }
- function emptyCollection(whereClause) {
- return new whereClause.Collection(whereClause, function () { return rangeEqual(""); }).limit(0);
- }
- function upperFactory(dir) {
- return dir === "next" ?
- function (s) { return s.toUpperCase(); } :
- function (s) { return s.toLowerCase(); };
- }
- function lowerFactory(dir) {
- return dir === "next" ?
- function (s) { return s.toLowerCase(); } :
- function (s) { return s.toUpperCase(); };
- }
- function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) {
- var length = Math.min(key.length, lowerNeedle.length);
- var llp = -1;
- for (var i = 0; i < length; ++i) {
- var lwrKeyChar = lowerKey[i];
- if (lwrKeyChar !== lowerNeedle[i]) {
- if (cmp(key[i], upperNeedle[i]) < 0)
- return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1);
- if (cmp(key[i], lowerNeedle[i]) < 0)
- return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1);
- if (llp >= 0)
- return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1);
- return null;
- }
- if (cmp(key[i], lwrKeyChar) < 0)
- llp = i;
- }
- if (length < lowerNeedle.length && dir === "next")
- return key + upperNeedle.substr(key.length);
- if (length < key.length && dir === "prev")
- return key.substr(0, upperNeedle.length);
- return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1));
- }
- function addIgnoreCaseAlgorithm(whereClause, match, needles, suffix) {
- var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix, needlesLen = needles.length;
- if (!needles.every(function (s) { return typeof s === 'string'; })) {
- return fail(whereClause, STRING_EXPECTED);
- }
- function initDirection(dir) {
- upper = upperFactory(dir);
- lower = lowerFactory(dir);
- compare = (dir === "next" ? simpleCompare : simpleCompareReverse);
- var needleBounds = needles.map(function (needle) {
- return { lower: lower(needle), upper: upper(needle) };
- }).sort(function (a, b) {
- return compare(a.lower, b.lower);
- });
- upperNeedles = needleBounds.map(function (nb) { return nb.upper; });
- lowerNeedles = needleBounds.map(function (nb) { return nb.lower; });
- direction = dir;
- nextKeySuffix = (dir === "next" ? "" : suffix);
- }
- initDirection("next");
- var c = new whereClause.Collection(whereClause, function () { return createRange(upperNeedles[0], lowerNeedles[needlesLen - 1] + suffix); });
- c._ondirectionchange = function (direction) {
- initDirection(direction);
- };
- var firstPossibleNeedle = 0;
- c._addAlgorithm(function (cursor, advance, resolve) {
- var key = cursor.key;
- if (typeof key !== 'string')
- return false;
- var lowerKey = lower(key);
- if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) {
- return true;
- }
- else {
- var lowestPossibleCasing = null;
- for (var i = firstPossibleNeedle; i < needlesLen; ++i) {
- var casing = nextCasing(key, lowerKey, upperNeedles[i], lowerNeedles[i], compare, direction);
- if (casing === null && lowestPossibleCasing === null)
- firstPossibleNeedle = i + 1;
- else if (lowestPossibleCasing === null || compare(lowestPossibleCasing, casing) > 0) {
- lowestPossibleCasing = casing;
- }
- }
- if (lowestPossibleCasing !== null) {
- advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); });
- }
- else {
- advance(resolve);
- }
- return false;
- }
- });
- return c;
- }
- function createRange(lower, upper, lowerOpen, upperOpen) {
- return {
- type: 2 ,
- lower: lower,
- upper: upper,
- lowerOpen: lowerOpen,
- upperOpen: upperOpen
- };
- }
- function rangeEqual(value) {
- return {
- type: 1 ,
- lower: value,
- upper: value
- };
- }
- var WhereClause = (function () {
- function WhereClause() {
- }
- Object.defineProperty(WhereClause.prototype, "Collection", {
- get: function () {
- return this._ctx.table.db.Collection;
- },
- enumerable: true,
- configurable: true
- });
- WhereClause.prototype.between = function (lower, upper, includeLower, includeUpper) {
- includeLower = includeLower !== false;
- includeUpper = includeUpper === true;
- try {
- if ((this._cmp(lower, upper) > 0) ||
- (this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper)))
- return emptyCollection(this);
- return new this.Collection(this, function () { return createRange(lower, upper, !includeLower, !includeUpper); });
- }
- catch (e) {
- return fail(this, INVALID_KEY_ARGUMENT);
- }
- };
- WhereClause.prototype.equals = function (value) {
- return new this.Collection(this, function () { return rangeEqual(value); });
- };
- WhereClause.prototype.above = function (value) {
- if (value == null)
- return fail(this, INVALID_KEY_ARGUMENT);
- return new this.Collection(this, function () { return createRange(value, undefined, true); });
- };
- WhereClause.prototype.aboveOrEqual = function (value) {
- if (value == null)
- return fail(this, INVALID_KEY_ARGUMENT);
- return new this.Collection(this, function () { return createRange(value, undefined, false); });
- };
- WhereClause.prototype.below = function (value) {
- if (value == null)
- return fail(this, INVALID_KEY_ARGUMENT);
- return new this.Collection(this, function () { return createRange(undefined, value, false, true); });
- };
- WhereClause.prototype.belowOrEqual = function (value) {
- if (value == null)
- return fail(this, INVALID_KEY_ARGUMENT);
- return new this.Collection(this, function () { return createRange(undefined, value); });
- };
- WhereClause.prototype.startsWith = function (str) {
- if (typeof str !== 'string')
- return fail(this, STRING_EXPECTED);
- return this.between(str, str + maxString, true, true);
- };
- WhereClause.prototype.startsWithIgnoreCase = function (str) {
- if (str === "")
- return this.startsWith(str);
- return addIgnoreCaseAlgorithm(this, function (x, a) { return x.indexOf(a[0]) === 0; }, [str], maxString);
- };
- WhereClause.prototype.equalsIgnoreCase = function (str) {
- return addIgnoreCaseAlgorithm(this, function (x, a) { return x === a[0]; }, [str], "");
- };
- WhereClause.prototype.anyOfIgnoreCase = function () {
- var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);
- if (set.length === 0)
- return emptyCollection(this);
- return addIgnoreCaseAlgorithm(this, function (x, a) { return a.indexOf(x) !== -1; }, set, "");
- };
- WhereClause.prototype.startsWithAnyOfIgnoreCase = function () {
- var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);
- if (set.length === 0)
- return emptyCollection(this);
- return addIgnoreCaseAlgorithm(this, function (x, a) { return a.some(function (n) { return x.indexOf(n) === 0; }); }, set, maxString);
- };
- WhereClause.prototype.anyOf = function () {
- var _this = this;
- var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);
- var compare = this._cmp;
- try {
- set.sort(compare);
- }
- catch (e) {
- return fail(this, INVALID_KEY_ARGUMENT);
- }
- if (set.length === 0)
- return emptyCollection(this);
- var c = new this.Collection(this, function () { return createRange(set[0], set[set.length - 1]); });
- c._ondirectionchange = function (direction) {
- compare = (direction === "next" ?
- _this._ascending :
- _this._descending);
- set.sort(compare);
- };
- var i = 0;
- c._addAlgorithm(function (cursor, advance, resolve) {
- var key = cursor.key;
- while (compare(key, set[i]) > 0) {
- ++i;
- if (i === set.length) {
- advance(resolve);
- return false;
- }
- }
- if (compare(key, set[i]) === 0) {
- return true;
- }
- else {
- advance(function () { cursor.continue(set[i]); });
- return false;
- }
- });
- return c;
- };
- WhereClause.prototype.notEqual = function (value) {
- return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false });
- };
- WhereClause.prototype.noneOf = function () {
- var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);
- if (set.length === 0)
- return new this.Collection(this);
- try {
- set.sort(this._ascending);
- }
- catch (e) {
- return fail(this, INVALID_KEY_ARGUMENT);
- }
- var ranges = set.reduce(function (res, val) { return res ?
- res.concat([[res[res.length - 1][1], val]]) :
- [[minKey, val]]; }, null);
- ranges.push([set[set.length - 1], this.db._maxKey]);
- return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false });
- };
- WhereClause.prototype.inAnyRange = function (ranges, options) {
- var _this = this;
- var cmp = this._cmp, ascending = this._ascending, descending = this._descending, min = this._min, max = this._max;
- if (ranges.length === 0)
- return emptyCollection(this);
- if (!ranges.every(function (range) {
- return range[0] !== undefined &&
- range[1] !== undefined &&
- ascending(range[0], range[1]) <= 0;
- })) {
- return fail(this, "First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower", exceptions.InvalidArgument);
- }
- var includeLowers = !options || options.includeLowers !== false;
- var includeUppers = options && options.includeUppers === true;
- function addRange(ranges, newRange) {
- var i = 0, l = ranges.length;
- for (; i < l; ++i) {
- var range = ranges[i];
- if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) {
- range[0] = min(range[0], newRange[0]);
- range[1] = max(range[1], newRange[1]);
- break;
- }
- }
- if (i === l)
- ranges.push(newRange);
- return ranges;
- }
- var sortDirection = ascending;
- function rangeSorter(a, b) { return sortDirection(a[0], b[0]); }
- var set;
- try {
- set = ranges.reduce(addRange, []);
- set.sort(rangeSorter);
- }
- catch (ex) {
- return fail(this, INVALID_KEY_ARGUMENT);
- }
- var rangePos = 0;
- var keyIsBeyondCurrentEntry = includeUppers ?
- function (key) { return ascending(key, set[rangePos][1]) > 0; } :
- function (key) { return ascending(key, set[rangePos][1]) >= 0; };
- var keyIsBeforeCurrentEntry = includeLowers ?
- function (key) { return descending(key, set[rangePos][0]) > 0; } :
- function (key) { return descending(key, set[rangePos][0]) >= 0; };
- function keyWithinCurrentRange(key) {
- return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key);
- }
- var checkKey = keyIsBeyondCurrentEntry;
- var c = new this.Collection(this, function () { return createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers); });
- c._ondirectionchange = function (direction) {
- if (direction === "next") {
- checkKey = keyIsBeyondCurrentEntry;
- sortDirection = ascending;
- }
- else {
- checkKey = keyIsBeforeCurrentEntry;
- sortDirection = descending;
- }
- set.sort(rangeSorter);
- };
- c._addAlgorithm(function (cursor, advance, resolve) {
- var key = cursor.key;
- while (checkKey(key)) {
- ++rangePos;
- if (rangePos === set.length) {
- advance(resolve);
- return false;
- }
- }
- if (keyWithinCurrentRange(key)) {
- return true;
- }
- else if (_this._cmp(key, set[rangePos][1]) === 0 || _this._cmp(key, set[rangePos][0]) === 0) {
- return false;
- }
- else {
- advance(function () {
- if (sortDirection === ascending)
- cursor.continue(set[rangePos][0]);
- else
- cursor.continue(set[rangePos][1]);
- });
- return false;
- }
- });
- return c;
- };
- WhereClause.prototype.startsWithAnyOf = function () {
- var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);
- if (!set.every(function (s) { return typeof s === 'string'; })) {
- return fail(this, "startsWithAnyOf() only works with strings");
- }
- if (set.length === 0)
- return emptyCollection(this);
- return this.inAnyRange(set.map(function (str) { return [str, str + maxString]; }));
- };
- return WhereClause;
- }());
- function createWhereClauseConstructor(db) {
- return makeClassConstructor(WhereClause.prototype, function WhereClause$$1(table, index, orCollection) {
- this.db = db;
- this._ctx = {
- table: table,
- index: index === ":id" ? null : index,
- or: orCollection
- };
- var indexedDB = db._deps.indexedDB;
- if (!indexedDB)
- throw new exceptions.MissingAPI("indexedDB API missing");
- this._cmp = this._ascending = indexedDB.cmp.bind(indexedDB);
- this._descending = function (a, b) { return indexedDB.cmp(b, a); };
- this._max = function (a, b) { return indexedDB.cmp(a, b) > 0 ? a : b; };
- this._min = function (a, b) { return indexedDB.cmp(a, b) < 0 ? a : b; };
- this._IDBKeyRange = db._deps.IDBKeyRange;
- });
- }
- function safariMultiStoreFix(storeNames) {
- return storeNames.length === 1 ? storeNames[0] : storeNames;
- }
- function getMaxKey(IdbKeyRange) {
- try {
- IdbKeyRange.only([[]]);
- return [[]];
- }
- catch (e) {
- return maxString;
- }
- }
- function eventRejectHandler(reject) {
- return wrap(function (event) {
- preventDefault(event);
- reject(event.target.error);
- return false;
- });
- }
- function preventDefault(event) {
- if (event.stopPropagation)
- event.stopPropagation();
- if (event.preventDefault)
- event.preventDefault();
- }
- var Transaction = (function () {
- function Transaction() {
- }
- Transaction.prototype._lock = function () {
- assert(!PSD.global);
- ++this._reculock;
- if (this._reculock === 1 && !PSD.global)
- PSD.lockOwnerFor = this;
- return this;
- };
- Transaction.prototype._unlock = function () {
- assert(!PSD.global);
- if (--this._reculock === 0) {
- if (!PSD.global)
- PSD.lockOwnerFor = null;
- while (this._blockedFuncs.length > 0 && !this._locked()) {
- var fnAndPSD = this._blockedFuncs.shift();
- try {
- usePSD(fnAndPSD[1], fnAndPSD[0]);
- }
- catch (e) { }
- }
- }
- return this;
- };
- Transaction.prototype._locked = function () {
- return this._reculock && PSD.lockOwnerFor !== this;
- };
- Transaction.prototype.create = function (idbtrans) {
- var _this = this;
- if (!this.mode)
- return this;
- var idbdb = this.db.idbdb;
- var dbOpenError = this.db._state.dbOpenError;
- assert(!this.idbtrans);
- if (!idbtrans && !idbdb) {
- switch (dbOpenError && dbOpenError.name) {
- case "DatabaseClosedError":
- throw new exceptions.DatabaseClosed(dbOpenError);
- case "MissingAPIError":
- throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError);
- default:
- throw new exceptions.OpenFailed(dbOpenError);
- }
- }
- if (!this.active)
- throw new exceptions.TransactionInactive();
- assert(this._completion._state === null);
- idbtrans = this.idbtrans = idbtrans || idbdb.transaction(safariMultiStoreFix(this.storeNames), this.mode);
- idbtrans.onerror = wrap(function (ev) {
- preventDefault(ev);
- _this._reject(idbtrans.error);
- });
- idbtrans.onabort = wrap(function (ev) {
- preventDefault(ev);
- _this.active && _this._reject(new exceptions.Abort(idbtrans.error));
- _this.active = false;
- _this.on("abort").fire(ev);
- });
- idbtrans.oncomplete = wrap(function () {
- _this.active = false;
- _this._resolve();
- });
- return this;
- };
- Transaction.prototype._promise = function (mode, fn, bWriteLock) {
- var _this = this;
- if (mode === 'readwrite' && this.mode !== 'readwrite')
- return rejection(new exceptions.ReadOnly("Transaction is readonly"));
- if (!this.active)
- return rejection(new exceptions.TransactionInactive());
- if (this._locked()) {
- return new DexiePromise(function (resolve, reject) {
- _this._blockedFuncs.push([function () {
- _this._promise(mode, fn, bWriteLock).then(resolve, reject);
- }, PSD]);
- });
- }
- else if (bWriteLock) {
- return newScope(function () {
- var p = new DexiePromise(function (resolve, reject) {
- _this._lock();
- var rv = fn(resolve, reject, _this);
- if (rv && rv.then)
- rv.then(resolve, reject);
- });
- p.finally(function () { return _this._unlock(); });
- p._lib = true;
- return p;
- });
- }
- else {
- var p = new DexiePromise(function (resolve, reject) {
- var rv = fn(resolve, reject, _this);
- if (rv && rv.then)
- rv.then(resolve, reject);
- });
- p._lib = true;
- return p;
- }
- };
- Transaction.prototype._root = function () {
- return this.parent ? this.parent._root() : this;
- };
- Transaction.prototype.waitFor = function (promiseLike) {
- var root = this._root();
- var promise = DexiePromise.resolve(promiseLike);
- if (root._waitingFor) {
- root._waitingFor = root._waitingFor.then(function () { return promise; });
- }
- else {
- root._waitingFor = promise;
- root._waitingQueue = [];
- var store = root.idbtrans.objectStore(root.storeNames[0]);
- (function spin() {
- ++root._spinCount;
- while (root._waitingQueue.length)
- (root._waitingQueue.shift())();
- if (root._waitingFor)
- store.get(-Infinity).onsuccess = spin;
- }());
- }
- var currentWaitPromise = root._waitingFor;
- return new DexiePromise(function (resolve, reject) {
- promise.then(function (res) { return root._waitingQueue.push(wrap(resolve.bind(null, res))); }, function (err) { return root._waitingQueue.push(wrap(reject.bind(null, err))); }).finally(function () {
- if (root._waitingFor === currentWaitPromise) {
- root._waitingFor = null;
- }
- });
- });
- };
- Transaction.prototype.abort = function () {
- this.active && this._reject(new exceptions.Abort());
- this.active = false;
- };
- Transaction.prototype.table = function (tableName) {
- var memoizedTables = (this._memoizedTables || (this._memoizedTables = {}));
- if (hasOwn(memoizedTables, tableName))
- return memoizedTables[tableName];
- var tableSchema = this.schema[tableName];
- if (!tableSchema) {
- throw new exceptions.NotFound("Table " + tableName + " not part of transaction");
- }
- var transactionBoundTable = new this.db.Table(tableName, tableSchema, this);
- transactionBoundTable.core = this.db.core.table(tableName);
- memoizedTables[tableName] = transactionBoundTable;
- return transactionBoundTable;
- };
- return Transaction;
- }());
- function createTransactionConstructor(db) {
- return makeClassConstructor(Transaction.prototype, function Transaction$$1(mode, storeNames, dbschema, parent) {
- var _this = this;
- this.db = db;
- this.mode = mode;
- this.storeNames = storeNames;
- this.schema = dbschema;
- this.idbtrans = null;
- this.on = Events(this, "complete", "error", "abort");
- this.parent = parent || null;
- this.active = true;
- this._reculock = 0;
- this._blockedFuncs = [];
- this._resolve = null;
- this._reject = null;
- this._waitingFor = null;
- this._waitingQueue = null;
- this._spinCount = 0;
- this._completion = new DexiePromise(function (resolve, reject) {
- _this._resolve = resolve;
- _this._reject = reject;
- });
- this._completion.then(function () {
- _this.active = false;
- _this.on.complete.fire();
- }, function (e) {
- var wasActive = _this.active;
- _this.active = false;
- _this.on.error.fire(e);
- _this.parent ?
- _this.parent._reject(e) :
- wasActive && _this.idbtrans && _this.idbtrans.abort();
- return rejection(e);
- });
- });
- }
- function createIndexSpec(name, keyPath, unique, multi, auto, compound, isPrimKey) {
- return {
- name: name,
- keyPath: keyPath,
- unique: unique,
- multi: multi,
- auto: auto,
- compound: compound,
- src: (unique && !isPrimKey ? '&' : '') + (multi ? '*' : '') + (auto ? "++" : "") + nameFromKeyPath(keyPath)
- };
- }
- function nameFromKeyPath(keyPath) {
- return typeof keyPath === 'string' ?
- keyPath :
- keyPath ? ('[' + [].join.call(keyPath, '+') + ']') : "";
- }
- function createTableSchema(name, primKey, indexes) {
- return {
- name: name,
- primKey: primKey,
- indexes: indexes,
- mappedClass: null,
- idxByName: arrayToObject(indexes, function (index) { return [index.name, index]; })
- };
- }
- function getKeyExtractor(keyPath) {
- if (keyPath == null) {
- return function () { return undefined; };
- }
- else if (typeof keyPath === 'string') {
- return getSinglePathKeyExtractor(keyPath);
- }
- else {
- return function (obj) { return getByKeyPath(obj, keyPath); };
- }
- }
- function getSinglePathKeyExtractor(keyPath) {
- var split = keyPath.split('.');
- if (split.length === 1) {
- return function (obj) { return obj[keyPath]; };
- }
- else {
- return function (obj) { return getByKeyPath(obj, keyPath); };
- }
- }
- function getEffectiveKeys(primaryKey, req) {
- if (req.type === 'delete')
- return req.keys;
- return req.keys || req.values.map(primaryKey.extractKey);
- }
- function getExistingValues(table, req, effectiveKeys) {
- return req.type === 'add' ? Promise.resolve(new Array(req.values.length)) :
- table.getMany({ trans: req.trans, keys: effectiveKeys });
- }
- function arrayify(arrayLike) {
- return [].slice.call(arrayLike);
- }
- var _id_counter = 0;
- function getKeyPathAlias(keyPath) {
- return keyPath == null ?
- ":id" :
- typeof keyPath === 'string' ?
- keyPath :
- "[" + keyPath.join('+') + "]";
- }
- function createDBCore(db, indexedDB, IdbKeyRange, tmpTrans) {
- var cmp = indexedDB.cmp.bind(indexedDB);
- function extractSchema(db, trans) {
- var tables = arrayify(db.objectStoreNames);
- return {
- schema: {
- name: db.name,
- tables: tables.map(function (table) { return trans.objectStore(table); }).map(function (store) {
- var keyPath = store.keyPath, autoIncrement = store.autoIncrement;
- var compound = isArray(keyPath);
- var outbound = keyPath == null;
- var indexByKeyPath = {};
- var result = {
- name: store.name,
- primaryKey: {
- name: null,
- isPrimaryKey: true,
- outbound: outbound,
- compound: compound,
- keyPath: keyPath,
- autoIncrement: autoIncrement,
- unique: true,
- extractKey: getKeyExtractor(keyPath)
- },
- indexes: arrayify(store.indexNames).map(function (indexName) { return store.index(indexName); })
- .map(function (index) {
- var name = index.name, unique = index.unique, multiEntry = index.multiEntry, keyPath = index.keyPath;
- var compound = isArray(keyPath);
- var result = {
- name: name,
- compound: compound,
- keyPath: keyPath,
- unique: unique,
- multiEntry: multiEntry,
- extractKey: getKeyExtractor(keyPath)
- };
- indexByKeyPath[getKeyPathAlias(keyPath)] = result;
- return result;
- }),
- getIndexByKeyPath: function (keyPath) { return indexByKeyPath[getKeyPathAlias(keyPath)]; }
- };
- indexByKeyPath[":id"] = result.primaryKey;
- if (keyPath != null) {
- indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey;
- }
- return result;
- })
- },
- hasGetAll: tables.length > 0 && ('getAll' in trans.objectStore(tables[0])) &&
- !(typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&
- !/(Chrome\/|Edge\/)/.test(navigator.userAgent) &&
- [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604)
- };
- }
- function makeIDBKeyRange(range) {
- if (range.type === 3 )
- return null;
- if (range.type === 4 )
- throw new Error("Cannot convert never type to IDBKeyRange");
- var lower = range.lower, upper = range.upper, lowerOpen = range.lowerOpen, upperOpen = range.upperOpen;
- var idbRange = lower === undefined ?
- upper === undefined ?
- null :
- IdbKeyRange.upperBound(upper, !!upperOpen) :
- upper === undefined ?
- IdbKeyRange.lowerBound(lower, !!lowerOpen) :
- IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen);
- return idbRange;
- }
- function createDbCoreTable(tableSchema) {
- var tableName = tableSchema.name;
- function mutate(_a) {
- var trans = _a.trans, type = _a.type, keys$$1 = _a.keys, values = _a.values, range = _a.range, wantResults = _a.wantResults;
- return new Promise(function (resolve, reject) {
- resolve = wrap(resolve);
- var store = trans.objectStore(tableName);
- var outbound = store.keyPath == null;
- var isAddOrPut = type === "put" || type === "add";
- if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange')
- throw new Error("Invalid operation type: " + type);
- var length = (keys$$1 || values || { length: 1 }).length;
- if (keys$$1 && values && keys$$1.length !== values.length) {
- throw new Error("Given keys array must have same length as given values array.");
- }
- if (length === 0)
- return resolve({ numFailures: 0, failures: {}, results: [], lastResult: undefined });
- var results = wantResults && __spreadArrays((keys$$1 ?
- keys$$1 :
- getEffectiveKeys(tableSchema.primaryKey, { type: type, keys: keys$$1, values: values })));
- var req;
- var failures = [];
- var numFailures = 0;
- var errorHandler = function (event) {
- ++numFailures;
- preventDefault(event);
- if (results)
- results[event.target._reqno] = undefined;
- failures[event.target._reqno] = event.target.error;
- };
- var setResult = function (_a) {
- var target = _a.target;
- results[target._reqno] = target.result;
- };
- if (type === 'deleteRange') {
- if (range.type === 4 )
- return resolve({ numFailures: numFailures, failures: failures, results: results, lastResult: undefined });
- if (range.type === 3 )
- req = store.clear();
- else
- req = store.delete(makeIDBKeyRange(range));
- }
- else {
- var _a = isAddOrPut ?
- outbound ?
- [values, keys$$1] :
- [values, null] :
- [keys$$1, null], args1 = _a[0], args2 = _a[1];
- if (isAddOrPut) {
- for (var i = 0; i < length; ++i) {
- req = (args2 && args2[i] !== undefined ?
- store[type](args1[i], args2[i]) :
- store[type](args1[i]));
- req._reqno = i;
- if (results && results[i] === undefined) {
- req.onsuccess = setResult;
- }
- req.onerror = errorHandler;
- }
- }
- else {
- for (var i = 0; i < length; ++i) {
- req = store[type](args1[i]);
- req._reqno = i;
- req.onerror = errorHandler;
- }
- }
- }
- var done = function (event) {
- var lastResult = event.target.result;
- if (results)
- results[length - 1] = lastResult;
- resolve({
- numFailures: numFailures,
- failures: failures,
- results: results,
- lastResult: lastResult
- });
- };
- req.onerror = function (event) {
- errorHandler(event);
- done(event);
- };
- req.onsuccess = done;
- });
- }
- function openCursor(_a) {
- var trans = _a.trans, values = _a.values, query = _a.query, reverse = _a.reverse, unique = _a.unique;
- return new Promise(function (resolve, reject) {
- resolve = wrap(resolve);
- var index = query.index, range = query.range;
- var store = trans.objectStore(tableName);
- var source = index.isPrimaryKey ?
- store :
- store.index(index.name);
- var direction = reverse ?
- unique ?
- "prevunique" :
- "prev" :
- unique ?
- "nextunique" :
- "next";
- var req = values || !('openKeyCursor' in source) ?
- source.openCursor(makeIDBKeyRange(range), direction) :
- source.openKeyCursor(makeIDBKeyRange(range), direction);
- req.onerror = eventRejectHandler(reject);
- req.onsuccess = wrap(function (ev) {
- var cursor = req.result;
- if (!cursor) {
- resolve(null);
- return;
- }
- cursor.___id = ++_id_counter;
- cursor.done = false;
- var _cursorContinue = cursor.continue.bind(cursor);
- var _cursorContinuePrimaryKey = cursor.continuePrimaryKey;
- if (_cursorContinuePrimaryKey)
- _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor);
- var _cursorAdvance = cursor.advance.bind(cursor);
- var doThrowCursorIsNotStarted = function () { throw new Error("Cursor not started"); };
- var doThrowCursorIsStopped = function () { throw new Error("Cursor not stopped"); };
- cursor.trans = trans;
- cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted;
- cursor.fail = wrap(reject);
- cursor.next = function () {
- var _this = this;
- var gotOne = 1;
- return this.start(function () { return gotOne-- ? _this.continue() : _this.stop(); }).then(function () { return _this; });
- };
- cursor.start = function (callback) {
- var iterationPromise = new Promise(function (resolveIteration, rejectIteration) {
- resolveIteration = wrap(resolveIteration);
- req.onerror = eventRejectHandler(rejectIteration);
- cursor.fail = rejectIteration;
- cursor.stop = function (value) {
- cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped;
- resolveIteration(value);
- };
- });
- var guardedCallback = function () {
- if (req.result) {
- try {
- callback();
- }
- catch (err) {
- cursor.fail(err);
- }
- }
- else {
- cursor.done = true;
- cursor.start = function () { throw new Error("Cursor behind last entry"); };
- cursor.stop();
- }
- };
- req.onsuccess = wrap(function (ev) {
- req.onsuccess = guardedCallback;
- guardedCallback();
- });
- cursor.continue = _cursorContinue;
- cursor.continuePrimaryKey = _cursorContinuePrimaryKey;
- cursor.advance = _cursorAdvance;
- guardedCallback();
- return iterationPromise;
- };
- resolve(cursor);
- }, reject);
- });
- }
- function query(hasGetAll) {
- return function (request) {
- return new Promise(function (resolve, reject) {
- resolve = wrap(resolve);
- var trans = request.trans, values = request.values, limit = request.limit, query = request.query;
- var nonInfinitLimit = limit === Infinity ? undefined : limit;
- var index = query.index, range = query.range;
- var store = trans.objectStore(tableName);
- var source = index.isPrimaryKey ? store : store.index(index.name);
- var idbKeyRange = makeIDBKeyRange(range);
- if (limit === 0)
- return resolve({ result: [] });
- if (hasGetAll) {
- var req = values ?
- source.getAll(idbKeyRange, nonInfinitLimit) :
- source.getAllKeys(idbKeyRange, nonInfinitLimit);
- req.onsuccess = function (event) { return resolve({ result: event.target.result }); };
- req.onerror = eventRejectHandler(reject);
- }
- else {
- var count_1 = 0;
- var req_1 = values || !('openKeyCursor' in source) ?
- source.openCursor(idbKeyRange) :
- source.openKeyCursor(idbKeyRange);
- var result_1 = [];
- req_1.onsuccess = function (event) {
- var cursor = req_1.result;
- if (!cursor)
- return resolve({ result: result_1 });
- result_1.push(values ? cursor.value : cursor.primaryKey);
- if (++count_1 === limit)
- return resolve({ result: result_1 });
- cursor.continue();
- };
- req_1.onerror = eventRejectHandler(reject);
- }
- });
- };
- }
- return {
- name: tableName,
- schema: tableSchema,
- mutate: mutate,
- getMany: function (_a) {
- var trans = _a.trans, keys$$1 = _a.keys;
- return new Promise(function (resolve, reject) {
- resolve = wrap(resolve);
- var store = trans.objectStore(tableName);
- var length = keys$$1.length;
- var result = new Array(length);
- var keyCount = 0;
- var callbackCount = 0;
- var valueCount = 0;
- var req;
- var successHandler = function (event) {
- var req = event.target;
- if ((result[req._pos] = req.result) != null)
- ++valueCount;
- if (++callbackCount === keyCount)
- resolve(result);
- };
- var errorHandler = eventRejectHandler(reject);
- for (var i = 0; i < length; ++i) {
- var key = keys$$1[i];
- if (key != null) {
- req = store.get(keys$$1[i]);
- req._pos = i;
- req.onsuccess = successHandler;
- req.onerror = errorHandler;
- ++keyCount;
- }
- }
- if (keyCount === 0)
- resolve(result);
- });
- },
- get: function (_a) {
- var trans = _a.trans, key = _a.key;
- return new Promise(function (resolve, reject) {
- resolve = wrap(resolve);
- var store = trans.objectStore(tableName);
- var req = store.get(key);
- req.onsuccess = function (event) { return resolve(event.target.result); };
- req.onerror = eventRejectHandler(reject);
- });
- },
- query: query(hasGetAll),
- openCursor: openCursor,
- count: function (_a) {
- var query = _a.query, trans = _a.trans;
- var index = query.index, range = query.range;
- return new Promise(function (resolve, reject) {
- var store = trans.objectStore(tableName);
- var source = index.isPrimaryKey ? store : store.index(index.name);
- var idbKeyRange = makeIDBKeyRange(range);
- var req = idbKeyRange ? source.count(idbKeyRange) : source.count();
- req.onsuccess = wrap(function (ev) { return resolve(ev.target.result); });
- req.onerror = eventRejectHandler(reject);
- });
- }
- };
- }
- var _a = extractSchema(db, tmpTrans), schema = _a.schema, hasGetAll = _a.hasGetAll;
- var tables = schema.tables.map(function (tableSchema) { return createDbCoreTable(tableSchema); });
- var tableMap = {};
- tables.forEach(function (table) { return tableMap[table.name] = table; });
- return {
- stack: "dbcore",
- transaction: db.transaction.bind(db),
- table: function (name) {
- var result = tableMap[name];
- if (!result)
- throw new Error("Table '" + name + "' not found");
- return tableMap[name];
- },
- cmp: cmp,
- MIN_KEY: -Infinity,
- MAX_KEY: getMaxKey(IdbKeyRange),
- schema: schema
- };
- }
- function createMiddlewareStack(stackImpl, middlewares) {
- return middlewares.reduce(function (down, _a) {
- var create = _a.create;
- return (__assign(__assign({}, down), create(down)));
- }, stackImpl);
- }
- function createMiddlewareStacks(middlewares, idbdb, _a, tmpTrans) {
- var IDBKeyRange = _a.IDBKeyRange, indexedDB = _a.indexedDB;
- var dbcore = createMiddlewareStack(createDBCore(idbdb, indexedDB, IDBKeyRange, tmpTrans), middlewares.dbcore);
- return {
- dbcore: dbcore
- };
- }
- function generateMiddlewareStacks(db, tmpTrans) {
- var idbdb = tmpTrans.db;
- var stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans);
- db.core = stacks.dbcore;
- db.tables.forEach(function (table) {
- var tableName = table.name;
- if (db.core.schema.tables.some(function (tbl) { return tbl.name === tableName; })) {
- table.core = db.core.table(tableName);
- if (db[tableName] instanceof db.Table) {
- db[tableName].core = table.core;
- }
- }
- });
- }
- function setApiOnPlace(db, objs, tableNames, dbschema) {
- tableNames.forEach(function (tableName) {
- var schema = dbschema[tableName];
- objs.forEach(function (obj) {
- if (!(tableName in obj)) {
- if (obj === db.Transaction.prototype || obj instanceof db.Transaction) {
- setProp(obj, tableName, {
- get: function () { return this.table(tableName); },
- set: function (value) {
- defineProperty(this, tableName, { value: value, writable: true, configurable: true, enumerable: true });
- }
- });
- }
- else {
- obj[tableName] = new db.Table(tableName, schema);
- }
- }
- });
- });
- }
- function removeTablesApi(db, objs) {
- objs.forEach(function (obj) {
- for (var key in obj) {
- if (obj[key] instanceof db.Table)
- delete obj[key];
- }
- });
- }
- function lowerVersionFirst(a, b) {
- return a._cfg.version - b._cfg.version;
- }
- function runUpgraders(db, oldVersion, idbUpgradeTrans, reject) {
- var globalSchema = db._dbSchema;
- var trans = db._createTransaction('readwrite', db._storeNames, globalSchema);
- trans.create(idbUpgradeTrans);
- trans._completion.catch(reject);
- var rejectTransaction = trans._reject.bind(trans);
- var transless = PSD.transless || PSD;
- newScope(function () {
- PSD.trans = trans;
- PSD.transless = transless;
- if (oldVersion === 0) {
- keys(globalSchema).forEach(function (tableName) {
- createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes);
- });
- generateMiddlewareStacks(db, idbUpgradeTrans);
- DexiePromise.follow(function () { return db.on.populate.fire(trans); }).catch(rejectTransaction);
- }
- else
- updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans).catch(rejectTransaction);
- });
- }
- function updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans) {
- var queue = [];
- var versions = db._versions;
- var globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans);
- var anyContentUpgraderHasRun = false;
- var versToRun = versions.filter(function (v) { return v._cfg.version >= oldVersion; });
- versToRun.forEach(function (version) {
- queue.push(function () {
- var oldSchema = globalSchema;
- var newSchema = version._cfg.dbschema;
- adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans);
- adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans);
- globalSchema = db._dbSchema = newSchema;
- var diff = getSchemaDiff(oldSchema, newSchema);
- diff.add.forEach(function (tuple) {
- createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes);
- });
- diff.change.forEach(function (change) {
- if (change.recreate) {
- throw new exceptions.Upgrade("Not yet support for changing primary key");
- }
- else {
- var store_1 = idbUpgradeTrans.objectStore(change.name);
- change.add.forEach(function (idx) { return addIndex(store_1, idx); });
- change.change.forEach(function (idx) {
- store_1.deleteIndex(idx.name);
- addIndex(store_1, idx);
- });
- change.del.forEach(function (idxName) { return store_1.deleteIndex(idxName); });
- }
- });
- var contentUpgrade = version._cfg.contentUpgrade;
- if (contentUpgrade && version._cfg.version > oldVersion) {
- generateMiddlewareStacks(db, idbUpgradeTrans);
- anyContentUpgraderHasRun = true;
- var upgradeSchema_1 = shallowClone(newSchema);
- diff.del.forEach(function (table) {
- upgradeSchema_1[table] = oldSchema[table];
- });
- removeTablesApi(db, [db.Transaction.prototype]);
- setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema_1), upgradeSchema_1);
- trans.schema = upgradeSchema_1;
- var contentUpgradeIsAsync_1 = isAsyncFunction(contentUpgrade);
- if (contentUpgradeIsAsync_1) {
- incrementExpectedAwaits();
- }
- var returnValue_1;
- var promiseFollowed = DexiePromise.follow(function () {
- returnValue_1 = contentUpgrade(trans);
- if (returnValue_1) {
- if (contentUpgradeIsAsync_1) {
- var decrementor = decrementExpectedAwaits.bind(null, null);
- returnValue_1.then(decrementor, decrementor);
- }
- }
- });
- return (returnValue_1 && typeof returnValue_1.then === 'function' ?
- DexiePromise.resolve(returnValue_1) : promiseFollowed.then(function () { return returnValue_1; }));
- }
- });
- queue.push(function (idbtrans) {
- if (!anyContentUpgraderHasRun || !hasIEDeleteObjectStoreBug) {
- var newSchema = version._cfg.dbschema;
- deleteRemovedTables(newSchema, idbtrans);
- }
- removeTablesApi(db, [db.Transaction.prototype]);
- setApiOnPlace(db, [db.Transaction.prototype], db._storeNames, db._dbSchema);
- trans.schema = db._dbSchema;
- });
- });
- function runQueue() {
- return queue.length ? DexiePromise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) :
- DexiePromise.resolve();
- }
- return runQueue().then(function () {
- createMissingTables(globalSchema, idbUpgradeTrans);
- });
- }
- function getSchemaDiff(oldSchema, newSchema) {
- var diff = {
- del: [],
- add: [],
- change: []
- };
- var table;
- for (table in oldSchema) {
- if (!newSchema[table])
- diff.del.push(table);
- }
- for (table in newSchema) {
- var oldDef = oldSchema[table], newDef = newSchema[table];
- if (!oldDef) {
- diff.add.push([table, newDef]);
- }
- else {
- var change = {
- name: table,
- def: newDef,
- recreate: false,
- del: [],
- add: [],
- change: []
- };
- if (oldDef.primKey.src !== newDef.primKey.src &&
- !isIEOrEdge
- ) {
- change.recreate = true;
- diff.change.push(change);
- }
- else {
- var oldIndexes = oldDef.idxByName;
- var newIndexes = newDef.idxByName;
- var idxName = void 0;
- for (idxName in oldIndexes) {
- if (!newIndexes[idxName])
- change.del.push(idxName);
- }
- for (idxName in newIndexes) {
- var oldIdx = oldIndexes[idxName], newIdx = newIndexes[idxName];
- if (!oldIdx)
- change.add.push(newIdx);
- else if (oldIdx.src !== newIdx.src)
- change.change.push(newIdx);
- }
- if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) {
- diff.change.push(change);
- }
- }
- }
- }
- return diff;
- }
- function createTable(idbtrans, tableName, primKey, indexes) {
- var store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ?
- { keyPath: primKey.keyPath, autoIncrement: primKey.auto } :
- { autoIncrement: primKey.auto });
- indexes.forEach(function (idx) { return addIndex(store, idx); });
- return store;
- }
- function createMissingTables(newSchema, idbtrans) {
- keys(newSchema).forEach(function (tableName) {
- if (!idbtrans.db.objectStoreNames.contains(tableName)) {
- createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes);
- }
- });
- }
- function deleteRemovedTables(newSchema, idbtrans) {
- for (var i = 0; i < idbtrans.db.objectStoreNames.length; ++i) {
- var storeName = idbtrans.db.objectStoreNames[i];
- if (newSchema[storeName] == null) {
- idbtrans.db.deleteObjectStore(storeName);
- }
- }
- }
- function addIndex(store, idx) {
- store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi });
- }
- function buildGlobalSchema(db, idbdb, tmpTrans) {
- var globalSchema = {};
- var dbStoreNames = slice(idbdb.objectStoreNames, 0);
- dbStoreNames.forEach(function (storeName) {
- var store = tmpTrans.objectStore(storeName);
- var keyPath = store.keyPath;
- var primKey = createIndexSpec(nameFromKeyPath(keyPath), keyPath || "", false, false, !!store.autoIncrement, keyPath && typeof keyPath !== "string", true);
- var indexes = [];
- for (var j = 0; j < store.indexNames.length; ++j) {
- var idbindex = store.index(store.indexNames[j]);
- keyPath = idbindex.keyPath;
- var index = createIndexSpec(idbindex.name, keyPath, !!idbindex.unique, !!idbindex.multiEntry, false, keyPath && typeof keyPath !== "string", false);
- indexes.push(index);
- }
- globalSchema[storeName] = createTableSchema(storeName, primKey, indexes);
- });
- return globalSchema;
- }
- function readGlobalSchema(db, idbdb, tmpTrans) {
- db.verno = idbdb.version / 10;
- var globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans);
- db._storeNames = slice(idbdb.objectStoreNames, 0);
- setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema);
- }
- function adjustToExistingIndexNames(db, schema, idbtrans) {
- var storeNames = idbtrans.db.objectStoreNames;
- for (var i = 0; i < storeNames.length; ++i) {
- var storeName = storeNames[i];
- var store = idbtrans.objectStore(storeName);
- db._hasGetAll = 'getAll' in store;
- for (var j = 0; j < store.indexNames.length; ++j) {
- var indexName = store.indexNames[j];
- var keyPath = store.index(indexName).keyPath;
- var dexieName = typeof keyPath === 'string' ? keyPath : "[" + slice(keyPath).join('+') + "]";
- if (schema[storeName]) {
- var indexSpec = schema[storeName].idxByName[dexieName];
- if (indexSpec) {
- indexSpec.name = indexName;
- delete schema[storeName].idxByName[dexieName];
- schema[storeName].idxByName[indexName] = indexSpec;
- }
- }
- }
- }
- if (typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&
- !/(Chrome\/|Edge\/)/.test(navigator.userAgent) &&
- _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope &&
- [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) {
- db._hasGetAll = false;
- }
- }
- function parseIndexSyntax(primKeyAndIndexes) {
- return primKeyAndIndexes.split(',').map(function (index, indexNum) {
- index = index.trim();
- var name = index.replace(/([&*]|\+\+)/g, "");
- var keyPath = /^\[/.test(name) ? name.match(/^\[(.*)\]$/)[1].split('+') : name;
- return createIndexSpec(name, keyPath || null, /\&/.test(index), /\*/.test(index), /\+\+/.test(index), isArray(keyPath), indexNum === 0);
- });
- }
- var Version = (function () {
- function Version() {
- }
- Version.prototype._parseStoresSpec = function (stores, outSchema) {
- keys(stores).forEach(function (tableName) {
- if (stores[tableName] !== null) {
- var indexes = parseIndexSyntax(stores[tableName]);
- var primKey = indexes.shift();
- if (primKey.multi)
- throw new exceptions.Schema("Primary key cannot be multi-valued");
- indexes.forEach(function (idx) {
- if (idx.auto)
- throw new exceptions.Schema("Only primary key can be marked as autoIncrement (++)");
- if (!idx.keyPath)
- throw new exceptions.Schema("Index must have a name and cannot be an empty string");
- });
- outSchema[tableName] = createTableSchema(tableName, primKey, indexes);
- }
- });
- };
- Version.prototype.stores = function (stores) {
- var db = this.db;
- this._cfg.storesSource = this._cfg.storesSource ?
- extend(this._cfg.storesSource, stores) :
- stores;
- var versions = db._versions;
- var storesSpec = {};
- var dbschema = {};
- versions.forEach(function (version) {
- extend(storesSpec, version._cfg.storesSource);
- dbschema = (version._cfg.dbschema = {});
- version._parseStoresSpec(storesSpec, dbschema);
- });
- db._dbSchema = dbschema;
- removeTablesApi(db, [db._allTables, db, db.Transaction.prototype]);
- setApiOnPlace(db, [db._allTables, db, db.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema);
- db._storeNames = keys(dbschema);
- return this;
- };
- Version.prototype.upgrade = function (upgradeFunction) {
- this._cfg.contentUpgrade = upgradeFunction;
- return this;
- };
- return Version;
- }());
- function createVersionConstructor(db) {
- return makeClassConstructor(Version.prototype, function Version$$1(versionNumber) {
- this.db = db;
- this._cfg = {
- version: versionNumber,
- storesSource: null,
- dbschema: {},
- tables: {},
- contentUpgrade: null
- };
- });
- }
- var databaseEnumerator;
- function DatabaseEnumerator(indexedDB) {
- var hasDatabasesNative = indexedDB && typeof indexedDB.databases === 'function';
- var dbNamesTable;
- if (!hasDatabasesNative) {
- var db = new Dexie(DBNAMES_DB, { addons: [] });
- db.version(1).stores({ dbnames: 'name' });
- dbNamesTable = db.table('dbnames');
- }
- return {
- getDatabaseNames: function () {
- return hasDatabasesNative
- ?
- DexiePromise.resolve(indexedDB.databases()).then(function (infos) { return infos
- .map(function (info) { return info.name; })
- .filter(function (name) { return name !== DBNAMES_DB; }); })
- :
- dbNamesTable.toCollection().primaryKeys();
- },
- add: function (name) {
- return !hasDatabasesNative && name !== DBNAMES_DB && dbNamesTable.put({ name: name }).catch(nop);
- },
- remove: function (name) {
- return !hasDatabasesNative && name !== DBNAMES_DB && dbNamesTable.delete(name).catch(nop);
- }
- };
- }
- function initDatabaseEnumerator(indexedDB) {
- try {
- databaseEnumerator = DatabaseEnumerator(indexedDB);
- }
- catch (e) { }
- }
- function vip(fn) {
- return newScope(function () {
- PSD.letThrough = true;
- return fn();
- });
- }
- function dexieOpen(db) {
- var state = db._state;
- var indexedDB = db._deps.indexedDB;
- if (state.isBeingOpened || db.idbdb)
- return state.dbReadyPromise.then(function () { return state.dbOpenError ?
- rejection(state.dbOpenError) :
- db; });
- debug && (state.openCanceller._stackHolder = getErrorWithStack());
- state.isBeingOpened = true;
- state.dbOpenError = null;
- state.openComplete = false;
- var resolveDbReady = state.dbReadyResolve,
- upgradeTransaction = null;
- return DexiePromise.race([state.openCanceller, new DexiePromise(function (resolve, reject) {
- if (!indexedDB)
- throw new exceptions.MissingAPI("indexedDB API not found. If using IE10+, make sure to run your code on a server URL " +
- "(not locally). If using old Safari versions, make sure to include indexedDB polyfill.");
- var dbName = db.name;
- var req = state.autoSchema ?
- indexedDB.open(dbName) :
- indexedDB.open(dbName, Math.round(db.verno * 10));
- if (!req)
- throw new exceptions.MissingAPI("IndexedDB API not available");
- req.onerror = eventRejectHandler(reject);
- req.onblocked = wrap(db._fireOnBlocked);
- req.onupgradeneeded = wrap(function (e) {
- upgradeTransaction = req.transaction;
- if (state.autoSchema && !db._options.allowEmptyDB) {
- req.onerror = preventDefault;
- upgradeTransaction.abort();
- req.result.close();
- var delreq = indexedDB.deleteDatabase(dbName);
- delreq.onsuccess = delreq.onerror = wrap(function () {
- reject(new exceptions.NoSuchDatabase("Database " + dbName + " doesnt exist"));
- });
- }
- else {
- upgradeTransaction.onerror = eventRejectHandler(reject);
- var oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion;
- db.idbdb = req.result;
- runUpgraders(db, oldVer / 10, upgradeTransaction, reject);
- }
- }, reject);
- req.onsuccess = wrap(function () {
- upgradeTransaction = null;
- var idbdb = db.idbdb = req.result;
- var objectStoreNames = slice(idbdb.objectStoreNames);
- if (objectStoreNames.length > 0)
- try {
- var tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly');
- if (state.autoSchema)
- readGlobalSchema(db, idbdb, tmpTrans);
- else
- adjustToExistingIndexNames(db, db._dbSchema, tmpTrans);
- generateMiddlewareStacks(db, tmpTrans);
- }
- catch (e) {
- }
- connections.push(db);
- idbdb.onversionchange = wrap(function (ev) {
- state.vcFired = true;
- db.on("versionchange").fire(ev);
- });
- databaseEnumerator.add(dbName);
- resolve();
- }, reject);
- })]).then(function () {
- state.onReadyBeingFired = [];
- return DexiePromise.resolve(vip(db.on.ready.fire)).then(function fireRemainders() {
- if (state.onReadyBeingFired.length > 0) {
- var remainders = state.onReadyBeingFired.reduce(promisableChain, nop);
- state.onReadyBeingFired = [];
- return DexiePromise.resolve(vip(remainders)).then(fireRemainders);
- }
- });
- }).finally(function () {
- state.onReadyBeingFired = null;
- }).then(function () {
- state.isBeingOpened = false;
- return db;
- }).catch(function (err) {
- try {
- upgradeTransaction && upgradeTransaction.abort();
- }
- catch (e) { }
- state.isBeingOpened = false;
- db.close();
- state.dbOpenError = err;
- return rejection(state.dbOpenError);
- }).finally(function () {
- state.openComplete = true;
- resolveDbReady();
- });
- }
- function awaitIterator(iterator) {
- var callNext = function (result) { return iterator.next(result); }, doThrow = function (error) { return iterator.throw(error); }, onSuccess = step(callNext), onError = step(doThrow);
- function step(getNext) {
- return function (val) {
- var next = getNext(val), value = next.value;
- return next.done ? value :
- (!value || typeof value.then !== 'function' ?
- isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) :
- value.then(onSuccess, onError));
- };
- }
- return step(callNext)();
- }
- function extractTransactionArgs(mode, _tableArgs_, scopeFunc) {
- var i = arguments.length;
- if (i < 2)
- throw new exceptions.InvalidArgument("Too few arguments");
- var args = new Array(i - 1);
- while (--i)
- args[i - 1] = arguments[i];
- scopeFunc = args.pop();
- var tables = flatten(args);
- return [mode, tables, scopeFunc];
- }
- function enterTransactionScope(db, mode, storeNames, parentTransaction, scopeFunc) {
- return DexiePromise.resolve().then(function () {
- var transless = PSD.transless || PSD;
- var trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction);
- var zoneProps = {
- trans: trans,
- transless: transless
- };
- if (parentTransaction) {
- trans.idbtrans = parentTransaction.idbtrans;
- }
- else {
- trans.create();
- }
- var scopeFuncIsAsync = isAsyncFunction(scopeFunc);
- if (scopeFuncIsAsync) {
- incrementExpectedAwaits();
- }
- var returnValue;
- var promiseFollowed = DexiePromise.follow(function () {
- returnValue = scopeFunc.call(trans, trans);
- if (returnValue) {
- if (scopeFuncIsAsync) {
- var decrementor = decrementExpectedAwaits.bind(null, null);
- returnValue.then(decrementor, decrementor);
- }
- else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') {
- returnValue = awaitIterator(returnValue);
- }
- }
- }, zoneProps);
- return (returnValue && typeof returnValue.then === 'function' ?
- DexiePromise.resolve(returnValue).then(function (x) { return trans.active ?
- x
- : rejection(new exceptions.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn")); })
- : promiseFollowed.then(function () { return returnValue; })).then(function (x) {
- if (parentTransaction)
- trans._resolve();
- return trans._completion.then(function () { return x; });
- }).catch(function (e) {
- trans._reject(e);
- return rejection(e);
- });
- });
- }
- function pad(a, value, count) {
- var result = isArray(a) ? a.slice() : [a];
- for (var i = 0; i < count; ++i)
- result.push(value);
- return result;
- }
- function createVirtualIndexMiddleware(down) {
- return __assign(__assign({}, down), { table: function (tableName) {
- var table = down.table(tableName);
- var schema = table.schema;
- var indexLookup = {};
- var allVirtualIndexes = [];
- function addVirtualIndexes(keyPath, keyTail, lowLevelIndex) {
- var keyPathAlias = getKeyPathAlias(keyPath);
- var indexList = (indexLookup[keyPathAlias] = indexLookup[keyPathAlias] || []);
- var keyLength = keyPath == null ? 0 : typeof keyPath === 'string' ? 1 : keyPath.length;
- var isVirtual = keyTail > 0;
- var virtualIndex = __assign(__assign({}, lowLevelIndex), { isVirtual: isVirtual, isPrimaryKey: !isVirtual && lowLevelIndex.isPrimaryKey, keyTail: keyTail,
- keyLength: keyLength, extractKey: getKeyExtractor(keyPath), unique: !isVirtual && lowLevelIndex.unique });
- indexList.push(virtualIndex);
- if (!virtualIndex.isPrimaryKey) {
- allVirtualIndexes.push(virtualIndex);
- }
- if (keyLength > 1) {
- var virtualKeyPath = keyLength === 2 ?
- keyPath[0] :
- keyPath.slice(0, keyLength - 1);
- addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex);
- }
- indexList.sort(function (a, b) { return a.keyTail - b.keyTail; });
- return virtualIndex;
- }
- var primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey);
- indexLookup[":id"] = [primaryKey];
- for (var _i = 0, _a = schema.indexes; _i < _a.length; _i++) {
- var index = _a[_i];
- addVirtualIndexes(index.keyPath, 0, index);
- }
- function findBestIndex(keyPath) {
- var result = indexLookup[getKeyPathAlias(keyPath)];
- return result && result[0];
- }
- function translateRange(range, keyTail) {
- return {
- type: range.type === 1 ?
- 2 :
- range.type,
- lower: pad(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail),
- lowerOpen: true,
- upper: pad(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail),
- upperOpen: true
- };
- }
- function translateRequest(req) {
- var index = req.query.index;
- return index.isVirtual ? __assign(__assign({}, req), { query: {
- index: index,
- range: translateRange(req.query.range, index.keyTail)
- } }) : req;
- }
- var result = __assign(__assign({}, table), { schema: __assign(__assign({}, schema), { primaryKey: primaryKey, indexes: allVirtualIndexes, getIndexByKeyPath: findBestIndex }), count: function (req) {
- return table.count(translateRequest(req));
- },
- query: function (req) {
- return table.query(translateRequest(req));
- },
- openCursor: function (req) {
- var _a = req.query.index, keyTail = _a.keyTail, isVirtual = _a.isVirtual, keyLength = _a.keyLength;
- if (!isVirtual)
- return table.openCursor(req);
- function createVirtualCursor(cursor) {
- function _continue(key) {
- key != null ?
- cursor.continue(pad(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) :
- req.unique ?
- cursor.continue(pad(cursor.key, req.reverse ? down.MIN_KEY : down.MAX_KEY, keyTail)) :
- cursor.continue();
- }
- var virtualCursor = Object.create(cursor, {
- continue: { value: _continue },
- continuePrimaryKey: {
- value: function (key, primaryKey) {
- cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey);
- }
- },
- key: {
- get: function () {
- var key = cursor.key;
- return keyLength === 1 ?
- key[0] :
- key.slice(0, keyLength);
- }
- },
- value: {
- get: function () {
- return cursor.value;
- }
- }
- });
- return virtualCursor;
- }
- return table.openCursor(translateRequest(req))
- .then(function (cursor) { return cursor && createVirtualCursor(cursor); });
- } });
- return result;
- } });
- }
- var virtualIndexMiddleware = {
- stack: "dbcore",
- name: "VirtualIndexMiddleware",
- level: 1,
- create: createVirtualIndexMiddleware
- };
- var hooksMiddleware = {
- stack: "dbcore",
- name: "HooksMiddleware",
- level: 2,
- create: function (downCore) { return (__assign(__assign({}, downCore), { table: function (tableName) {
- var downTable = downCore.table(tableName);
- var primaryKey = downTable.schema.primaryKey;
- var tableMiddleware = __assign(__assign({}, downTable), { mutate: function (req) {
- var dxTrans = PSD.trans;
- var _a = dxTrans.table(tableName).hook, deleting = _a.deleting, creating = _a.creating, updating = _a.updating;
- switch (req.type) {
- case 'add':
- if (creating.fire === nop)
- break;
- return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true);
- case 'put':
- if (creating.fire === nop && updating.fire === nop)
- break;
- return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true);
- case 'delete':
- if (deleting.fire === nop)
- break;
- return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true);
- case 'deleteRange':
- if (deleting.fire === nop)
- break;
- return dxTrans._promise('readwrite', function () { return deleteRange(req); }, true);
- }
- return downTable.mutate(req);
- function addPutOrDelete(req) {
- var dxTrans = PSD.trans;
- var keys$$1 = req.keys || getEffectiveKeys(primaryKey, req);
- if (!keys$$1)
- throw new Error("Keys missing");
- req = req.type === 'add' || req.type === 'put' ? __assign(__assign({}, req), { keys: keys$$1, wantResults: true }) :
- __assign({}, req);
- if (req.type !== 'delete')
- req.values = __spreadArrays(req.values);
- if (req.keys)
- req.keys = __spreadArrays(req.keys);
- return getExistingValues(downTable, req, keys$$1).then(function (existingValues) {
- var contexts = keys$$1.map(function (key, i) {
- var existingValue = existingValues[i];
- var ctx = { onerror: null, onsuccess: null };
- if (req.type === 'delete') {
- deleting.fire.call(ctx, key, existingValue, dxTrans);
- }
- else if (req.type === 'add' || existingValue === undefined) {
- var generatedPrimaryKey = creating.fire.call(ctx, key, req.values[i], dxTrans);
- if (key == null && generatedPrimaryKey != null) {
- key = generatedPrimaryKey;
- req.keys[i] = key;
- if (!primaryKey.outbound) {
- setByKeyPath(req.values[i], primaryKey.keyPath, key);
- }
- }
- }
- else {
- var objectDiff = getObjectDiff(existingValue, req.values[i]);
- var additionalChanges_1 = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans);
- if (additionalChanges_1) {
- var requestedValue_1 = req.values[i];
- Object.keys(additionalChanges_1).forEach(function (keyPath) {
- setByKeyPath(requestedValue_1, keyPath, additionalChanges_1[keyPath]);
- });
- }
- }
- return ctx;
- });
- return downTable.mutate(req).then(function (_a) {
- var failures = _a.failures, results = _a.results, numFailures = _a.numFailures, lastResult = _a.lastResult;
- for (var i = 0; i < keys$$1.length; ++i) {
- var primKey = results ? results[i] : keys$$1[i];
- var ctx = contexts[i];
- if (primKey == null) {
- ctx.onerror && ctx.onerror(failures[i]);
- }
- else {
- ctx.onsuccess && ctx.onsuccess(req.type === 'put' && existingValues[i] ?
- req.values[i] :
- primKey
- );
- }
- }
- return { failures: failures, results: results, numFailures: numFailures, lastResult: lastResult };
- }).catch(function (error) {
- contexts.forEach(function (ctx) { return ctx.onerror && ctx.onerror(error); });
- return Promise.reject(error);
- });
- });
- }
- function deleteRange(req) {
- return deleteNextChunk(req.trans, req.range, 10000);
- }
- function deleteNextChunk(trans, range, limit) {
- return downTable.query({ trans: trans, values: false, query: { index: primaryKey, range: range }, limit: limit })
- .then(function (_a) {
- var result = _a.result;
- return addPutOrDelete({ type: 'delete', keys: result, trans: trans }).then(function (res) {
- if (res.numFailures > 0)
- return Promise.reject(res.failures[0]);
- if (result.length < limit) {
- return { failures: [], numFailures: 0, lastResult: undefined };
- }
- else {
- return deleteNextChunk(trans, __assign(__assign({}, range), { lower: result[result.length - 1], lowerOpen: true }), limit);
- }
- });
- });
- }
- } });
- return tableMiddleware;
- } })); }
- };
- var Dexie = (function () {
- function Dexie(name, options) {
- var _this = this;
- this._middlewares = {};
- this.verno = 0;
- var deps = Dexie.dependencies;
- this._options = options = __assign({
- addons: Dexie.addons, autoOpen: true,
- indexedDB: deps.indexedDB, IDBKeyRange: deps.IDBKeyRange }, options);
- this._deps = {
- indexedDB: options.indexedDB,
- IDBKeyRange: options.IDBKeyRange
- };
- var addons = options.addons;
- this._dbSchema = {};
- this._versions = [];
- this._storeNames = [];
- this._allTables = {};
- this.idbdb = null;
- var state = {
- dbOpenError: null,
- isBeingOpened: false,
- onReadyBeingFired: null,
- openComplete: false,
- dbReadyResolve: nop,
- dbReadyPromise: null,
- cancelOpen: nop,
- openCanceller: null,
- autoSchema: true
- };
- state.dbReadyPromise = new DexiePromise(function (resolve) {
- state.dbReadyResolve = resolve;
- });
- state.openCanceller = new DexiePromise(function (_, reject) {
- state.cancelOpen = reject;
- });
- this._state = state;
- this.name = name;
- this.on = Events(this, "populate", "blocked", "versionchange", { ready: [promisableChain, nop] });
- this.on.ready.subscribe = override(this.on.ready.subscribe, function (subscribe) {
- return function (subscriber, bSticky) {
- Dexie.vip(function () {
- var state = _this._state;
- if (state.openComplete) {
- if (!state.dbOpenError)
- DexiePromise.resolve().then(subscriber);
- if (bSticky)
- subscribe(subscriber);
- }
- else if (state.onReadyBeingFired) {
- state.onReadyBeingFired.push(subscriber);
- if (bSticky)
- subscribe(subscriber);
- }
- else {
- subscribe(subscriber);
- var db_1 = _this;
- if (!bSticky)
- subscribe(function unsubscribe() {
- db_1.on.ready.unsubscribe(subscriber);
- db_1.on.ready.unsubscribe(unsubscribe);
- });
- }
- });
- };
- });
- this.Collection = createCollectionConstructor(this);
- this.Table = createTableConstructor(this);
- this.Transaction = createTransactionConstructor(this);
- this.Version = createVersionConstructor(this);
- this.WhereClause = createWhereClauseConstructor(this);
- this.on("versionchange", function (ev) {
- if (ev.newVersion > 0)
- console.warn("Another connection wants to upgrade database '" + _this.name + "'. Closing db now to resume the upgrade.");
- else
- console.warn("Another connection wants to delete database '" + _this.name + "'. Closing db now to resume the delete request.");
- _this.close();
- });
- this.on("blocked", function (ev) {
- if (!ev.newVersion || ev.newVersion < ev.oldVersion)
- console.warn("Dexie.delete('" + _this.name + "') was blocked");
- else
- console.warn("Upgrade '" + _this.name + "' blocked by other connection holding version " + ev.oldVersion / 10);
- });
- this._maxKey = getMaxKey(options.IDBKeyRange);
- this._createTransaction = function (mode, storeNames, dbschema, parentTransaction) { return new _this.Transaction(mode, storeNames, dbschema, parentTransaction); };
- this._fireOnBlocked = function (ev) {
- _this.on("blocked").fire(ev);
- connections
- .filter(function (c) { return c.name === _this.name && c !== _this && !c._state.vcFired; })
- .map(function (c) { return c.on("versionchange").fire(ev); });
- };
- this.use(virtualIndexMiddleware);
- this.use(hooksMiddleware);
- addons.forEach(function (addon) { return addon(_this); });
- }
- Dexie.prototype.version = function (versionNumber) {
- if (isNaN(versionNumber) || versionNumber < 0.1)
- throw new exceptions.Type("Given version is not a positive number");
- versionNumber = Math.round(versionNumber * 10) / 10;
- if (this.idbdb || this._state.isBeingOpened)
- throw new exceptions.Schema("Cannot add version when database is open");
- this.verno = Math.max(this.verno, versionNumber);
- var versions = this._versions;
- var versionInstance = versions.filter(function (v) { return v._cfg.version === versionNumber; })[0];
- if (versionInstance)
- return versionInstance;
- versionInstance = new this.Version(versionNumber);
- versions.push(versionInstance);
- versions.sort(lowerVersionFirst);
- versionInstance.stores({});
- this._state.autoSchema = false;
- return versionInstance;
- };
- Dexie.prototype._whenReady = function (fn) {
- var _this = this;
- return this._state.openComplete || PSD.letThrough ? fn() : new DexiePromise(function (resolve, reject) {
- if (!_this._state.isBeingOpened) {
- if (!_this._options.autoOpen) {
- reject(new exceptions.DatabaseClosed());
- return;
- }
- _this.open().catch(nop);
- }
- _this._state.dbReadyPromise.then(resolve, reject);
- }).then(fn);
- };
- Dexie.prototype.use = function (_a) {
- var stack = _a.stack, create = _a.create, level = _a.level, name = _a.name;
- if (name)
- this.unuse({ stack: stack, name: name });
- var middlewares = this._middlewares[stack] || (this._middlewares[stack] = []);
- middlewares.push({ stack: stack, create: create, level: level == null ? 10 : level, name: name });
- middlewares.sort(function (a, b) { return a.level - b.level; });
- return this;
- };
- Dexie.prototype.unuse = function (_a) {
- var stack = _a.stack, name = _a.name, create = _a.create;
- if (stack && this._middlewares[stack]) {
- this._middlewares[stack] = this._middlewares[stack].filter(function (mw) {
- return create ? mw.create !== create :
- name ? mw.name !== name :
- false;
- });
- }
- return this;
- };
- Dexie.prototype.open = function () {
- return dexieOpen(this);
- };
- Dexie.prototype.close = function () {
- var idx = connections.indexOf(this), state = this._state;
- if (idx >= 0)
- connections.splice(idx, 1);
- if (this.idbdb) {
- try {
- this.idbdb.close();
- }
- catch (e) { }
- this.idbdb = null;
- }
- this._options.autoOpen = false;
- state.dbOpenError = new exceptions.DatabaseClosed();
- if (state.isBeingOpened)
- state.cancelOpen(state.dbOpenError);
- state.dbReadyPromise = new DexiePromise(function (resolve) {
- state.dbReadyResolve = resolve;
- });
- state.openCanceller = new DexiePromise(function (_, reject) {
- state.cancelOpen = reject;
- });
- };
- Dexie.prototype.delete = function () {
- var _this = this;
- var hasArguments = arguments.length > 0;
- var state = this._state;
- return new DexiePromise(function (resolve, reject) {
- var doDelete = function () {
- _this.close();
- var req = _this._deps.indexedDB.deleteDatabase(_this.name);
- req.onsuccess = wrap(function () {
- databaseEnumerator.remove(_this.name);
- resolve();
- });
- req.onerror = eventRejectHandler(reject);
- req.onblocked = _this._fireOnBlocked;
- };
- if (hasArguments)
- throw new exceptions.InvalidArgument("Arguments not allowed in db.delete()");
- if (state.isBeingOpened) {
- state.dbReadyPromise.then(doDelete);
- }
- else {
- doDelete();
- }
- });
- };
- Dexie.prototype.backendDB = function () {
- return this.idbdb;
- };
- Dexie.prototype.isOpen = function () {
- return this.idbdb !== null;
- };
- Dexie.prototype.hasBeenClosed = function () {
- var dbOpenError = this._state.dbOpenError;
- return dbOpenError && (dbOpenError.name === 'DatabaseClosed');
- };
- Dexie.prototype.hasFailed = function () {
- return this._state.dbOpenError !== null;
- };
- Dexie.prototype.dynamicallyOpened = function () {
- return this._state.autoSchema;
- };
- Object.defineProperty(Dexie.prototype, "tables", {
- get: function () {
- var _this = this;
- return keys(this._allTables).map(function (name) { return _this._allTables[name]; });
- },
- enumerable: true,
- configurable: true
- });
- Dexie.prototype.transaction = function () {
- var args = extractTransactionArgs.apply(this, arguments);
- return this._transaction.apply(this, args);
- };
- Dexie.prototype._transaction = function (mode, tables, scopeFunc) {
- var _this = this;
- var parentTransaction = PSD.trans;
- if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1)
- parentTransaction = null;
- var onlyIfCompatible = mode.indexOf('?') !== -1;
- mode = mode.replace('!', '').replace('?', '');
- var idbMode, storeNames;
- try {
- storeNames = tables.map(function (table) {
- var storeName = table instanceof _this.Table ? table.name : table;
- if (typeof storeName !== 'string')
- throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed");
- return storeName;
- });
- if (mode == "r" || mode === READONLY)
- idbMode = READONLY;
- else if (mode == "rw" || mode == READWRITE)
- idbMode = READWRITE;
- else
- throw new exceptions.InvalidArgument("Invalid transaction mode: " + mode);
- if (parentTransaction) {
- if (parentTransaction.mode === READONLY && idbMode === READWRITE) {
- if (onlyIfCompatible) {
- parentTransaction = null;
- }
- else
- throw new exceptions.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY");
- }
- if (parentTransaction) {
- storeNames.forEach(function (storeName) {
- if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) {
- if (onlyIfCompatible) {
- parentTransaction = null;
- }
- else
- throw new exceptions.SubTransaction("Table " + storeName +
- " not included in parent transaction.");
- }
- });
- }
- if (onlyIfCompatible && parentTransaction && !parentTransaction.active) {
- parentTransaction = null;
- }
- }
- }
- catch (e) {
- return parentTransaction ?
- parentTransaction._promise(null, function (_, reject) { reject(e); }) :
- rejection(e);
- }
- var enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc);
- return (parentTransaction ?
- parentTransaction._promise(idbMode, enterTransaction, "lock") :
- PSD.trans ?
- usePSD(PSD.transless, function () { return _this._whenReady(enterTransaction); }) :
- this._whenReady(enterTransaction));
- };
- Dexie.prototype.table = function (tableName) {
- if (!hasOwn(this._allTables, tableName)) {
- throw new exceptions.InvalidTable("Table " + tableName + " does not exist");
- }
- return this._allTables[tableName];
- };
- return Dexie;
- }());
- var Dexie$1 = Dexie;
- props(Dexie$1, __assign(__assign({}, fullNameExceptions), {
- delete: function (databaseName) {
- var db = new Dexie$1(databaseName);
- return db.delete();
- },
- exists: function (name) {
- return new Dexie$1(name, { addons: [] }).open().then(function (db) {
- db.close();
- return true;
- }).catch('NoSuchDatabaseError', function () { return false; });
- },
- getDatabaseNames: function (cb) {
- return databaseEnumerator ?
- databaseEnumerator.getDatabaseNames().then(cb) :
- DexiePromise.resolve([]);
- },
- defineClass: function () {
- function Class(content) {
- extend(this, content);
- }
- return Class;
- },
- ignoreTransaction: function (scopeFunc) {
- return PSD.trans ?
- usePSD(PSD.transless, scopeFunc) :
- scopeFunc();
- },
- vip: vip, async: function (generatorFn) {
- return function () {
- try {
- var rv = awaitIterator(generatorFn.apply(this, arguments));
- if (!rv || typeof rv.then !== 'function')
- return DexiePromise.resolve(rv);
- return rv;
- }
- catch (e) {
- return rejection(e);
- }
- };
- }, spawn: function (generatorFn, args, thiz) {
- try {
- var rv = awaitIterator(generatorFn.apply(thiz, args || []));
- if (!rv || typeof rv.then !== 'function')
- return DexiePromise.resolve(rv);
- return rv;
- }
- catch (e) {
- return rejection(e);
- }
- },
- currentTransaction: {
- get: function () { return PSD.trans || null; }
- }, waitFor: function (promiseOrFunction, optionalTimeout) {
- var promise = DexiePromise.resolve(typeof promiseOrFunction === 'function' ?
- Dexie$1.ignoreTransaction(promiseOrFunction) :
- promiseOrFunction)
- .timeout(optionalTimeout || 60000);
- return PSD.trans ?
- PSD.trans.waitFor(promise) :
- promise;
- },
- Promise: DexiePromise,
- debug: {
- get: function () { return debug; },
- set: function (value) {
- setDebug(value, value === 'dexie' ? function () { return true; } : dexieStackFrameFilter);
- }
- },
- derive: derive, extend: extend, props: props, override: override,
- Events: Events,
- getByKeyPath: getByKeyPath, setByKeyPath: setByKeyPath, delByKeyPath: delByKeyPath, shallowClone: shallowClone, deepClone: deepClone, getObjectDiff: getObjectDiff, asap: asap,
- minKey: minKey,
- addons: [],
- connections: connections,
- errnames: errnames,
- dependencies: (function () {
- try {
- return {
- indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB,
- IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange
- };
- }
- catch (e) {
- return { indexedDB: null, IDBKeyRange: null };
- }
- })(),
- semVer: DEXIE_VERSION, version: DEXIE_VERSION.split('.')
- .map(function (n) { return parseInt(n); })
- .reduce(function (p, c, i) { return p + (c / Math.pow(10, i * 2)); }),
- default: Dexie$1,
- Dexie: Dexie$1 }));
- Dexie$1.maxKey = getMaxKey(Dexie$1.dependencies.IDBKeyRange);
- initDatabaseEnumerator(Dexie.dependencies.indexedDB);
- DexiePromise.rejectionMapper = mapError;
- setDebug(debug, dexieStackFrameFilter);
- /* harmony default export */ __webpack_exports__["default"] = (Dexie);
- //# sourceMappingURL=dexie.mjs.map
- /***/ }),
- /***/ "UGaM":
- /*!**************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/publishBehavior.js ***!
- \**************************************************************************/
- /*! exports provided: publishBehavior */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishBehavior", function() { return publishBehavior; });
- /* harmony import */ var _BehaviorSubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../BehaviorSubject */ "2Vo4");
- /* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./multicast */ "oB13");
- function publishBehavior(value) {
- return (source) => Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(new _BehaviorSubject__WEBPACK_IMPORTED_MODULE_0__["BehaviorSubject"](value))(source);
- }
- //# sourceMappingURL=publishBehavior.js.map
- /***/ }),
- /***/ "UHp3":
- /*!*********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/windowTime.js ***!
- \*********************************************************************/
- /*! exports provided: windowTime */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowTime", function() { return windowTime; });
- /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subject */ "XNiG");
- /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../scheduler/async */ "D0XW");
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/isNumeric */ "Y7HM");
- /* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/isScheduler */ "z+Ro");
- function windowTime(windowTimeSpan) {
- let scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
- let windowCreationInterval = null;
- let maxWindowSize = Number.POSITIVE_INFINITY;
- if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_4__["isScheduler"])(arguments[3])) {
- scheduler = arguments[3];
- }
- if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_4__["isScheduler"])(arguments[2])) {
- scheduler = arguments[2];
- }
- else if (Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_3__["isNumeric"])(arguments[2])) {
- maxWindowSize = arguments[2];
- }
- if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_4__["isScheduler"])(arguments[1])) {
- scheduler = arguments[1];
- }
- else if (Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_3__["isNumeric"])(arguments[1])) {
- windowCreationInterval = arguments[1];
- }
- return function windowTimeOperatorFunction(source) {
- return source.lift(new WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler));
- };
- }
- class WindowTimeOperator {
- constructor(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
- this.windowTimeSpan = windowTimeSpan;
- this.windowCreationInterval = windowCreationInterval;
- this.maxWindowSize = maxWindowSize;
- this.scheduler = scheduler;
- }
- call(subscriber, source) {
- return source.subscribe(new WindowTimeSubscriber(subscriber, this.windowTimeSpan, this.windowCreationInterval, this.maxWindowSize, this.scheduler));
- }
- }
- class CountedSubject extends _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"] {
- constructor() {
- super(...arguments);
- this._numberOfNextedValues = 0;
- }
- next(value) {
- this._numberOfNextedValues++;
- super.next(value);
- }
- get numberOfNextedValues() {
- return this._numberOfNextedValues;
- }
- }
- class WindowTimeSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_2__["Subscriber"] {
- constructor(destination, windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
- super(destination);
- this.destination = destination;
- this.windowTimeSpan = windowTimeSpan;
- this.windowCreationInterval = windowCreationInterval;
- this.maxWindowSize = maxWindowSize;
- this.scheduler = scheduler;
- this.windows = [];
- const window = this.openWindow();
- if (windowCreationInterval !== null && windowCreationInterval >= 0) {
- const closeState = { subscriber: this, window, context: null };
- const creationState = { windowTimeSpan, windowCreationInterval, subscriber: this, scheduler };
- this.add(scheduler.schedule(dispatchWindowClose, windowTimeSpan, closeState));
- this.add(scheduler.schedule(dispatchWindowCreation, windowCreationInterval, creationState));
- }
- else {
- const timeSpanOnlyState = { subscriber: this, window, windowTimeSpan };
- this.add(scheduler.schedule(dispatchWindowTimeSpanOnly, windowTimeSpan, timeSpanOnlyState));
- }
- }
- _next(value) {
- const windows = this.windows;
- const len = windows.length;
- for (let i = 0; i < len; i++) {
- const window = windows[i];
- if (!window.closed) {
- window.next(value);
- if (window.numberOfNextedValues >= this.maxWindowSize) {
- this.closeWindow(window);
- }
- }
- }
- }
- _error(err) {
- const windows = this.windows;
- while (windows.length > 0) {
- windows.shift().error(err);
- }
- this.destination.error(err);
- }
- _complete() {
- const windows = this.windows;
- while (windows.length > 0) {
- const window = windows.shift();
- if (!window.closed) {
- window.complete();
- }
- }
- this.destination.complete();
- }
- openWindow() {
- const window = new CountedSubject();
- this.windows.push(window);
- const destination = this.destination;
- destination.next(window);
- return window;
- }
- closeWindow(window) {
- window.complete();
- const windows = this.windows;
- windows.splice(windows.indexOf(window), 1);
- }
- }
- function dispatchWindowTimeSpanOnly(state) {
- const { subscriber, windowTimeSpan, window } = state;
- if (window) {
- subscriber.closeWindow(window);
- }
- state.window = subscriber.openWindow();
- this.schedule(state, windowTimeSpan);
- }
- function dispatchWindowCreation(state) {
- const { windowTimeSpan, subscriber, scheduler, windowCreationInterval } = state;
- const window = subscriber.openWindow();
- const action = this;
- let context = { action, subscription: null };
- const timeSpanState = { subscriber, window, context };
- context.subscription = scheduler.schedule(dispatchWindowClose, windowTimeSpan, timeSpanState);
- action.add(context.subscription);
- action.schedule(state, windowCreationInterval);
- }
- function dispatchWindowClose(state) {
- const { subscriber, window, context } = state;
- if (context && context.action && context.subscription) {
- context.action.remove(context.subscription);
- }
- subscriber.closeWindow(window);
- }
- //# sourceMappingURL=windowTime.js.map
- /***/ }),
- /***/ "UXbc":
- /*!*********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/mergeMapTo.js ***!
- \*********************************************************************/
- /*! exports provided: mergeMapTo */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeMapTo", function() { return mergeMapTo; });
- /* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mergeMap */ "5+tZ");
- function mergeMapTo(innerObservable, resultSelector, concurrent = Number.POSITIVE_INFINITY) {
- if (typeof resultSelector === 'function') {
- return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(() => innerObservable, resultSelector, concurrent);
- }
- if (typeof resultSelector === 'number') {
- concurrent = resultSelector;
- }
- return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(() => innerObservable, concurrent);
- }
- //# sourceMappingURL=mergeMapTo.js.map
- /***/ }),
- /***/ "UXun":
- /*!**********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/shareReplay.js ***!
- \**********************************************************************/
- /*! exports provided: shareReplay */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "shareReplay", function() { return shareReplay; });
- /* harmony import */ var _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../ReplaySubject */ "jtHE");
- function shareReplay(configOrBufferSize, windowTime, scheduler) {
- let config;
- if (configOrBufferSize && typeof configOrBufferSize === 'object') {
- config = configOrBufferSize;
- }
- else {
- config = {
- bufferSize: configOrBufferSize,
- windowTime,
- refCount: false,
- scheduler
- };
- }
- return (source) => source.lift(shareReplayOperator(config));
- }
- function shareReplayOperator({ bufferSize = Number.POSITIVE_INFINITY, windowTime = Number.POSITIVE_INFINITY, refCount: useRefCount, scheduler }) {
- let subject;
- let refCount = 0;
- let subscription;
- let hasError = false;
- let isComplete = false;
- return function shareReplayOperation(source) {
- refCount++;
- if (!subject || hasError) {
- hasError = false;
- subject = new _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__["ReplaySubject"](bufferSize, windowTime, scheduler);
- subscription = source.subscribe({
- next(value) { subject.next(value); },
- error(err) {
- hasError = true;
- subject.error(err);
- },
- complete() {
- isComplete = true;
- subscription = undefined;
- subject.complete();
- },
- });
- }
- const innerSub = subject.subscribe(this);
- this.add(() => {
- refCount--;
- innerSub.unsubscribe();
- if (subscription && !isComplete && useRefCount && refCount === 0) {
- subscription.unsubscribe();
- subscription = undefined;
- subject = undefined;
- }
- });
- };
- }
- //# sourceMappingURL=shareReplay.js.map
- /***/ }),
- /***/ "VRyK":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/merge.js ***!
- \*****************************************************************/
- /*! exports provided: merge */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return merge; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/isScheduler */ "z+Ro");
- /* harmony import */ var _operators_mergeAll__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../operators/mergeAll */ "bHdf");
- /* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fromArray */ "yCtX");
- function merge(...observables) {
- let concurrent = Number.POSITIVE_INFINITY;
- let scheduler = null;
- let last = observables[observables.length - 1];
- if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__["isScheduler"])(last)) {
- scheduler = observables.pop();
- if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {
- concurrent = observables.pop();
- }
- }
- else if (typeof last === 'number') {
- concurrent = observables.pop();
- }
- if (scheduler === null && observables.length === 1 && observables[0] instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]) {
- return observables[0];
- }
- return Object(_operators_mergeAll__WEBPACK_IMPORTED_MODULE_2__["mergeAll"])(concurrent)(Object(_fromArray__WEBPACK_IMPORTED_MODULE_3__["fromArray"])(observables, scheduler));
- }
- //# sourceMappingURL=merge.js.map
- /***/ }),
- /***/ "Vpsf":
- /*!*******************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduler/AnimationFrameAction.js ***!
- \*******************************************************************************/
- /*! exports provided: AnimationFrameAction */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationFrameAction", function() { return AnimationFrameAction; });
- /* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsyncAction */ "3N8a");
- class AnimationFrameAction extends _AsyncAction__WEBPACK_IMPORTED_MODULE_0__["AsyncAction"] {
- constructor(scheduler, work) {
- super(scheduler, work);
- this.scheduler = scheduler;
- this.work = work;
- }
- requestAsyncId(scheduler, id, delay = 0) {
- if (delay !== null && delay > 0) {
- return super.requestAsyncId(scheduler, id, delay);
- }
- scheduler.actions.push(this);
- return scheduler.scheduled || (scheduler.scheduled = requestAnimationFrame(() => scheduler.flush(null)));
- }
- recycleAsyncId(scheduler, id, delay = 0) {
- if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
- return super.recycleAsyncId(scheduler, id, delay);
- }
- if (scheduler.actions.length === 0) {
- cancelAnimationFrame(id);
- scheduler.scheduled = undefined;
- }
- return undefined;
- }
- }
- //# sourceMappingURL=AnimationFrameAction.js.map
- /***/ }),
- /***/ "WMd4":
- /*!*************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/Notification.js ***!
- \*************************************************************/
- /*! exports provided: NotificationKind, Notification */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NotificationKind", function() { return NotificationKind; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Notification", function() { return Notification; });
- /* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./observable/empty */ "EY2u");
- /* harmony import */ var _observable_of__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./observable/of */ "LRne");
- /* harmony import */ var _observable_throwError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./observable/throwError */ "z6cu");
- var NotificationKind;
- (function (NotificationKind) {
- NotificationKind["NEXT"] = "N";
- NotificationKind["ERROR"] = "E";
- NotificationKind["COMPLETE"] = "C";
- })(NotificationKind || (NotificationKind = {}));
- class Notification {
- constructor(kind, value, error) {
- this.kind = kind;
- this.value = value;
- this.error = error;
- this.hasValue = kind === 'N';
- }
- observe(observer) {
- switch (this.kind) {
- case 'N':
- return observer.next && observer.next(this.value);
- case 'E':
- return observer.error && observer.error(this.error);
- case 'C':
- return observer.complete && observer.complete();
- }
- }
- do(next, error, complete) {
- const kind = this.kind;
- switch (kind) {
- case 'N':
- return next && next(this.value);
- case 'E':
- return error && error(this.error);
- case 'C':
- return complete && complete();
- }
- }
- accept(nextOrObserver, error, complete) {
- if (nextOrObserver && typeof nextOrObserver.next === 'function') {
- return this.observe(nextOrObserver);
- }
- else {
- return this.do(nextOrObserver, error, complete);
- }
- }
- toObservable() {
- const kind = this.kind;
- switch (kind) {
- case 'N':
- return Object(_observable_of__WEBPACK_IMPORTED_MODULE_1__["of"])(this.value);
- case 'E':
- return Object(_observable_throwError__WEBPACK_IMPORTED_MODULE_2__["throwError"])(this.error);
- case 'C':
- return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_0__["empty"])();
- }
- throw new Error('unexpected notification kind value');
- }
- static createNext(value) {
- if (typeof value !== 'undefined') {
- return new Notification('N', value);
- }
- return Notification.undefinedValueNotification;
- }
- static createError(err) {
- return new Notification('E', undefined, err);
- }
- static createComplete() {
- return Notification.completeNotification;
- }
- }
- Notification.completeNotification = new Notification('C');
- Notification.undefinedValueNotification = new Notification('N', undefined);
- //# sourceMappingURL=Notification.js.map
- /***/ }),
- /***/ "WPMC":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/generate.js ***!
- \********************************************************************/
- /*! exports provided: generate */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "generate", function() { return generate; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/identity */ "SpAZ");
- /* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/isScheduler */ "z+Ro");
- function generate(initialStateOrOptions, condition, iterate, resultSelectorOrObservable, scheduler) {
- let resultSelector;
- let initialState;
- if (arguments.length == 1) {
- const options = initialStateOrOptions;
- initialState = options.initialState;
- condition = options.condition;
- iterate = options.iterate;
- resultSelector = options.resultSelector || _util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"];
- scheduler = options.scheduler;
- }
- else if (resultSelectorOrObservable === undefined || Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_2__["isScheduler"])(resultSelectorOrObservable)) {
- initialState = initialStateOrOptions;
- resultSelector = _util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"];
- scheduler = resultSelectorOrObservable;
- }
- else {
- initialState = initialStateOrOptions;
- resultSelector = resultSelectorOrObservable;
- }
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- let state = initialState;
- if (scheduler) {
- return scheduler.schedule(dispatch, 0, {
- subscriber,
- iterate,
- condition,
- resultSelector,
- state
- });
- }
- do {
- if (condition) {
- let conditionResult;
- try {
- conditionResult = condition(state);
- }
- catch (err) {
- subscriber.error(err);
- return undefined;
- }
- if (!conditionResult) {
- subscriber.complete();
- break;
- }
- }
- let value;
- try {
- value = resultSelector(state);
- }
- catch (err) {
- subscriber.error(err);
- return undefined;
- }
- subscriber.next(value);
- if (subscriber.closed) {
- break;
- }
- try {
- state = iterate(state);
- }
- catch (err) {
- subscriber.error(err);
- return undefined;
- }
- } while (true);
- return undefined;
- });
- }
- function dispatch(state) {
- const { subscriber, condition } = state;
- if (subscriber.closed) {
- return undefined;
- }
- if (state.needIterate) {
- try {
- state.state = state.iterate(state.state);
- }
- catch (err) {
- subscriber.error(err);
- return undefined;
- }
- }
- else {
- state.needIterate = true;
- }
- if (condition) {
- let conditionResult;
- try {
- conditionResult = condition(state.state);
- }
- catch (err) {
- subscriber.error(err);
- return undefined;
- }
- if (!conditionResult) {
- subscriber.complete();
- return undefined;
- }
- if (subscriber.closed) {
- return undefined;
- }
- }
- let value;
- try {
- value = state.resultSelector(state.state);
- }
- catch (err) {
- subscriber.error(err);
- return undefined;
- }
- if (subscriber.closed) {
- return undefined;
- }
- subscriber.next(value);
- if (subscriber.closed) {
- return undefined;
- }
- return this.schedule(state);
- }
- //# sourceMappingURL=generate.js.map
- /***/ }),
- /***/ "WyKG":
- /*!******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/toSubscriber.js ***!
- \******************************************************************/
- /*! exports provided: toSubscriber */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toSubscriber", function() { return toSubscriber; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../symbol/rxSubscriber */ "2QA8");
- /* harmony import */ var _Observer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Observer */ "gRHU");
- function toSubscriber(nextOrObserver, error, complete) {
- if (nextOrObserver) {
- if (nextOrObserver instanceof _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]) {
- return nextOrObserver;
- }
- if (nextOrObserver[_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__["rxSubscriber"]]) {
- return nextOrObserver[_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__["rxSubscriber"]]();
- }
- }
- if (!nextOrObserver && !error && !complete) {
- return new _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"](_Observer__WEBPACK_IMPORTED_MODULE_2__["empty"]);
- }
- return new _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"](nextOrObserver, error, complete);
- }
- //# sourceMappingURL=toSubscriber.js.map
- /***/ }),
- /***/ "XDbj":
- /*!***********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/throwIfEmpty.js ***!
- \***********************************************************************/
- /*! exports provided: throwIfEmpty */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "throwIfEmpty", function() { return throwIfEmpty; });
- /* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/EmptyError */ "sVev");
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function throwIfEmpty(errorFactory = defaultErrorFactory) {
- return (source) => {
- return source.lift(new ThrowIfEmptyOperator(errorFactory));
- };
- }
- class ThrowIfEmptyOperator {
- constructor(errorFactory) {
- this.errorFactory = errorFactory;
- }
- call(subscriber, source) {
- return source.subscribe(new ThrowIfEmptySubscriber(subscriber, this.errorFactory));
- }
- }
- class ThrowIfEmptySubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"] {
- constructor(destination, errorFactory) {
- super(destination);
- this.errorFactory = errorFactory;
- this.hasValue = false;
- }
- _next(value) {
- this.hasValue = true;
- this.destination.next(value);
- }
- _complete() {
- if (!this.hasValue) {
- let err;
- try {
- err = this.errorFactory();
- }
- catch (e) {
- err = e;
- }
- this.destination.error(err);
- }
- else {
- return this.destination.complete();
- }
- }
- }
- function defaultErrorFactory() {
- return new _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__["EmptyError"]();
- }
- //# sourceMappingURL=throwIfEmpty.js.map
- /***/ }),
- /***/ "XNiG":
- /*!********************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/Subject.js ***!
- \********************************************************/
- /*! exports provided: SubjectSubscriber, Subject, AnonymousSubject */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubjectSubscriber", function() { return SubjectSubscriber; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Subject", function() { return Subject; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnonymousSubject", function() { return AnonymousSubject; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Observable */ "HDdC");
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Subscriber */ "7o/Q");
- /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Subscription */ "quSY");
- /* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util/ObjectUnsubscribedError */ "9ppp");
- /* harmony import */ var _SubjectSubscription__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./SubjectSubscription */ "Ylt2");
- /* harmony import */ var _internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../internal/symbol/rxSubscriber */ "2QA8");
- class SubjectSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"] {
- constructor(destination) {
- super(destination);
- this.destination = destination;
- }
- }
- class Subject extends _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"] {
- constructor() {
- super();
- this.observers = [];
- this.closed = false;
- this.isStopped = false;
- this.hasError = false;
- this.thrownError = null;
- }
- [_internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_5__["rxSubscriber"]]() {
- return new SubjectSubscriber(this);
- }
- lift(operator) {
- const subject = new AnonymousSubject(this, this);
- subject.operator = operator;
- return subject;
- }
- next(value) {
- if (this.closed) {
- throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__["ObjectUnsubscribedError"]();
- }
- if (!this.isStopped) {
- const { observers } = this;
- const len = observers.length;
- const copy = observers.slice();
- for (let i = 0; i < len; i++) {
- copy[i].next(value);
- }
- }
- }
- error(err) {
- if (this.closed) {
- throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__["ObjectUnsubscribedError"]();
- }
- this.hasError = true;
- this.thrownError = err;
- this.isStopped = true;
- const { observers } = this;
- const len = observers.length;
- const copy = observers.slice();
- for (let i = 0; i < len; i++) {
- copy[i].error(err);
- }
- this.observers.length = 0;
- }
- complete() {
- if (this.closed) {
- throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__["ObjectUnsubscribedError"]();
- }
- this.isStopped = true;
- const { observers } = this;
- const len = observers.length;
- const copy = observers.slice();
- for (let i = 0; i < len; i++) {
- copy[i].complete();
- }
- this.observers.length = 0;
- }
- unsubscribe() {
- this.isStopped = true;
- this.closed = true;
- this.observers = null;
- }
- _trySubscribe(subscriber) {
- if (this.closed) {
- throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__["ObjectUnsubscribedError"]();
- }
- else {
- return super._trySubscribe(subscriber);
- }
- }
- _subscribe(subscriber) {
- if (this.closed) {
- throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__["ObjectUnsubscribedError"]();
- }
- else if (this.hasError) {
- subscriber.error(this.thrownError);
- return _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;
- }
- else if (this.isStopped) {
- subscriber.complete();
- return _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;
- }
- else {
- this.observers.push(subscriber);
- return new _SubjectSubscription__WEBPACK_IMPORTED_MODULE_4__["SubjectSubscription"](this, subscriber);
- }
- }
- asObservable() {
- const observable = new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]();
- observable.source = this;
- return observable;
- }
- }
- Subject.create = (destination, source) => {
- return new AnonymousSubject(destination, source);
- };
- class AnonymousSubject extends Subject {
- constructor(destination, source) {
- super();
- this.destination = destination;
- this.source = source;
- }
- next(value) {
- const { destination } = this;
- if (destination && destination.next) {
- destination.next(value);
- }
- }
- error(err) {
- const { destination } = this;
- if (destination && destination.error) {
- this.destination.error(err);
- }
- }
- complete() {
- const { destination } = this;
- if (destination && destination.complete) {
- this.destination.complete();
- }
- }
- _subscribe(subscriber) {
- const { source } = this;
- if (source) {
- return this.source.subscribe(subscriber);
- }
- else {
- return _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;
- }
- }
- }
- //# sourceMappingURL=Subject.js.map
- /***/ }),
- /***/ "XoHu":
- /*!**************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/isObject.js ***!
- \**************************************************************/
- /*! exports provided: isObject */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isObject", function() { return isObject; });
- function isObject(x) {
- return x !== null && typeof x === 'object';
- }
- //# sourceMappingURL=isObject.js.map
- /***/ }),
- /***/ "XqQ8":
- /*!*********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/exhaustMap.js ***!
- \*********************************************************************/
- /*! exports provided: exhaustMap */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "exhaustMap", function() { return exhaustMap; });
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../InnerSubscriber */ "51Dv");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- /* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./map */ "lJxs");
- /* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../observable/from */ "Cfvw");
- function exhaustMap(project, resultSelector) {
- if (resultSelector) {
- return (source) => source.pipe(exhaustMap((a, i) => Object(_observable_from__WEBPACK_IMPORTED_MODULE_4__["from"])(project(a, i)).pipe(Object(_map__WEBPACK_IMPORTED_MODULE_3__["map"])((b, ii) => resultSelector(a, b, i, ii)))));
- }
- return (source) => source.lift(new ExhaustMapOperator(project));
- }
- class ExhaustMapOperator {
- constructor(project) {
- this.project = project;
- }
- call(subscriber, source) {
- return source.subscribe(new ExhaustMapSubscriber(subscriber, this.project));
- }
- }
- class ExhaustMapSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__["OuterSubscriber"] {
- constructor(destination, project) {
- super(destination);
- this.project = project;
- this.hasSubscription = false;
- this.hasCompleted = false;
- this.index = 0;
- }
- _next(value) {
- if (!this.hasSubscription) {
- this.tryNext(value);
- }
- }
- tryNext(value) {
- let result;
- const index = this.index++;
- try {
- result = this.project(value, index);
- }
- catch (err) {
- this.destination.error(err);
- return;
- }
- this.hasSubscription = true;
- this._innerSub(result, value, index);
- }
- _innerSub(result, value, index) {
- const innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_1__["InnerSubscriber"](this, value, index);
- const destination = this.destination;
- destination.add(innerSubscriber);
- const innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, result, undefined, undefined, innerSubscriber);
- if (innerSubscription !== innerSubscriber) {
- destination.add(innerSubscription);
- }
- }
- _complete() {
- this.hasCompleted = true;
- if (!this.hasSubscription) {
- this.destination.complete();
- }
- this.unsubscribe();
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.destination.next(innerValue);
- }
- notifyError(err) {
- this.destination.error(err);
- }
- notifyComplete(innerSub) {
- const destination = this.destination;
- destination.remove(innerSub);
- this.hasSubscription = false;
- if (this.hasCompleted) {
- this.destination.complete();
- }
- }
- }
- //# sourceMappingURL=exhaustMap.js.map
- /***/ }),
- /***/ "Y/cZ":
- /*!**********************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/Scheduler.js ***!
- \**********************************************************/
- /*! exports provided: Scheduler */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Scheduler", function() { return Scheduler; });
- class Scheduler {
- constructor(SchedulerAction, now = Scheduler.now) {
- this.SchedulerAction = SchedulerAction;
- this.now = now;
- }
- schedule(work, delay = 0, state) {
- return new this.SchedulerAction(this, work).schedule(state, delay);
- }
- }
- Scheduler.now = () => Date.now();
- //# sourceMappingURL=Scheduler.js.map
- /***/ }),
- /***/ "Y6u4":
- /*!******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/TimeoutError.js ***!
- \******************************************************************/
- /*! exports provided: TimeoutError */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TimeoutError", function() { return TimeoutError; });
- const TimeoutErrorImpl = (() => {
- function TimeoutErrorImpl() {
- Error.call(this);
- this.message = 'Timeout has occurred';
- this.name = 'TimeoutError';
- return this;
- }
- TimeoutErrorImpl.prototype = Object.create(Error.prototype);
- return TimeoutErrorImpl;
- })();
- const TimeoutError = TimeoutErrorImpl;
- //# sourceMappingURL=TimeoutError.js.map
- /***/ }),
- /***/ "Y6wi":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/switchAll.js ***!
- \********************************************************************/
- /*! exports provided: switchAll */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchAll", function() { return switchAll; });
- /* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./switchMap */ "eIep");
- /* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/identity */ "SpAZ");
- function switchAll() {
- return Object(_switchMap__WEBPACK_IMPORTED_MODULE_0__["switchMap"])(_util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"]);
- }
- //# sourceMappingURL=switchAll.js.map
- /***/ }),
- /***/ "Y7HM":
- /*!***************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/isNumeric.js ***!
- \***************************************************************/
- /*! exports provided: isNumeric */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isNumeric", function() { return isNumeric; });
- /* harmony import */ var _isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isArray */ "DH7j");
- function isNumeric(val) {
- return !Object(_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(val) && (val - parseFloat(val) + 1) >= 0;
- }
- //# sourceMappingURL=isNumeric.js.map
- /***/ }),
- /***/ "Ylt2":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/SubjectSubscription.js ***!
- \********************************************************************/
- /*! exports provided: SubjectSubscription */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubjectSubscription", function() { return SubjectSubscription; });
- /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Subscription */ "quSY");
- class SubjectSubscription extends _Subscription__WEBPACK_IMPORTED_MODULE_0__["Subscription"] {
- constructor(subject, subscriber) {
- super();
- this.subject = subject;
- this.subscriber = subscriber;
- this.closed = false;
- }
- unsubscribe() {
- if (this.closed) {
- return;
- }
- this.closed = true;
- const subject = this.subject;
- const observers = subject.observers;
- this.subject = null;
- if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {
- return;
- }
- const subscriberIndex = observers.indexOf(this.subscriber);
- if (subscriberIndex !== -1) {
- observers.splice(subscriberIndex, 1);
- }
- }
- }
- //# sourceMappingURL=SubjectSubscription.js.map
- /***/ }),
- /***/ "YuR2":
- /*!**********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduler/QueueAction.js ***!
- \**********************************************************************/
- /*! exports provided: QueueAction */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QueueAction", function() { return QueueAction; });
- /* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsyncAction */ "3N8a");
- class QueueAction extends _AsyncAction__WEBPACK_IMPORTED_MODULE_0__["AsyncAction"] {
- constructor(scheduler, work) {
- super(scheduler, work);
- this.scheduler = scheduler;
- this.work = work;
- }
- schedule(state, delay = 0) {
- if (delay > 0) {
- return super.schedule(state, delay);
- }
- this.delay = delay;
- this.state = state;
- this.scheduler.flush(this);
- return this;
- }
- execute(state, delay) {
- return (delay > 0 || this.closed) ?
- super.execute(state, delay) :
- this._execute(state, delay);
- }
- requestAsyncId(scheduler, id, delay = 0) {
- if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
- return super.requestAsyncId(scheduler, id, delay);
- }
- return scheduler.flush(this);
- }
- }
- //# sourceMappingURL=QueueAction.js.map
- /***/ }),
- /***/ "ZOsW":
- /*!****************************************************************************************!*\
- !*** ./node_modules/@ng-select/ng-select/__ivy_ngcc__/fesm2015/ng-select-ng-select.js ***!
- \****************************************************************************************/
- /*! exports provided: NgSelectComponent, NgSelectConfig, NgSelectModule, SELECTION_MODEL_FACTORY, ɵb, ɵc, ɵd, ɵe, ɵf, ɵg, ɵh, ɵi, ɵj, ɵk, ɵl, ɵm, ɵn, ɵo, ɵp, ɵq, ɵr, ɵs */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgSelectComponent", function() { return NgSelectComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgSelectConfig", function() { return NgSelectConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgSelectModule", function() { return NgSelectModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SELECTION_MODEL_FACTORY", function() { return SELECTION_MODEL_FACTORY; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵb", function() { return DefaultSelectionModelFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵc", function() { return DefaultSelectionModel; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵd", function() { return NgDropdownPanelService; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵe", function() { return NgItemLabelDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵf", function() { return NgOptionTemplateDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵg", function() { return NgOptgroupTemplateDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵh", function() { return NgLabelTemplateDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵi", function() { return NgMultiLabelTemplateDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵj", function() { return NgHeaderTemplateDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵk", function() { return NgFooterTemplateDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵl", function() { return NgNotFoundTemplateDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵm", function() { return NgTypeToSearchTemplateDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵn", function() { return NgLoadingTextTemplateDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵo", function() { return NgTagTemplateDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵp", function() { return NgLoadingSpinnerTemplateDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵq", function() { return NgDropdownPanelComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵr", function() { return NgOptionComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵs", function() { return ConsoleService; });
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/forms */ "3Pt+");
- /* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "kU1M");
- /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs */ "qCKp");
- /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/common */ "ofXK");
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/value-utils.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /** @type {?} */
- const _c0 = ["content"];
- const _c1 = ["scroll"];
- const _c2 = ["padding"];
- const _c3 = function (a0) { return { searchTerm: a0 }; };
- function NgDropdownPanelComponent_div_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 6);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainer"](1, 7);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r0.headerTemplate)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](2, _c3, ctx_r0.filterValue));
- } }
- function NgDropdownPanelComponent_div_8_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 8);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainer"](1, 7);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r4.footerTemplate)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](2, _c3, ctx_r4.filterValue));
- } }
- const _c4 = ["*"];
- const _c5 = ["searchInput"];
- function NgSelectComponent_ng_container_4_div_1_ng_template_1_Template(rf, ctx) { if (rf & 1) {
- const _r13 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 15);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgSelectComponent_ng_container_4_div_1_ng_template_1_Template_span_click_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r13); const item_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit; const ctx_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2); return ctx_r11.unselect(item_r7); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1, "\u00D7");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "span", 16);
- } if (rf & 2) {
- const item_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;
- const ctx_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngItemLabel", item_r7.label)("escape", ctx_r9.escapeHTML);
- } }
- function NgSelectComponent_ng_container_4_div_1_ng_template_3_Template(rf, ctx) { }
- const _c6 = function (a0, a1, a2) { return { item: a0, clear: a1, label: a2 }; };
- function NgSelectComponent_ng_container_4_div_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 12);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgSelectComponent_ng_container_4_div_1_ng_template_1_Template, 3, 2, "ng-template", null, 13, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgSelectComponent_ng_container_4_div_1_ng_template_3_Template, 0, 0, "ng-template", 14);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const item_r7 = ctx.$implicit;
- const _r8 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);
- const ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("ng-value-disabled", item_r7.disabled);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r6.labelTemplate || _r8)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction3"](4, _c6, item_r7.value, ctx_r6.clearItem, item_r7.label));
- } }
- function NgSelectComponent_ng_container_4_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerStart"](0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgSelectComponent_ng_container_4_div_1_Template, 4, 8, "div", 11);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerEnd"]();
- } if (rf & 2) {
- const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx_r0.selectedItems)("ngForTrackBy", ctx_r0.trackByOption);
- } }
- function NgSelectComponent_5_ng_template_0_Template(rf, ctx) { }
- const _c7 = function (a0, a1) { return { items: a0, clear: a1 }; };
- function NgSelectComponent_5_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgSelectComponent_5_ng_template_0_Template, 0, 0, "ng-template", 14);
- } if (rf & 2) {
- const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r1.multiLabelTemplate)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction2"](2, _c7, ctx_r1.selectedValues, ctx_r1.clearItem));
- } }
- function NgSelectComponent_ng_container_9_ng_template_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 19);
- } }
- function NgSelectComponent_ng_container_9_ng_template_3_Template(rf, ctx) { }
- function NgSelectComponent_ng_container_9_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerStart"](0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgSelectComponent_ng_container_9_ng_template_1_Template, 1, 0, "ng-template", null, 17, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgSelectComponent_ng_container_9_ng_template_3_Template, 0, 0, "ng-template", 18);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerEnd"]();
- } if (rf & 2) {
- const _r16 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);
- const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r3.loadingSpinnerTemplate || _r16);
- } }
- function NgSelectComponent_span_10_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 20);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "span", 21);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2, "\u00D7");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpropertyInterpolate"]("title", ctx_r4.clearAllText);
- } }
- function NgSelectComponent_ng_dropdown_panel_13_div_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "span", 27);
- } if (rf & 2) {
- const item_r24 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;
- const ctx_r26 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngItemLabel", item_r24.label)("escape", ctx_r26.escapeHTML);
- } }
- function NgSelectComponent_ng_dropdown_panel_13_div_2_ng_template_3_Template(rf, ctx) { }
- const _c8 = function (a0, a1, a2, a3) { return { item: a0, item$: a1, index: a2, searchTerm: a3 }; };
- function NgSelectComponent_ng_dropdown_panel_13_div_2_Template(rf, ctx) { if (rf & 1) {
- const _r30 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 25);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgSelectComponent_ng_dropdown_panel_13_div_2_Template_div_click_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r30); const item_r24 = ctx.$implicit; const ctx_r29 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2); return ctx_r29.toggleItem(item_r24); })("mouseover", function NgSelectComponent_ng_dropdown_panel_13_div_2_Template_div_mouseover_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r30); const item_r24 = ctx.$implicit; const ctx_r31 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2); return ctx_r31.onItemHover(item_r24); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgSelectComponent_ng_dropdown_panel_13_div_2_ng_template_1_Template, 1, 2, "ng-template", null, 26, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgSelectComponent_ng_dropdown_panel_13_div_2_ng_template_3_Template, 0, 0, "ng-template", 14);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const item_r24 = ctx.$implicit;
- const _r25 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);
- const ctx_r19 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("ng-option-disabled", item_r24.disabled)("ng-option-selected", item_r24.selected)("ng-optgroup", item_r24.children)("ng-option", !item_r24.children)("ng-option-child", !!item_r24.parent)("ng-option-marked", item_r24 === ctx_r19.itemsList.markedItem);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("role", item_r24.children ? "group" : "option")("aria-selected", item_r24.selected)("id", item_r24 == null ? null : item_r24.htmlId);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", item_r24.children ? ctx_r19.optgroupTemplate || _r25 : ctx_r19.optionTemplate || _r25)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction4"](17, _c8, item_r24.value, item_r24, item_r24.index, ctx_r19.searchTerm));
- } }
- function NgSelectComponent_ng_dropdown_panel_13_div_3_ng_template_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "span", 30);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r33 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r33.addTagText);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"]("\"", ctx_r33.searchTerm, "\"");
- } }
- function NgSelectComponent_ng_dropdown_panel_13_div_3_ng_template_3_Template(rf, ctx) { }
- function NgSelectComponent_ng_dropdown_panel_13_div_3_Template(rf, ctx) { if (rf & 1) {
- const _r36 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 28);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mouseover", function NgSelectComponent_ng_dropdown_panel_13_div_3_Template_div_mouseover_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r36); const ctx_r35 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2); return ctx_r35.itemsList.unmarkItem(); })("click", function NgSelectComponent_ng_dropdown_panel_13_div_3_Template_div_click_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r36); const ctx_r37 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2); return ctx_r37.selectTag(); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgSelectComponent_ng_dropdown_panel_13_div_3_ng_template_1_Template, 4, 2, "ng-template", null, 29, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgSelectComponent_ng_dropdown_panel_13_div_3_ng_template_3_Template, 0, 0, "ng-template", 14);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const _r32 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);
- const ctx_r20 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("ng-option-marked", !ctx_r20.itemsList.markedItem);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r20.tagTemplate || _r32)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](4, _c3, ctx_r20.searchTerm));
- } }
- function NgSelectComponent_ng_dropdown_panel_13_ng_container_4_ng_template_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 32);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r39 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r39.notFoundText);
- } }
- function NgSelectComponent_ng_dropdown_panel_13_ng_container_4_ng_template_3_Template(rf, ctx) { }
- function NgSelectComponent_ng_dropdown_panel_13_ng_container_4_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerStart"](0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgSelectComponent_ng_dropdown_panel_13_ng_container_4_ng_template_1_Template, 2, 1, "ng-template", null, 31, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgSelectComponent_ng_dropdown_panel_13_ng_container_4_ng_template_3_Template, 0, 0, "ng-template", 14);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerEnd"]();
- } if (rf & 2) {
- const _r38 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);
- const ctx_r21 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r21.notFoundTemplate || _r38)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](2, _c3, ctx_r21.searchTerm));
- } }
- function NgSelectComponent_ng_dropdown_panel_13_ng_container_5_ng_template_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 32);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r42 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r42.typeToSearchText);
- } }
- function NgSelectComponent_ng_dropdown_panel_13_ng_container_5_ng_template_3_Template(rf, ctx) { }
- function NgSelectComponent_ng_dropdown_panel_13_ng_container_5_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerStart"](0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgSelectComponent_ng_dropdown_panel_13_ng_container_5_ng_template_1_Template, 2, 1, "ng-template", null, 33, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgSelectComponent_ng_dropdown_panel_13_ng_container_5_ng_template_3_Template, 0, 0, "ng-template", 18);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerEnd"]();
- } if (rf & 2) {
- const _r41 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);
- const ctx_r22 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r22.typeToSearchTemplate || _r41);
- } }
- function NgSelectComponent_ng_dropdown_panel_13_ng_container_6_ng_template_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 32);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r45 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r45.loadingText);
- } }
- function NgSelectComponent_ng_dropdown_panel_13_ng_container_6_ng_template_3_Template(rf, ctx) { }
- function NgSelectComponent_ng_dropdown_panel_13_ng_container_6_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerStart"](0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgSelectComponent_ng_dropdown_panel_13_ng_container_6_ng_template_1_Template, 2, 1, "ng-template", null, 34, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgSelectComponent_ng_dropdown_panel_13_ng_container_6_ng_template_3_Template, 0, 0, "ng-template", 14);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerEnd"]();
- } if (rf & 2) {
- const _r44 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);
- const ctx_r23 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r23.loadingTextTemplate || _r44)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](2, _c3, ctx_r23.searchTerm));
- } }
- function NgSelectComponent_ng_dropdown_panel_13_Template(rf, ctx) { if (rf & 1) {
- const _r48 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "ng-dropdown-panel", 22);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("update", function NgSelectComponent_ng_dropdown_panel_13_Template_ng_dropdown_panel_update_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r48); const ctx_r47 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r47.viewPortItems = $event; })("scroll", function NgSelectComponent_ng_dropdown_panel_13_Template_ng_dropdown_panel_scroll_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r48); const ctx_r49 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r49.scroll.emit($event); })("scrollToEnd", function NgSelectComponent_ng_dropdown_panel_13_Template_ng_dropdown_panel_scrollToEnd_0_listener($event) { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r48); const ctx_r50 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r50.scrollToEnd.emit($event); })("outsideClick", function NgSelectComponent_ng_dropdown_panel_13_Template_ng_dropdown_panel_outsideClick_0_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r48); const ctx_r51 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r51.close(); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerStart"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgSelectComponent_ng_dropdown_panel_13_div_2_Template, 4, 22, "div", 23);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgSelectComponent_ng_dropdown_panel_13_div_3_Template, 4, 6, "div", 24);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, NgSelectComponent_ng_dropdown_panel_13_ng_container_4_Template, 4, 4, "ng-container", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](5, NgSelectComponent_ng_dropdown_panel_13_ng_container_5_Template, 4, 1, "ng-container", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](6, NgSelectComponent_ng_dropdown_panel_13_ng_container_6_Template, 4, 4, "ng-container", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("ng-select-multiple", ctx_r5.multiple);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("virtualScroll", ctx_r5.virtualScroll)("bufferAmount", ctx_r5.bufferAmount)("appendTo", ctx_r5.appendTo)("position", ctx_r5.dropdownPosition)("headerTemplate", ctx_r5.headerTemplate)("footerTemplate", ctx_r5.footerTemplate)("filterValue", ctx_r5.searchTerm)("items", ctx_r5.itemsList.filteredItems)("markedItem", ctx_r5.itemsList.markedItem)("ngClass", ctx_r5.appendTo ? ctx_r5.classes : null)("id", ctx_r5.dropdownId);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx_r5.viewPortItems)("ngForTrackBy", ctx_r5.trackByOption);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r5.showAddTag);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r5.showNoItemsFound());
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r5.showTypeToSearch());
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r5.loading && ctx_r5.itemsList.filteredItems.length === 0);
- } }
- const unescapedHTMLExp = /[&<>"']/g;
- /** @type {?} */
- const hasUnescapedHTMLExp = RegExp(unescapedHTMLExp.source);
- /** @type {?} */
- const htmlEscapes = {
- '&': '&',
- '<': '<',
- '>': '>',
- '"': '"',
- '\'': '''
- };
- /**
- * @param {?} string
- * @return {?}
- */
- function escapeHTML(string) {
- return (string && hasUnescapedHTMLExp.test(string)) ?
- string.replace(unescapedHTMLExp, (/**
- * @param {?} chr
- * @return {?}
- */
- chr => htmlEscapes[chr])) :
- string;
- }
- /**
- * @param {?} value
- * @return {?}
- */
- function isDefined(value) {
- return value !== undefined && value !== null;
- }
- /**
- * @param {?} value
- * @return {?}
- */
- function isObject(value) {
- return typeof value === 'object' && isDefined(value);
- }
- /**
- * @param {?} value
- * @return {?}
- */
- function isPromise(value) {
- return value instanceof Promise;
- }
- /**
- * @param {?} value
- * @return {?}
- */
- function isFunction(value) {
- return value instanceof Function;
- }
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/ng-templates.directive.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class NgItemLabelDirective {
- /**
- * @param {?} element
- */
- constructor(element) {
- this.element = element;
- this.escape = true;
- }
- /**
- * @param {?} changes
- * @return {?}
- */
- ngOnChanges(changes) {
- this.element.nativeElement.innerHTML = this.escape ?
- escapeHTML(this.ngItemLabel) :
- this.ngItemLabel;
- }
- }
- NgItemLabelDirective.ɵfac = function NgItemLabelDirective_Factory(t) { return new (t || NgItemLabelDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- NgItemLabelDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgItemLabelDirective, selectors: [["", "ngItemLabel", ""]], inputs: { escape: "escape", ngItemLabel: "ngItemLabel" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- /** @nocollapse */
- NgItemLabelDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- NgItemLabelDirective.propDecorators = {
- ngItemLabel: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- escape: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgItemLabelDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngItemLabel]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, { escape: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ngItemLabel: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- if (false) {}
- class NgOptionTemplateDirective {
- /**
- * @param {?} template
- */
- constructor(template) {
- this.template = template;
- }
- }
- NgOptionTemplateDirective.ɵfac = function NgOptionTemplateDirective_Factory(t) { return new (t || NgOptionTemplateDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgOptionTemplateDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgOptionTemplateDirective, selectors: [["", "ng-option-tmp", ""]] });
- /** @nocollapse */
- NgOptionTemplateDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgOptionTemplateDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ng-option-tmp]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- if (false) {}
- class NgOptgroupTemplateDirective {
- /**
- * @param {?} template
- */
- constructor(template) {
- this.template = template;
- }
- }
- NgOptgroupTemplateDirective.ɵfac = function NgOptgroupTemplateDirective_Factory(t) { return new (t || NgOptgroupTemplateDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgOptgroupTemplateDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgOptgroupTemplateDirective, selectors: [["", "ng-optgroup-tmp", ""]] });
- /** @nocollapse */
- NgOptgroupTemplateDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgOptgroupTemplateDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ng-optgroup-tmp]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- if (false) {}
- class NgLabelTemplateDirective {
- /**
- * @param {?} template
- */
- constructor(template) {
- this.template = template;
- }
- }
- NgLabelTemplateDirective.ɵfac = function NgLabelTemplateDirective_Factory(t) { return new (t || NgLabelTemplateDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgLabelTemplateDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgLabelTemplateDirective, selectors: [["", "ng-label-tmp", ""]] });
- /** @nocollapse */
- NgLabelTemplateDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgLabelTemplateDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ng-label-tmp]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- if (false) {}
- class NgMultiLabelTemplateDirective {
- /**
- * @param {?} template
- */
- constructor(template) {
- this.template = template;
- }
- }
- NgMultiLabelTemplateDirective.ɵfac = function NgMultiLabelTemplateDirective_Factory(t) { return new (t || NgMultiLabelTemplateDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgMultiLabelTemplateDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgMultiLabelTemplateDirective, selectors: [["", "ng-multi-label-tmp", ""]] });
- /** @nocollapse */
- NgMultiLabelTemplateDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgMultiLabelTemplateDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ng-multi-label-tmp]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- if (false) {}
- class NgHeaderTemplateDirective {
- /**
- * @param {?} template
- */
- constructor(template) {
- this.template = template;
- }
- }
- NgHeaderTemplateDirective.ɵfac = function NgHeaderTemplateDirective_Factory(t) { return new (t || NgHeaderTemplateDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgHeaderTemplateDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgHeaderTemplateDirective, selectors: [["", "ng-header-tmp", ""]] });
- /** @nocollapse */
- NgHeaderTemplateDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgHeaderTemplateDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ng-header-tmp]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- if (false) {}
- class NgFooterTemplateDirective {
- /**
- * @param {?} template
- */
- constructor(template) {
- this.template = template;
- }
- }
- NgFooterTemplateDirective.ɵfac = function NgFooterTemplateDirective_Factory(t) { return new (t || NgFooterTemplateDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgFooterTemplateDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgFooterTemplateDirective, selectors: [["", "ng-footer-tmp", ""]] });
- /** @nocollapse */
- NgFooterTemplateDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgFooterTemplateDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ng-footer-tmp]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- if (false) {}
- class NgNotFoundTemplateDirective {
- /**
- * @param {?} template
- */
- constructor(template) {
- this.template = template;
- }
- }
- NgNotFoundTemplateDirective.ɵfac = function NgNotFoundTemplateDirective_Factory(t) { return new (t || NgNotFoundTemplateDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgNotFoundTemplateDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgNotFoundTemplateDirective, selectors: [["", "ng-notfound-tmp", ""]] });
- /** @nocollapse */
- NgNotFoundTemplateDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgNotFoundTemplateDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ng-notfound-tmp]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- if (false) {}
- class NgTypeToSearchTemplateDirective {
- /**
- * @param {?} template
- */
- constructor(template) {
- this.template = template;
- }
- }
- NgTypeToSearchTemplateDirective.ɵfac = function NgTypeToSearchTemplateDirective_Factory(t) { return new (t || NgTypeToSearchTemplateDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgTypeToSearchTemplateDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgTypeToSearchTemplateDirective, selectors: [["", "ng-typetosearch-tmp", ""]] });
- /** @nocollapse */
- NgTypeToSearchTemplateDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgTypeToSearchTemplateDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ng-typetosearch-tmp]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- if (false) {}
- class NgLoadingTextTemplateDirective {
- /**
- * @param {?} template
- */
- constructor(template) {
- this.template = template;
- }
- }
- NgLoadingTextTemplateDirective.ɵfac = function NgLoadingTextTemplateDirective_Factory(t) { return new (t || NgLoadingTextTemplateDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgLoadingTextTemplateDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgLoadingTextTemplateDirective, selectors: [["", "ng-loadingtext-tmp", ""]] });
- /** @nocollapse */
- NgLoadingTextTemplateDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgLoadingTextTemplateDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ng-loadingtext-tmp]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- if (false) {}
- class NgTagTemplateDirective {
- /**
- * @param {?} template
- */
- constructor(template) {
- this.template = template;
- }
- }
- NgTagTemplateDirective.ɵfac = function NgTagTemplateDirective_Factory(t) { return new (t || NgTagTemplateDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgTagTemplateDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgTagTemplateDirective, selectors: [["", "ng-tag-tmp", ""]] });
- /** @nocollapse */
- NgTagTemplateDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgTagTemplateDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ng-tag-tmp]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- if (false) {}
- class NgLoadingSpinnerTemplateDirective {
- /**
- * @param {?} template
- */
- constructor(template) {
- this.template = template;
- }
- }
- NgLoadingSpinnerTemplateDirective.ɵfac = function NgLoadingSpinnerTemplateDirective_Factory(t) { return new (t || NgLoadingSpinnerTemplateDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgLoadingSpinnerTemplateDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgLoadingSpinnerTemplateDirective, selectors: [["", "ng-loadingspinner-tmp", ""]] });
- /** @nocollapse */
- NgLoadingSpinnerTemplateDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgLoadingSpinnerTemplateDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ng-loadingspinner-tmp]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, null); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/console.service.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class ConsoleService {
- /**
- * @param {?} message
- * @return {?}
- */
- warn(message) {
- console.warn(message);
- }
- }
- ConsoleService.ɵfac = function ConsoleService_Factory(t) { return new (t || ConsoleService)(); };
- /** @nocollapse */ ConsoleService.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function ConsoleService_Factory() { return new ConsoleService(); }, token: ConsoleService, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ConsoleService, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], null, null); })();
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/id.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @return {?}
- */
- function newId() {
- // First character is an 'a', it's good practice to tag id to begin with a letter
- return 'axxxxxxxxxxx'.replace(/[x]/g, (/**
- * @param {?} _
- * @return {?}
- */
- function (_) {
- // tslint:disable-next-line:no-bitwise
- /** @type {?} */
- const val = Math.random() * 16 | 0;
- return val.toString(16);
- }));
- }
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/search-helper.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /** @type {?} */
- const diacritics = {
- '\u24B6': 'A',
- '\uFF21': 'A',
- '\u00C0': 'A',
- '\u00C1': 'A',
- '\u00C2': 'A',
- '\u1EA6': 'A',
- '\u1EA4': 'A',
- '\u1EAA': 'A',
- '\u1EA8': 'A',
- '\u00C3': 'A',
- '\u0100': 'A',
- '\u0102': 'A',
- '\u1EB0': 'A',
- '\u1EAE': 'A',
- '\u1EB4': 'A',
- '\u1EB2': 'A',
- '\u0226': 'A',
- '\u01E0': 'A',
- '\u00C4': 'A',
- '\u01DE': 'A',
- '\u1EA2': 'A',
- '\u00C5': 'A',
- '\u01FA': 'A',
- '\u01CD': 'A',
- '\u0200': 'A',
- '\u0202': 'A',
- '\u1EA0': 'A',
- '\u1EAC': 'A',
- '\u1EB6': 'A',
- '\u1E00': 'A',
- '\u0104': 'A',
- '\u023A': 'A',
- '\u2C6F': 'A',
- '\uA732': 'AA',
- '\u00C6': 'AE',
- '\u01FC': 'AE',
- '\u01E2': 'AE',
- '\uA734': 'AO',
- '\uA736': 'AU',
- '\uA738': 'AV',
- '\uA73A': 'AV',
- '\uA73C': 'AY',
- '\u24B7': 'B',
- '\uFF22': 'B',
- '\u1E02': 'B',
- '\u1E04': 'B',
- '\u1E06': 'B',
- '\u0243': 'B',
- '\u0182': 'B',
- '\u0181': 'B',
- '\u24B8': 'C',
- '\uFF23': 'C',
- '\u0106': 'C',
- '\u0108': 'C',
- '\u010A': 'C',
- '\u010C': 'C',
- '\u00C7': 'C',
- '\u1E08': 'C',
- '\u0187': 'C',
- '\u023B': 'C',
- '\uA73E': 'C',
- '\u24B9': 'D',
- '\uFF24': 'D',
- '\u1E0A': 'D',
- '\u010E': 'D',
- '\u1E0C': 'D',
- '\u1E10': 'D',
- '\u1E12': 'D',
- '\u1E0E': 'D',
- '\u0110': 'D',
- '\u018B': 'D',
- '\u018A': 'D',
- '\u0189': 'D',
- '\uA779': 'D',
- '\u01F1': 'DZ',
- '\u01C4': 'DZ',
- '\u01F2': 'Dz',
- '\u01C5': 'Dz',
- '\u24BA': 'E',
- '\uFF25': 'E',
- '\u00C8': 'E',
- '\u00C9': 'E',
- '\u00CA': 'E',
- '\u1EC0': 'E',
- '\u1EBE': 'E',
- '\u1EC4': 'E',
- '\u1EC2': 'E',
- '\u1EBC': 'E',
- '\u0112': 'E',
- '\u1E14': 'E',
- '\u1E16': 'E',
- '\u0114': 'E',
- '\u0116': 'E',
- '\u00CB': 'E',
- '\u1EBA': 'E',
- '\u011A': 'E',
- '\u0204': 'E',
- '\u0206': 'E',
- '\u1EB8': 'E',
- '\u1EC6': 'E',
- '\u0228': 'E',
- '\u1E1C': 'E',
- '\u0118': 'E',
- '\u1E18': 'E',
- '\u1E1A': 'E',
- '\u0190': 'E',
- '\u018E': 'E',
- '\u24BB': 'F',
- '\uFF26': 'F',
- '\u1E1E': 'F',
- '\u0191': 'F',
- '\uA77B': 'F',
- '\u24BC': 'G',
- '\uFF27': 'G',
- '\u01F4': 'G',
- '\u011C': 'G',
- '\u1E20': 'G',
- '\u011E': 'G',
- '\u0120': 'G',
- '\u01E6': 'G',
- '\u0122': 'G',
- '\u01E4': 'G',
- '\u0193': 'G',
- '\uA7A0': 'G',
- '\uA77D': 'G',
- '\uA77E': 'G',
- '\u24BD': 'H',
- '\uFF28': 'H',
- '\u0124': 'H',
- '\u1E22': 'H',
- '\u1E26': 'H',
- '\u021E': 'H',
- '\u1E24': 'H',
- '\u1E28': 'H',
- '\u1E2A': 'H',
- '\u0126': 'H',
- '\u2C67': 'H',
- '\u2C75': 'H',
- '\uA78D': 'H',
- '\u24BE': 'I',
- '\uFF29': 'I',
- '\u00CC': 'I',
- '\u00CD': 'I',
- '\u00CE': 'I',
- '\u0128': 'I',
- '\u012A': 'I',
- '\u012C': 'I',
- '\u0130': 'I',
- '\u00CF': 'I',
- '\u1E2E': 'I',
- '\u1EC8': 'I',
- '\u01CF': 'I',
- '\u0208': 'I',
- '\u020A': 'I',
- '\u1ECA': 'I',
- '\u012E': 'I',
- '\u1E2C': 'I',
- '\u0197': 'I',
- '\u24BF': 'J',
- '\uFF2A': 'J',
- '\u0134': 'J',
- '\u0248': 'J',
- '\u24C0': 'K',
- '\uFF2B': 'K',
- '\u1E30': 'K',
- '\u01E8': 'K',
- '\u1E32': 'K',
- '\u0136': 'K',
- '\u1E34': 'K',
- '\u0198': 'K',
- '\u2C69': 'K',
- '\uA740': 'K',
- '\uA742': 'K',
- '\uA744': 'K',
- '\uA7A2': 'K',
- '\u24C1': 'L',
- '\uFF2C': 'L',
- '\u013F': 'L',
- '\u0139': 'L',
- '\u013D': 'L',
- '\u1E36': 'L',
- '\u1E38': 'L',
- '\u013B': 'L',
- '\u1E3C': 'L',
- '\u1E3A': 'L',
- '\u0141': 'L',
- '\u023D': 'L',
- '\u2C62': 'L',
- '\u2C60': 'L',
- '\uA748': 'L',
- '\uA746': 'L',
- '\uA780': 'L',
- '\u01C7': 'LJ',
- '\u01C8': 'Lj',
- '\u24C2': 'M',
- '\uFF2D': 'M',
- '\u1E3E': 'M',
- '\u1E40': 'M',
- '\u1E42': 'M',
- '\u2C6E': 'M',
- '\u019C': 'M',
- '\u24C3': 'N',
- '\uFF2E': 'N',
- '\u01F8': 'N',
- '\u0143': 'N',
- '\u00D1': 'N',
- '\u1E44': 'N',
- '\u0147': 'N',
- '\u1E46': 'N',
- '\u0145': 'N',
- '\u1E4A': 'N',
- '\u1E48': 'N',
- '\u0220': 'N',
- '\u019D': 'N',
- '\uA790': 'N',
- '\uA7A4': 'N',
- '\u01CA': 'NJ',
- '\u01CB': 'Nj',
- '\u24C4': 'O',
- '\uFF2F': 'O',
- '\u00D2': 'O',
- '\u00D3': 'O',
- '\u00D4': 'O',
- '\u1ED2': 'O',
- '\u1ED0': 'O',
- '\u1ED6': 'O',
- '\u1ED4': 'O',
- '\u00D5': 'O',
- '\u1E4C': 'O',
- '\u022C': 'O',
- '\u1E4E': 'O',
- '\u014C': 'O',
- '\u1E50': 'O',
- '\u1E52': 'O',
- '\u014E': 'O',
- '\u022E': 'O',
- '\u0230': 'O',
- '\u00D6': 'O',
- '\u022A': 'O',
- '\u1ECE': 'O',
- '\u0150': 'O',
- '\u01D1': 'O',
- '\u020C': 'O',
- '\u020E': 'O',
- '\u01A0': 'O',
- '\u1EDC': 'O',
- '\u1EDA': 'O',
- '\u1EE0': 'O',
- '\u1EDE': 'O',
- '\u1EE2': 'O',
- '\u1ECC': 'O',
- '\u1ED8': 'O',
- '\u01EA': 'O',
- '\u01EC': 'O',
- '\u00D8': 'O',
- '\u01FE': 'O',
- '\u0186': 'O',
- '\u019F': 'O',
- '\uA74A': 'O',
- '\uA74C': 'O',
- '\u01A2': 'OI',
- '\uA74E': 'OO',
- '\u0222': 'OU',
- '\u24C5': 'P',
- '\uFF30': 'P',
- '\u1E54': 'P',
- '\u1E56': 'P',
- '\u01A4': 'P',
- '\u2C63': 'P',
- '\uA750': 'P',
- '\uA752': 'P',
- '\uA754': 'P',
- '\u24C6': 'Q',
- '\uFF31': 'Q',
- '\uA756': 'Q',
- '\uA758': 'Q',
- '\u024A': 'Q',
- '\u24C7': 'R',
- '\uFF32': 'R',
- '\u0154': 'R',
- '\u1E58': 'R',
- '\u0158': 'R',
- '\u0210': 'R',
- '\u0212': 'R',
- '\u1E5A': 'R',
- '\u1E5C': 'R',
- '\u0156': 'R',
- '\u1E5E': 'R',
- '\u024C': 'R',
- '\u2C64': 'R',
- '\uA75A': 'R',
- '\uA7A6': 'R',
- '\uA782': 'R',
- '\u24C8': 'S',
- '\uFF33': 'S',
- '\u1E9E': 'S',
- '\u015A': 'S',
- '\u1E64': 'S',
- '\u015C': 'S',
- '\u1E60': 'S',
- '\u0160': 'S',
- '\u1E66': 'S',
- '\u1E62': 'S',
- '\u1E68': 'S',
- '\u0218': 'S',
- '\u015E': 'S',
- '\u2C7E': 'S',
- '\uA7A8': 'S',
- '\uA784': 'S',
- '\u24C9': 'T',
- '\uFF34': 'T',
- '\u1E6A': 'T',
- '\u0164': 'T',
- '\u1E6C': 'T',
- '\u021A': 'T',
- '\u0162': 'T',
- '\u1E70': 'T',
- '\u1E6E': 'T',
- '\u0166': 'T',
- '\u01AC': 'T',
- '\u01AE': 'T',
- '\u023E': 'T',
- '\uA786': 'T',
- '\uA728': 'TZ',
- '\u24CA': 'U',
- '\uFF35': 'U',
- '\u00D9': 'U',
- '\u00DA': 'U',
- '\u00DB': 'U',
- '\u0168': 'U',
- '\u1E78': 'U',
- '\u016A': 'U',
- '\u1E7A': 'U',
- '\u016C': 'U',
- '\u00DC': 'U',
- '\u01DB': 'U',
- '\u01D7': 'U',
- '\u01D5': 'U',
- '\u01D9': 'U',
- '\u1EE6': 'U',
- '\u016E': 'U',
- '\u0170': 'U',
- '\u01D3': 'U',
- '\u0214': 'U',
- '\u0216': 'U',
- '\u01AF': 'U',
- '\u1EEA': 'U',
- '\u1EE8': 'U',
- '\u1EEE': 'U',
- '\u1EEC': 'U',
- '\u1EF0': 'U',
- '\u1EE4': 'U',
- '\u1E72': 'U',
- '\u0172': 'U',
- '\u1E76': 'U',
- '\u1E74': 'U',
- '\u0244': 'U',
- '\u24CB': 'V',
- '\uFF36': 'V',
- '\u1E7C': 'V',
- '\u1E7E': 'V',
- '\u01B2': 'V',
- '\uA75E': 'V',
- '\u0245': 'V',
- '\uA760': 'VY',
- '\u24CC': 'W',
- '\uFF37': 'W',
- '\u1E80': 'W',
- '\u1E82': 'W',
- '\u0174': 'W',
- '\u1E86': 'W',
- '\u1E84': 'W',
- '\u1E88': 'W',
- '\u2C72': 'W',
- '\u24CD': 'X',
- '\uFF38': 'X',
- '\u1E8A': 'X',
- '\u1E8C': 'X',
- '\u24CE': 'Y',
- '\uFF39': 'Y',
- '\u1EF2': 'Y',
- '\u00DD': 'Y',
- '\u0176': 'Y',
- '\u1EF8': 'Y',
- '\u0232': 'Y',
- '\u1E8E': 'Y',
- '\u0178': 'Y',
- '\u1EF6': 'Y',
- '\u1EF4': 'Y',
- '\u01B3': 'Y',
- '\u024E': 'Y',
- '\u1EFE': 'Y',
- '\u24CF': 'Z',
- '\uFF3A': 'Z',
- '\u0179': 'Z',
- '\u1E90': 'Z',
- '\u017B': 'Z',
- '\u017D': 'Z',
- '\u1E92': 'Z',
- '\u1E94': 'Z',
- '\u01B5': 'Z',
- '\u0224': 'Z',
- '\u2C7F': 'Z',
- '\u2C6B': 'Z',
- '\uA762': 'Z',
- '\u24D0': 'a',
- '\uFF41': 'a',
- '\u1E9A': 'a',
- '\u00E0': 'a',
- '\u00E1': 'a',
- '\u00E2': 'a',
- '\u1EA7': 'a',
- '\u1EA5': 'a',
- '\u1EAB': 'a',
- '\u1EA9': 'a',
- '\u00E3': 'a',
- '\u0101': 'a',
- '\u0103': 'a',
- '\u1EB1': 'a',
- '\u1EAF': 'a',
- '\u1EB5': 'a',
- '\u1EB3': 'a',
- '\u0227': 'a',
- '\u01E1': 'a',
- '\u00E4': 'a',
- '\u01DF': 'a',
- '\u1EA3': 'a',
- '\u00E5': 'a',
- '\u01FB': 'a',
- '\u01CE': 'a',
- '\u0201': 'a',
- '\u0203': 'a',
- '\u1EA1': 'a',
- '\u1EAD': 'a',
- '\u1EB7': 'a',
- '\u1E01': 'a',
- '\u0105': 'a',
- '\u2C65': 'a',
- '\u0250': 'a',
- '\uA733': 'aa',
- '\u00E6': 'ae',
- '\u01FD': 'ae',
- '\u01E3': 'ae',
- '\uA735': 'ao',
- '\uA737': 'au',
- '\uA739': 'av',
- '\uA73B': 'av',
- '\uA73D': 'ay',
- '\u24D1': 'b',
- '\uFF42': 'b',
- '\u1E03': 'b',
- '\u1E05': 'b',
- '\u1E07': 'b',
- '\u0180': 'b',
- '\u0183': 'b',
- '\u0253': 'b',
- '\u24D2': 'c',
- '\uFF43': 'c',
- '\u0107': 'c',
- '\u0109': 'c',
- '\u010B': 'c',
- '\u010D': 'c',
- '\u00E7': 'c',
- '\u1E09': 'c',
- '\u0188': 'c',
- '\u023C': 'c',
- '\uA73F': 'c',
- '\u2184': 'c',
- '\u24D3': 'd',
- '\uFF44': 'd',
- '\u1E0B': 'd',
- '\u010F': 'd',
- '\u1E0D': 'd',
- '\u1E11': 'd',
- '\u1E13': 'd',
- '\u1E0F': 'd',
- '\u0111': 'd',
- '\u018C': 'd',
- '\u0256': 'd',
- '\u0257': 'd',
- '\uA77A': 'd',
- '\u01F3': 'dz',
- '\u01C6': 'dz',
- '\u24D4': 'e',
- '\uFF45': 'e',
- '\u00E8': 'e',
- '\u00E9': 'e',
- '\u00EA': 'e',
- '\u1EC1': 'e',
- '\u1EBF': 'e',
- '\u1EC5': 'e',
- '\u1EC3': 'e',
- '\u1EBD': 'e',
- '\u0113': 'e',
- '\u1E15': 'e',
- '\u1E17': 'e',
- '\u0115': 'e',
- '\u0117': 'e',
- '\u00EB': 'e',
- '\u1EBB': 'e',
- '\u011B': 'e',
- '\u0205': 'e',
- '\u0207': 'e',
- '\u1EB9': 'e',
- '\u1EC7': 'e',
- '\u0229': 'e',
- '\u1E1D': 'e',
- '\u0119': 'e',
- '\u1E19': 'e',
- '\u1E1B': 'e',
- '\u0247': 'e',
- '\u025B': 'e',
- '\u01DD': 'e',
- '\u24D5': 'f',
- '\uFF46': 'f',
- '\u1E1F': 'f',
- '\u0192': 'f',
- '\uA77C': 'f',
- '\u24D6': 'g',
- '\uFF47': 'g',
- '\u01F5': 'g',
- '\u011D': 'g',
- '\u1E21': 'g',
- '\u011F': 'g',
- '\u0121': 'g',
- '\u01E7': 'g',
- '\u0123': 'g',
- '\u01E5': 'g',
- '\u0260': 'g',
- '\uA7A1': 'g',
- '\u1D79': 'g',
- '\uA77F': 'g',
- '\u24D7': 'h',
- '\uFF48': 'h',
- '\u0125': 'h',
- '\u1E23': 'h',
- '\u1E27': 'h',
- '\u021F': 'h',
- '\u1E25': 'h',
- '\u1E29': 'h',
- '\u1E2B': 'h',
- '\u1E96': 'h',
- '\u0127': 'h',
- '\u2C68': 'h',
- '\u2C76': 'h',
- '\u0265': 'h',
- '\u0195': 'hv',
- '\u24D8': 'i',
- '\uFF49': 'i',
- '\u00EC': 'i',
- '\u00ED': 'i',
- '\u00EE': 'i',
- '\u0129': 'i',
- '\u012B': 'i',
- '\u012D': 'i',
- '\u00EF': 'i',
- '\u1E2F': 'i',
- '\u1EC9': 'i',
- '\u01D0': 'i',
- '\u0209': 'i',
- '\u020B': 'i',
- '\u1ECB': 'i',
- '\u012F': 'i',
- '\u1E2D': 'i',
- '\u0268': 'i',
- '\u0131': 'i',
- '\u24D9': 'j',
- '\uFF4A': 'j',
- '\u0135': 'j',
- '\u01F0': 'j',
- '\u0249': 'j',
- '\u24DA': 'k',
- '\uFF4B': 'k',
- '\u1E31': 'k',
- '\u01E9': 'k',
- '\u1E33': 'k',
- '\u0137': 'k',
- '\u1E35': 'k',
- '\u0199': 'k',
- '\u2C6A': 'k',
- '\uA741': 'k',
- '\uA743': 'k',
- '\uA745': 'k',
- '\uA7A3': 'k',
- '\u24DB': 'l',
- '\uFF4C': 'l',
- '\u0140': 'l',
- '\u013A': 'l',
- '\u013E': 'l',
- '\u1E37': 'l',
- '\u1E39': 'l',
- '\u013C': 'l',
- '\u1E3D': 'l',
- '\u1E3B': 'l',
- '\u017F': 'l',
- '\u0142': 'l',
- '\u019A': 'l',
- '\u026B': 'l',
- '\u2C61': 'l',
- '\uA749': 'l',
- '\uA781': 'l',
- '\uA747': 'l',
- '\u01C9': 'lj',
- '\u24DC': 'm',
- '\uFF4D': 'm',
- '\u1E3F': 'm',
- '\u1E41': 'm',
- '\u1E43': 'm',
- '\u0271': 'm',
- '\u026F': 'm',
- '\u24DD': 'n',
- '\uFF4E': 'n',
- '\u01F9': 'n',
- '\u0144': 'n',
- '\u00F1': 'n',
- '\u1E45': 'n',
- '\u0148': 'n',
- '\u1E47': 'n',
- '\u0146': 'n',
- '\u1E4B': 'n',
- '\u1E49': 'n',
- '\u019E': 'n',
- '\u0272': 'n',
- '\u0149': 'n',
- '\uA791': 'n',
- '\uA7A5': 'n',
- '\u01CC': 'nj',
- '\u24DE': 'o',
- '\uFF4F': 'o',
- '\u00F2': 'o',
- '\u00F3': 'o',
- '\u00F4': 'o',
- '\u1ED3': 'o',
- '\u1ED1': 'o',
- '\u1ED7': 'o',
- '\u1ED5': 'o',
- '\u00F5': 'o',
- '\u1E4D': 'o',
- '\u022D': 'o',
- '\u1E4F': 'o',
- '\u014D': 'o',
- '\u1E51': 'o',
- '\u1E53': 'o',
- '\u014F': 'o',
- '\u022F': 'o',
- '\u0231': 'o',
- '\u00F6': 'o',
- '\u022B': 'o',
- '\u1ECF': 'o',
- '\u0151': 'o',
- '\u01D2': 'o',
- '\u020D': 'o',
- '\u020F': 'o',
- '\u01A1': 'o',
- '\u1EDD': 'o',
- '\u1EDB': 'o',
- '\u1EE1': 'o',
- '\u1EDF': 'o',
- '\u1EE3': 'o',
- '\u1ECD': 'o',
- '\u1ED9': 'o',
- '\u01EB': 'o',
- '\u01ED': 'o',
- '\u00F8': 'o',
- '\u01FF': 'o',
- '\u0254': 'o',
- '\uA74B': 'o',
- '\uA74D': 'o',
- '\u0275': 'o',
- '\u01A3': 'oi',
- '\u0223': 'ou',
- '\uA74F': 'oo',
- '\u24DF': 'p',
- '\uFF50': 'p',
- '\u1E55': 'p',
- '\u1E57': 'p',
- '\u01A5': 'p',
- '\u1D7D': 'p',
- '\uA751': 'p',
- '\uA753': 'p',
- '\uA755': 'p',
- '\u24E0': 'q',
- '\uFF51': 'q',
- '\u024B': 'q',
- '\uA757': 'q',
- '\uA759': 'q',
- '\u24E1': 'r',
- '\uFF52': 'r',
- '\u0155': 'r',
- '\u1E59': 'r',
- '\u0159': 'r',
- '\u0211': 'r',
- '\u0213': 'r',
- '\u1E5B': 'r',
- '\u1E5D': 'r',
- '\u0157': 'r',
- '\u1E5F': 'r',
- '\u024D': 'r',
- '\u027D': 'r',
- '\uA75B': 'r',
- '\uA7A7': 'r',
- '\uA783': 'r',
- '\u24E2': 's',
- '\uFF53': 's',
- '\u00DF': 's',
- '\u015B': 's',
- '\u1E65': 's',
- '\u015D': 's',
- '\u1E61': 's',
- '\u0161': 's',
- '\u1E67': 's',
- '\u1E63': 's',
- '\u1E69': 's',
- '\u0219': 's',
- '\u015F': 's',
- '\u023F': 's',
- '\uA7A9': 's',
- '\uA785': 's',
- '\u1E9B': 's',
- '\u24E3': 't',
- '\uFF54': 't',
- '\u1E6B': 't',
- '\u1E97': 't',
- '\u0165': 't',
- '\u1E6D': 't',
- '\u021B': 't',
- '\u0163': 't',
- '\u1E71': 't',
- '\u1E6F': 't',
- '\u0167': 't',
- '\u01AD': 't',
- '\u0288': 't',
- '\u2C66': 't',
- '\uA787': 't',
- '\uA729': 'tz',
- '\u24E4': 'u',
- '\uFF55': 'u',
- '\u00F9': 'u',
- '\u00FA': 'u',
- '\u00FB': 'u',
- '\u0169': 'u',
- '\u1E79': 'u',
- '\u016B': 'u',
- '\u1E7B': 'u',
- '\u016D': 'u',
- '\u00FC': 'u',
- '\u01DC': 'u',
- '\u01D8': 'u',
- '\u01D6': 'u',
- '\u01DA': 'u',
- '\u1EE7': 'u',
- '\u016F': 'u',
- '\u0171': 'u',
- '\u01D4': 'u',
- '\u0215': 'u',
- '\u0217': 'u',
- '\u01B0': 'u',
- '\u1EEB': 'u',
- '\u1EE9': 'u',
- '\u1EEF': 'u',
- '\u1EED': 'u',
- '\u1EF1': 'u',
- '\u1EE5': 'u',
- '\u1E73': 'u',
- '\u0173': 'u',
- '\u1E77': 'u',
- '\u1E75': 'u',
- '\u0289': 'u',
- '\u24E5': 'v',
- '\uFF56': 'v',
- '\u1E7D': 'v',
- '\u1E7F': 'v',
- '\u028B': 'v',
- '\uA75F': 'v',
- '\u028C': 'v',
- '\uA761': 'vy',
- '\u24E6': 'w',
- '\uFF57': 'w',
- '\u1E81': 'w',
- '\u1E83': 'w',
- '\u0175': 'w',
- '\u1E87': 'w',
- '\u1E85': 'w',
- '\u1E98': 'w',
- '\u1E89': 'w',
- '\u2C73': 'w',
- '\u24E7': 'x',
- '\uFF58': 'x',
- '\u1E8B': 'x',
- '\u1E8D': 'x',
- '\u24E8': 'y',
- '\uFF59': 'y',
- '\u1EF3': 'y',
- '\u00FD': 'y',
- '\u0177': 'y',
- '\u1EF9': 'y',
- '\u0233': 'y',
- '\u1E8F': 'y',
- '\u00FF': 'y',
- '\u1EF7': 'y',
- '\u1E99': 'y',
- '\u1EF5': 'y',
- '\u01B4': 'y',
- '\u024F': 'y',
- '\u1EFF': 'y',
- '\u24E9': 'z',
- '\uFF5A': 'z',
- '\u017A': 'z',
- '\u1E91': 'z',
- '\u017C': 'z',
- '\u017E': 'z',
- '\u1E93': 'z',
- '\u1E95': 'z',
- '\u01B6': 'z',
- '\u0225': 'z',
- '\u0240': 'z',
- '\u2C6C': 'z',
- '\uA763': 'z',
- '\u0386': '\u0391',
- '\u0388': '\u0395',
- '\u0389': '\u0397',
- '\u038A': '\u0399',
- '\u03AA': '\u0399',
- '\u038C': '\u039F',
- '\u038E': '\u03A5',
- '\u03AB': '\u03A5',
- '\u038F': '\u03A9',
- '\u03AC': '\u03B1',
- '\u03AD': '\u03B5',
- '\u03AE': '\u03B7',
- '\u03AF': '\u03B9',
- '\u03CA': '\u03B9',
- '\u0390': '\u03B9',
- '\u03CC': '\u03BF',
- '\u03CD': '\u03C5',
- '\u03CB': '\u03C5',
- '\u03B0': '\u03C5',
- '\u03C9': '\u03C9',
- '\u03C2': '\u03C3'
- };
- /**
- * @param {?} text
- * @return {?}
- */
- function stripSpecialChars(text) {
- /** @type {?} */
- const match = (/**
- * @param {?} a
- * @return {?}
- */
- (a) => {
- return diacritics[a] || a;
- });
- return text.replace(/[^\u0000-\u007E]/g, match);
- }
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/items-list.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class ItemsList {
- /**
- * @param {?} _ngSelect
- * @param {?} _selectionModel
- */
- constructor(_ngSelect, _selectionModel) {
- this._ngSelect = _ngSelect;
- this._selectionModel = _selectionModel;
- this._items = [];
- this._filteredItems = [];
- this._markedIndex = -1;
- }
- /**
- * @return {?}
- */
- get items() {
- return this._items;
- }
- /**
- * @return {?}
- */
- get filteredItems() {
- return this._filteredItems;
- }
- /**
- * @return {?}
- */
- get markedIndex() {
- return this._markedIndex;
- }
- /**
- * @return {?}
- */
- get selectedItems() {
- return this._selectionModel.value;
- }
- /**
- * @return {?}
- */
- get markedItem() {
- return this._filteredItems[this._markedIndex];
- }
- /**
- * @return {?}
- */
- get noItemsToSelect() {
- return this._ngSelect.hideSelected && this._items.length === this.selectedItems.length;
- }
- /**
- * @return {?}
- */
- get maxItemsSelected() {
- return this._ngSelect.multiple && this._ngSelect.maxSelectedItems <= this.selectedItems.length;
- }
- /**
- * @return {?}
- */
- get lastSelectedItem() {
- /** @type {?} */
- let i = this.selectedItems.length - 1;
- for (; i >= 0; i--) {
- /** @type {?} */
- let item = this.selectedItems[i];
- if (!item.disabled) {
- return item;
- }
- }
- return null;
- }
- /**
- * @param {?} items
- * @return {?}
- */
- setItems(items) {
- this._items = items.map((/**
- * @param {?} item
- * @param {?} index
- * @return {?}
- */
- (item, index) => this.mapItem(item, index)));
- if (this._ngSelect.groupBy) {
- this._groups = this._groupBy(this._items, this._ngSelect.groupBy);
- this._items = this._flatten(this._groups);
- }
- else {
- this._groups = new Map();
- this._groups.set(undefined, this._items);
- }
- this._filteredItems = [...this._items];
- }
- /**
- * @param {?} item
- * @return {?}
- */
- select(item) {
- if (item.selected || this.maxItemsSelected) {
- return;
- }
- /** @type {?} */
- const multiple = this._ngSelect.multiple;
- if (!multiple) {
- this.clearSelected();
- }
- this._selectionModel.select(item, multiple, this._ngSelect.selectableGroupAsModel);
- if (this._ngSelect.hideSelected) {
- this._hideSelected(item);
- }
- }
- /**
- * @param {?} item
- * @return {?}
- */
- unselect(item) {
- if (!item.selected) {
- return;
- }
- this._selectionModel.unselect(item, this._ngSelect.multiple);
- if (this._ngSelect.hideSelected && isDefined(item.index) && this._ngSelect.multiple) {
- this._showSelected(item);
- }
- }
- /**
- * @param {?} value
- * @return {?}
- */
- findItem(value) {
- /** @type {?} */
- let findBy;
- if (this._ngSelect.compareWith) {
- findBy = (/**
- * @param {?} item
- * @return {?}
- */
- item => this._ngSelect.compareWith(item.value, value));
- }
- else if (this._ngSelect.bindValue) {
- findBy = (/**
- * @param {?} item
- * @return {?}
- */
- item => !item.children && this.resolveNested(item.value, this._ngSelect.bindValue) === value);
- }
- else {
- findBy = (/**
- * @param {?} item
- * @return {?}
- */
- item => item.value === value ||
- !item.children && item.label && item.label === this.resolveNested(value, this._ngSelect.bindLabel));
- }
- return this._items.find((/**
- * @param {?} item
- * @return {?}
- */
- item => findBy(item)));
- }
- /**
- * @param {?} item
- * @return {?}
- */
- addItem(item) {
- /** @type {?} */
- const option = this.mapItem(item, this._items.length);
- this._items.push(option);
- this._filteredItems.push(option);
- return option;
- }
- /**
- * @param {?=} keepDisabled
- * @return {?}
- */
- clearSelected(keepDisabled = false) {
- this._selectionModel.clear(keepDisabled);
- this._items.forEach((/**
- * @param {?} item
- * @return {?}
- */
- item => {
- item.selected = keepDisabled && item.selected && item.disabled;
- item.marked = false;
- }));
- if (this._ngSelect.hideSelected) {
- this.resetFilteredItems();
- }
- }
- /**
- * @param {?} term
- * @return {?}
- */
- findByLabel(term) {
- term = stripSpecialChars(term).toLocaleLowerCase();
- return this.filteredItems.find((/**
- * @param {?} item
- * @return {?}
- */
- item => {
- /** @type {?} */
- const label = stripSpecialChars(item.label).toLocaleLowerCase();
- return label.substr(0, term.length) === term;
- }));
- }
- /**
- * @param {?} term
- * @return {?}
- */
- filter(term) {
- if (!term) {
- this.resetFilteredItems();
- return;
- }
- this._filteredItems = [];
- term = this._ngSelect.searchFn ? term : stripSpecialChars(term).toLocaleLowerCase();
- /** @type {?} */
- const match = this._ngSelect.searchFn || this._defaultSearchFn;
- /** @type {?} */
- const hideSelected = this._ngSelect.hideSelected;
- for (const key of Array.from(this._groups.keys())) {
- /** @type {?} */
- const matchedItems = [];
- for (const item of this._groups.get(key)) {
- if (hideSelected && (item.parent && item.parent.selected || item.selected)) {
- continue;
- }
- /** @type {?} */
- const searchItem = this._ngSelect.searchFn ? item.value : item;
- if (match(term, searchItem)) {
- matchedItems.push(item);
- }
- }
- if (matchedItems.length > 0) {
- const [last] = matchedItems.slice(-1);
- if (last.parent) {
- /** @type {?} */
- const head = this._items.find((/**
- * @param {?} x
- * @return {?}
- */
- x => x === last.parent));
- this._filteredItems.push(head);
- }
- this._filteredItems.push(...matchedItems);
- }
- }
- }
- /**
- * @return {?}
- */
- resetFilteredItems() {
- if (this._filteredItems.length === this._items.length) {
- return;
- }
- if (this._ngSelect.hideSelected && this.selectedItems.length > 0) {
- this._filteredItems = this._items.filter((/**
- * @param {?} x
- * @return {?}
- */
- x => !x.selected));
- }
- else {
- this._filteredItems = this._items;
- }
- }
- /**
- * @return {?}
- */
- unmarkItem() {
- this._markedIndex = -1;
- }
- /**
- * @return {?}
- */
- markNextItem() {
- this._stepToItem(+1);
- }
- /**
- * @return {?}
- */
- markPreviousItem() {
- this._stepToItem(-1);
- }
- /**
- * @param {?} item
- * @return {?}
- */
- markItem(item) {
- this._markedIndex = this._filteredItems.indexOf(item);
- }
- /**
- * @param {?=} markDefault
- * @return {?}
- */
- markSelectedOrDefault(markDefault) {
- if (this._filteredItems.length === 0) {
- return;
- }
- /** @type {?} */
- const lastMarkedIndex = this._getLastMarkedIndex();
- if (lastMarkedIndex > -1) {
- this._markedIndex = lastMarkedIndex;
- }
- else {
- this._markedIndex = markDefault ? this.filteredItems.findIndex((/**
- * @param {?} x
- * @return {?}
- */
- x => !x.disabled)) : -1;
- }
- }
- /**
- * @param {?} option
- * @param {?} key
- * @return {?}
- */
- resolveNested(option, key) {
- if (!isObject(option)) {
- return option;
- }
- if (key.indexOf('.') === -1) {
- return option[key];
- }
- else {
- /** @type {?} */
- let keys = key.split('.');
- /** @type {?} */
- let value = option;
- for (let i = 0, len = keys.length; i < len; ++i) {
- if (value == null) {
- return null;
- }
- value = value[keys[i]];
- }
- return value;
- }
- }
- /**
- * @param {?} item
- * @param {?} index
- * @return {?}
- */
- mapItem(item, index) {
- /** @type {?} */
- const label = isDefined(item.$ngOptionLabel) ? item.$ngOptionLabel : this.resolveNested(item, this._ngSelect.bindLabel);
- /** @type {?} */
- const value = isDefined(item.$ngOptionValue) ? item.$ngOptionValue : item;
- return {
- index: index,
- label: isDefined(label) ? label.toString() : '',
- value: value,
- disabled: item.disabled,
- htmlId: `${this._ngSelect.dropdownId}-${index}`,
- };
- }
- /**
- * @return {?}
- */
- mapSelectedItems() {
- /** @type {?} */
- const multiple = this._ngSelect.multiple;
- for (const selected of this.selectedItems) {
- /** @type {?} */
- const value = this._ngSelect.bindValue ? this.resolveNested(selected.value, this._ngSelect.bindValue) : selected.value;
- /** @type {?} */
- const item = isDefined(value) ? this.findItem(value) : null;
- this._selectionModel.unselect(selected, multiple);
- this._selectionModel.select(item || selected, multiple, this._ngSelect.selectableGroupAsModel);
- }
- if (this._ngSelect.hideSelected) {
- this._filteredItems = this.filteredItems.filter((/**
- * @param {?} x
- * @return {?}
- */
- x => this.selectedItems.indexOf(x) === -1));
- }
- }
- /**
- * @private
- * @param {?} item
- * @return {?}
- */
- _showSelected(item) {
- this._filteredItems.push(item);
- if (item.parent) {
- /** @type {?} */
- const parent = item.parent;
- /** @type {?} */
- const parentExists = this._filteredItems.find((/**
- * @param {?} x
- * @return {?}
- */
- x => x === parent));
- if (!parentExists) {
- this._filteredItems.push(parent);
- }
- }
- else if (item.children) {
- for (const child of item.children) {
- child.selected = false;
- this._filteredItems.push(child);
- }
- }
- this._filteredItems = [...this._filteredItems.sort((/**
- * @param {?} a
- * @param {?} b
- * @return {?}
- */
- (a, b) => (a.index - b.index)))];
- }
- /**
- * @private
- * @param {?} item
- * @return {?}
- */
- _hideSelected(item) {
- this._filteredItems = this._filteredItems.filter((/**
- * @param {?} x
- * @return {?}
- */
- x => x !== item));
- if (item.parent) {
- /** @type {?} */
- const children = item.parent.children;
- if (children.every((/**
- * @param {?} x
- * @return {?}
- */
- x => x.selected))) {
- this._filteredItems = this._filteredItems.filter((/**
- * @param {?} x
- * @return {?}
- */
- x => x !== item.parent));
- }
- }
- else if (item.children) {
- this._filteredItems = this.filteredItems.filter((/**
- * @param {?} x
- * @return {?}
- */
- x => x.parent !== item));
- }
- }
- /**
- * @private
- * @param {?} search
- * @param {?} opt
- * @return {?}
- */
- _defaultSearchFn(search, opt) {
- /** @type {?} */
- const label = stripSpecialChars(opt.label).toLocaleLowerCase();
- return label.indexOf(search) > -1;
- }
- /**
- * @private
- * @param {?} steps
- * @return {?}
- */
- _getNextItemIndex(steps) {
- if (steps > 0) {
- return (this._markedIndex === this._filteredItems.length - 1) ? 0 : (this._markedIndex + 1);
- }
- return (this._markedIndex <= 0) ? (this._filteredItems.length - 1) : (this._markedIndex - 1);
- }
- /**
- * @private
- * @param {?} steps
- * @return {?}
- */
- _stepToItem(steps) {
- if (this._filteredItems.length === 0 || this._filteredItems.every((/**
- * @param {?} x
- * @return {?}
- */
- x => x.disabled))) {
- return;
- }
- this._markedIndex = this._getNextItemIndex(steps);
- if (this.markedItem.disabled) {
- this._stepToItem(steps);
- }
- }
- /**
- * @private
- * @return {?}
- */
- _getLastMarkedIndex() {
- if (this._ngSelect.hideSelected) {
- return -1;
- }
- if (this._markedIndex > -1 && this.markedItem === undefined) {
- return -1;
- }
- /** @type {?} */
- const selectedIndex = this._filteredItems.indexOf(this.lastSelectedItem);
- if (this.lastSelectedItem && selectedIndex < 0) {
- return -1;
- }
- return Math.max(this.markedIndex, selectedIndex);
- }
- /**
- * @private
- * @param {?} items
- * @param {?} prop
- * @return {?}
- */
- _groupBy(items, prop) {
- /** @type {?} */
- const groups = new Map();
- if (items.length === 0) {
- return groups;
- }
- // Check if items are already grouped by given key.
- if (Array.isArray(items[0].value[(/** @type {?} */ (prop))])) {
- for (const item of items) {
- /** @type {?} */
- const children = (item.value[(/** @type {?} */ (prop))] || []).map((/**
- * @param {?} x
- * @param {?} index
- * @return {?}
- */
- (x, index) => this.mapItem(x, index)));
- groups.set(item, children);
- }
- return groups;
- }
- /** @type {?} */
- const isFnKey = isFunction(this._ngSelect.groupBy);
- /** @type {?} */
- const keyFn = (/**
- * @param {?} item
- * @return {?}
- */
- (item) => {
- /** @type {?} */
- let key = isFnKey ? ((/** @type {?} */ (prop)))(item.value) : item.value[(/** @type {?} */ (prop))];
- return isDefined(key) ? key : undefined;
- });
- // Group items by key.
- for (const item of items) {
- /** @type {?} */
- let key = keyFn(item);
- /** @type {?} */
- const group = groups.get(key);
- if (group) {
- group.push(item);
- }
- else {
- groups.set(key, [item]);
- }
- }
- return groups;
- }
- /**
- * @private
- * @param {?} groups
- * @return {?}
- */
- _flatten(groups) {
- /** @type {?} */
- const isGroupByFn = isFunction(this._ngSelect.groupBy);
- /** @type {?} */
- const items = [];
- for (const key of Array.from(groups.keys())) {
- /** @type {?} */
- let i = items.length;
- if (key === undefined) {
- /** @type {?} */
- const withoutGroup = groups.get(undefined) || [];
- items.push(...withoutGroup.map((/**
- * @param {?} x
- * @return {?}
- */
- x => (Object.assign(Object.assign({}, x), { index: i++ })))));
- continue;
- }
- /** @type {?} */
- const isObjectKey = isObject(key);
- /** @type {?} */
- const parent = {
- label: isObjectKey ? '' : String(key),
- children: undefined,
- parent: null,
- index: i++,
- disabled: !this._ngSelect.selectableGroup,
- htmlId: newId(),
- };
- /** @type {?} */
- const groupKey = isGroupByFn ? this._ngSelect.bindLabel : (/** @type {?} */ (this._ngSelect.groupBy));
- /** @type {?} */
- const groupValue = this._ngSelect.groupValue || ((/**
- * @return {?}
- */
- () => {
- if (isObjectKey) {
- return ((/** @type {?} */ (key))).value;
- }
- return { [groupKey]: key };
- }));
- /** @type {?} */
- const children = groups.get(key).map((/**
- * @param {?} x
- * @return {?}
- */
- x => {
- x.parent = parent;
- x.children = undefined;
- x.index = i++;
- return x;
- }));
- parent.children = children;
- parent.value = groupValue(key, children.map((/**
- * @param {?} x
- * @return {?}
- */
- x => x.value)));
- items.push(parent);
- items.push(...children);
- }
- return items;
- }
- }
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/ng-select.types.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @record
- */
- function NgOption() { }
- if (false) {}
- /** @enum {number} */
- const KeyCode = {
- Tab: 9,
- Enter: 13,
- Esc: 27,
- Space: 32,
- ArrowUp: 38,
- ArrowDown: 40,
- Backspace: 8,
- };
- KeyCode[KeyCode.Tab] = 'Tab';
- KeyCode[KeyCode.Enter] = 'Enter';
- KeyCode[KeyCode.Esc] = 'Esc';
- KeyCode[KeyCode.Space] = 'Space';
- KeyCode[KeyCode.ArrowUp] = 'ArrowUp';
- KeyCode[KeyCode.ArrowDown] = 'ArrowDown';
- KeyCode[KeyCode.Backspace] = 'Backspace';
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/ng-dropdown-panel.service.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @record
- */
- function ItemsRangeResult() { }
- if (false) {}
- /**
- * @record
- */
- function PanelDimensions() { }
- if (false) {}
- class NgDropdownPanelService {
- constructor() {
- this._dimensions = {
- itemHeight: 0,
- panelHeight: 0,
- itemsPerViewport: 0
- };
- }
- /**
- * @return {?}
- */
- get dimensions() {
- return this._dimensions;
- }
- /**
- * @param {?} scrollPos
- * @param {?} itemsLength
- * @param {?} buffer
- * @return {?}
- */
- calculateItems(scrollPos, itemsLength, buffer) {
- /** @type {?} */
- const d = this._dimensions;
- /** @type {?} */
- const scrollHeight = d.itemHeight * itemsLength;
- /** @type {?} */
- const scrollTop = Math.max(0, scrollPos);
- /** @type {?} */
- const indexByScrollTop = scrollTop / scrollHeight * itemsLength;
- /** @type {?} */
- let end = Math.min(itemsLength, Math.ceil(indexByScrollTop) + (d.itemsPerViewport + 1));
- /** @type {?} */
- const maxStartEnd = end;
- /** @type {?} */
- const maxStart = Math.max(0, maxStartEnd - d.itemsPerViewport);
- /** @type {?} */
- let start = Math.min(maxStart, Math.floor(indexByScrollTop));
- /** @type {?} */
- let topPadding = d.itemHeight * Math.ceil(start) - (d.itemHeight * Math.min(start, buffer));
- topPadding = !isNaN(topPadding) ? topPadding : 0;
- start = !isNaN(start) ? start : -1;
- end = !isNaN(end) ? end : -1;
- start -= buffer;
- start = Math.max(0, start);
- end += buffer;
- end = Math.min(itemsLength, end);
- return {
- topPadding,
- scrollHeight,
- start,
- end
- };
- }
- /**
- * @param {?} itemHeight
- * @param {?} panelHeight
- * @return {?}
- */
- setDimensions(itemHeight, panelHeight) {
- /** @type {?} */
- const itemsPerViewport = Math.max(1, Math.floor(panelHeight / itemHeight));
- this._dimensions = {
- itemHeight,
- panelHeight,
- itemsPerViewport
- };
- }
- /**
- * @param {?} itemTop
- * @param {?} itemHeight
- * @param {?} lastScroll
- * @return {?}
- */
- getScrollTo(itemTop, itemHeight, lastScroll) {
- const { panelHeight } = this.dimensions;
- /** @type {?} */
- const itemBottom = itemTop + itemHeight;
- /** @type {?} */
- const top = lastScroll;
- /** @type {?} */
- const bottom = top + panelHeight;
- if (panelHeight >= itemBottom && lastScroll === itemTop) {
- return null;
- }
- if (itemBottom > bottom) {
- return top + itemBottom - bottom;
- }
- else if (itemTop <= top) {
- return itemTop;
- }
- return null;
- }
- }
- NgDropdownPanelService.ɵfac = function NgDropdownPanelService_Factory(t) { return new (t || NgDropdownPanelService)(); };
- NgDropdownPanelService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NgDropdownPanelService, factory: NgDropdownPanelService.ɵfac });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgDropdownPanelService, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return []; }, null); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/ng-dropdown-panel.component.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /** @type {?} */
- const TOP_CSS_CLASS = 'ng-select-top';
- /** @type {?} */
- const BOTTOM_CSS_CLASS = 'ng-select-bottom';
- /** @type {?} */
- const SCROLL_SCHEDULER = typeof requestAnimationFrame !== 'undefined' ? rxjs__WEBPACK_IMPORTED_MODULE_3__["animationFrameScheduler"] : rxjs__WEBPACK_IMPORTED_MODULE_3__["asapScheduler"];
- class NgDropdownPanelComponent {
- /**
- * @param {?} _renderer
- * @param {?} _zone
- * @param {?} _panelService
- * @param {?} _elementRef
- * @param {?} _document
- */
- constructor(_renderer, _zone, _panelService, _elementRef, _document) {
- this._renderer = _renderer;
- this._zone = _zone;
- this._panelService = _panelService;
- this._document = _document;
- this.items = [];
- this.position = 'auto';
- this.virtualScroll = false;
- this.filterValue = null;
- this.update = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.scroll = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.scrollToEnd = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.outsideClick = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this._destroy$ = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
- this._scrollToEndFired = false;
- this._updateScrollHeight = false;
- this._lastScrollPosition = 0;
- this._dropdown = _elementRef.nativeElement;
- }
- /**
- * @return {?}
- */
- get currentPosition() {
- return this._currentPosition;
- }
- /**
- * @private
- * @return {?}
- */
- get itemsLength() {
- return this._itemsLength;
- }
- /**
- * @private
- * @param {?} value
- * @return {?}
- */
- set itemsLength(value) {
- if (value !== this._itemsLength) {
- this._itemsLength = value;
- this._onItemsLengthChanged();
- }
- }
- /**
- * @private
- * @return {?}
- */
- get _startOffset() {
- if (this.markedItem) {
- const { itemHeight, panelHeight } = this._panelService.dimensions;
- /** @type {?} */
- const offset = this.markedItem.index * itemHeight;
- return panelHeight > offset ? 0 : offset;
- }
- return 0;
- }
- /**
- * @param {?} $event
- * @return {?}
- */
- handleMousedown($event) {
- /** @type {?} */
- const target = (/** @type {?} */ ($event.target));
- if (target.tagName === 'INPUT') {
- return;
- }
- $event.preventDefault();
- }
- /**
- * @return {?}
- */
- ngOnInit() {
- this._select = this._dropdown.parentElement;
- this._virtualPadding = this.paddingElementRef.nativeElement;
- this._scrollablePanel = this.scrollElementRef.nativeElement;
- this._contentPanel = this.contentElementRef.nativeElement;
- this._handleScroll();
- this._handleOutsideClick();
- this._appendDropdown();
- }
- /**
- * @param {?} changes
- * @return {?}
- */
- ngOnChanges(changes) {
- if (changes.items) {
- /** @type {?} */
- const change = changes.items;
- this._onItemsChange(change.currentValue, change.firstChange);
- }
- }
- /**
- * @return {?}
- */
- ngOnDestroy() {
- this._destroy$.next();
- this._destroy$.complete();
- this._destroy$.unsubscribe();
- if (this.appendTo) {
- this._renderer.removeChild(this._dropdown.parentNode, this._dropdown);
- }
- }
- /**
- * @param {?} option
- * @param {?=} startFromOption
- * @return {?}
- */
- scrollTo(option, startFromOption = false) {
- if (!option) {
- return;
- }
- /** @type {?} */
- const index = this.items.indexOf(option);
- if (index < 0 || index >= this.itemsLength) {
- return;
- }
- /** @type {?} */
- let scrollTo;
- if (this.virtualScroll) {
- /** @type {?} */
- const itemHeight = this._panelService.dimensions.itemHeight;
- scrollTo = this._panelService.getScrollTo(index * itemHeight, itemHeight, this._lastScrollPosition);
- }
- else {
- /** @type {?} */
- const item = this._dropdown.querySelector(`#${option.htmlId}`);
- /** @type {?} */
- const lastScroll = startFromOption ? item.offsetTop : this._lastScrollPosition;
- scrollTo = this._panelService.getScrollTo(item.offsetTop, item.clientHeight, lastScroll);
- }
- if (isDefined(scrollTo)) {
- this._scrollablePanel.scrollTop = scrollTo;
- }
- }
- /**
- * @return {?}
- */
- scrollToTag() {
- /** @type {?} */
- const panel = this._scrollablePanel;
- panel.scrollTop = panel.scrollHeight - panel.clientHeight;
- }
- /**
- * @return {?}
- */
- adjustPosition() {
- this._updateYPosition();
- }
- /**
- * @private
- * @return {?}
- */
- _handleDropdownPosition() {
- this._currentPosition = this._calculateCurrentPosition(this._dropdown);
- if (this._currentPosition === 'top') {
- this._renderer.addClass(this._dropdown, TOP_CSS_CLASS);
- this._renderer.removeClass(this._dropdown, BOTTOM_CSS_CLASS);
- this._renderer.addClass(this._select, TOP_CSS_CLASS);
- this._renderer.removeClass(this._select, BOTTOM_CSS_CLASS);
- }
- else {
- this._renderer.addClass(this._dropdown, BOTTOM_CSS_CLASS);
- this._renderer.removeClass(this._dropdown, TOP_CSS_CLASS);
- this._renderer.addClass(this._select, BOTTOM_CSS_CLASS);
- this._renderer.removeClass(this._select, TOP_CSS_CLASS);
- }
- if (this.appendTo) {
- this._updateYPosition();
- }
- this._dropdown.style.opacity = '1';
- }
- /**
- * @private
- * @return {?}
- */
- _handleScroll() {
- this._zone.runOutsideAngular((/**
- * @return {?}
- */
- () => {
- Object(rxjs__WEBPACK_IMPORTED_MODULE_3__["fromEvent"])(this.scrollElementRef.nativeElement, 'scroll')
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["takeUntil"])(this._destroy$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["auditTime"])(0, SCROLL_SCHEDULER))
- .subscribe((/**
- * @param {?} e
- * @return {?}
- */
- (e) => {
- /** @type {?} */
- const path = e.path || (e.composedPath && e.composedPath());
- /** @type {?} */
- const scrollTop = !path || path.length === 0 ? e.target.scrollTop : path[0].scrollTop;
- this._onContentScrolled(scrollTop);
- }));
- }));
- }
- /**
- * @private
- * @return {?}
- */
- _handleOutsideClick() {
- if (!this._document) {
- return;
- }
- this._zone.runOutsideAngular((/**
- * @return {?}
- */
- () => {
- Object(rxjs__WEBPACK_IMPORTED_MODULE_3__["merge"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_3__["fromEvent"])(this._document, 'touchstart', { capture: true }), Object(rxjs__WEBPACK_IMPORTED_MODULE_3__["fromEvent"])(this._document, 'mousedown', { capture: true })).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["takeUntil"])(this._destroy$))
- .subscribe((/**
- * @param {?} $event
- * @return {?}
- */
- $event => this._checkToClose($event)));
- }));
- }
- /**
- * @private
- * @param {?} $event
- * @return {?}
- */
- _checkToClose($event) {
- if (this._select.contains($event.target) || this._dropdown.contains($event.target)) {
- return;
- }
- /** @type {?} */
- const path = $event.path || ($event.composedPath && $event.composedPath());
- if ($event.target && $event.target.shadowRoot && path && path[0] && this._select.contains(path[0])) {
- return;
- }
- this._zone.run((/**
- * @return {?}
- */
- () => this.outsideClick.emit()));
- }
- /**
- * @private
- * @param {?} items
- * @param {?} firstChange
- * @return {?}
- */
- _onItemsChange(items, firstChange) {
- this.items = items || [];
- this._scrollToEndFired = false;
- this.itemsLength = items.length;
- if (this.virtualScroll) {
- this._updateItemsRange(firstChange);
- }
- else {
- this._setVirtualHeight();
- this._updateItems(firstChange);
- }
- }
- /**
- * @private
- * @param {?} firstChange
- * @return {?}
- */
- _updateItems(firstChange) {
- this.update.emit(this.items);
- if (firstChange === false) {
- return;
- }
- this._zone.runOutsideAngular((/**
- * @return {?}
- */
- () => {
- Promise.resolve().then((/**
- * @return {?}
- */
- () => {
- /** @type {?} */
- const panelHeight = this._scrollablePanel.clientHeight;
- this._panelService.setDimensions(0, panelHeight);
- this._handleDropdownPosition();
- this.scrollTo(this.markedItem, firstChange);
- }));
- }));
- }
- /**
- * @private
- * @param {?} firstChange
- * @return {?}
- */
- _updateItemsRange(firstChange) {
- this._zone.runOutsideAngular((/**
- * @return {?}
- */
- () => {
- this._measureDimensions().then((/**
- * @return {?}
- */
- () => {
- if (firstChange) {
- this._renderItemsRange(this._startOffset);
- this._handleDropdownPosition();
- }
- else {
- this._renderItemsRange();
- }
- }));
- }));
- }
- /**
- * @private
- * @param {?} scrollTop
- * @return {?}
- */
- _onContentScrolled(scrollTop) {
- if (this.virtualScroll) {
- this._renderItemsRange(scrollTop);
- }
- this._lastScrollPosition = scrollTop;
- this._fireScrollToEnd(scrollTop);
- }
- /**
- * @private
- * @param {?} height
- * @return {?}
- */
- _updateVirtualHeight(height) {
- if (this._updateScrollHeight) {
- this._virtualPadding.style.height = `${height}px`;
- this._updateScrollHeight = false;
- }
- }
- /**
- * @private
- * @return {?}
- */
- _setVirtualHeight() {
- if (!this._virtualPadding) {
- return;
- }
- this._virtualPadding.style.height = `0px`;
- }
- /**
- * @private
- * @return {?}
- */
- _onItemsLengthChanged() {
- this._updateScrollHeight = true;
- }
- /**
- * @private
- * @param {?=} scrollTop
- * @return {?}
- */
- _renderItemsRange(scrollTop = null) {
- if (scrollTop && this._lastScrollPosition === scrollTop) {
- return;
- }
- scrollTop = scrollTop || this._scrollablePanel.scrollTop;
- /** @type {?} */
- const range = this._panelService.calculateItems(scrollTop, this.itemsLength, this.bufferAmount);
- this._updateVirtualHeight(range.scrollHeight);
- this._contentPanel.style.transform = `translateY(${range.topPadding}px)`;
- this._zone.run((/**
- * @return {?}
- */
- () => {
- this.update.emit(this.items.slice(range.start, range.end));
- this.scroll.emit({ start: range.start, end: range.end });
- }));
- if (isDefined(scrollTop) && this._lastScrollPosition === 0) {
- this._scrollablePanel.scrollTop = scrollTop;
- this._lastScrollPosition = scrollTop;
- }
- }
- /**
- * @private
- * @return {?}
- */
- _measureDimensions() {
- if (this._panelService.dimensions.itemHeight > 0 || this.itemsLength === 0) {
- return Promise.resolve(this._panelService.dimensions);
- }
- const [first] = this.items;
- this.update.emit([first]);
- return Promise.resolve().then((/**
- * @return {?}
- */
- () => {
- /** @type {?} */
- const option = this._dropdown.querySelector(`#${first.htmlId}`);
- /** @type {?} */
- const optionHeight = option.clientHeight;
- this._virtualPadding.style.height = `${optionHeight * this.itemsLength}px`;
- /** @type {?} */
- const panelHeight = this._scrollablePanel.clientHeight;
- this._panelService.setDimensions(optionHeight, panelHeight);
- return this._panelService.dimensions;
- }));
- }
- /**
- * @private
- * @param {?} scrollTop
- * @return {?}
- */
- _fireScrollToEnd(scrollTop) {
- if (this._scrollToEndFired || scrollTop === 0) {
- return;
- }
- /** @type {?} */
- const padding = this.virtualScroll ?
- this._virtualPadding :
- this._contentPanel;
- if (scrollTop + this._dropdown.clientHeight >= padding.clientHeight) {
- this._zone.run((/**
- * @return {?}
- */
- () => this.scrollToEnd.emit()));
- this._scrollToEndFired = true;
- }
- }
- /**
- * @private
- * @param {?} dropdownEl
- * @return {?}
- */
- _calculateCurrentPosition(dropdownEl) {
- if (this.position !== 'auto') {
- return this.position;
- }
- /** @type {?} */
- const selectRect = this._select.getBoundingClientRect();
- /** @type {?} */
- const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
- /** @type {?} */
- const offsetTop = selectRect.top + window.pageYOffset;
- /** @type {?} */
- const height = selectRect.height;
- /** @type {?} */
- const dropdownHeight = dropdownEl.getBoundingClientRect().height;
- if (offsetTop + height + dropdownHeight > scrollTop + document.documentElement.clientHeight) {
- return 'top';
- }
- else {
- return 'bottom';
- }
- }
- /**
- * @private
- * @return {?}
- */
- _appendDropdown() {
- if (!this.appendTo) {
- return;
- }
- this._parent = document.querySelector(this.appendTo);
- if (!this._parent) {
- throw new Error(`appendTo selector ${this.appendTo} did not found any parent element`);
- }
- this._updateXPosition();
- this._parent.appendChild(this._dropdown);
- }
- /**
- * @private
- * @return {?}
- */
- _updateXPosition() {
- /** @type {?} */
- const select = this._select.getBoundingClientRect();
- /** @type {?} */
- const parent = this._parent.getBoundingClientRect();
- /** @type {?} */
- const offsetLeft = select.left - parent.left;
- this._dropdown.style.left = offsetLeft + 'px';
- this._dropdown.style.width = select.width + 'px';
- this._dropdown.style.minWidth = select.width + 'px';
- }
- /**
- * @private
- * @return {?}
- */
- _updateYPosition() {
- /** @type {?} */
- const select = this._select.getBoundingClientRect();
- /** @type {?} */
- const parent = this._parent.getBoundingClientRect();
- /** @type {?} */
- const delta = select.height;
- if (this._currentPosition === 'top') {
- /** @type {?} */
- const offsetBottom = parent.bottom - select.bottom;
- this._dropdown.style.bottom = offsetBottom + delta + 'px';
- this._dropdown.style.top = 'auto';
- }
- else if (this._currentPosition === 'bottom') {
- /** @type {?} */
- const offsetTop = select.top - parent.top;
- this._dropdown.style.top = offsetTop + delta + 'px';
- this._dropdown.style.bottom = 'auto';
- }
- }
- }
- NgDropdownPanelComponent.ɵfac = function NgDropdownPanelComponent_Factory(t) { return new (t || NgDropdownPanelComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgDropdownPanelService), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"], 8)); };
- NgDropdownPanelComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgDropdownPanelComponent, selectors: [["ng-dropdown-panel"]], viewQuery: function NgDropdownPanelComponent_Query(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstaticViewQuery"](_c0, true, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstaticViewQuery"](_c1, true, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstaticViewQuery"](_c2, true, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.contentElementRef = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.scrollElementRef = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.paddingElementRef = _t.first);
- } }, hostBindings: function NgDropdownPanelComponent_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mousedown", function NgDropdownPanelComponent_mousedown_HostBindingHandler($event) { return ctx.handleMousedown($event); });
- } }, inputs: { items: "items", position: "position", virtualScroll: "virtualScroll", filterValue: "filterValue", markedItem: "markedItem", appendTo: "appendTo", bufferAmount: "bufferAmount", headerTemplate: "headerTemplate", footerTemplate: "footerTemplate" }, outputs: { update: "update", scroll: "scroll", scrollToEnd: "scrollToEnd", outsideClick: "outsideClick" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], ngContentSelectors: _c4, decls: 9, vars: 6, consts: [["class", "ng-dropdown-header", 4, "ngIf"], [1, "ng-dropdown-panel-items", "scroll-host"], ["scroll", ""], ["padding", ""], ["content", ""], ["class", "ng-dropdown-footer", 4, "ngIf"], [1, "ng-dropdown-header"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "ng-dropdown-footer"]], template: function NgDropdownPanelComponent_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgDropdownPanelComponent_div_0_Template, 2, 4, "div", 0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 1, 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](3, "div", null, 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "div", null, 4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](7);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](8, NgDropdownPanelComponent_div_8_Template, 2, 4, "div", 5);
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.headerTemplate);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("total-padding", ctx.virtualScroll);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("scrollable-content", ctx.virtualScroll && ctx.items.length);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.footerTemplate);
- } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_4__["NgTemplateOutlet"]], encapsulation: 2, changeDetection: 0 });
- /** @nocollapse */
- NgDropdownPanelComponent.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] },
- { type: NgDropdownPanelService },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"],] }] }
- ];
- NgDropdownPanelComponent.propDecorators = {
- items: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- markedItem: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- position: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- appendTo: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- bufferAmount: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- virtualScroll: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- headerTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- footerTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- filterValue: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- update: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- scroll: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- scrollToEnd: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- outsideClick: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"] }],
- contentElementRef: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"], args: ['content', { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], static: true },] }],
- scrollElementRef: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"], args: ['scroll', { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], static: true },] }],
- paddingElementRef: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"], args: ['padding', { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], static: true },] }],
- handleMousedown: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"], args: ['mousedown', ['$event'],] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgDropdownPanelComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- selector: 'ng-dropdown-panel',
- template: `
- <div *ngIf="headerTemplate" class="ng-dropdown-header">
- <ng-container [ngTemplateOutlet]="headerTemplate" [ngTemplateOutletContext]="{ searchTerm: filterValue }"></ng-container>
- </div>
- <div #scroll class="ng-dropdown-panel-items scroll-host">
- <div #padding [class.total-padding]="virtualScroll"></div>
- <div #content [class.scrollable-content]="virtualScroll && items.length">
- <ng-content></ng-content>
- </div>
- </div>
- <div *ngIf="footerTemplate" class="ng-dropdown-footer">
- <ng-container [ngTemplateOutlet]="footerTemplate" [ngTemplateOutletContext]="{ searchTerm: filterValue }"></ng-container>
- </div>
- `
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }, { type: NgDropdownPanelService }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
- }] }]; }, { items: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], position: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], virtualScroll: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], filterValue: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], update: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], scroll: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], scrollToEnd: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }], outsideClick: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
- }],
- /**
- * @param {?} $event
- * @return {?}
- */
- handleMousedown: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
- args: ['mousedown', ['$event']]
- }], markedItem: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], appendTo: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], bufferAmount: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], headerTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], footerTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], contentElementRef: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
- args: ['content', { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], static: true }]
- }], scrollElementRef: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
- args: ['scroll', { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], static: true }]
- }], paddingElementRef: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
- args: ['padding', { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], static: true }]
- }] }); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/ng-option.component.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class NgOptionComponent {
- /**
- * @param {?} elementRef
- */
- constructor(elementRef) {
- this.elementRef = elementRef;
- this.stateChange$ = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
- this._disabled = false;
- }
- /**
- * @return {?}
- */
- get disabled() { return this._disabled; }
- /**
- * @param {?} value
- * @return {?}
- */
- set disabled(value) { this._disabled = this._isDisabled(value); }
- /**
- * @return {?}
- */
- get label() {
- return (this.elementRef.nativeElement.textContent || '').trim();
- }
- /**
- * @param {?} changes
- * @return {?}
- */
- ngOnChanges(changes) {
- if (changes.disabled) {
- this.stateChange$.next({
- value: this.value,
- disabled: this._disabled
- });
- }
- }
- /**
- * @return {?}
- */
- ngAfterViewChecked() {
- if (this.label !== this._previousLabel) {
- this._previousLabel = this.label;
- this.stateChange$.next({
- value: this.value,
- disabled: this._disabled,
- label: this.elementRef.nativeElement.innerHTML
- });
- }
- }
- /**
- * @return {?}
- */
- ngOnDestroy() {
- this.stateChange$.complete();
- }
- /**
- * @private
- * @param {?} value
- * @return {?}
- */
- _isDisabled(value) {
- return value != null && `${value}` !== 'false';
- }
- }
- NgOptionComponent.ɵfac = function NgOptionComponent_Factory(t) { return new (t || NgOptionComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])); };
- NgOptionComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgOptionComponent, selectors: [["ng-option"]], inputs: { disabled: "disabled", value: "value" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], ngContentSelectors: _c4, decls: 1, vars: 0, template: function NgOptionComponent_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](0);
- } }, encapsulation: 2, changeDetection: 0 });
- /** @nocollapse */
- NgOptionComponent.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }
- ];
- NgOptionComponent.propDecorators = {
- value: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- disabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgOptionComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ng-option',
- changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
- template: `<ng-content></ng-content>`
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }]; }, { disabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], value: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/config.service.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class NgSelectConfig {
- constructor() {
- this.notFoundText = 'No items found';
- this.typeToSearchText = 'Type to search';
- this.addTagText = 'Add item';
- this.loadingText = 'Loading...';
- this.clearAllText = 'Clear all';
- this.disableVirtualScroll = true;
- this.openOnEnter = true;
- this.appearance = 'underline';
- }
- }
- NgSelectConfig.ɵfac = function NgSelectConfig_Factory(t) { return new (t || NgSelectConfig)(); };
- /** @nocollapse */ NgSelectConfig.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function NgSelectConfig_Factory() { return new NgSelectConfig(); }, token: NgSelectConfig, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgSelectConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return []; }, null); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/ng-select.component.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /** @type {?} */
- const SELECTION_MODEL_FACTORY = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('ng-select-selection-model');
- class NgSelectComponent {
- /**
- * @param {?} classes
- * @param {?} autoFocus
- * @param {?} config
- * @param {?} newSelectionModel
- * @param {?} _elementRef
- * @param {?} _cd
- * @param {?} _console
- */
- constructor(classes, autoFocus, config, newSelectionModel, _elementRef, _cd, _console) {
- this.classes = classes;
- this.autoFocus = autoFocus;
- this._cd = _cd;
- this._console = _console;
- this.markFirst = true;
- this.dropdownPosition = 'auto';
- this.loading = false;
- this.closeOnSelect = true;
- this.hideSelected = false;
- this.selectOnTab = false;
- this.bufferAmount = 4;
- this.selectableGroup = false;
- this.selectableGroupAsModel = true;
- this.searchFn = null;
- this.trackByFn = null;
- this.clearOnBackspace = true;
- this.labelForId = null;
- this.inputAttrs = {};
- this.readonly = false;
- this.searchWhileComposing = true;
- this.minTermLength = 0;
- this.editableSearchTerm = false;
- this.keyDownFn = (/**
- * @param {?} _
- * @return {?}
- */
- (_) => true);
- this.multiple = false;
- this.addTag = false;
- this.searchable = true;
- this.clearable = true;
- this.isOpen = false;
- // output events
- this.blurEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.focusEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.changeEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.openEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.closeEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.searchEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.clearEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.addEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.removeEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.scroll = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.scrollToEnd = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this.viewPortItems = [];
- this.searchTerm = null;
- this.dropdownId = newId();
- this.escapeHTML = true;
- this.useDefaultClass = true;
- this._items = [];
- this._defaultLabel = 'label';
- this._pressedKeys = [];
- this._isComposing = false;
- this._destroy$ = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
- this._keyPress$ = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
- this._onChange = (/**
- * @param {?} _
- * @return {?}
- */
- (_) => { });
- this._onTouched = (/**
- * @return {?}
- */
- () => { });
- this.clearItem = (/**
- * @param {?} item
- * @return {?}
- */
- (item) => {
- /** @type {?} */
- const option = this.selectedItems.find((/**
- * @param {?} x
- * @return {?}
- */
- x => x.value === item));
- this.unselect(option);
- });
- this.trackByOption = (/**
- * @param {?} _
- * @param {?} item
- * @return {?}
- */
- (_, item) => {
- if (this.trackByFn) {
- return this.trackByFn(item.value);
- }
- return item;
- });
- this._mergeGlobalConfig(config);
- this.itemsList = new ItemsList(this, newSelectionModel());
- this.element = _elementRef.nativeElement;
- }
- /**
- * @return {?}
- */
- get items() { return this._items; }
- ;
- /**
- * @param {?} value
- * @return {?}
- */
- set items(value) {
- this._itemsAreUsed = true;
- this._items = value;
- }
- ;
- /**
- * @return {?}
- */
- get compareWith() { return this._compareWith; }
- /**
- * @param {?} fn
- * @return {?}
- */
- set compareWith(fn) {
- if (!isFunction(fn)) {
- throw Error('`compareWith` must be a function.');
- }
- this._compareWith = fn;
- }
- /**
- * @return {?}
- */
- get clearSearchOnAdd() { return isDefined(this._clearSearchOnAdd) ? this._clearSearchOnAdd : this.closeOnSelect; }
- ;
- /**
- * @param {?} value
- * @return {?}
- */
- set clearSearchOnAdd(value) {
- this._clearSearchOnAdd = value;
- }
- ;
- /**
- * @return {?}
- */
- get disabled() { return this.readonly || this._disabled; }
- ;
- /**
- * @return {?}
- */
- get filtered() { return (!!this.searchTerm && this.searchable || this._isComposing); }
- ;
- /**
- * @private
- * @return {?}
- */
- get _editableSearchTerm() {
- return this.editableSearchTerm && !this.multiple;
- }
- /**
- * @return {?}
- */
- get selectedItems() {
- return this.itemsList.selectedItems;
- }
- /**
- * @return {?}
- */
- get selectedValues() {
- return this.selectedItems.map((/**
- * @param {?} x
- * @return {?}
- */
- x => x.value));
- }
- /**
- * @return {?}
- */
- get hasValue() {
- return this.selectedItems.length > 0;
- }
- /**
- * @return {?}
- */
- get currentPanelPosition() {
- if (this.dropdownPanel) {
- return this.dropdownPanel.currentPosition;
- }
- return undefined;
- }
- /**
- * @return {?}
- */
- ngOnInit() {
- this._handleKeyPresses();
- this._setInputAttributes();
- }
- /**
- * @param {?} changes
- * @return {?}
- */
- ngOnChanges(changes) {
- if (changes.multiple) {
- this.itemsList.clearSelected();
- }
- if (changes.items) {
- this._setItems(changes.items.currentValue || []);
- }
- if (changes.isOpen) {
- this._manualOpen = isDefined(changes.isOpen.currentValue);
- }
- }
- /**
- * @return {?}
- */
- ngAfterViewInit() {
- if (!this._itemsAreUsed) {
- this.escapeHTML = false;
- this._setItemsFromNgOptions();
- }
- if (isDefined(this.autoFocus)) {
- this.focus();
- }
- }
- /**
- * @return {?}
- */
- ngOnDestroy() {
- this._destroy$.next();
- this._destroy$.complete();
- }
- /**
- * @param {?} $event
- * @return {?}
- */
- handleKeyDown($event) {
- /** @type {?} */
- const keyCode = KeyCode[$event.which];
- if (keyCode) {
- if (this.keyDownFn($event) === false) {
- return;
- }
- this.handleKeyCode($event);
- }
- else if ($event.key && $event.key.length === 1) {
- this._keyPress$.next($event.key.toLocaleLowerCase());
- }
- }
- /**
- * @param {?} $event
- * @return {?}
- */
- handleKeyCode($event) {
- switch ($event.which) {
- case KeyCode.ArrowDown:
- this._handleArrowDown($event);
- break;
- case KeyCode.ArrowUp:
- this._handleArrowUp($event);
- break;
- case KeyCode.Space:
- this._handleSpace($event);
- break;
- case KeyCode.Enter:
- this._handleEnter($event);
- break;
- case KeyCode.Tab:
- this._handleTab($event);
- break;
- case KeyCode.Esc:
- this.close();
- $event.preventDefault();
- break;
- case KeyCode.Backspace:
- this._handleBackspace();
- break;
- }
- }
- /**
- * @param {?} $event
- * @return {?}
- */
- handleMousedown($event) {
- /** @type {?} */
- const target = (/** @type {?} */ ($event.target));
- if (target.tagName !== 'INPUT') {
- $event.preventDefault();
- }
- if (target.classList.contains('ng-clear-wrapper')) {
- this.handleClearClick();
- return;
- }
- if (target.classList.contains('ng-arrow-wrapper')) {
- this.handleArrowClick();
- return;
- }
- if (target.classList.contains('ng-value-icon')) {
- return;
- }
- if (!this.focused) {
- this.focus();
- }
- if (this.searchable) {
- this.open();
- }
- else {
- this.toggle();
- }
- }
- /**
- * @return {?}
- */
- handleArrowClick() {
- if (this.isOpen) {
- this.close();
- }
- else {
- this.open();
- }
- }
- /**
- * @return {?}
- */
- handleClearClick() {
- if (this.hasValue) {
- this.itemsList.clearSelected(true);
- this._updateNgModel();
- }
- this._clearSearch();
- this.focus();
- this.clearEvent.emit();
- this._onSelectionChanged();
- }
- /**
- * @return {?}
- */
- clearModel() {
- if (!this.clearable) {
- return;
- }
- this.itemsList.clearSelected();
- this._updateNgModel();
- }
- /**
- * @param {?} value
- * @return {?}
- */
- writeValue(value) {
- this.itemsList.clearSelected();
- this._handleWriteValue(value);
- this._cd.markForCheck();
- }
- /**
- * @param {?} fn
- * @return {?}
- */
- registerOnChange(fn) {
- this._onChange = fn;
- }
- /**
- * @param {?} fn
- * @return {?}
- */
- registerOnTouched(fn) {
- this._onTouched = fn;
- }
- /**
- * @param {?} state
- * @return {?}
- */
- setDisabledState(state) {
- this._disabled = state;
- this._cd.markForCheck();
- }
- /**
- * @return {?}
- */
- toggle() {
- if (!this.isOpen) {
- this.open();
- }
- else {
- this.close();
- }
- }
- /**
- * @return {?}
- */
- open() {
- if (this.disabled || this.isOpen || this.itemsList.maxItemsSelected || this._manualOpen) {
- return;
- }
- if (!this._isTypeahead && !this.addTag && this.itemsList.noItemsToSelect) {
- return;
- }
- this.isOpen = true;
- this.itemsList.markSelectedOrDefault(this.markFirst);
- this.openEvent.emit();
- if (!this.searchTerm) {
- this.focus();
- }
- this.detectChanges();
- }
- /**
- * @return {?}
- */
- close() {
- if (!this.isOpen || this._manualOpen) {
- return;
- }
- this.isOpen = false;
- this._isComposing = false;
- if (!this._editableSearchTerm) {
- this._clearSearch();
- }
- else {
- this.itemsList.resetFilteredItems();
- }
- this.itemsList.unmarkItem();
- this._onTouched();
- this.closeEvent.emit();
- this._cd.markForCheck();
- }
- /**
- * @param {?} item
- * @return {?}
- */
- toggleItem(item) {
- if (!item || item.disabled || this.disabled) {
- return;
- }
- if (this.multiple && item.selected) {
- this.unselect(item);
- }
- else {
- this.select(item);
- }
- if (this._editableSearchTerm) {
- this._setSearchTermFromItems();
- }
- this._onSelectionChanged();
- }
- /**
- * @param {?} item
- * @return {?}
- */
- select(item) {
- if (!item.selected) {
- this.itemsList.select(item);
- if (this.clearSearchOnAdd && !this._editableSearchTerm) {
- this._clearSearch();
- }
- this._updateNgModel();
- if (this.multiple) {
- this.addEvent.emit(item.value);
- }
- }
- if (this.closeOnSelect || this.itemsList.noItemsToSelect) {
- this.close();
- }
- }
- /**
- * @return {?}
- */
- focus() {
- this.searchInput.nativeElement.focus();
- }
- /**
- * @return {?}
- */
- blur() {
- this.searchInput.nativeElement.blur();
- }
- /**
- * @param {?} item
- * @return {?}
- */
- unselect(item) {
- if (!item) {
- return;
- }
- this.itemsList.unselect(item);
- this.focus();
- this._updateNgModel();
- this.removeEvent.emit(item);
- }
- /**
- * @return {?}
- */
- selectTag() {
- /** @type {?} */
- let tag;
- if (isFunction(this.addTag)) {
- tag = ((/** @type {?} */ (this.addTag)))(this.searchTerm);
- }
- else {
- tag = this._primitive ? this.searchTerm : { [this.bindLabel]: this.searchTerm };
- }
- /** @type {?} */
- const handleTag = (/**
- * @param {?} item
- * @return {?}
- */
- (item) => this._isTypeahead || !this.isOpen ? this.itemsList.mapItem(item, null) : this.itemsList.addItem(item));
- if (isPromise(tag)) {
- tag.then((/**
- * @param {?} item
- * @return {?}
- */
- item => this.select(handleTag(item)))).catch((/**
- * @return {?}
- */
- () => { }));
- }
- else if (tag) {
- this.select(handleTag(tag));
- }
- }
- /**
- * @return {?}
- */
- showClear() {
- return this.clearable && (this.hasValue || this.searchTerm) && !this.disabled;
- }
- /**
- * @return {?}
- */
- get showAddTag() {
- if (!this._validTerm) {
- return false;
- }
- /** @type {?} */
- const term = this.searchTerm.toLowerCase().trim();
- return this.addTag &&
- (!this.itemsList.filteredItems.some((/**
- * @param {?} x
- * @return {?}
- */
- x => x.label.toLowerCase() === term)) &&
- (!this.hideSelected && this.isOpen || !this.selectedItems.some((/**
- * @param {?} x
- * @return {?}
- */
- x => x.label.toLowerCase() === term)))) &&
- !this.loading;
- }
- /**
- * @return {?}
- */
- showNoItemsFound() {
- /** @type {?} */
- const empty = this.itemsList.filteredItems.length === 0;
- return ((empty && !this._isTypeahead && !this.loading) ||
- (empty && this._isTypeahead && this._validTerm && !this.loading)) &&
- !this.showAddTag;
- }
- /**
- * @return {?}
- */
- showTypeToSearch() {
- /** @type {?} */
- const empty = this.itemsList.filteredItems.length === 0;
- return empty && this._isTypeahead && !this._validTerm && !this.loading;
- }
- /**
- * @return {?}
- */
- onCompositionStart() {
- this._isComposing = true;
- }
- /**
- * @param {?} term
- * @return {?}
- */
- onCompositionEnd(term) {
- this._isComposing = false;
- if (this.searchWhileComposing) {
- return;
- }
- this.filter(term);
- }
- /**
- * @param {?} term
- * @return {?}
- */
- filter(term) {
- if (this._isComposing && !this.searchWhileComposing) {
- return;
- }
- this.searchTerm = term;
- if (this._isTypeahead && (this._validTerm || this.minTermLength === 0)) {
- this.typeahead.next(term);
- }
- if (!this._isTypeahead) {
- this.itemsList.filter(this.searchTerm);
- if (this.isOpen) {
- this.itemsList.markSelectedOrDefault(this.markFirst);
- }
- }
- this.searchEvent.emit({ term, items: this.itemsList.filteredItems.map((/**
- * @param {?} x
- * @return {?}
- */
- x => x.value)) });
- this.open();
- }
- /**
- * @param {?} $event
- * @return {?}
- */
- onInputFocus($event) {
- if (this.focused) {
- return;
- }
- if (this._editableSearchTerm) {
- this._setSearchTermFromItems();
- }
- this.element.classList.add('ng-select-focused');
- this.focusEvent.emit($event);
- this.focused = true;
- }
- /**
- * @param {?} $event
- * @return {?}
- */
- onInputBlur($event) {
- this.element.classList.remove('ng-select-focused');
- this.blurEvent.emit($event);
- if (!this.isOpen && !this.disabled) {
- this._onTouched();
- }
- if (this._editableSearchTerm) {
- this._setSearchTermFromItems();
- }
- this.focused = false;
- }
- /**
- * @param {?} item
- * @return {?}
- */
- onItemHover(item) {
- if (item.disabled) {
- return;
- }
- this.itemsList.markItem(item);
- }
- /**
- * @return {?}
- */
- detectChanges() {
- if (!((/** @type {?} */ (this._cd))).destroyed) {
- this._cd.detectChanges();
- }
- }
- /**
- * @private
- * @return {?}
- */
- _setSearchTermFromItems() {
- /** @type {?} */
- const selected = this.selectedItems && this.selectedItems[0];
- this.searchTerm = (selected && selected.label) || null;
- }
- /**
- * @private
- * @param {?} items
- * @return {?}
- */
- _setItems(items) {
- /** @type {?} */
- const firstItem = items[0];
- this.bindLabel = this.bindLabel || this._defaultLabel;
- this._primitive = isDefined(firstItem) ? !isObject(firstItem) : this._primitive || this.bindLabel === this._defaultLabel;
- this.itemsList.setItems(items);
- if (items.length > 0 && this.hasValue) {
- this.itemsList.mapSelectedItems();
- }
- if (this.isOpen && isDefined(this.searchTerm) && !this._isTypeahead) {
- this.itemsList.filter(this.searchTerm);
- }
- if (this._isTypeahead || this.isOpen) {
- this.itemsList.markSelectedOrDefault(this.markFirst);
- }
- }
- /**
- * @private
- * @return {?}
- */
- _setItemsFromNgOptions() {
- /** @type {?} */
- const mapNgOptions = (/**
- * @param {?} options
- * @return {?}
- */
- (options) => {
- this.items = options.map((/**
- * @param {?} option
- * @return {?}
- */
- option => ({
- $ngOptionValue: option.value,
- $ngOptionLabel: option.elementRef.nativeElement.innerHTML,
- disabled: option.disabled
- })));
- this.itemsList.setItems(this.items);
- if (this.hasValue) {
- this.itemsList.mapSelectedItems();
- }
- this.detectChanges();
- });
- /** @type {?} */
- const handleOptionChange = (/**
- * @return {?}
- */
- () => {
- /** @type {?} */
- const changedOrDestroyed = Object(rxjs__WEBPACK_IMPORTED_MODULE_3__["merge"])(this.ngOptions.changes, this._destroy$);
- Object(rxjs__WEBPACK_IMPORTED_MODULE_3__["merge"])(...this.ngOptions.map((/**
- * @param {?} option
- * @return {?}
- */
- option => option.stateChange$)))
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["takeUntil"])(changedOrDestroyed))
- .subscribe((/**
- * @param {?} option
- * @return {?}
- */
- option => {
- /** @type {?} */
- const item = this.itemsList.findItem(option.value);
- item.disabled = option.disabled;
- item.label = option.label || item.label;
- this._cd.detectChanges();
- }));
- });
- this.ngOptions.changes
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["startWith"])(this.ngOptions), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["takeUntil"])(this._destroy$))
- .subscribe((/**
- * @param {?} options
- * @return {?}
- */
- options => {
- this.bindLabel = this._defaultLabel;
- mapNgOptions(options);
- handleOptionChange();
- }));
- }
- /**
- * @private
- * @param {?} value
- * @return {?}
- */
- _isValidWriteValue(value) {
- if (!isDefined(value) || (this.multiple && value === '') || Array.isArray(value) && value.length === 0) {
- return false;
- }
- /** @type {?} */
- const validateBinding = (/**
- * @param {?} item
- * @return {?}
- */
- (item) => {
- if (!isDefined(this.compareWith) && isObject(item) && this.bindValue) {
- this._console.warn(`Setting object(${JSON.stringify(item)}) as your model with bindValue is not allowed unless [compareWith] is used.`);
- return false;
- }
- return true;
- });
- if (this.multiple) {
- if (!Array.isArray(value)) {
- this._console.warn('Multiple select ngModel should be array.');
- return false;
- }
- return value.every((/**
- * @param {?} item
- * @return {?}
- */
- item => validateBinding(item)));
- }
- else {
- return validateBinding(value);
- }
- }
- /**
- * @private
- * @param {?} ngModel
- * @return {?}
- */
- _handleWriteValue(ngModel) {
- if (!this._isValidWriteValue(ngModel)) {
- return;
- }
- /** @type {?} */
- const select = (/**
- * @param {?} val
- * @return {?}
- */
- (val) => {
- /** @type {?} */
- let item = this.itemsList.findItem(val);
- if (item) {
- this.itemsList.select(item);
- }
- else {
- /** @type {?} */
- const isValObject = isObject(val);
- /** @type {?} */
- const isPrimitive = !isValObject && !this.bindValue;
- if ((isValObject || isPrimitive)) {
- this.itemsList.select(this.itemsList.mapItem(val, null));
- }
- else if (this.bindValue) {
- item = {
- [this.bindLabel]: null,
- [this.bindValue]: val
- };
- this.itemsList.select(this.itemsList.mapItem(item, null));
- }
- }
- });
- if (this.multiple) {
- ((/** @type {?} */ (ngModel))).forEach((/**
- * @param {?} item
- * @return {?}
- */
- item => select(item)));
- }
- else {
- select(ngModel);
- }
- }
- /**
- * @private
- * @return {?}
- */
- _handleKeyPresses() {
- if (this.searchable) {
- return;
- }
- this._keyPress$
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["takeUntil"])(this._destroy$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["tap"])((/**
- * @param {?} letter
- * @return {?}
- */
- letter => this._pressedKeys.push(letter))), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["debounceTime"])(200), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])((/**
- * @return {?}
- */
- () => this._pressedKeys.length > 0)), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])((/**
- * @return {?}
- */
- () => this._pressedKeys.join(''))))
- .subscribe((/**
- * @param {?} term
- * @return {?}
- */
- term => {
- /** @type {?} */
- const item = this.itemsList.findByLabel(term);
- if (item) {
- if (this.isOpen) {
- this.itemsList.markItem(item);
- this._cd.markForCheck();
- }
- else {
- this.select(item);
- }
- }
- this._pressedKeys = [];
- }));
- }
- /**
- * @private
- * @return {?}
- */
- _setInputAttributes() {
- /** @type {?} */
- const input = this.searchInput.nativeElement;
- /** @type {?} */
- const attributes = Object.assign({ type: 'text', autocorrect: 'off', autocapitalize: 'off', autocomplete: this.labelForId ? 'off' : this.dropdownId }, this.inputAttrs);
- for (const key of Object.keys(attributes)) {
- input.setAttribute(key, attributes[key]);
- }
- }
- /**
- * @private
- * @return {?}
- */
- _updateNgModel() {
- /** @type {?} */
- const model = [];
- for (const item of this.selectedItems) {
- if (this.bindValue) {
- /** @type {?} */
- let value = null;
- if (item.children) {
- /** @type {?} */
- const groupKey = this.groupValue ? this.bindValue : (/** @type {?} */ (this.groupBy));
- value = item.value[groupKey || (/** @type {?} */ (this.groupBy))];
- }
- else {
- value = this.itemsList.resolveNested(item.value, this.bindValue);
- }
- model.push(value);
- }
- else {
- model.push(item.value);
- }
- }
- /** @type {?} */
- const selected = this.selectedItems.map((/**
- * @param {?} x
- * @return {?}
- */
- x => x.value));
- if (this.multiple) {
- this._onChange(model);
- this.changeEvent.emit(selected);
- }
- else {
- this._onChange(isDefined(model[0]) ? model[0] : null);
- this.changeEvent.emit(selected[0]);
- }
- this._cd.markForCheck();
- }
- /**
- * @private
- * @return {?}
- */
- _clearSearch() {
- if (!this.searchTerm) {
- return;
- }
- this._changeSearch(null);
- this.itemsList.resetFilteredItems();
- }
- /**
- * @private
- * @param {?} searchTerm
- * @return {?}
- */
- _changeSearch(searchTerm) {
- this.searchTerm = searchTerm;
- if (this._isTypeahead) {
- this.typeahead.next(searchTerm);
- }
- }
- /**
- * @private
- * @return {?}
- */
- _scrollToMarked() {
- if (!this.isOpen || !this.dropdownPanel) {
- return;
- }
- this.dropdownPanel.scrollTo(this.itemsList.markedItem);
- }
- /**
- * @private
- * @return {?}
- */
- _scrollToTag() {
- if (!this.isOpen || !this.dropdownPanel) {
- return;
- }
- this.dropdownPanel.scrollToTag();
- }
- /**
- * @private
- * @return {?}
- */
- _onSelectionChanged() {
- if (this.isOpen && this.multiple && this.appendTo) {
- // Make sure items are rendered.
- this._cd.detectChanges();
- this.dropdownPanel.adjustPosition();
- }
- }
- /**
- * @private
- * @param {?} $event
- * @return {?}
- */
- _handleTab($event) {
- if (this.isOpen === false && !this.addTag) {
- return;
- }
- if (this.selectOnTab) {
- if (this.itemsList.markedItem) {
- this.toggleItem(this.itemsList.markedItem);
- $event.preventDefault();
- }
- else if (this.showAddTag) {
- this.selectTag();
- $event.preventDefault();
- }
- else {
- this.close();
- }
- }
- else {
- this.close();
- }
- }
- /**
- * @private
- * @param {?} $event
- * @return {?}
- */
- _handleEnter($event) {
- if (this.isOpen || this._manualOpen) {
- if (this.itemsList.markedItem) {
- this.toggleItem(this.itemsList.markedItem);
- }
- else if (this.showAddTag) {
- this.selectTag();
- }
- }
- else if (this.openOnEnter) {
- this.open();
- }
- else {
- return;
- }
- $event.preventDefault();
- }
- /**
- * @private
- * @param {?} $event
- * @return {?}
- */
- _handleSpace($event) {
- if (this.isOpen || this._manualOpen) {
- return;
- }
- this.open();
- $event.preventDefault();
- }
- /**
- * @private
- * @param {?} $event
- * @return {?}
- */
- _handleArrowDown($event) {
- if (this._nextItemIsTag(+1)) {
- this.itemsList.unmarkItem();
- this._scrollToTag();
- }
- else {
- this.itemsList.markNextItem();
- this._scrollToMarked();
- }
- this.open();
- $event.preventDefault();
- }
- /**
- * @private
- * @param {?} $event
- * @return {?}
- */
- _handleArrowUp($event) {
- if (!this.isOpen) {
- return;
- }
- if (this._nextItemIsTag(-1)) {
- this.itemsList.unmarkItem();
- this._scrollToTag();
- }
- else {
- this.itemsList.markPreviousItem();
- this._scrollToMarked();
- }
- $event.preventDefault();
- }
- /**
- * @private
- * @param {?} nextStep
- * @return {?}
- */
- _nextItemIsTag(nextStep) {
- /** @type {?} */
- const nextIndex = this.itemsList.markedIndex + nextStep;
- return this.addTag && this.searchTerm
- && this.itemsList.markedItem
- && (nextIndex < 0 || nextIndex === this.itemsList.filteredItems.length);
- }
- /**
- * @private
- * @return {?}
- */
- _handleBackspace() {
- if (this.searchTerm || !this.clearable || !this.clearOnBackspace || !this.hasValue) {
- return;
- }
- if (this.multiple) {
- this.unselect(this.itemsList.lastSelectedItem);
- }
- else {
- this.clearModel();
- }
- }
- /**
- * @private
- * @return {?}
- */
- get _isTypeahead() {
- return this.typeahead && this.typeahead.observers.length > 0;
- }
- /**
- * @private
- * @return {?}
- */
- get _validTerm() {
- /** @type {?} */
- const term = this.searchTerm && this.searchTerm.trim();
- return term && term.length >= this.minTermLength;
- }
- /**
- * @private
- * @param {?} config
- * @return {?}
- */
- _mergeGlobalConfig(config) {
- this.placeholder = this.placeholder || config.placeholder;
- this.notFoundText = this.notFoundText || config.notFoundText;
- this.typeToSearchText = this.typeToSearchText || config.typeToSearchText;
- this.addTagText = this.addTagText || config.addTagText;
- this.loadingText = this.loadingText || config.loadingText;
- this.clearAllText = this.clearAllText || config.clearAllText;
- this.virtualScroll = isDefined(this.virtualScroll)
- ? this.virtualScroll
- : isDefined(config.disableVirtualScroll) ? !config.disableVirtualScroll : false;
- this.openOnEnter = isDefined(this.openOnEnter) ? this.openOnEnter : config.openOnEnter;
- this.appendTo = this.appendTo || config.appendTo;
- this.bindValue = this.bindValue || config.bindValue;
- this.appearance = this.appearance || config.appearance;
- }
- }
- NgSelectComponent.ɵfac = function NgSelectComponent_Factory(t) { return new (t || NgSelectComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinjectAttribute"]('class'), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinjectAttribute"]('autofocus'), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgSelectConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](SELECTION_MODEL_FACTORY), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ConsoleService)); };
- NgSelectComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: NgSelectComponent, selectors: [["ng-select"]], contentQueries: function NgSelectComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgOptionTemplateDirective, true, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgOptgroupTemplateDirective, true, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgLabelTemplateDirective, true, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgMultiLabelTemplateDirective, true, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgHeaderTemplateDirective, true, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgFooterTemplateDirective, true, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgNotFoundTemplateDirective, true, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgTypeToSearchTemplateDirective, true, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgLoadingTextTemplateDirective, true, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgTagTemplateDirective, true, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgLoadingSpinnerTemplateDirective, true, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgOptionComponent, true);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.optionTemplate = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.optgroupTemplate = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.labelTemplate = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.multiLabelTemplate = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.headerTemplate = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.footerTemplate = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.notFoundTemplate = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.typeToSearchTemplate = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.loadingTextTemplate = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.tagTemplate = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.loadingSpinnerTemplate = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.ngOptions = _t);
- } }, viewQuery: function NgSelectComponent_Query(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](NgDropdownPanelComponent, true);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstaticViewQuery"](_c5, true);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.dropdownPanel = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.searchInput = _t.first);
- } }, hostAttrs: ["role", "listbox"], hostVars: 20, hostBindings: function NgSelectComponent_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keydown", function NgSelectComponent_keydown_HostBindingHandler($event) { return ctx.handleKeyDown($event); });
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("ng-select", ctx.useDefaultClass)("ng-select-single", !ctx.multiple)("ng-select-multiple", ctx.multiple)("ng-select-taggable", ctx.addTag)("ng-select-searchable", ctx.searchable)("ng-select-clearable", ctx.clearable)("ng-select-opened", ctx.isOpen)("ng-select-disabled", ctx.disabled)("ng-select-filtered", ctx.filtered)("ng-select-typeahead", ctx.typeahead);
- } }, inputs: { markFirst: "markFirst", dropdownPosition: "dropdownPosition", loading: "loading", closeOnSelect: "closeOnSelect", hideSelected: "hideSelected", selectOnTab: "selectOnTab", bufferAmount: "bufferAmount", selectableGroup: "selectableGroup", selectableGroupAsModel: "selectableGroupAsModel", searchFn: "searchFn", trackByFn: "trackByFn", clearOnBackspace: "clearOnBackspace", labelForId: "labelForId", inputAttrs: "inputAttrs", readonly: "readonly", searchWhileComposing: "searchWhileComposing", minTermLength: "minTermLength", editableSearchTerm: "editableSearchTerm", keyDownFn: "keyDownFn", multiple: "multiple", addTag: "addTag", searchable: "searchable", clearable: "clearable", isOpen: "isOpen", items: "items", compareWith: "compareWith", clearSearchOnAdd: "clearSearchOnAdd", bindLabel: "bindLabel", placeholder: "placeholder", notFoundText: "notFoundText", typeToSearchText: "typeToSearchText", addTagText: "addTagText", loadingText: "loadingText", clearAllText: "clearAllText", virtualScroll: "virtualScroll", openOnEnter: "openOnEnter", appendTo: "appendTo", bindValue: "bindValue", appearance: "appearance", maxSelectedItems: "maxSelectedItems", groupBy: "groupBy", groupValue: "groupValue", tabIndex: "tabIndex", typeahead: "typeahead" }, outputs: { blurEvent: "blur", focusEvent: "focus", changeEvent: "change", openEvent: "open", closeEvent: "close", searchEvent: "search", clearEvent: "clear", addEvent: "add", removeEvent: "remove", scroll: "scroll", scrollToEnd: "scrollToEnd" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
- provide: _angular_forms__WEBPACK_IMPORTED_MODULE_1__["NG_VALUE_ACCESSOR"],
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(( /**
- * @return {?}
- */() => NgSelectComponent)),
- multi: true
- }, NgDropdownPanelService]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]], decls: 14, vars: 18, consts: [[1, "ng-select-container", 3, "mousedown"], [1, "ng-value-container"], [1, "ng-placeholder"], [4, "ngIf"], [1, "ng-input"], ["role", "combobox", 3, "readOnly", "disabled", "value", "input", "compositionstart", "compositionend", "focus", "blur", "change"], ["searchInput", ""], ["class", "ng-clear-wrapper", 3, "title", 4, "ngIf"], [1, "ng-arrow-wrapper"], [1, "ng-arrow"], ["class", "ng-dropdown-panel", 3, "virtualScroll", "bufferAmount", "appendTo", "position", "headerTemplate", "footerTemplate", "filterValue", "items", "markedItem", "ng-select-multiple", "ngClass", "id", "update", "scroll", "scrollToEnd", "outsideClick", 4, "ngIf"], ["class", "ng-value", 3, "ng-value-disabled", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "ng-value"], ["defaultLabelTemplate", ""], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], ["aria-hidden", "true", 1, "ng-value-icon", "left", 3, "click"], [1, "ng-value-label", 3, "ngItemLabel", "escape"], ["defaultLoadingSpinnerTemplate", ""], [3, "ngTemplateOutlet"], [1, "ng-spinner-loader"], [1, "ng-clear-wrapper", 3, "title"], ["aria-hidden", "true", 1, "ng-clear"], [1, "ng-dropdown-panel", 3, "virtualScroll", "bufferAmount", "appendTo", "position", "headerTemplate", "footerTemplate", "filterValue", "items", "markedItem", "ngClass", "id", "update", "scroll", "scrollToEnd", "outsideClick"], ["class", "ng-option", 3, "ng-option-disabled", "ng-option-selected", "ng-optgroup", "ng-option", "ng-option-child", "ng-option-marked", "click", "mouseover", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["class", "ng-option", "role", "option", 3, "ng-option-marked", "mouseover", "click", 4, "ngIf"], [1, "ng-option", 3, "click", "mouseover"], ["defaultOptionTemplate", ""], [1, "ng-option-label", 3, "ngItemLabel", "escape"], ["role", "option", 1, "ng-option", 3, "mouseover", "click"], ["defaultTagTemplate", ""], [1, "ng-tag-label"], ["defaultNotFoundTemplate", ""], [1, "ng-option", "ng-option-disabled"], ["defaultTypeToSearchTemplate", ""], ["defaultLoadingTextTemplate", ""]], template: function NgSelectComponent_Template(rf, ctx) { if (rf & 1) {
- const _r52 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mousedown", function NgSelectComponent_Template_div_mousedown_0_listener($event) { return ctx.handleMousedown($event); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "div", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, NgSelectComponent_ng_container_4_Template, 2, 2, "ng-container", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](5, NgSelectComponent_5_Template, 1, 5, undefined, 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "div", 4);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](7, "input", 5, 6);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("input", function NgSelectComponent_Template_input_input_7_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r52); const _r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](8); return ctx.filter(_r2.value); })("compositionstart", function NgSelectComponent_Template_input_compositionstart_7_listener() { return ctx.onCompositionStart(); })("compositionend", function NgSelectComponent_Template_input_compositionend_7_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r52); const _r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](8); return ctx.onCompositionEnd(_r2.value); })("focus", function NgSelectComponent_Template_input_focus_7_listener($event) { return ctx.onInputFocus($event); })("blur", function NgSelectComponent_Template_input_blur_7_listener($event) { return ctx.onInputBlur($event); })("change", function NgSelectComponent_Template_input_change_7_listener($event) { return $event.stopPropagation(); });
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](9, NgSelectComponent_ng_container_9_Template, 4, 1, "ng-container", 3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](10, NgSelectComponent_span_10_Template, 3, 1, "span", 7);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](11, "span", 8);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](12, "span", 9);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](13, NgSelectComponent_ng_dropdown_panel_13_Template, 7, 19, "ng-dropdown-panel", 10);
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("ng-appearance-outline", ctx.appearance === "outline")("ng-has-value", ctx.hasValue);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx.placeholder);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.multiLabelTemplate && ctx.selectedItems.length > 0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.multiLabelTemplate && ctx.selectedValues.length > 0);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("readOnly", !ctx.searchable || ctx.itemsList.maxItemsSelected)("disabled", ctx.disabled)("value", ctx.searchTerm ? ctx.searchTerm : "");
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("id", ctx.labelForId)("tabindex", ctx.tabIndex)("aria-expanded", ctx.isOpen)("aria-owns", ctx.isOpen ? ctx.dropdownId : null)("aria-activedescendant", ctx.isOpen ? ctx.itemsList == null ? null : ctx.itemsList.markedItem == null ? null : ctx.itemsList.markedItem.htmlId : null);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.loading);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.showClear());
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.isOpen);
- } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_4__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_4__["NgTemplateOutlet"], NgItemLabelDirective, NgDropdownPanelComponent, _angular_common__WEBPACK_IMPORTED_MODULE_4__["NgClass"]], styles: [".ng-select{display:block;position:relative}.ng-select,.ng-select div,.ng-select input,.ng-select span{box-sizing:border-box}.ng-select [hidden]{display:none}.ng-select.ng-select-searchable .ng-select-container .ng-value-container .ng-input{opacity:1}.ng-select.ng-select-opened .ng-select-container{z-index:1001}.ng-select.ng-select-disabled .ng-select-container .ng-value-container .ng-placeholder,.ng-select.ng-select-disabled .ng-select-container .ng-value-container .ng-value{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:default;user-select:none}.ng-select.ng-select-disabled .ng-arrow-wrapper{cursor:default}.ng-select.ng-select-filtered .ng-placeholder{display:none}.ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}.ng-select .ng-select-container .ng-value-container{display:flex;flex:1}.ng-select .ng-select-container .ng-value-container .ng-input{opacity:0}.ng-select .ng-select-container .ng-value-container .ng-input>input{background:none transparent;border:0;box-shadow:none;box-sizing:content-box;cursor:default;outline:none;padding:0;width:100%}.ng-select .ng-select-container .ng-value-container .ng-input>input::-ms-clear{display:none}.ng-select .ng-select-container .ng-value-container .ng-input>input[readonly]{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;padding:0;user-select:none;width:0}.ng-select.ng-select-single.ng-select-filtered .ng-select-container .ng-value-container .ng-value{visibility:hidden}.ng-select.ng-select-single .ng-select-container .ng-value-container,.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:none}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{left:0;position:absolute;width:100%}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-icon{display:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{flex-wrap:wrap}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{position:absolute}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{white-space:nowrap}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-icon{display:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{cursor:pointer}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{flex:1;z-index:2}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{z-index:1}.ng-select .ng-clear-wrapper{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:pointer;position:relative;user-select:none;width:17px}.ng-select .ng-clear-wrapper .ng-clear{display:inline-block;font-size:18px;line-height:1;pointer-events:none}.ng-select .ng-spinner-loader{-webkit-animation:load8 .8s linear infinite;animation:load8 .8s linear infinite;border:2px solid rgba(66,66,66,.2);border-left-color:#424242;border-radius:50%;font-size:10px;height:17px;margin-right:5px;position:relative;text-indent:-9999em;transform:translateZ(0);width:17px}.ng-select .ng-spinner-loader:after{border-radius:50%;height:17px;width:17px}@-webkit-keyframes load8{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes load8{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.ng-select .ng-arrow-wrapper{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:pointer;position:relative;text-align:center;user-select:none}.ng-select .ng-arrow-wrapper .ng-arrow{display:inline-block;height:0;pointer-events:none;position:relative;width:0}.ng-dropdown-panel{-webkit-overflow-scrolling:touch;box-sizing:border-box;opacity:0;position:absolute;width:100%;z-index:1050}.ng-dropdown-panel .ng-dropdown-panel-items{box-sizing:border-box;display:block;height:auto;max-height:240px;overflow-y:auto}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .highlighted{font-weight:700;text-decoration:underline}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.disabled{cursor:default}.ng-dropdown-panel .scroll-host{-webkit-overflow-scrolling:touch;display:block;overflow:hidden;overflow-y:auto;position:relative}.ng-dropdown-panel .scrollable-content{height:100%;left:0;position:absolute;top:0;width:100%}.ng-dropdown-panel .total-padding{opacity:0;width:1px}"], encapsulation: 2, changeDetection: 0 });
- /** @nocollapse */
- NgSelectComponent.ctorParameters = () => [
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"], args: ['class',] }] },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"], args: ['autofocus',] }] },
- { type: NgSelectConfig },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [SELECTION_MODEL_FACTORY,] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] },
- { type: ConsoleService }
- ];
- NgSelectComponent.propDecorators = {
- bindLabel: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- bindValue: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- markFirst: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- placeholder: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- notFoundText: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- typeToSearchText: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- addTagText: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- loadingText: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- clearAllText: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- appearance: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- dropdownPosition: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- appendTo: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- loading: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- closeOnSelect: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- hideSelected: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- selectOnTab: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- openOnEnter: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- maxSelectedItems: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- groupBy: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- groupValue: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- bufferAmount: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- virtualScroll: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- selectableGroup: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- selectableGroupAsModel: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- searchFn: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- trackByFn: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- clearOnBackspace: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- labelForId: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- inputAttrs: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- tabIndex: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- readonly: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- searchWhileComposing: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- minTermLength: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- editableSearchTerm: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- keyDownFn: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- typeahead: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"], args: ['class.ng-select-typeahead',] }],
- multiple: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"], args: ['class.ng-select-multiple',] }],
- addTag: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"], args: ['class.ng-select-taggable',] }],
- searchable: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"], args: ['class.ng-select-searchable',] }],
- clearable: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"], args: ['class.ng-select-clearable',] }],
- isOpen: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"], args: ['class.ng-select-opened',] }],
- items: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- compareWith: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- clearSearchOnAdd: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- blurEvent: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['blur',] }],
- focusEvent: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['focus',] }],
- changeEvent: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['change',] }],
- openEvent: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['open',] }],
- closeEvent: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['close',] }],
- searchEvent: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['search',] }],
- clearEvent: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['clear',] }],
- addEvent: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['add',] }],
- removeEvent: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['remove',] }],
- scroll: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['scroll',] }],
- scrollToEnd: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['scrollToEnd',] }],
- optionTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgOptionTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] },] }],
- optgroupTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgOptgroupTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] },] }],
- labelTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgLabelTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] },] }],
- multiLabelTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgMultiLabelTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] },] }],
- headerTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgHeaderTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] },] }],
- footerTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgFooterTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] },] }],
- notFoundTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgNotFoundTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] },] }],
- typeToSearchTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgTypeToSearchTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] },] }],
- loadingTextTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgLoadingTextTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] },] }],
- tagTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgTagTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] },] }],
- loadingSpinnerTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"], args: [NgLoadingSpinnerTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] },] }],
- dropdownPanel: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"], args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])((/**
- * @return {?}
- */
- () => NgDropdownPanelComponent)),] }],
- searchInput: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"], args: ['searchInput', { static: true },] }],
- ngOptions: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"], args: [NgOptionComponent, { descendants: true },] }],
- disabled: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"], args: ['class.ng-select-disabled',] }],
- filtered: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"], args: ['class.ng-select-filtered',] }],
- handleKeyDown: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"], args: ['keydown', ['$event'],] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgSelectComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
- args: [{
- selector: 'ng-select',
- template: "<div\n (mousedown)=\"handleMousedown($event)\"\n [class.ng-appearance-outline]=\"appearance === 'outline'\"\n [class.ng-has-value]=\"hasValue\"\n class=\"ng-select-container\">\n\n <div class=\"ng-value-container\">\n <div class=\"ng-placeholder\">{{placeholder}}</div>\n\n <ng-container *ngIf=\"!multiLabelTemplate && selectedItems.length > 0\">\n <div [class.ng-value-disabled]=\"item.disabled\" class=\"ng-value\" *ngFor=\"let item of selectedItems; trackBy: trackByOption\">\n <ng-template #defaultLabelTemplate>\n <span class=\"ng-value-icon left\" (click)=\"unselect(item);\" aria-hidden=\"true\">\u00D7</span>\n <span class=\"ng-value-label\" [ngItemLabel]=\"item.label\" [escape]=\"escapeHTML\"></span>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"labelTemplate || defaultLabelTemplate\"\n [ngTemplateOutletContext]=\"{ item: item.value, clear: clearItem, label: item.label }\">\n </ng-template>\n </div>\n </ng-container>\n\n <ng-template *ngIf=\"multiLabelTemplate && selectedValues.length > 0\"\n [ngTemplateOutlet]=\"multiLabelTemplate\"\n [ngTemplateOutletContext]=\"{ items: selectedValues, clear: clearItem }\">\n </ng-template>\n\n <div class=\"ng-input\">\n <input #searchInput\n [attr.id]=\"labelForId\"\n [attr.tabindex]=\"tabIndex\"\n [readOnly]=\"!searchable || itemsList.maxItemsSelected\"\n [disabled]=\"disabled\"\n [value]=\"searchTerm ? searchTerm : ''\"\n (input)=\"filter(searchInput.value)\"\n (compositionstart)=\"onCompositionStart()\"\n (compositionend)=\"onCompositionEnd(searchInput.value)\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputBlur($event)\"\n (change)=\"$event.stopPropagation()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-owns]=\"isOpen ? dropdownId : null\"\n [attr.aria-activedescendant]=\"isOpen ? itemsList?.markedItem?.htmlId : null\">\n </div>\n </div>\n\n <ng-container *ngIf=\"loading\">\n <ng-template #defaultLoadingSpinnerTemplate>\n <div class=\"ng-spinner-loader\"></div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"loadingSpinnerTemplate || defaultLoadingSpinnerTemplate\">\n </ng-template>\n </ng-container>\n\n <span *ngIf=\"showClear()\" class=\"ng-clear-wrapper\" title=\"{{clearAllText}}\">\n <span class=\"ng-clear\" aria-hidden=\"true\">\u00D7</span>\n </span>\n\n <span class=\"ng-arrow-wrapper\">\n <span class=\"ng-arrow\"></span>\n </span>\n</div>\n\n<ng-dropdown-panel *ngIf=\"isOpen\"\n class=\"ng-dropdown-panel\"\n [virtualScroll]=\"virtualScroll\"\n [bufferAmount]=\"bufferAmount\"\n [appendTo]=\"appendTo\"\n [position]=\"dropdownPosition\"\n [headerTemplate]=\"headerTemplate\"\n [footerTemplate]=\"footerTemplate\"\n [filterValue]=\"searchTerm\"\n [items]=\"itemsList.filteredItems\"\n [markedItem]=\"itemsList.markedItem\"\n (update)=\"viewPortItems = $event\"\n (scroll)=\"scroll.emit($event)\"\n (scrollToEnd)=\"scrollToEnd.emit($event)\"\n (outsideClick)=\"close()\"\n [class.ng-select-multiple]=\"multiple\"\n [ngClass]=\"appendTo ? classes : null\"\n [id]=\"dropdownId\">\n\n <ng-container>\n <div class=\"ng-option\" [attr.role]=\"item.children ? 'group' : 'option'\" (click)=\"toggleItem(item)\" (mouseover)=\"onItemHover(item)\"\n *ngFor=\"let item of viewPortItems; trackBy: trackByOption\"\n [class.ng-option-disabled]=\"item.disabled\"\n [class.ng-option-selected]=\"item.selected\"\n [class.ng-optgroup]=\"item.children\"\n [class.ng-option]=\"!item.children\"\n [class.ng-option-child]=\"!!item.parent\"\n [class.ng-option-marked]=\"item === itemsList.markedItem\"\n [attr.aria-selected]=\"item.selected\"\n [attr.id]=\"item?.htmlId\">\n\n <ng-template #defaultOptionTemplate>\n <span class=\"ng-option-label\" [ngItemLabel]=\"item.label\" [escape]=\"escapeHTML\"></span>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"item.children ? (optgroupTemplate || defaultOptionTemplate) : (optionTemplate || defaultOptionTemplate)\"\n [ngTemplateOutletContext]=\"{ item: item.value, item$:item, index: item.index, searchTerm: searchTerm }\">\n </ng-template>\n </div>\n\n <div class=\"ng-option\" [class.ng-option-marked]=\"!itemsList.markedItem\" (mouseover)=\"itemsList.unmarkItem()\" role=\"option\" (click)=\"selectTag()\" *ngIf=\"showAddTag\">\n <ng-template #defaultTagTemplate>\n <span><span class=\"ng-tag-label\">{{addTagText}}</span>\"{{searchTerm}}\"</span>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"tagTemplate || defaultTagTemplate\"\n [ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n </ng-template>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"showNoItemsFound()\">\n <ng-template #defaultNotFoundTemplate>\n <div class=\"ng-option ng-option-disabled\">{{notFoundText}}</div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"notFoundTemplate || defaultNotFoundTemplate\"\n [ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"showTypeToSearch()\">\n <ng-template #defaultTypeToSearchTemplate>\n <div class=\"ng-option ng-option-disabled\">{{typeToSearchText}}</div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"typeToSearchTemplate || defaultTypeToSearchTemplate\">\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"loading && itemsList.filteredItems.length === 0\">\n <ng-template #defaultLoadingTextTemplate>\n <div class=\"ng-option ng-option-disabled\">{{loadingText}}</div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"loadingTextTemplate || defaultLoadingTextTemplate\"\n [ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n </ng-template>\n </ng-container>\n\n</ng-dropdown-panel>\n",
- providers: [{
- provide: _angular_forms__WEBPACK_IMPORTED_MODULE_1__["NG_VALUE_ACCESSOR"],
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(( /**
- * @return {?}
- */() => NgSelectComponent)),
- multi: true
- }, NgDropdownPanelService],
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
- changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
- host: {
- 'role': 'listbox',
- '[class.ng-select]': 'useDefaultClass',
- '[class.ng-select-single]': '!multiple'
- },
- styles: [".ng-select{display:block;position:relative}.ng-select,.ng-select div,.ng-select input,.ng-select span{box-sizing:border-box}.ng-select [hidden]{display:none}.ng-select.ng-select-searchable .ng-select-container .ng-value-container .ng-input{opacity:1}.ng-select.ng-select-opened .ng-select-container{z-index:1001}.ng-select.ng-select-disabled .ng-select-container .ng-value-container .ng-placeholder,.ng-select.ng-select-disabled .ng-select-container .ng-value-container .ng-value{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:default;user-select:none}.ng-select.ng-select-disabled .ng-arrow-wrapper{cursor:default}.ng-select.ng-select-filtered .ng-placeholder{display:none}.ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}.ng-select .ng-select-container .ng-value-container{display:flex;flex:1}.ng-select .ng-select-container .ng-value-container .ng-input{opacity:0}.ng-select .ng-select-container .ng-value-container .ng-input>input{background:none transparent;border:0;box-shadow:none;box-sizing:content-box;cursor:default;outline:none;padding:0;width:100%}.ng-select .ng-select-container .ng-value-container .ng-input>input::-ms-clear{display:none}.ng-select .ng-select-container .ng-value-container .ng-input>input[readonly]{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;padding:0;user-select:none;width:0}.ng-select.ng-select-single.ng-select-filtered .ng-select-container .ng-value-container .ng-value{visibility:hidden}.ng-select.ng-select-single .ng-select-container .ng-value-container,.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:none}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{left:0;position:absolute;width:100%}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-icon{display:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{flex-wrap:wrap}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{position:absolute}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{white-space:nowrap}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-icon{display:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{cursor:pointer}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{flex:1;z-index:2}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{z-index:1}.ng-select .ng-clear-wrapper{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:pointer;position:relative;user-select:none;width:17px}.ng-select .ng-clear-wrapper .ng-clear{display:inline-block;font-size:18px;line-height:1;pointer-events:none}.ng-select .ng-spinner-loader{-webkit-animation:load8 .8s linear infinite;animation:load8 .8s linear infinite;border:2px solid rgba(66,66,66,.2);border-left-color:#424242;border-radius:50%;font-size:10px;height:17px;margin-right:5px;position:relative;text-indent:-9999em;transform:translateZ(0);width:17px}.ng-select .ng-spinner-loader:after{border-radius:50%;height:17px;width:17px}@-webkit-keyframes load8{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes load8{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.ng-select .ng-arrow-wrapper{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:pointer;position:relative;text-align:center;user-select:none}.ng-select .ng-arrow-wrapper .ng-arrow{display:inline-block;height:0;pointer-events:none;position:relative;width:0}.ng-dropdown-panel{-webkit-overflow-scrolling:touch;box-sizing:border-box;opacity:0;position:absolute;width:100%;z-index:1050}.ng-dropdown-panel .ng-dropdown-panel-items{box-sizing:border-box;display:block;height:auto;max-height:240px;overflow-y:auto}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .highlighted{font-weight:700;text-decoration:underline}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.disabled{cursor:default}.ng-dropdown-panel .scroll-host{-webkit-overflow-scrolling:touch;display:block;overflow:hidden;overflow-y:auto;position:relative}.ng-dropdown-panel .scrollable-content{height:100%;left:0;position:absolute;top:0;width:100%}.ng-dropdown-panel .total-padding{opacity:0;width:1px}"]
- }]
- }], function () { return [{ type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"],
- args: ['class']
- }] }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"],
- args: ['autofocus']
- }] }, { type: NgSelectConfig }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [SELECTION_MODEL_FACTORY]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }, { type: ConsoleService }]; }, { markFirst: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], dropdownPosition: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], loading: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], closeOnSelect: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], hideSelected: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], selectOnTab: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], bufferAmount: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], selectableGroup: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], selectableGroupAsModel: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], searchFn: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], trackByFn: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], clearOnBackspace: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], labelForId: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], inputAttrs: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], readonly: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], searchWhileComposing: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], minTermLength: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], editableSearchTerm: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], keyDownFn: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], multiple: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
- args: ['class.ng-select-multiple']
- }], addTag: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
- args: ['class.ng-select-taggable']
- }], searchable: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
- args: ['class.ng-select-searchable']
- }], clearable: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
- args: ['class.ng-select-clearable']
- }], isOpen: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
- args: ['class.ng-select-opened']
- }], blurEvent: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['blur']
- }], focusEvent: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['focus']
- }], changeEvent: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['change']
- }], openEvent: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['open']
- }], closeEvent: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['close']
- }], searchEvent: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['search']
- }], clearEvent: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['clear']
- }], addEvent: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['add']
- }], removeEvent: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['remove']
- }], scroll: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['scroll']
- }], scrollToEnd: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['scrollToEnd']
- }], items: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], compareWith: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], clearSearchOnAdd: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], disabled: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
- args: ['class.ng-select-disabled']
- }], filtered: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
- args: ['class.ng-select-filtered']
- }],
- /**
- * @param {?} $event
- * @return {?}
- */
- handleKeyDown: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
- args: ['keydown', ['$event']]
- }], bindLabel: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], placeholder: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], notFoundText: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], typeToSearchText: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], addTagText: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], loadingText: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], clearAllText: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], virtualScroll: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], openOnEnter: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], appendTo: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], bindValue: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], appearance: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], maxSelectedItems: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], groupBy: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], groupValue: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], tabIndex: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], typeahead: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
- args: ['class.ng-select-typeahead']
- }], optionTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgOptionTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]
- }], optgroupTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgOptgroupTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]
- }], labelTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgLabelTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]
- }], multiLabelTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgMultiLabelTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]
- }], headerTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgHeaderTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]
- }], footerTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgFooterTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]
- }], notFoundTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgNotFoundTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]
- }], typeToSearchTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgTypeToSearchTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]
- }], loadingTextTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgLoadingTextTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]
- }], tagTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgTagTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]
- }], loadingSpinnerTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
- args: [NgLoadingSpinnerTemplateDirective, { read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]
- }], dropdownPanel: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
- args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(( /**
- * @return {?}
- */() => NgDropdownPanelComponent))]
- }], searchInput: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
- args: ['searchInput', { static: true }]
- }], ngOptions: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
- args: [NgOptionComponent, { descendants: true }]
- }] }); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/selection-model.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @return {?}
- */
- function DefaultSelectionModelFactory() {
- return new DefaultSelectionModel();
- }
- /**
- * @record
- */
- function SelectionModel() { }
- if (false) {}
- class DefaultSelectionModel {
- constructor() {
- this._selected = [];
- }
- /**
- * @return {?}
- */
- get value() {
- return this._selected;
- }
- /**
- * @param {?} item
- * @param {?} multiple
- * @param {?} groupAsModel
- * @return {?}
- */
- select(item, multiple, groupAsModel) {
- item.selected = true;
- if (!item.children || (!multiple && groupAsModel)) {
- this._selected.push(item);
- }
- if (multiple) {
- if (item.parent) {
- /** @type {?} */
- const childrenCount = item.parent.children.length;
- /** @type {?} */
- const selectedCount = item.parent.children.filter((/**
- * @param {?} x
- * @return {?}
- */
- x => x.selected)).length;
- item.parent.selected = childrenCount === selectedCount;
- }
- else if (item.children) {
- this._setChildrenSelectedState(item.children, true);
- this._removeChildren(item);
- if (groupAsModel && this._activeChildren(item)) {
- this._selected = [...this._selected.filter((/**
- * @param {?} x
- * @return {?}
- */
- x => x.parent !== item)), item];
- }
- else {
- this._selected = [...this._selected, ...item.children.filter((/**
- * @param {?} x
- * @return {?}
- */
- x => !x.disabled))];
- }
- }
- }
- }
- /**
- * @param {?} item
- * @param {?} multiple
- * @return {?}
- */
- unselect(item, multiple) {
- this._selected = this._selected.filter((/**
- * @param {?} x
- * @return {?}
- */
- x => x !== item));
- item.selected = false;
- if (multiple) {
- if (item.parent && item.parent.selected) {
- /** @type {?} */
- const children = item.parent.children;
- this._removeParent(item.parent);
- this._removeChildren(item.parent);
- this._selected.push(...children.filter((/**
- * @param {?} x
- * @return {?}
- */
- x => x !== item && !x.disabled)));
- item.parent.selected = false;
- }
- else if (item.children) {
- this._setChildrenSelectedState(item.children, false);
- this._removeChildren(item);
- }
- }
- }
- /**
- * @param {?} keepDisabled
- * @return {?}
- */
- clear(keepDisabled) {
- this._selected = keepDisabled ? this._selected.filter((/**
- * @param {?} x
- * @return {?}
- */
- x => x.disabled)) : [];
- }
- /**
- * @private
- * @param {?} children
- * @param {?} selected
- * @return {?}
- */
- _setChildrenSelectedState(children, selected) {
- for (const child of children) {
- if (child.disabled) {
- continue;
- }
- child.selected = selected;
- }
- ;
- }
- /**
- * @private
- * @param {?} parent
- * @return {?}
- */
- _removeChildren(parent) {
- this._selected = [
- ...this._selected.filter((/**
- * @param {?} x
- * @return {?}
- */
- x => x.parent !== parent)),
- ...parent.children.filter((/**
- * @param {?} x
- * @return {?}
- */
- x => x.parent === parent && x.disabled && x.selected))
- ];
- }
- /**
- * @private
- * @param {?} parent
- * @return {?}
- */
- _removeParent(parent) {
- this._selected = this._selected.filter((/**
- * @param {?} x
- * @return {?}
- */
- x => x !== parent));
- }
- /**
- * @private
- * @param {?} item
- * @return {?}
- */
- _activeChildren(item) {
- return item.children.every((/**
- * @param {?} x
- * @return {?}
- */
- x => !x.disabled || x.selected));
- }
- }
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: lib/ng-select.module.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- const ɵ0 = DefaultSelectionModelFactory;
- class NgSelectModule {
- }
- NgSelectModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: NgSelectModule });
- NgSelectModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function NgSelectModule_Factory(t) { return new (t || NgSelectModule)(); }, providers: [
- { provide: SELECTION_MODEL_FACTORY, useValue: ɵ0 }
- ], imports: [[
- _angular_common__WEBPACK_IMPORTED_MODULE_4__["CommonModule"]
- ]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgSelectModule, { declarations: function () { return [NgDropdownPanelComponent, NgOptionComponent, NgSelectComponent, NgOptgroupTemplateDirective, NgOptionTemplateDirective, NgLabelTemplateDirective, NgMultiLabelTemplateDirective, NgHeaderTemplateDirective, NgFooterTemplateDirective, NgNotFoundTemplateDirective, NgTypeToSearchTemplateDirective, NgLoadingTextTemplateDirective, NgTagTemplateDirective, NgLoadingSpinnerTemplateDirective, NgItemLabelDirective]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_4__["CommonModule"]]; }, exports: function () { return [NgSelectComponent, NgOptionComponent, NgOptgroupTemplateDirective, NgOptionTemplateDirective, NgLabelTemplateDirective, NgMultiLabelTemplateDirective, NgHeaderTemplateDirective, NgFooterTemplateDirective, NgNotFoundTemplateDirective, NgTypeToSearchTemplateDirective, NgLoadingTextTemplateDirective, NgTagTemplateDirective, NgLoadingSpinnerTemplateDirective]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgSelectModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- declarations: [
- NgDropdownPanelComponent,
- NgOptionComponent,
- NgSelectComponent,
- NgOptgroupTemplateDirective,
- NgOptionTemplateDirective,
- NgLabelTemplateDirective,
- NgMultiLabelTemplateDirective,
- NgHeaderTemplateDirective,
- NgFooterTemplateDirective,
- NgNotFoundTemplateDirective,
- NgTypeToSearchTemplateDirective,
- NgLoadingTextTemplateDirective,
- NgTagTemplateDirective,
- NgLoadingSpinnerTemplateDirective,
- NgItemLabelDirective
- ],
- imports: [
- _angular_common__WEBPACK_IMPORTED_MODULE_4__["CommonModule"]
- ],
- exports: [
- NgSelectComponent,
- NgOptionComponent,
- NgOptgroupTemplateDirective,
- NgOptionTemplateDirective,
- NgLabelTemplateDirective,
- NgMultiLabelTemplateDirective,
- NgHeaderTemplateDirective,
- NgFooterTemplateDirective,
- NgNotFoundTemplateDirective,
- NgTypeToSearchTemplateDirective,
- NgLoadingTextTemplateDirective,
- NgTagTemplateDirective,
- NgLoadingSpinnerTemplateDirective
- ],
- providers: [
- { provide: SELECTION_MODEL_FACTORY, useValue: ɵ0 }
- ]
- }]
- }], null, null); })();
- /**
- * @fileoverview added by tsickle
- * Generated from: public-api.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @fileoverview added by tsickle
- * Generated from: ng-select-ng-select.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- //# sourceMappingURL=ng-select-ng-select.js.map
- /***/ }),
- /***/ "ZUHj":
- /*!***********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/subscribeToResult.js ***!
- \***********************************************************************/
- /*! exports provided: subscribeToResult */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToResult", function() { return subscribeToResult; });
- /* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../InnerSubscriber */ "51Dv");
- /* harmony import */ var _subscribeTo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./subscribeTo */ "SeVD");
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Observable */ "HDdC");
- function subscribeToResult(outerSubscriber, result, outerValue, outerIndex, innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_0__["InnerSubscriber"](outerSubscriber, outerValue, outerIndex)) {
- if (innerSubscriber.closed) {
- return undefined;
- }
- if (result instanceof _Observable__WEBPACK_IMPORTED_MODULE_2__["Observable"]) {
- return result.subscribe(innerSubscriber);
- }
- return Object(_subscribeTo__WEBPACK_IMPORTED_MODULE_1__["subscribeTo"])(result)(innerSubscriber);
- }
- //# sourceMappingURL=subscribeToResult.js.map
- /***/ }),
- /***/ "Zy1z":
- /*!*******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/pairwise.js ***!
- \*******************************************************************/
- /*! exports provided: pairwise */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pairwise", function() { return pairwise; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function pairwise() {
- return (source) => source.lift(new PairwiseOperator());
- }
- class PairwiseOperator {
- call(subscriber, source) {
- return source.subscribe(new PairwiseSubscriber(subscriber));
- }
- }
- class PairwiseSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination) {
- super(destination);
- this.hasPrev = false;
- }
- _next(value) {
- let pair;
- if (this.hasPrev) {
- pair = [this.prev, value];
- }
- else {
- this.hasPrev = true;
- }
- this.prev = value;
- if (pair) {
- this.destination.next(pair);
- }
- }
- }
- //# sourceMappingURL=pairwise.js.map
- /***/ }),
- /***/ "Zyez":
- /*!************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/sequenceEqual.js ***!
- \************************************************************************/
- /*! exports provided: sequenceEqual, SequenceEqualOperator, SequenceEqualSubscriber */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequenceEqual", function() { return sequenceEqual; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SequenceEqualOperator", function() { return SequenceEqualOperator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SequenceEqualSubscriber", function() { return SequenceEqualSubscriber; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function sequenceEqual(compareTo, comparator) {
- return (source) => source.lift(new SequenceEqualOperator(compareTo, comparator));
- }
- class SequenceEqualOperator {
- constructor(compareTo, comparator) {
- this.compareTo = compareTo;
- this.comparator = comparator;
- }
- call(subscriber, source) {
- return source.subscribe(new SequenceEqualSubscriber(subscriber, this.compareTo, this.comparator));
- }
- }
- class SequenceEqualSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, compareTo, comparator) {
- super(destination);
- this.compareTo = compareTo;
- this.comparator = comparator;
- this._a = [];
- this._b = [];
- this._oneComplete = false;
- this.destination.add(compareTo.subscribe(new SequenceEqualCompareToSubscriber(destination, this)));
- }
- _next(value) {
- if (this._oneComplete && this._b.length === 0) {
- this.emit(false);
- }
- else {
- this._a.push(value);
- this.checkValues();
- }
- }
- _complete() {
- if (this._oneComplete) {
- this.emit(this._a.length === 0 && this._b.length === 0);
- }
- else {
- this._oneComplete = true;
- }
- this.unsubscribe();
- }
- checkValues() {
- const { _a, _b, comparator } = this;
- while (_a.length > 0 && _b.length > 0) {
- let a = _a.shift();
- let b = _b.shift();
- let areEqual = false;
- try {
- areEqual = comparator ? comparator(a, b) : a === b;
- }
- catch (e) {
- this.destination.error(e);
- }
- if (!areEqual) {
- this.emit(false);
- }
- }
- }
- emit(value) {
- const { destination } = this;
- destination.next(value);
- destination.complete();
- }
- nextB(value) {
- if (this._oneComplete && this._a.length === 0) {
- this.emit(false);
- }
- else {
- this._b.push(value);
- this.checkValues();
- }
- }
- completeB() {
- if (this._oneComplete) {
- this.emit(this._a.length === 0 && this._b.length === 0);
- }
- else {
- this._oneComplete = true;
- }
- }
- }
- class SequenceEqualCompareToSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, parent) {
- super(destination);
- this.parent = parent;
- }
- _next(value) {
- this.parent.nextB(value);
- }
- _error(err) {
- this.parent.error(err);
- this.unsubscribe();
- }
- _complete() {
- this.parent.completeB();
- this.unsubscribe();
- }
- }
- //# sourceMappingURL=sequenceEqual.js.map
- /***/ }),
- /***/ "a7t3":
- /*!************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/subscribeToPromise.js ***!
- \************************************************************************/
- /*! exports provided: subscribeToPromise */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToPromise", function() { return subscribeToPromise; });
- /* harmony import */ var _hostReportError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hostReportError */ "NJ4a");
- const subscribeToPromise = (promise) => (subscriber) => {
- promise.then((value) => {
- if (!subscriber.closed) {
- subscriber.next(value);
- subscriber.complete();
- }
- }, (err) => subscriber.error(err))
- .then(null, _hostReportError__WEBPACK_IMPORTED_MODULE_0__["hostReportError"]);
- return subscriber;
- };
- //# sourceMappingURL=subscribeToPromise.js.map
- /***/ }),
- /***/ "aGrj":
- /*!**********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/switchMapTo.js ***!
- \**********************************************************************/
- /*! exports provided: switchMapTo */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchMapTo", function() { return switchMapTo; });
- /* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./switchMap */ "eIep");
- function switchMapTo(innerObservable, resultSelector) {
- return resultSelector ? Object(_switchMap__WEBPACK_IMPORTED_MODULE_0__["switchMap"])(() => innerObservable, resultSelector) : Object(_switchMap__WEBPACK_IMPORTED_MODULE_0__["switchMap"])(() => innerObservable);
- }
- //# sourceMappingURL=switchMapTo.js.map
- /***/ }),
- /***/ "bHdf":
- /*!*******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/mergeAll.js ***!
- \*******************************************************************/
- /*! exports provided: mergeAll */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeAll", function() { return mergeAll; });
- /* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mergeMap */ "5+tZ");
- /* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/identity */ "SpAZ");
- function mergeAll(concurrent = Number.POSITIVE_INFINITY) {
- return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(_util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"], concurrent);
- }
- //# sourceMappingURL=mergeAll.js.map
- /***/ }),
- /***/ "bOdf":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/concatMap.js ***!
- \********************************************************************/
- /*! exports provided: concatMap */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concatMap", function() { return concatMap; });
- /* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mergeMap */ "5+tZ");
- function concatMap(project, resultSelector) {
- return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(project, resultSelector, 1);
- }
- //# sourceMappingURL=concatMap.js.map
- /***/ }),
- /***/ "c2HN":
- /*!***************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/isPromise.js ***!
- \***************************************************************/
- /*! exports provided: isPromise */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPromise", function() { return isPromise; });
- function isPromise(value) {
- return !!value && typeof value.subscribe !== 'function' && typeof value.then === 'function';
- }
- //# sourceMappingURL=isPromise.js.map
- /***/ }),
- /***/ "c6ID":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/sample.js ***!
- \*****************************************************************/
- /*! exports provided: sample */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sample", function() { return sample; });
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function sample(notifier) {
- return (source) => source.lift(new SampleOperator(notifier));
- }
- class SampleOperator {
- constructor(notifier) {
- this.notifier = notifier;
- }
- call(subscriber, source) {
- const sampleSubscriber = new SampleSubscriber(subscriber);
- const subscription = source.subscribe(sampleSubscriber);
- subscription.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(sampleSubscriber, this.notifier));
- return subscription;
- }
- }
- class SampleSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__["OuterSubscriber"] {
- constructor() {
- super(...arguments);
- this.hasValue = false;
- }
- _next(value) {
- this.value = value;
- this.hasValue = true;
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.emitValue();
- }
- notifyComplete() {
- this.emitValue();
- }
- emitValue() {
- if (this.hasValue) {
- this.hasValue = false;
- this.destination.next(this.value);
- }
- }
- }
- //# sourceMappingURL=sample.js.map
- /***/ }),
- /***/ "c7jc":
- /*!***************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/Immediate.js ***!
- \***************************************************************/
- /*! exports provided: Immediate, TestTools */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Immediate", function() { return Immediate; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TestTools", function() { return TestTools; });
- let nextHandle = 1;
- const RESOLVED = (() => Promise.resolve())();
- const activeHandles = {};
- function findAndClearHandle(handle) {
- if (handle in activeHandles) {
- delete activeHandles[handle];
- return true;
- }
- return false;
- }
- const Immediate = {
- setImmediate(cb) {
- const handle = nextHandle++;
- activeHandles[handle] = true;
- RESOLVED.then(() => findAndClearHandle(handle) && cb());
- return handle;
- },
- clearImmediate(handle) {
- findAndClearHandle(handle);
- },
- };
- const TestTools = {
- pending() {
- return Object.keys(activeHandles).length;
- }
- };
- //# sourceMappingURL=Immediate.js.map
- /***/ }),
- /***/ "cBqT":
- /*!***************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/find.js ***!
- \***************************************************************/
- /*! exports provided: find, FindValueOperator, FindValueSubscriber */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "find", function() { return find; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FindValueOperator", function() { return FindValueOperator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FindValueSubscriber", function() { return FindValueSubscriber; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function find(predicate, thisArg) {
- if (typeof predicate !== 'function') {
- throw new TypeError('predicate is not a function');
- }
- return (source) => source.lift(new FindValueOperator(predicate, source, false, thisArg));
- }
- class FindValueOperator {
- constructor(predicate, source, yieldIndex, thisArg) {
- this.predicate = predicate;
- this.source = source;
- this.yieldIndex = yieldIndex;
- this.thisArg = thisArg;
- }
- call(observer, source) {
- return source.subscribe(new FindValueSubscriber(observer, this.predicate, this.source, this.yieldIndex, this.thisArg));
- }
- }
- class FindValueSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, predicate, source, yieldIndex, thisArg) {
- super(destination);
- this.predicate = predicate;
- this.source = source;
- this.yieldIndex = yieldIndex;
- this.thisArg = thisArg;
- this.index = 0;
- }
- notifyComplete(value) {
- const destination = this.destination;
- destination.next(value);
- destination.complete();
- this.unsubscribe();
- }
- _next(value) {
- const { predicate, thisArg } = this;
- const index = this.index++;
- try {
- const result = predicate.call(thisArg || this, value, index, this.source);
- if (result) {
- this.notifyComplete(this.yieldIndex ? index : value);
- }
- }
- catch (err) {
- this.destination.error(err);
- }
- }
- _complete() {
- this.notifyComplete(this.yieldIndex ? -1 : undefined);
- }
- }
- //# sourceMappingURL=find.js.map
- /***/ }),
- /***/ "cH1L":
- /*!*****************************************************************!*\
- !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/bidi.js ***!
- \*****************************************************************/
- /*! exports provided: BidiModule, DIR_DOCUMENT, Dir, Directionality, ɵangular_material_src_cdk_bidi_bidi_a */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BidiModule", function() { return BidiModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DIR_DOCUMENT", function() { return DIR_DOCUMENT; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Dir", function() { return Dir; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Directionality", function() { return Directionality; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_material_src_cdk_bidi_bidi_a", function() { return DIR_DOCUMENT_FACTORY; });
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ "ofXK");
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/bidi/dir-document-token.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * Injection token used to inject the document into Directionality.
- * This is used so that the value can be faked in tests.
- *
- * We can't use the real document in tests because changing the real `dir` causes geometry-based
- * tests in Safari to fail.
- *
- * We also can't re-provide the DOCUMENT token from platform-brower because the unit tests
- * themselves use things like `querySelector` in test code.
- *
- * This token is defined in a separate file from Directionality as a workaround for
- * https://github.com/angular/angular/issues/22559
- *
- * \@docs-private
- * @type {?}
- */
- const DIR_DOCUMENT = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('cdk-dir-doc', {
- providedIn: 'root',
- factory: DIR_DOCUMENT_FACTORY,
- });
- /**
- * \@docs-private
- * @return {?}
- */
- function DIR_DOCUMENT_FACTORY() {
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["inject"])(_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]);
- }
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/bidi/directionality.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * The directionality (LTR / RTL) context for the application (or a subtree of it).
- * Exposes the current direction and a stream of direction changes.
- */
- class Directionality {
- /**
- * @param {?=} _document
- */
- constructor(_document) {
- /**
- * The current 'ltr' or 'rtl' value.
- */
- this.value = 'ltr';
- /**
- * Stream that emits whenever the 'ltr' / 'rtl' state changes.
- */
- this.change = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- if (_document) {
- // TODO: handle 'auto' value -
- // We still need to account for dir="auto".
- // It looks like HTMLElemenet.dir is also "auto" when that's set to the attribute,
- // but getComputedStyle return either "ltr" or "rtl". avoiding getComputedStyle for now
- /** @type {?} */
- const bodyDir = _document.body ? _document.body.dir : null;
- /** @type {?} */
- const htmlDir = _document.documentElement ? _document.documentElement.dir : null;
- /** @type {?} */
- const value = bodyDir || htmlDir;
- this.value = (value === 'ltr' || value === 'rtl') ? value : 'ltr';
- }
- }
- /**
- * @return {?}
- */
- ngOnDestroy() {
- this.change.complete();
- }
- }
- Directionality.ɵfac = function Directionality_Factory(t) { return new (t || Directionality)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](DIR_DOCUMENT, 8)); };
- /** @nocollapse */
- Directionality.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [DIR_DOCUMENT,] }] }
- ];
- /** @nocollapse */ Directionality.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function Directionality_Factory() { return new Directionality(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(DIR_DOCUMENT, 8)); }, token: Directionality, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Directionality, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [DIR_DOCUMENT]
- }] }]; }, null); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/bidi/dir.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * Directive to listen for changes of direction of part of the DOM.
- *
- * Provides itself as Directionality such that descendant directives only need to ever inject
- * Directionality to get the closest direction.
- */
- class Dir {
- constructor() {
- /**
- * Normalized direction that accounts for invalid/unsupported values.
- */
- this._dir = 'ltr';
- /**
- * Whether the `value` has been set to its initial value.
- */
- this._isInitialized = false;
- /**
- * Event emitted when the direction changes.
- */
- this.change = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- }
- /**
- * \@docs-private
- * @return {?}
- */
- get dir() { return this._dir; }
- /**
- * @param {?} value
- * @return {?}
- */
- set dir(value) {
- /** @type {?} */
- const old = this._dir;
- /** @type {?} */
- const normalizedValue = value ? value.toLowerCase() : value;
- this._rawDir = value;
- this._dir = (normalizedValue === 'ltr' || normalizedValue === 'rtl') ? normalizedValue : 'ltr';
- if (old !== this._dir && this._isInitialized) {
- this.change.emit(this._dir);
- }
- }
- /**
- * Current layout direction of the element.
- * @return {?}
- */
- get value() { return this.dir; }
- /**
- * Initialize once default value has been set.
- * @return {?}
- */
- ngAfterContentInit() {
- this._isInitialized = true;
- }
- /**
- * @return {?}
- */
- ngOnDestroy() {
- this.change.complete();
- }
- }
- Dir.ɵfac = function Dir_Factory(t) { return new (t || Dir)(); };
- Dir.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: Dir, selectors: [["", "dir", ""]], hostVars: 1, hostBindings: function Dir_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("dir", ctx._rawDir);
- } }, inputs: { dir: "dir" }, outputs: { change: "dirChange" }, exportAs: ["dir"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{ provide: Directionality, useExisting: Dir }])] });
- Dir.propDecorators = {
- change: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"], args: ['dirChange',] }],
- dir: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Dir, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[dir]',
- providers: [{ provide: Directionality, useExisting: Dir }],
- host: { '[attr.dir]': '_rawDir' },
- exportAs: 'dir'
- }]
- }], function () { return []; }, { change: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
- args: ['dirChange']
- }], dir: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/bidi/bidi-module.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class BidiModule {
- }
- BidiModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: BidiModule });
- BidiModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function BidiModule_Factory(t) { return new (t || BidiModule)(); } });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](BidiModule, { declarations: [Dir], exports: [Dir] }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BidiModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- exports: [Dir],
- declarations: [Dir]
- }]
- }], null, null); })();
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/bidi/public-api.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=bidi.js.map
- /***/ }),
- /***/ "cfqv":
- /*!***********************************************************************************!*\
- !*** ./node_modules/@angular/cdk-experimental/__ivy_ngcc__/fesm2015/scrolling.js ***!
- \***********************************************************************************/
- /*! exports provided: AutoSizeVirtualScrollStrategy, CdkAutoSizeVirtualScroll, ItemSizeAverager, ScrollingModule, _autoSizeVirtualScrollStrategyFactory */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AutoSizeVirtualScrollStrategy", function() { return AutoSizeVirtualScrollStrategy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CdkAutoSizeVirtualScroll", function() { return CdkAutoSizeVirtualScroll; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ItemSizeAverager", function() { return ItemSizeAverager; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ScrollingModule", function() { return ScrollingModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_autoSizeVirtualScrollStrategyFactory", function() { return _autoSizeVirtualScrollStrategyFactory; });
- /* harmony import */ var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/cdk/coercion */ "8LU1");
- /* harmony import */ var _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/cdk/scrolling */ "vxfF");
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs */ "qCKp");
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk-experimental/scrolling/auto-size-virtual-scroll.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * A class that tracks the size of items that have been seen and uses it to estimate the average
- * item size.
- */
- class ItemSizeAverager {
- /**
- * @param {?=} defaultItemSize The default size to use for items when no data is available.
- */
- constructor(defaultItemSize = 50) {
- /**
- * The total amount of weight behind the current average.
- */
- this._totalWeight = 0;
- this._defaultItemSize = defaultItemSize;
- this._averageItemSize = defaultItemSize;
- }
- /**
- * Returns the average item size.
- * @return {?}
- */
- getAverageItemSize() {
- return this._averageItemSize;
- }
- /**
- * Adds a measurement sample for the estimator to consider.
- * @param {?} range The measured range.
- * @param {?} size The measured size of the given range in pixels.
- * @return {?}
- */
- addSample(range, size) {
- /** @type {?} */
- const newTotalWeight = this._totalWeight + range.end - range.start;
- if (newTotalWeight) {
- /** @type {?} */
- const newAverageItemSize = (size + this._averageItemSize * this._totalWeight) / newTotalWeight;
- if (newAverageItemSize) {
- this._averageItemSize = newAverageItemSize;
- this._totalWeight = newTotalWeight;
- }
- }
- }
- /**
- * Resets the averager.
- * @return {?}
- */
- reset() {
- this._averageItemSize = this._defaultItemSize;
- this._totalWeight = 0;
- }
- }
- if (false) {}
- /**
- * Virtual scrolling strategy for lists with items of unknown or dynamic size.
- */
- class AutoSizeVirtualScrollStrategy {
- /**
- * @param {?} minBufferPx The minimum amount of buffer rendered beyond the viewport (in pixels).
- * If the amount of buffer dips below this number, more items will be rendered.
- * @param {?} maxBufferPx The number of pixels worth of buffer to shoot for when rendering new items.
- * If the actual amount turns out to be less it will not necessarily trigger an additional
- * rendering cycle (as long as the amount of buffer is still greater than `minBufferPx`).
- * @param {?=} averager The averager used to estimate the size of unseen items.
- */
- constructor(minBufferPx, maxBufferPx, averager = new ItemSizeAverager()) {
- /**
- * \@docs-private Implemented as part of VirtualScrollStrategy.
- */
- this.scrolledIndexChange = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Observable"]((/**
- * @return {?}
- */
- () => {
- // TODO(mmalerba): Implement.
- throw Error('cdk-virtual-scroll: scrolledIndexChange is currently not supported for the' +
- ' autosize scroll strategy');
- }));
- /**
- * The attached viewport.
- */
- this._viewport = null;
- /**
- * The number of consecutive cycles where removing extra items has failed. Failure here means that
- * we estimated how many items we could safely remove, but our estimate turned out to be too much
- * and it wasn't safe to remove that many elements.
- */
- this._removalFailures = 0;
- this._minBufferPx = minBufferPx;
- this._maxBufferPx = maxBufferPx;
- this._averager = averager;
- }
- /**
- * Attaches this scroll strategy to a viewport.
- * @param {?} viewport The viewport to attach this strategy to.
- * @return {?}
- */
- attach(viewport) {
- this._averager.reset();
- this._viewport = viewport;
- this._renderContentForCurrentOffset();
- }
- /**
- * Detaches this scroll strategy from the currently attached viewport.
- * @return {?}
- */
- detach() {
- this._viewport = null;
- }
- /**
- * \@docs-private Implemented as part of VirtualScrollStrategy.
- * @return {?}
- */
- onContentScrolled() {
- if (this._viewport) {
- this._updateRenderedContentAfterScroll();
- }
- }
- /**
- * \@docs-private Implemented as part of VirtualScrollStrategy.
- * @return {?}
- */
- onDataLengthChanged() {
- if (this._viewport) {
- this._renderContentForCurrentOffset();
- this._checkRenderedContentSize();
- }
- }
- /**
- * \@docs-private Implemented as part of VirtualScrollStrategy.
- * @return {?}
- */
- onContentRendered() {
- if (this._viewport) {
- this._checkRenderedContentSize();
- }
- }
- /**
- * \@docs-private Implemented as part of VirtualScrollStrategy.
- * @return {?}
- */
- onRenderedOffsetChanged() {
- if (this._viewport) {
- this._checkRenderedContentOffset();
- }
- }
- /**
- * Scroll to the offset for the given index.
- * @return {?}
- */
- scrollToIndex() {
- // TODO(mmalerba): Implement.
- throw Error('cdk-virtual-scroll: scrollToIndex is currently not supported for the autosize'
- + ' scroll strategy');
- }
- /**
- * Update the buffer parameters.
- * @param {?} minBufferPx The minimum amount of buffer rendered beyond the viewport (in pixels).
- * @param {?} maxBufferPx The number of buffer items to render beyond the edge of the viewport (in
- * pixels).
- * @return {?}
- */
- updateBufferSize(minBufferPx, maxBufferPx) {
- if (maxBufferPx < minBufferPx) {
- throw ('CDK virtual scroll: maxBufferPx must be greater than or equal to minBufferPx');
- }
- this._minBufferPx = minBufferPx;
- this._maxBufferPx = maxBufferPx;
- }
- /**
- * Update the rendered content after the user scrolls.
- * @private
- * @return {?}
- */
- _updateRenderedContentAfterScroll() {
- /** @type {?} */
- const viewport = (/** @type {?} */ (this._viewport));
- // The current scroll offset.
- /** @type {?} */
- const scrollOffset = viewport.measureScrollOffset();
- // The delta between the current scroll offset and the previously recorded scroll offset.
- /** @type {?} */
- let scrollDelta = scrollOffset - this._lastScrollOffset;
- // The magnitude of the scroll delta.
- /** @type {?} */
- let scrollMagnitude = Math.abs(scrollDelta);
- // The currently rendered range.
- /** @type {?} */
- const renderedRange = viewport.getRenderedRange();
- // If we're scrolling toward the top, we need to account for the fact that the predicted amount
- // of content and the actual amount of scrollable space may differ. We address this by slowly
- // correcting the difference on each scroll event.
- /** @type {?} */
- let offsetCorrection = 0;
- if (scrollDelta < 0) {
- // The content offset we would expect based on the average item size.
- /** @type {?} */
- const predictedOffset = renderedRange.start * this._averager.getAverageItemSize();
- // The difference between the predicted size of the unrendered content at the beginning and
- // the actual available space to scroll over. We need to reduce this to zero by the time the
- // user scrolls to the top.
- // - 0 indicates that the predicted size and available space are the same.
- // - A negative number that the predicted size is smaller than the available space.
- // - A positive number indicates the predicted size is larger than the available space
- /** @type {?} */
- const offsetDifference = predictedOffset - this._lastRenderedContentOffset;
- // The amount of difference to correct during this scroll event. We calculate this as a
- // percentage of the total difference based on the percentage of the distance toward the top
- // that the user scrolled.
- offsetCorrection = Math.round(offsetDifference *
- Math.max(0, Math.min(1, scrollMagnitude / (scrollOffset + scrollMagnitude))));
- // Based on the offset correction above, we pretend that the scroll delta was bigger or
- // smaller than it actually was, this way we can start to eliminate the difference.
- scrollDelta = scrollDelta - offsetCorrection;
- scrollMagnitude = Math.abs(scrollDelta);
- }
- // The current amount of buffer past the start of the viewport.
- /** @type {?} */
- const startBuffer = this._lastScrollOffset - this._lastRenderedContentOffset;
- // The current amount of buffer past the end of the viewport.
- /** @type {?} */
- const endBuffer = (this._lastRenderedContentOffset + this._lastRenderedContentSize) -
- (this._lastScrollOffset + viewport.getViewportSize());
- // The amount of unfilled space that should be filled on the side the user is scrolling toward
- // in order to safely absorb the scroll delta.
- /** @type {?} */
- const underscan = scrollMagnitude + this._minBufferPx -
- (scrollDelta < 0 ? startBuffer : endBuffer);
- // Check if there's unfilled space that we need to render new elements to fill.
- if (underscan > 0) {
- // Check if the scroll magnitude was larger than the viewport size. In this case the user
- // won't notice a discontinuity if we just jump to the new estimated position in the list.
- // However, if the scroll magnitude is smaller than the viewport the user might notice some
- // jitteriness if we just jump to the estimated position. Instead we make sure to scroll by
- // the same number of pixels as the scroll magnitude.
- if (scrollMagnitude >= viewport.getViewportSize()) {
- this._renderContentForCurrentOffset();
- }
- else {
- // The number of new items to render on the side the user is scrolling towards. Rather than
- // just filling the underscan space, we actually fill enough to have a buffer size of
- // `maxBufferPx`. This gives us a little wiggle room in case our item size estimate is off.
- /** @type {?} */
- const addItems = Math.max(0, Math.ceil((underscan - this._minBufferPx + this._maxBufferPx) /
- this._averager.getAverageItemSize()));
- // The amount of filled space beyond what is necessary on the side the user is scrolling
- // away from.
- /** @type {?} */
- const overscan = (scrollDelta < 0 ? endBuffer : startBuffer) - this._minBufferPx +
- scrollMagnitude;
- // The number of currently rendered items to remove on the side the user is scrolling away
- // from. If removal has failed in recent cycles we are less aggressive in how much we try to
- // remove.
- /** @type {?} */
- const unboundedRemoveItems = Math.floor(overscan / this._averager.getAverageItemSize() / (this._removalFailures + 1));
- /** @type {?} */
- const removeItems = Math.min(renderedRange.end - renderedRange.start, Math.max(0, unboundedRemoveItems));
- // The new range we will tell the viewport to render. We first expand it to include the new
- // items we want rendered, we then contract the opposite side to remove items we no longer
- // want rendered.
- /** @type {?} */
- const range = this._expandRange(renderedRange, scrollDelta < 0 ? addItems : 0, scrollDelta > 0 ? addItems : 0);
- if (scrollDelta < 0) {
- range.end = Math.max(range.start + 1, range.end - removeItems);
- }
- else {
- range.start = Math.min(range.end - 1, range.start + removeItems);
- }
- // The new offset we want to set on the rendered content. To determine this we measure the
- // number of pixels we removed and then adjust the offset to the start of the rendered
- // content or to the end of the rendered content accordingly (whichever one doesn't require
- // that the newly added items to be rendered to calculate.)
- /** @type {?} */
- let contentOffset;
- /** @type {?} */
- let contentOffsetTo;
- if (scrollDelta < 0) {
- /** @type {?} */
- let removedSize = viewport.measureRangeSize({
- start: range.end,
- end: renderedRange.end,
- });
- // Check that we're not removing too much.
- if (removedSize <= overscan) {
- contentOffset =
- this._lastRenderedContentOffset + this._lastRenderedContentSize - removedSize;
- this._removalFailures = 0;
- }
- else {
- // If the removal is more than the overscan can absorb just undo it and record the fact
- // that the removal failed so we can be less aggressive next time.
- range.end = renderedRange.end;
- contentOffset = this._lastRenderedContentOffset + this._lastRenderedContentSize;
- this._removalFailures++;
- }
- contentOffsetTo = 'to-end';
- }
- else {
- /** @type {?} */
- const removedSize = viewport.measureRangeSize({
- start: renderedRange.start,
- end: range.start,
- });
- // Check that we're not removing too much.
- if (removedSize <= overscan) {
- contentOffset = this._lastRenderedContentOffset + removedSize;
- this._removalFailures = 0;
- }
- else {
- // If the removal is more than the overscan can absorb just undo it and record the fact
- // that the removal failed so we can be less aggressive next time.
- range.start = renderedRange.start;
- contentOffset = this._lastRenderedContentOffset;
- this._removalFailures++;
- }
- contentOffsetTo = 'to-start';
- }
- // Set the range and offset we calculated above.
- viewport.setRenderedRange(range);
- viewport.setRenderedContentOffset(contentOffset + offsetCorrection, contentOffsetTo);
- }
- }
- else if (offsetCorrection) {
- // Even if the rendered range didn't change, we may still need to adjust the content offset to
- // simulate scrolling slightly slower or faster than the user actually scrolled.
- viewport.setRenderedContentOffset(this._lastRenderedContentOffset + offsetCorrection);
- }
- // Save the scroll offset to be compared to the new value on the next scroll event.
- this._lastScrollOffset = scrollOffset;
- }
- /**
- * Checks the size of the currently rendered content and uses it to update the estimated item size
- * and estimated total content size.
- * @private
- * @return {?}
- */
- _checkRenderedContentSize() {
- /** @type {?} */
- const viewport = (/** @type {?} */ (this._viewport));
- this._lastRenderedContentSize = viewport.measureRenderedContentSize();
- this._averager.addSample(viewport.getRenderedRange(), this._lastRenderedContentSize);
- this._updateTotalContentSize(this._lastRenderedContentSize);
- }
- /**
- * Checks the currently rendered content offset and saves the value for later use.
- * @private
- * @return {?}
- */
- _checkRenderedContentOffset() {
- /** @type {?} */
- const viewport = (/** @type {?} */ (this._viewport));
- this._lastRenderedContentOffset = (/** @type {?} */ (viewport.getOffsetToRenderedContentStart()));
- }
- /**
- * Recalculates the rendered content based on our estimate of what should be shown at the current
- * scroll offset.
- * @private
- * @return {?}
- */
- _renderContentForCurrentOffset() {
- /** @type {?} */
- const viewport = (/** @type {?} */ (this._viewport));
- /** @type {?} */
- const scrollOffset = viewport.measureScrollOffset();
- this._lastScrollOffset = scrollOffset;
- this._removalFailures = 0;
- /** @type {?} */
- const itemSize = this._averager.getAverageItemSize();
- /** @type {?} */
- const firstVisibleIndex = Math.min(viewport.getDataLength() - 1, Math.floor(scrollOffset / itemSize));
- /** @type {?} */
- const bufferSize = Math.ceil(this._maxBufferPx / itemSize);
- /** @type {?} */
- const range = this._expandRange(this._getVisibleRangeForIndex(firstVisibleIndex), bufferSize, bufferSize);
- viewport.setRenderedRange(range);
- viewport.setRenderedContentOffset(itemSize * range.start);
- }
- // TODO: maybe move to base class, can probably share with fixed size strategy.
- /**
- * Gets the visible range of data for the given start index. If the start index is too close to
- * the end of the list it may be backed up to ensure the estimated size of the range is enough to
- * fill the viewport.
- * Note: must not be called if `this._viewport` is null
- * @private
- * @param {?} startIndex The index to start the range at
- * @return {?} a range estimated to be large enough to fill the viewport when rendered.
- */
- _getVisibleRangeForIndex(startIndex) {
- /** @type {?} */
- const viewport = (/** @type {?} */ (this._viewport));
- /** @type {?} */
- const range = {
- start: startIndex,
- end: startIndex +
- Math.ceil(viewport.getViewportSize() / this._averager.getAverageItemSize())
- };
- /** @type {?} */
- const extra = range.end - viewport.getDataLength();
- if (extra > 0) {
- range.start = Math.max(0, range.start - extra);
- }
- return range;
- }
- // TODO: maybe move to base class, can probably share with fixed size strategy.
- /**
- * Expand the given range by the given amount in either direction.
- * Note: must not be called if `this._viewport` is null
- * @private
- * @param {?} range The range to expand
- * @param {?} expandStart The number of items to expand the start of the range by.
- * @param {?} expandEnd The number of items to expand the end of the range by.
- * @return {?} The expanded range.
- */
- _expandRange(range, expandStart, expandEnd) {
- /** @type {?} */
- const viewport = (/** @type {?} */ (this._viewport));
- /** @type {?} */
- const start = Math.max(0, range.start - expandStart);
- /** @type {?} */
- const end = Math.min(viewport.getDataLength(), range.end + expandEnd);
- return { start, end };
- }
- /**
- * Update the viewport's total content size.
- * @private
- * @param {?} renderedContentSize
- * @return {?}
- */
- _updateTotalContentSize(renderedContentSize) {
- /** @type {?} */
- const viewport = (/** @type {?} */ (this._viewport));
- /** @type {?} */
- const renderedRange = viewport.getRenderedRange();
- /** @type {?} */
- const totalSize = renderedContentSize +
- (viewport.getDataLength() - (renderedRange.end - renderedRange.start)) *
- this._averager.getAverageItemSize();
- viewport.setTotalContentSize(totalSize);
- }
- }
- if (false) {}
- /**
- * Provider factory for `AutoSizeVirtualScrollStrategy` that simply extracts the already created
- * `AutoSizeVirtualScrollStrategy` from the given directive.
- * @param {?} autoSizeDir The instance of `CdkAutoSizeVirtualScroll` to extract the
- * `AutoSizeVirtualScrollStrategy` from.
- * @return {?}
- */
- function _autoSizeVirtualScrollStrategyFactory(autoSizeDir) {
- return autoSizeDir._scrollStrategy;
- }
- /**
- * A virtual scroll strategy that supports unknown or dynamic size items.
- */
- class CdkAutoSizeVirtualScroll {
- constructor() {
- this._minBufferPx = 100;
- this._maxBufferPx = 200;
- /**
- * The scroll strategy used by this directive.
- */
- this._scrollStrategy = new AutoSizeVirtualScrollStrategy(this.minBufferPx, this.maxBufferPx);
- }
- /**
- * The minimum amount of buffer rendered beyond the viewport (in pixels).
- * If the amount of buffer dips below this number, more items will be rendered. Defaults to 100px.
- * @return {?}
- */
- get minBufferPx() { return this._minBufferPx; }
- /**
- * @param {?} value
- * @return {?}
- */
- set minBufferPx(value) { this._minBufferPx = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__["coerceNumberProperty"])(value); }
- /**
- * The number of pixels worth of buffer to shoot for when rendering new items.
- * If the actual amount turns out to be less it will not necessarily trigger an additional
- * rendering cycle (as long as the amount of buffer is still greater than `minBufferPx`).
- * Defaults to 200px.
- * @return {?}
- */
- get maxBufferPx() { return this._maxBufferPx; }
- /**
- * @param {?} value
- * @return {?}
- */
- set maxBufferPx(value) { this._maxBufferPx = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__["coerceNumberProperty"])(value); }
- /**
- * @return {?}
- */
- ngOnChanges() {
- this._scrollStrategy.updateBufferSize(this.minBufferPx, this.maxBufferPx);
- }
- }
- CdkAutoSizeVirtualScroll.ɵfac = function CdkAutoSizeVirtualScroll_Factory(t) { return new (t || CdkAutoSizeVirtualScroll)(); };
- CdkAutoSizeVirtualScroll.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineDirective"]({ type: CdkAutoSizeVirtualScroll, selectors: [["cdk-virtual-scroll-viewport", "autosize", ""]], inputs: { minBufferPx: "minBufferPx", maxBufferPx: "maxBufferPx" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵProvidersFeature"]([{
- provide: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_1__["VIRTUAL_SCROLL_STRATEGY"],
- useFactory: _autoSizeVirtualScrollStrategyFactory,
- deps: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["forwardRef"])(( /**
- * @return {?}
- */() => CdkAutoSizeVirtualScroll))]
- }]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵNgOnChangesFeature"]] });
- CdkAutoSizeVirtualScroll.propDecorators = {
- minBufferPx: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"] }],
- maxBufferPx: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](CdkAutoSizeVirtualScroll, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Directive"],
- args: [{
- selector: 'cdk-virtual-scroll-viewport[autosize]',
- providers: [{
- provide: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_1__["VIRTUAL_SCROLL_STRATEGY"],
- useFactory: _autoSizeVirtualScrollStrategyFactory,
- deps: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["forwardRef"])(( /**
- * @return {?}
- */() => CdkAutoSizeVirtualScroll))]
- }]
- }]
- }], function () { return []; }, { minBufferPx: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
- }], maxBufferPx: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
- }] }); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk-experimental/scrolling/scrolling-module.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class ScrollingModule {
- }
- ScrollingModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineNgModule"]({ type: ScrollingModule });
- ScrollingModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineInjector"]({ factory: function ScrollingModule_Factory(t) { return new (t || ScrollingModule)(); } });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵsetNgModuleScope"](ScrollingModule, { declarations: [CdkAutoSizeVirtualScroll], exports: [CdkAutoSizeVirtualScroll] }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](ScrollingModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["NgModule"],
- args: [{
- exports: [CdkAutoSizeVirtualScroll],
- declarations: [CdkAutoSizeVirtualScroll]
- }]
- }], null, null); })();
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk-experimental/scrolling/public-api.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=scrolling.js.map
- /***/ }),
- /***/ "coGc":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/delayWhen.js ***!
- \********************************************************************/
- /*! exports provided: delayWhen */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "delayWhen", function() { return delayWhen; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function delayWhen(delayDurationSelector, subscriptionDelay) {
- if (subscriptionDelay) {
- return (source) => new SubscriptionDelayObservable(source, subscriptionDelay)
- .lift(new DelayWhenOperator(delayDurationSelector));
- }
- return (source) => source.lift(new DelayWhenOperator(delayDurationSelector));
- }
- class DelayWhenOperator {
- constructor(delayDurationSelector) {
- this.delayDurationSelector = delayDurationSelector;
- }
- call(subscriber, source) {
- return source.subscribe(new DelayWhenSubscriber(subscriber, this.delayDurationSelector));
- }
- }
- class DelayWhenSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"] {
- constructor(destination, delayDurationSelector) {
- super(destination);
- this.delayDurationSelector = delayDurationSelector;
- this.completed = false;
- this.delayNotifierSubscriptions = [];
- this.index = 0;
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.destination.next(outerValue);
- this.removeSubscription(innerSub);
- this.tryComplete();
- }
- notifyError(error, innerSub) {
- this._error(error);
- }
- notifyComplete(innerSub) {
- const value = this.removeSubscription(innerSub);
- if (value) {
- this.destination.next(value);
- }
- this.tryComplete();
- }
- _next(value) {
- const index = this.index++;
- try {
- const delayNotifier = this.delayDurationSelector(value, index);
- if (delayNotifier) {
- this.tryDelay(delayNotifier, value);
- }
- }
- catch (err) {
- this.destination.error(err);
- }
- }
- _complete() {
- this.completed = true;
- this.tryComplete();
- this.unsubscribe();
- }
- removeSubscription(subscription) {
- subscription.unsubscribe();
- const subscriptionIdx = this.delayNotifierSubscriptions.indexOf(subscription);
- if (subscriptionIdx !== -1) {
- this.delayNotifierSubscriptions.splice(subscriptionIdx, 1);
- }
- return subscription.outerValue;
- }
- tryDelay(delayNotifier, value) {
- const notifierSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, delayNotifier, value);
- if (notifierSubscription && !notifierSubscription.closed) {
- const destination = this.destination;
- destination.add(notifierSubscription);
- this.delayNotifierSubscriptions.push(notifierSubscription);
- }
- }
- tryComplete() {
- if (this.completed && this.delayNotifierSubscriptions.length === 0) {
- this.destination.complete();
- }
- }
- }
- class SubscriptionDelayObservable extends _Observable__WEBPACK_IMPORTED_MODULE_1__["Observable"] {
- constructor(source, subscriptionDelay) {
- super();
- this.source = source;
- this.subscriptionDelay = subscriptionDelay;
- }
- _subscribe(subscriber) {
- this.subscriptionDelay.subscribe(new SubscriptionDelaySubscriber(subscriber, this.source));
- }
- }
- class SubscriptionDelaySubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(parent, source) {
- super();
- this.parent = parent;
- this.source = source;
- this.sourceSubscribed = false;
- }
- _next(unused) {
- this.subscribeToSource();
- }
- _error(err) {
- this.unsubscribe();
- this.parent.error(err);
- }
- _complete() {
- this.unsubscribe();
- this.subscribeToSource();
- }
- subscribeToSource() {
- if (!this.sourceSubscribed) {
- this.sourceSubscribed = true;
- this.unsubscribe();
- this.source.subscribe(this.parent);
- }
- }
- }
- //# sourceMappingURL=delayWhen.js.map
- /***/ }),
- /***/ "cp0P":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/forkJoin.js ***!
- \********************************************************************/
- /*! exports provided: forkJoin */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "forkJoin", function() { return forkJoin; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/isArray */ "DH7j");
- /* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../operators/map */ "lJxs");
- /* harmony import */ var _util_isObject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/isObject */ "XoHu");
- /* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./from */ "Cfvw");
- function forkJoin(...sources) {
- if (sources.length === 1) {
- const first = sources[0];
- if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(first)) {
- return forkJoinInternal(first, null);
- }
- if (Object(_util_isObject__WEBPACK_IMPORTED_MODULE_3__["isObject"])(first) && Object.getPrototypeOf(first) === Object.prototype) {
- const keys = Object.keys(first);
- return forkJoinInternal(keys.map(key => first[key]), keys);
- }
- }
- if (typeof sources[sources.length - 1] === 'function') {
- const resultSelector = sources.pop();
- sources = (sources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(sources[0])) ? sources[0] : sources;
- return forkJoinInternal(sources, null).pipe(Object(_operators_map__WEBPACK_IMPORTED_MODULE_2__["map"])((args) => resultSelector(...args)));
- }
- return forkJoinInternal(sources, null);
- }
- function forkJoinInternal(sources, keys) {
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- const len = sources.length;
- if (len === 0) {
- subscriber.complete();
- return;
- }
- const values = new Array(len);
- let completed = 0;
- let emitted = 0;
- for (let i = 0; i < len; i++) {
- const source = Object(_from__WEBPACK_IMPORTED_MODULE_4__["from"])(sources[i]);
- let hasValue = false;
- subscriber.add(source.subscribe({
- next: value => {
- if (!hasValue) {
- hasValue = true;
- emitted++;
- }
- values[i] = value;
- },
- error: err => subscriber.error(err),
- complete: () => {
- completed++;
- if (completed === len || !hasValue) {
- if (emitted === len) {
- subscriber.next(keys ?
- keys.reduce((result, key, i) => (result[key] = values[i], result), {}) :
- values);
- }
- subscriber.complete();
- }
- }
- }));
- }
- });
- }
- //# sourceMappingURL=forkJoin.js.map
- /***/ }),
- /***/ "cx9U":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/single.js ***!
- \*****************************************************************/
- /*! exports provided: single */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "single", function() { return single; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/EmptyError */ "sVev");
- function single(predicate) {
- return (source) => source.lift(new SingleOperator(predicate, source));
- }
- class SingleOperator {
- constructor(predicate, source) {
- this.predicate = predicate;
- this.source = source;
- }
- call(subscriber, source) {
- return source.subscribe(new SingleSubscriber(subscriber, this.predicate, this.source));
- }
- }
- class SingleSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, predicate, source) {
- super(destination);
- this.predicate = predicate;
- this.source = source;
- this.seenValue = false;
- this.index = 0;
- }
- applySingleValue(value) {
- if (this.seenValue) {
- this.destination.error('Sequence contains more than one element');
- }
- else {
- this.seenValue = true;
- this.singleValue = value;
- }
- }
- _next(value) {
- const index = this.index++;
- if (this.predicate) {
- this.tryNext(value, index);
- }
- else {
- this.applySingleValue(value);
- }
- }
- tryNext(value, index) {
- try {
- if (this.predicate(value, index, this.source)) {
- this.applySingleValue(value);
- }
- }
- catch (err) {
- this.destination.error(err);
- }
- }
- _complete() {
- const destination = this.destination;
- if (this.index > 0) {
- destination.next(this.seenValue ? this.singleValue : undefined);
- destination.complete();
- }
- else {
- destination.error(new _util_EmptyError__WEBPACK_IMPORTED_MODULE_1__["EmptyError"]);
- }
- }
- }
- //# sourceMappingURL=single.js.map
- /***/ }),
- /***/ "dkDA":
- /*!**********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/materialize.js ***!
- \**********************************************************************/
- /*! exports provided: materialize */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "materialize", function() { return materialize; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Notification */ "WMd4");
- function materialize() {
- return function materializeOperatorFunction(source) {
- return source.lift(new MaterializeOperator());
- };
- }
- class MaterializeOperator {
- call(subscriber, source) {
- return source.subscribe(new MaterializeSubscriber(subscriber));
- }
- }
- class MaterializeSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination) {
- super(destination);
- }
- _next(value) {
- this.destination.next(_Notification__WEBPACK_IMPORTED_MODULE_1__["Notification"].createNext(value));
- }
- _error(err) {
- const destination = this.destination;
- destination.next(_Notification__WEBPACK_IMPORTED_MODULE_1__["Notification"].createError(err));
- destination.complete();
- }
- _complete() {
- const destination = this.destination;
- destination.next(_Notification__WEBPACK_IMPORTED_MODULE_1__["Notification"].createComplete());
- destination.complete();
- }
- }
- //# sourceMappingURL=materialize.js.map
- /***/ }),
- /***/ "eIep":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/switchMap.js ***!
- \********************************************************************/
- /*! exports provided: switchMap */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchMap", function() { return switchMap; });
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../InnerSubscriber */ "51Dv");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- /* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./map */ "lJxs");
- /* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../observable/from */ "Cfvw");
- function switchMap(project, resultSelector) {
- if (typeof resultSelector === 'function') {
- return (source) => source.pipe(switchMap((a, i) => Object(_observable_from__WEBPACK_IMPORTED_MODULE_4__["from"])(project(a, i)).pipe(Object(_map__WEBPACK_IMPORTED_MODULE_3__["map"])((b, ii) => resultSelector(a, b, i, ii)))));
- }
- return (source) => source.lift(new SwitchMapOperator(project));
- }
- class SwitchMapOperator {
- constructor(project) {
- this.project = project;
- }
- call(subscriber, source) {
- return source.subscribe(new SwitchMapSubscriber(subscriber, this.project));
- }
- }
- class SwitchMapSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__["OuterSubscriber"] {
- constructor(destination, project) {
- super(destination);
- this.project = project;
- this.index = 0;
- }
- _next(value) {
- let result;
- const index = this.index++;
- try {
- result = this.project(value, index);
- }
- catch (error) {
- this.destination.error(error);
- return;
- }
- this._innerSub(result, value, index);
- }
- _innerSub(result, value, index) {
- const innerSubscription = this.innerSubscription;
- if (innerSubscription) {
- innerSubscription.unsubscribe();
- }
- const innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_1__["InnerSubscriber"](this, value, index);
- const destination = this.destination;
- destination.add(innerSubscriber);
- this.innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, result, undefined, undefined, innerSubscriber);
- if (this.innerSubscription !== innerSubscriber) {
- destination.add(this.innerSubscription);
- }
- }
- _complete() {
- const { innerSubscription } = this;
- if (!innerSubscription || innerSubscription.closed) {
- super._complete();
- }
- this.unsubscribe();
- }
- _unsubscribe() {
- this.innerSubscription = null;
- }
- notifyComplete(innerSub) {
- const destination = this.destination;
- destination.remove(innerSub);
- this.innerSubscription = null;
- if (this.isStopped) {
- super._complete();
- }
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.destination.next(innerValue);
- }
- }
- //# sourceMappingURL=switchMap.js.map
- /***/ }),
- /***/ "eNwd":
- /*!*************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduler/animationFrame.js ***!
- \*************************************************************************/
- /*! exports provided: animationFrame */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "animationFrame", function() { return animationFrame; });
- /* harmony import */ var _AnimationFrameAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AnimationFrameAction */ "Vpsf");
- /* harmony import */ var _AnimationFrameScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AnimationFrameScheduler */ "znLP");
- const animationFrame = new _AnimationFrameScheduler__WEBPACK_IMPORTED_MODULE_1__["AnimationFrameScheduler"](_AnimationFrameAction__WEBPACK_IMPORTED_MODULE_0__["AnimationFrameAction"]);
- //# sourceMappingURL=animationFrame.js.map
- /***/ }),
- /***/ "f29J":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/concat.js ***!
- \*****************************************************************/
- /*! exports provided: concat */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return concat; });
- /* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../observable/concat */ "GyhO");
- function concat(...observables) {
- return (source) => source.lift.call(Object(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"])(source, ...observables));
- }
- //# sourceMappingURL=concat.js.map
- /***/ }),
- /***/ "fFD9":
- /*!************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/combineLatest.js ***!
- \************************************************************************/
- /*! exports provided: combineLatest */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return combineLatest; });
- /* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/isArray */ "DH7j");
- /* harmony import */ var _observable_combineLatest__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../observable/combineLatest */ "itXk");
- /* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../observable/from */ "Cfvw");
- const none = {};
- function combineLatest(...observables) {
- let project = null;
- if (typeof observables[observables.length - 1] === 'function') {
- project = observables.pop();
- }
- if (observables.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(observables[0])) {
- observables = observables[0].slice();
- }
- return (source) => source.lift.call(Object(_observable_from__WEBPACK_IMPORTED_MODULE_2__["from"])([source, ...observables]), new _observable_combineLatest__WEBPACK_IMPORTED_MODULE_1__["CombineLatestOperator"](project));
- }
- //# sourceMappingURL=combineLatest.js.map
- /***/ }),
- /***/ "fXoL":
- /*!******************************************************************!*\
- !*** ./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js ***!
- \******************************************************************/
- /*! exports provided: ANALYZE_FOR_ENTRY_COMPONENTS, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory, ComponentFactoryResolver, ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, Directive, ElementRef, EmbeddedViewRef, ErrorHandler, EventEmitter, Host, HostBinding, HostListener, INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory, NgModuleFactoryLoader, NgModuleRef, NgProbeToken, NgZone, Optional, Output, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, Pipe, PlatformRef, Query, QueryList, ReflectiveInjector, ReflectiveKey, Renderer2, RendererFactory2, RendererStyleFlags2, ResolvedReflectiveFactory, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, SystemJsNgModuleLoader, SystemJsNgModuleLoaderConfig, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, ViewRef, WrappedValue, asNativeElements, assertPlatform, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getPlatform, inject, isDevMode, platformCore, resolveForwardRef, setTestabilityGetter, ɵ0, ɵALLOW_MULTIPLE_PLATFORMS, ɵAPP_ID_RANDOM_PROVIDER, ɵCREATE_ATTRIBUTE_DECORATOR__POST_R3__, ɵChangeDetectorStatus, ɵCodegenComponentFactoryResolver, ɵCompiler_compileModuleAndAllComponentsAsync__POST_R3__, ɵCompiler_compileModuleAndAllComponentsSync__POST_R3__, ɵCompiler_compileModuleAsync__POST_R3__, ɵCompiler_compileModuleSync__POST_R3__, ɵComponentFactory, ɵConsole, ɵDEFAULT_LOCALE_ID, ɵEMPTY_ARRAY, ɵEMPTY_MAP, ɵINJECTOR_IMPL__POST_R3__, ɵINJECTOR_SCOPE, ɵLifecycleHooksFeature, ɵLocaleDataIndex, ɵNG_COMP_DEF, ɵNG_DIR_DEF, ɵNG_ELEMENT_ID, ɵNG_INJ_DEF, ɵNG_MOD_DEF, ɵNG_PIPE_DEF, ɵNG_PROV_DEF, ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, ɵNO_CHANGE, ɵNgModuleFactory, ɵNoopNgZone, ɵReflectionCapabilities, ɵRender3ComponentFactory, ɵRender3ComponentRef, ɵRender3NgModuleRef, ɵSWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__, ɵSWITCH_COMPILE_COMPONENT__POST_R3__, ɵSWITCH_COMPILE_DIRECTIVE__POST_R3__, ɵSWITCH_COMPILE_INJECTABLE__POST_R3__, ɵSWITCH_COMPILE_NGMODULE__POST_R3__, ɵSWITCH_COMPILE_PIPE__POST_R3__, ɵSWITCH_ELEMENT_REF_FACTORY__POST_R3__, ɵSWITCH_IVY_ENABLED__POST_R3__, ɵSWITCH_RENDERER2_FACTORY__POST_R3__, ɵSWITCH_TEMPLATE_REF_FACTORY__POST_R3__, ɵSWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__, ɵ_sanitizeHtml, ɵ_sanitizeUrl, ɵallowSanitizationBypassAndThrow, ɵand, ɵangular_packages_core_core_a, ɵangular_packages_core_core_b, ɵangular_packages_core_core_ba, ɵangular_packages_core_core_bb, ɵangular_packages_core_core_bc, ɵangular_packages_core_core_bd, ɵangular_packages_core_core_be, ɵangular_packages_core_core_bf, ɵangular_packages_core_core_bg, ɵangular_packages_core_core_bi, ɵangular_packages_core_core_bj, ɵangular_packages_core_core_bk, ɵangular_packages_core_core_bl, ɵangular_packages_core_core_bm, ɵangular_packages_core_core_bn, ɵangular_packages_core_core_bo, ɵangular_packages_core_core_bp, ɵangular_packages_core_core_bq, ɵangular_packages_core_core_br, ɵangular_packages_core_core_bs, ɵangular_packages_core_core_bu, ɵangular_packages_core_core_bw, ɵangular_packages_core_core_bx, ɵangular_packages_core_core_by, ɵangular_packages_core_core_bz, ɵangular_packages_core_core_c, ɵangular_packages_core_core_ca, ɵangular_packages_core_core_d, ɵangular_packages_core_core_e, ɵangular_packages_core_core_f, ɵangular_packages_core_core_g, ɵangular_packages_core_core_h, ɵangular_packages_core_core_i, ɵangular_packages_core_core_j, ɵangular_packages_core_core_k, ɵangular_packages_core_core_l, ɵangular_packages_core_core_m, ɵangular_packages_core_core_n, ɵangular_packages_core_core_o, ɵangular_packages_core_core_p, ɵangular_packages_core_core_q, ɵangular_packages_core_core_r, ɵangular_packages_core_core_s, ɵangular_packages_core_core_t, ɵangular_packages_core_core_u, ɵangular_packages_core_core_v, ɵangular_packages_core_core_w, ɵangular_packages_core_core_x, ɵangular_packages_core_core_y, ɵangular_packages_core_core_z, ɵbypassSanitizationTrustHtml, ɵbypassSanitizationTrustResourceUrl, ɵbypassSanitizationTrustScript, ɵbypassSanitizationTrustStyle, ɵbypassSanitizationTrustUrl, ɵccf, ɵclearOverrides, ɵclearResolutionOfComponentResourcesQueue, ɵcmf, ɵcompileComponent, ɵcompileDirective, ɵcompileNgModule, ɵcompileNgModuleDefs, ɵcompileNgModuleFactory__POST_R3__, ɵcompilePipe, ɵcreateInjector, ɵcrt, ɵdefaultIterableDiffers, ɵdefaultKeyValueDiffers, ɵdetectChanges, ɵdevModeEqual, ɵdid, ɵeld, ɵfindLocaleData, ɵflushModuleScopingQueueAsMuchAsPossible, ɵgetComponentViewDefinitionFactory, ɵgetDebugNodeR2, ɵgetDebugNode__POST_R3__, ɵgetDirectives, ɵgetHostElement, ɵgetInjectableDef, ɵgetLContext, ɵgetLocaleCurrencyCode, ɵgetLocalePluralCase, ɵgetModuleFactory__POST_R3__, ɵgetSanitizationBypassType, ɵglobal, ɵinitServicesIfNeeded, ɵinlineInterpolate, ɵinterpolate, ɵisBoundToModule__POST_R3__, ɵisDefaultChangeDetectionStrategy, ɵisListLikeIterable, ɵisObservable, ɵisPromise, ɵivyEnabled, ɵmakeDecorator, ɵmarkDirty, ɵmod, ɵmpd, ɵncd, ɵnoSideEffects, ɵnov, ɵoverrideComponentView, ɵoverrideProvider, ɵpad, ɵpatchComponentDefWithScope, ɵpid, ɵpod, ɵppd, ɵprd, ɵpublishDefaultGlobalUtils, ɵpublishGlobalUtil, ɵqud, ɵregisterLocaleData, ɵregisterModuleFactory, ɵregisterNgModuleType, ɵrenderComponent, ɵresetCompiledComponents, ɵresetJitOptions, ɵresolveComponentResources, ɵsetClassMetadata, ɵsetCurrentInjector, ɵsetDocument, ɵsetLocaleId, ɵstore, ɵstringify, ɵted, ɵtransitiveScopesFor, ɵunregisterLocaleData, ɵunv, ɵunwrapSafeValue, ɵvid, ɵwhenRendered, ɵɵCopyDefinitionFeature, ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcontentQuery, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdisableBindings, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableBindings, ɵɵgetCurrentView, ɵɵgetFactoryOf, ɵɵgetInheritedFactory, ɵɵhostProperty, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinject, ɵɵinjectAttribute, ɵɵinjectPipeChangeDetectorRef, ɵɵinvalidFactory, ɵɵinvalidFactoryDep, ɵɵlistener, ɵɵloadQuery, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵnextContext, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpropertyInterpolate, ɵɵpropertyInterpolate1, ɵɵpropertyInterpolate2, ɵɵpropertyInterpolate3, ɵɵpropertyInterpolate4, ɵɵpropertyInterpolate5, ɵɵpropertyInterpolate6, ɵɵpropertyInterpolate7, ɵɵpropertyInterpolate8, ɵɵpropertyInterpolateV, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryRefresh, ɵɵreference, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstaticContentQuery, ɵɵstaticViewQuery, ɵɵstyleMap, ɵɵstyleMapInterpolate1, ɵɵstyleMapInterpolate2, ɵɵstyleMapInterpolate3, ɵɵstyleMapInterpolate4, ɵɵstyleMapInterpolate5, ɵɵstyleMapInterpolate6, ɵɵstyleMapInterpolate7, ɵɵstyleMapInterpolate8, ɵɵstyleMapInterpolateV, ɵɵstyleProp, ɵɵstylePropInterpolate1, ɵɵstylePropInterpolate2, ɵɵstylePropInterpolate3, ɵɵstylePropInterpolate4, ɵɵstylePropInterpolate5, ɵɵstylePropInterpolate6, ɵɵstylePropInterpolate7, ɵɵstylePropInterpolate8, ɵɵstylePropInterpolateV, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵtrustConstantScript, ɵɵviewQuery */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ANALYZE_FOR_ENTRY_COMPONENTS", function() { return ANALYZE_FOR_ENTRY_COMPONENTS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "APP_BOOTSTRAP_LISTENER", function() { return APP_BOOTSTRAP_LISTENER; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "APP_ID", function() { return APP_ID; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "APP_INITIALIZER", function() { return APP_INITIALIZER; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ApplicationInitStatus", function() { return ApplicationInitStatus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ApplicationModule", function() { return ApplicationModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ApplicationRef", function() { return ApplicationRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Attribute", function() { return Attribute; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "COMPILER_OPTIONS", function() { return COMPILER_OPTIONS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CUSTOM_ELEMENTS_SCHEMA", function() { return CUSTOM_ELEMENTS_SCHEMA; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ChangeDetectionStrategy", function() { return ChangeDetectionStrategy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ChangeDetectorRef", function() { return ChangeDetectorRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Compiler", function() { return Compiler; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompilerFactory", function() { return CompilerFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Component", function() { return Component; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComponentFactory", function() { return ComponentFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComponentFactoryResolver", function() { return ComponentFactoryResolver; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComponentRef", function() { return ComponentRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContentChild", function() { return ContentChild; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContentChildren", function() { return ContentChildren; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEFAULT_CURRENCY_CODE", function() { return DEFAULT_CURRENCY_CODE; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DebugElement", function() { return DebugElement; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DebugEventListener", function() { return DebugEventListener; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DebugNode", function() { return DebugNode; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DefaultIterableDiffer", function() { return DefaultIterableDiffer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Directive", function() { return Directive; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ElementRef", function() { return ElementRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EmbeddedViewRef", function() { return EmbeddedViewRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ErrorHandler", function() { return ErrorHandler; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EventEmitter", function() { return EventEmitter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Host", function() { return Host; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HostBinding", function() { return HostBinding; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HostListener", function() { return HostListener; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "INJECTOR", function() { return INJECTOR$1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Inject", function() { return Inject; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InjectFlags", function() { return InjectFlags; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Injectable", function() { return Injectable; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InjectionToken", function() { return InjectionToken; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Injector", function() { return Injector; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Input", function() { return Input; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IterableDiffers", function() { return IterableDiffers; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KeyValueDiffers", function() { return KeyValueDiffers; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LOCALE_ID", function() { return LOCALE_ID$1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MissingTranslationStrategy", function() { return MissingTranslationStrategy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ModuleWithComponentFactories", function() { return ModuleWithComponentFactories; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NO_ERRORS_SCHEMA", function() { return NO_ERRORS_SCHEMA; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgModule", function() { return NgModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgModuleFactory", function() { return NgModuleFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgModuleFactoryLoader", function() { return NgModuleFactoryLoader; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgModuleRef", function() { return NgModuleRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgProbeToken", function() { return NgProbeToken; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgZone", function() { return NgZone; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Optional", function() { return Optional; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Output", function() { return Output; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PACKAGE_ROOT_URL", function() { return PACKAGE_ROOT_URL; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PLATFORM_ID", function() { return PLATFORM_ID; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PLATFORM_INITIALIZER", function() { return PLATFORM_INITIALIZER; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Pipe", function() { return Pipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PlatformRef", function() { return PlatformRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Query", function() { return Query; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QueryList", function() { return QueryList; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ReflectiveInjector", function() { return ReflectiveInjector; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ReflectiveKey", function() { return ReflectiveKey; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Renderer2", function() { return Renderer2; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RendererFactory2", function() { return RendererFactory2; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RendererStyleFlags2", function() { return RendererStyleFlags2; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ResolvedReflectiveFactory", function() { return ResolvedReflectiveFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Sanitizer", function() { return Sanitizer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SecurityContext", function() { return SecurityContext; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Self", function() { return Self; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SimpleChange", function() { return SimpleChange; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SkipSelf", function() { return SkipSelf; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SystemJsNgModuleLoader", function() { return SystemJsNgModuleLoader; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SystemJsNgModuleLoaderConfig", function() { return SystemJsNgModuleLoaderConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TRANSLATIONS", function() { return TRANSLATIONS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TRANSLATIONS_FORMAT", function() { return TRANSLATIONS_FORMAT; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TemplateRef", function() { return TemplateRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Testability", function() { return Testability; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TestabilityRegistry", function() { return TestabilityRegistry; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Type", function() { return Type; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VERSION", function() { return VERSION; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Version", function() { return Version; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ViewChild", function() { return ViewChild; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ViewChildren", function() { return ViewChildren; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ViewContainerRef", function() { return ViewContainerRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ViewEncapsulation", function() { return ViewEncapsulation; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ViewRef", function() { return ViewRef$1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WrappedValue", function() { return WrappedValue; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asNativeElements", function() { return asNativeElements; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "assertPlatform", function() { return assertPlatform; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createPlatform", function() { return createPlatform; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createPlatformFactory", function() { return createPlatformFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defineInjectable", function() { return defineInjectable; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "destroyPlatform", function() { return destroyPlatform; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "enableProdMode", function() { return enableProdMode; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "forwardRef", function() { return forwardRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDebugNode", function() { return getDebugNode$1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getModuleFactory", function() { return getModuleFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPlatform", function() { return getPlatform; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "inject", function() { return inject; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isDevMode", function() { return isDevMode; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "platformCore", function() { return platformCore; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resolveForwardRef", function() { return resolveForwardRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setTestabilityGetter", function() { return setTestabilityGetter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵ0", function() { return ɵ0$2; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵALLOW_MULTIPLE_PLATFORMS", function() { return ALLOW_MULTIPLE_PLATFORMS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵAPP_ID_RANDOM_PROVIDER", function() { return APP_ID_RANDOM_PROVIDER; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵCREATE_ATTRIBUTE_DECORATOR__POST_R3__", function() { return CREATE_ATTRIBUTE_DECORATOR__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵChangeDetectorStatus", function() { return ChangeDetectorStatus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵCodegenComponentFactoryResolver", function() { return CodegenComponentFactoryResolver; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵCompiler_compileModuleAndAllComponentsAsync__POST_R3__", function() { return Compiler_compileModuleAndAllComponentsAsync__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵCompiler_compileModuleAndAllComponentsSync__POST_R3__", function() { return Compiler_compileModuleAndAllComponentsSync__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵCompiler_compileModuleAsync__POST_R3__", function() { return Compiler_compileModuleAsync__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵCompiler_compileModuleSync__POST_R3__", function() { return Compiler_compileModuleSync__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵComponentFactory", function() { return ComponentFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵConsole", function() { return Console; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵDEFAULT_LOCALE_ID", function() { return DEFAULT_LOCALE_ID; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵEMPTY_ARRAY", function() { return EMPTY_ARRAY$4; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵEMPTY_MAP", function() { return EMPTY_MAP; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵINJECTOR_IMPL__POST_R3__", function() { return INJECTOR_IMPL__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵINJECTOR_SCOPE", function() { return INJECTOR_SCOPE; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵLifecycleHooksFeature", function() { return LifecycleHooksFeature; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵLocaleDataIndex", function() { return LocaleDataIndex; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵNG_COMP_DEF", function() { return NG_COMP_DEF; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵNG_DIR_DEF", function() { return NG_DIR_DEF; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵNG_ELEMENT_ID", function() { return NG_ELEMENT_ID; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵNG_INJ_DEF", function() { return NG_INJ_DEF; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵNG_MOD_DEF", function() { return NG_MOD_DEF; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵNG_PIPE_DEF", function() { return NG_PIPE_DEF; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵNG_PROV_DEF", function() { return NG_PROV_DEF; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR", function() { return NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵNO_CHANGE", function() { return NO_CHANGE; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵNgModuleFactory", function() { return NgModuleFactory$1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵNoopNgZone", function() { return NoopNgZone; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵReflectionCapabilities", function() { return ReflectionCapabilities; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵRender3ComponentFactory", function() { return ComponentFactory$1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵRender3ComponentRef", function() { return ComponentRef$1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵRender3NgModuleRef", function() { return NgModuleRef$1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵSWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__", function() { return SWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵSWITCH_COMPILE_COMPONENT__POST_R3__", function() { return SWITCH_COMPILE_COMPONENT__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵSWITCH_COMPILE_DIRECTIVE__POST_R3__", function() { return SWITCH_COMPILE_DIRECTIVE__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵSWITCH_COMPILE_INJECTABLE__POST_R3__", function() { return SWITCH_COMPILE_INJECTABLE__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵSWITCH_COMPILE_NGMODULE__POST_R3__", function() { return SWITCH_COMPILE_NGMODULE__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵSWITCH_COMPILE_PIPE__POST_R3__", function() { return SWITCH_COMPILE_PIPE__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵSWITCH_ELEMENT_REF_FACTORY__POST_R3__", function() { return SWITCH_ELEMENT_REF_FACTORY__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵSWITCH_IVY_ENABLED__POST_R3__", function() { return SWITCH_IVY_ENABLED__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵSWITCH_RENDERER2_FACTORY__POST_R3__", function() { return SWITCH_RENDERER2_FACTORY__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵSWITCH_TEMPLATE_REF_FACTORY__POST_R3__", function() { return SWITCH_TEMPLATE_REF_FACTORY__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵSWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__", function() { return SWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵ_sanitizeHtml", function() { return _sanitizeHtml; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵ_sanitizeUrl", function() { return _sanitizeUrl; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵallowSanitizationBypassAndThrow", function() { return allowSanitizationBypassAndThrow; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵand", function() { return anchorDef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_a", function() { return isForwardRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_b", function() { return injectInjectorOnly; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_ba", function() { return DebugContext; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bb", function() { return NgOnChangesFeatureImpl; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bc", function() { return SCHEDULER; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bd", function() { return injectAttributeImpl; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_be", function() { return getLView; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bf", function() { return getBindingRoot; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bg", function() { return nextContextImpl; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bi", function() { return pureFunction1Internal; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bj", function() { return pureFunction2Internal; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bk", function() { return pureFunction3Internal; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bl", function() { return pureFunction4Internal; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bm", function() { return pureFunctionVInternal; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bn", function() { return getUrlSanitizer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bo", function() { return makePropDecorator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bp", function() { return makeParamDecorator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bq", function() { return getClosureSafeProperty; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_br", function() { return NullInjector; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bs", function() { return getInjectImplementation; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bu", function() { return getNativeByTNode; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bw", function() { return getRootContext; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bx", function() { return i18nPostprocess; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_by", function() { return trustedHTMLFromString; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bz", function() { return trustedScriptURLFromString; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_c", function() { return ReflectiveInjector_; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_ca", function() { return trustedScriptFromString; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_d", function() { return ReflectiveDependency; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_e", function() { return resolveReflectiveProviders; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_f", function() { return _appIdRandomProviderFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_g", function() { return injectRenderer2; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_h", function() { return injectElementRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_i", function() { return createElementRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_j", function() { return getModuleFactory__PRE_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_k", function() { return injectTemplateRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_l", function() { return createTemplateRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_m", function() { return injectViewContainerRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_n", function() { return DebugNode__PRE_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_o", function() { return DebugElement__PRE_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_p", function() { return getDebugNodeR2__PRE_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_q", function() { return injectChangeDetectorRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_r", function() { return DefaultIterableDifferFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_s", function() { return DefaultKeyValueDifferFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_t", function() { return _iterableDiffersFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_u", function() { return _keyValueDiffersFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_v", function() { return _localeFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_w", function() { return APPLICATION_MODULE_PROVIDERS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_x", function() { return zoneSchedulerFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_y", function() { return USD_CURRENCY_CODE; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_z", function() { return _def; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵbypassSanitizationTrustHtml", function() { return bypassSanitizationTrustHtml; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵbypassSanitizationTrustResourceUrl", function() { return bypassSanitizationTrustResourceUrl; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵbypassSanitizationTrustScript", function() { return bypassSanitizationTrustScript; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵbypassSanitizationTrustStyle", function() { return bypassSanitizationTrustStyle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵbypassSanitizationTrustUrl", function() { return bypassSanitizationTrustUrl; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵccf", function() { return createComponentFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵclearOverrides", function() { return clearOverrides; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵclearResolutionOfComponentResourcesQueue", function() { return clearResolutionOfComponentResourcesQueue; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵcmf", function() { return createNgModuleFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵcompileComponent", function() { return compileComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵcompileDirective", function() { return compileDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵcompileNgModule", function() { return compileNgModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵcompileNgModuleDefs", function() { return compileNgModuleDefs; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵcompileNgModuleFactory__POST_R3__", function() { return compileNgModuleFactory__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵcompilePipe", function() { return compilePipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵcreateInjector", function() { return createInjector; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵcrt", function() { return createRendererType2; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵdefaultIterableDiffers", function() { return defaultIterableDiffers; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵdefaultKeyValueDiffers", function() { return defaultKeyValueDiffers; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵdetectChanges", function() { return detectChanges; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵdevModeEqual", function() { return devModeEqual; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵdid", function() { return directiveDef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵeld", function() { return elementDef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵfindLocaleData", function() { return findLocaleData; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵflushModuleScopingQueueAsMuchAsPossible", function() { return flushModuleScopingQueueAsMuchAsPossible; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵgetComponentViewDefinitionFactory", function() { return getComponentViewDefinitionFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵgetDebugNodeR2", function() { return getDebugNodeR2; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵgetDebugNode__POST_R3__", function() { return getDebugNode__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵgetDirectives", function() { return getDirectives; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵgetHostElement", function() { return getHostElement; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵgetInjectableDef", function() { return getInjectableDef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵgetLContext", function() { return getLContext; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵgetLocaleCurrencyCode", function() { return getLocaleCurrencyCode; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵgetLocalePluralCase", function() { return getLocalePluralCase; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵgetModuleFactory__POST_R3__", function() { return getModuleFactory__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵgetSanitizationBypassType", function() { return getSanitizationBypassType; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵglobal", function() { return _global; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵinitServicesIfNeeded", function() { return initServicesIfNeeded; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵinlineInterpolate", function() { return inlineInterpolate; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵinterpolate", function() { return interpolate; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵisBoundToModule__POST_R3__", function() { return isBoundToModule__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵisDefaultChangeDetectionStrategy", function() { return isDefaultChangeDetectionStrategy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵisListLikeIterable", function() { return isListLikeIterable; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵisObservable", function() { return isObservable; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵisPromise", function() { return isPromise; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵivyEnabled", function() { return ivyEnabled; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵmakeDecorator", function() { return makeDecorator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵmarkDirty", function() { return markDirty; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵmod", function() { return moduleDef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵmpd", function() { return moduleProvideDef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵncd", function() { return ngContentDef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵnoSideEffects", function() { return noSideEffects; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵnov", function() { return nodeValue; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵoverrideComponentView", function() { return overrideComponentView; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵoverrideProvider", function() { return overrideProvider; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵpad", function() { return pureArrayDef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵpatchComponentDefWithScope", function() { return patchComponentDefWithScope; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵpid", function() { return pipeDef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵpod", function() { return pureObjectDef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵppd", function() { return purePipeDef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵprd", function() { return providerDef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵpublishDefaultGlobalUtils", function() { return publishDefaultGlobalUtils; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵpublishGlobalUtil", function() { return publishGlobalUtil; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵqud", function() { return queryDef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵregisterLocaleData", function() { return registerLocaleData; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵregisterModuleFactory", function() { return registerModuleFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵregisterNgModuleType", function() { return registerNgModuleType; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵrenderComponent", function() { return renderComponent$1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵresetCompiledComponents", function() { return resetCompiledComponents; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵresetJitOptions", function() { return resetJitOptions; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵresolveComponentResources", function() { return resolveComponentResources; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵsetClassMetadata", function() { return setClassMetadata; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵsetCurrentInjector", function() { return setCurrentInjector; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵsetDocument", function() { return setDocument; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵsetLocaleId", function() { return setLocaleId; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵstore", function() { return store; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵstringify", function() { return stringify; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵted", function() { return textDef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵtransitiveScopesFor", function() { return transitiveScopesFor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵunregisterLocaleData", function() { return unregisterAllLocaleData; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵunv", function() { return unwrapValue; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵunwrapSafeValue", function() { return unwrapSafeValue; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵvid", function() { return viewDef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵwhenRendered", function() { return whenRendered; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵCopyDefinitionFeature", function() { return ɵɵCopyDefinitionFeature; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵInheritDefinitionFeature", function() { return ɵɵInheritDefinitionFeature; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵNgOnChangesFeature", function() { return ɵɵNgOnChangesFeature; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵProvidersFeature", function() { return ɵɵProvidersFeature; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵadvance", function() { return ɵɵadvance; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵattribute", function() { return ɵɵattribute; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolate1", function() { return ɵɵattributeInterpolate1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolate2", function() { return ɵɵattributeInterpolate2; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolate3", function() { return ɵɵattributeInterpolate3; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolate4", function() { return ɵɵattributeInterpolate4; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolate5", function() { return ɵɵattributeInterpolate5; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolate6", function() { return ɵɵattributeInterpolate6; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolate7", function() { return ɵɵattributeInterpolate7; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolate8", function() { return ɵɵattributeInterpolate8; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolateV", function() { return ɵɵattributeInterpolateV; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵclassMap", function() { return ɵɵclassMap; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolate1", function() { return ɵɵclassMapInterpolate1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolate2", function() { return ɵɵclassMapInterpolate2; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolate3", function() { return ɵɵclassMapInterpolate3; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolate4", function() { return ɵɵclassMapInterpolate4; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolate5", function() { return ɵɵclassMapInterpolate5; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolate6", function() { return ɵɵclassMapInterpolate6; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolate7", function() { return ɵɵclassMapInterpolate7; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolate8", function() { return ɵɵclassMapInterpolate8; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolateV", function() { return ɵɵclassMapInterpolateV; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵclassProp", function() { return ɵɵclassProp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵcontentQuery", function() { return ɵɵcontentQuery; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵdefineComponent", function() { return ɵɵdefineComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵdefineDirective", function() { return ɵɵdefineDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵdefineInjectable", function() { return ɵɵdefineInjectable; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵdefineInjector", function() { return ɵɵdefineInjector; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵdefineNgModule", function() { return ɵɵdefineNgModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵdefinePipe", function() { return ɵɵdefinePipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵdirectiveInject", function() { return ɵɵdirectiveInject; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵdisableBindings", function() { return ɵɵdisableBindings; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵelement", function() { return ɵɵelement; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵelementContainer", function() { return ɵɵelementContainer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵelementContainerEnd", function() { return ɵɵelementContainerEnd; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵelementContainerStart", function() { return ɵɵelementContainerStart; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵelementEnd", function() { return ɵɵelementEnd; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵelementStart", function() { return ɵɵelementStart; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵenableBindings", function() { return ɵɵenableBindings; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵgetCurrentView", function() { return ɵɵgetCurrentView; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵgetFactoryOf", function() { return ɵɵgetFactoryOf; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵgetInheritedFactory", function() { return ɵɵgetInheritedFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵhostProperty", function() { return ɵɵhostProperty; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵi18n", function() { return ɵɵi18n; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵi18nApply", function() { return ɵɵi18nApply; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵi18nAttributes", function() { return ɵɵi18nAttributes; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵi18nEnd", function() { return ɵɵi18nEnd; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵi18nExp", function() { return ɵɵi18nExp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵi18nPostprocess", function() { return ɵɵi18nPostprocess; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵi18nStart", function() { return ɵɵi18nStart; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵinject", function() { return ɵɵinject; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵinjectAttribute", function() { return ɵɵinjectAttribute; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵinjectPipeChangeDetectorRef", function() { return ɵɵinjectPipeChangeDetectorRef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵinvalidFactory", function() { return ɵɵinvalidFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵinvalidFactoryDep", function() { return ɵɵinvalidFactoryDep; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵlistener", function() { return ɵɵlistener; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵloadQuery", function() { return ɵɵloadQuery; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵnamespaceHTML", function() { return ɵɵnamespaceHTML; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵnamespaceMathML", function() { return ɵɵnamespaceMathML; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵnamespaceSVG", function() { return ɵɵnamespaceSVG; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵnextContext", function() { return ɵɵnextContext; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpipe", function() { return ɵɵpipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpipeBind1", function() { return ɵɵpipeBind1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpipeBind2", function() { return ɵɵpipeBind2; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpipeBind3", function() { return ɵɵpipeBind3; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpipeBind4", function() { return ɵɵpipeBind4; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpipeBindV", function() { return ɵɵpipeBindV; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵprojection", function() { return ɵɵprojection; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵprojectionDef", function() { return ɵɵprojectionDef; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵproperty", function() { return ɵɵproperty; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate", function() { return ɵɵpropertyInterpolate; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate1", function() { return ɵɵpropertyInterpolate1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate2", function() { return ɵɵpropertyInterpolate2; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate3", function() { return ɵɵpropertyInterpolate3; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate4", function() { return ɵɵpropertyInterpolate4; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate5", function() { return ɵɵpropertyInterpolate5; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate6", function() { return ɵɵpropertyInterpolate6; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate7", function() { return ɵɵpropertyInterpolate7; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate8", function() { return ɵɵpropertyInterpolate8; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolateV", function() { return ɵɵpropertyInterpolateV; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction0", function() { return ɵɵpureFunction0; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction1", function() { return ɵɵpureFunction1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction2", function() { return ɵɵpureFunction2; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction3", function() { return ɵɵpureFunction3; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction4", function() { return ɵɵpureFunction4; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction5", function() { return ɵɵpureFunction5; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction6", function() { return ɵɵpureFunction6; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction7", function() { return ɵɵpureFunction7; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction8", function() { return ɵɵpureFunction8; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵpureFunctionV", function() { return ɵɵpureFunctionV; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵqueryRefresh", function() { return ɵɵqueryRefresh; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵreference", function() { return ɵɵreference; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵresolveBody", function() { return ɵɵresolveBody; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵresolveDocument", function() { return ɵɵresolveDocument; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵresolveWindow", function() { return ɵɵresolveWindow; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵrestoreView", function() { return ɵɵrestoreView; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵsanitizeHtml", function() { return ɵɵsanitizeHtml; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵsanitizeResourceUrl", function() { return ɵɵsanitizeResourceUrl; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵsanitizeScript", function() { return ɵɵsanitizeScript; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵsanitizeStyle", function() { return ɵɵsanitizeStyle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵsanitizeUrl", function() { return ɵɵsanitizeUrl; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵsanitizeUrlOrResourceUrl", function() { return ɵɵsanitizeUrlOrResourceUrl; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵsetComponentScope", function() { return ɵɵsetComponentScope; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵsetNgModuleScope", function() { return ɵɵsetNgModuleScope; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstaticContentQuery", function() { return ɵɵstaticContentQuery; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstaticViewQuery", function() { return ɵɵstaticViewQuery; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstyleMap", function() { return ɵɵstyleMap; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolate1", function() { return ɵɵstyleMapInterpolate1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolate2", function() { return ɵɵstyleMapInterpolate2; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolate3", function() { return ɵɵstyleMapInterpolate3; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolate4", function() { return ɵɵstyleMapInterpolate4; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolate5", function() { return ɵɵstyleMapInterpolate5; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolate6", function() { return ɵɵstyleMapInterpolate6; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolate7", function() { return ɵɵstyleMapInterpolate7; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolate8", function() { return ɵɵstyleMapInterpolate8; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolateV", function() { return ɵɵstyleMapInterpolateV; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstyleProp", function() { return ɵɵstyleProp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolate1", function() { return ɵɵstylePropInterpolate1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolate2", function() { return ɵɵstylePropInterpolate2; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolate3", function() { return ɵɵstylePropInterpolate3; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolate4", function() { return ɵɵstylePropInterpolate4; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolate5", function() { return ɵɵstylePropInterpolate5; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolate6", function() { return ɵɵstylePropInterpolate6; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolate7", function() { return ɵɵstylePropInterpolate7; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolate8", function() { return ɵɵstylePropInterpolate8; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolateV", function() { return ɵɵstylePropInterpolateV; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵsyntheticHostListener", function() { return ɵɵsyntheticHostListener; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵsyntheticHostProperty", function() { return ɵɵsyntheticHostProperty; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵtemplate", function() { return ɵɵtemplate; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵtemplateRefExtractor", function() { return ɵɵtemplateRefExtractor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵtext", function() { return ɵɵtext; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate", function() { return ɵɵtextInterpolate; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate1", function() { return ɵɵtextInterpolate1; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate2", function() { return ɵɵtextInterpolate2; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate3", function() { return ɵɵtextInterpolate3; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate4", function() { return ɵɵtextInterpolate4; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate5", function() { return ɵɵtextInterpolate5; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate6", function() { return ɵɵtextInterpolate6; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate7", function() { return ɵɵtextInterpolate7; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate8", function() { return ɵɵtextInterpolate8; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolateV", function() { return ɵɵtextInterpolateV; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵtrustConstantHtml", function() { return ɵɵtrustConstantHtml; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵtrustConstantResourceUrl", function() { return ɵɵtrustConstantResourceUrl; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵtrustConstantScript", function() { return ɵɵtrustConstantScript; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵɵviewQuery", function() { return ɵɵviewQuery; });
- /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "qCKp");
- /* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "kU1M");
- /**
- * @license Angular v11.0.4
- * (c) 2010-2020 Google LLC. https://angular.io/
- * License: MIT
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function getClosureSafeProperty(objWithPropertyToExtract) {
- for (let key in objWithPropertyToExtract) {
- if (objWithPropertyToExtract[key] === getClosureSafeProperty) {
- return key;
- }
- }
- throw Error('Could not find renamed property on target object.');
- }
- /**
- * Sets properties on a target object from a source object, but only if
- * the property doesn't already exist on the target object.
- * @param target The target to set properties on
- * @param source The source of the property keys and values to set
- */
- function fillProperties(target, source) {
- for (const key in source) {
- if (source.hasOwnProperty(key) && !target.hasOwnProperty(key)) {
- target[key] = source[key];
- }
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function stringify(token) {
- if (typeof token === 'string') {
- return token;
- }
- if (Array.isArray(token)) {
- return '[' + token.map(stringify).join(', ') + ']';
- }
- if (token == null) {
- return '' + token;
- }
- if (token.overriddenName) {
- return `${token.overriddenName}`;
- }
- if (token.name) {
- return `${token.name}`;
- }
- const res = token.toString();
- if (res == null) {
- return '' + res;
- }
- const newLineIndex = res.indexOf('\n');
- return newLineIndex === -1 ? res : res.substring(0, newLineIndex);
- }
- /**
- * Concatenates two strings with separator, allocating new strings only when necessary.
- *
- * @param before before string.
- * @param separator separator string.
- * @param after after string.
- * @returns concatenated string.
- */
- function concatStringsWithSpace(before, after) {
- return (before == null || before === '') ?
- (after === null ? '' : after) :
- ((after == null || after === '') ? before : before + ' ' + after);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const __forward_ref__ = getClosureSafeProperty({ __forward_ref__: getClosureSafeProperty });
- /**
- * Allows to refer to references which are not yet defined.
- *
- * For instance, `forwardRef` is used when the `token` which we need to refer to for the purposes of
- * DI is declared, but not yet defined. It is also used when the `token` which we use when creating
- * a query is not yet defined.
- *
- * @usageNotes
- * ### Example
- * {@example core/di/ts/forward_ref/forward_ref_spec.ts region='forward_ref'}
- * @publicApi
- */
- function forwardRef(forwardRefFn) {
- forwardRefFn.__forward_ref__ = forwardRef;
- forwardRefFn.toString = function () {
- return stringify(this());
- };
- return forwardRefFn;
- }
- /**
- * Lazily retrieves the reference value from a forwardRef.
- *
- * Acts as the identity function when given a non-forward-ref value.
- *
- * @usageNotes
- * ### Example
- *
- * {@example core/di/ts/forward_ref/forward_ref_spec.ts region='resolve_forward_ref'}
- *
- * @see `forwardRef`
- * @publicApi
- */
- function resolveForwardRef(type) {
- return isForwardRef(type) ? type() : type;
- }
- /** Checks whether a function is wrapped by a `forwardRef`. */
- function isForwardRef(fn) {
- return typeof fn === 'function' && fn.hasOwnProperty(__forward_ref__) &&
- fn.__forward_ref__ === forwardRef;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function assertNumber(actual, msg) {
- if (!(typeof actual === 'number')) {
- throwError(msg, typeof actual, 'number', '===');
- }
- }
- function assertNumberInRange(actual, minInclusive, maxInclusive) {
- assertNumber(actual, 'Expected a number');
- assertLessThanOrEqual(actual, maxInclusive, 'Expected number to be less than or equal to');
- assertGreaterThanOrEqual(actual, minInclusive, 'Expected number to be greater than or equal to');
- }
- function assertString(actual, msg) {
- if (!(typeof actual === 'string')) {
- throwError(msg, actual === null ? 'null' : typeof actual, 'string', '===');
- }
- }
- function assertFunction(actual, msg) {
- if (!(typeof actual === 'function')) {
- throwError(msg, actual === null ? 'null' : typeof actual, 'function', '===');
- }
- }
- function assertEqual(actual, expected, msg) {
- if (!(actual == expected)) {
- throwError(msg, actual, expected, '==');
- }
- }
- function assertNotEqual(actual, expected, msg) {
- if (!(actual != expected)) {
- throwError(msg, actual, expected, '!=');
- }
- }
- function assertSame(actual, expected, msg) {
- if (!(actual === expected)) {
- throwError(msg, actual, expected, '===');
- }
- }
- function assertNotSame(actual, expected, msg) {
- if (!(actual !== expected)) {
- throwError(msg, actual, expected, '!==');
- }
- }
- function assertLessThan(actual, expected, msg) {
- if (!(actual < expected)) {
- throwError(msg, actual, expected, '<');
- }
- }
- function assertLessThanOrEqual(actual, expected, msg) {
- if (!(actual <= expected)) {
- throwError(msg, actual, expected, '<=');
- }
- }
- function assertGreaterThan(actual, expected, msg) {
- if (!(actual > expected)) {
- throwError(msg, actual, expected, '>');
- }
- }
- function assertGreaterThanOrEqual(actual, expected, msg) {
- if (!(actual >= expected)) {
- throwError(msg, actual, expected, '>=');
- }
- }
- function assertNotDefined(actual, msg) {
- if (actual != null) {
- throwError(msg, actual, null, '==');
- }
- }
- function assertDefined(actual, msg) {
- if (actual == null) {
- throwError(msg, actual, null, '!=');
- }
- }
- function throwError(msg, actual, expected, comparison) {
- throw new Error(`ASSERTION ERROR: ${msg}` +
- (comparison == null ? '' : ` [Expected=> ${expected} ${comparison} ${actual} <=Actual]`));
- }
- function assertDomNode(node) {
- // If we're in a worker, `Node` will not be defined.
- if (!(typeof Node !== 'undefined' && node instanceof Node) &&
- !(typeof node === 'object' && node != null &&
- node.constructor.name === 'WebWorkerRenderNode')) {
- throwError(`The provided value must be an instance of a DOM Node but got ${stringify(node)}`);
- }
- }
- function assertIndexInRange(arr, index) {
- assertDefined(arr, 'Array must be defined.');
- const maxLen = arr.length;
- if (index < 0 || index >= maxLen) {
- throwError(`Index expected to be less than ${maxLen} but got ${index}`);
- }
- }
- function assertOneOf(value, ...validValues) {
- if (validValues.indexOf(value) !== -1)
- return true;
- throwError(`Expected value to be one of ${JSON.stringify(validValues)} but was ${JSON.stringify(value)}.`);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Construct an `InjectableDef` which defines how a token will be constructed by the DI system, and
- * in which injectors (if any) it will be available.
- *
- * This should be assigned to a static `ɵprov` field on a type, which will then be an
- * `InjectableType`.
- *
- * Options:
- * * `providedIn` determines which injectors will include the injectable, by either associating it
- * with an `@NgModule` or other `InjectorType`, or by specifying that this injectable should be
- * provided in the `'root'` injector, which will be the application-level injector in most apps.
- * * `factory` gives the zero argument function which will create an instance of the injectable.
- * The factory can call `inject` to access the `Injector` and request injection of dependencies.
- *
- * @codeGenApi
- * @publicApi This instruction has been emitted by ViewEngine for some time and is deployed to npm.
- */
- function ɵɵdefineInjectable(opts) {
- return {
- token: opts.token,
- providedIn: opts.providedIn || null,
- factory: opts.factory,
- value: undefined,
- };
- }
- /**
- * @deprecated in v8, delete after v10. This API should be used only by generated code, and that
- * code should now use ɵɵdefineInjectable instead.
- * @publicApi
- */
- const defineInjectable = ɵɵdefineInjectable;
- /**
- * Construct an `InjectorDef` which configures an injector.
- *
- * This should be assigned to a static injector def (`ɵinj`) field on a type, which will then be an
- * `InjectorType`.
- *
- * Options:
- *
- * * `factory`: an `InjectorType` is an instantiable type, so a zero argument `factory` function to
- * create the type must be provided. If that factory function needs to inject arguments, it can
- * use the `inject` function.
- * * `providers`: an optional array of providers to add to the injector. Each provider must
- * either have a factory or point to a type which has a `ɵprov` static property (the
- * type must be an `InjectableType`).
- * * `imports`: an optional array of imports of other `InjectorType`s or `InjectorTypeWithModule`s
- * whose providers will also be added to the injector. Locally provided types will override
- * providers from imports.
- *
- * @codeGenApi
- */
- function ɵɵdefineInjector(options) {
- return {
- factory: options.factory,
- providers: options.providers || [],
- imports: options.imports || [],
- };
- }
- /**
- * Read the injectable def (`ɵprov`) for `type` in a way which is immune to accidentally reading
- * inherited value.
- *
- * @param type A type which may have its own (non-inherited) `ɵprov`.
- */
- function getInjectableDef(type) {
- return getOwnDefinition(type, NG_PROV_DEF) || getOwnDefinition(type, NG_INJECTABLE_DEF);
- }
- /**
- * Return definition only if it is defined directly on `type` and is not inherited from a base
- * class of `type`.
- */
- function getOwnDefinition(type, field) {
- return type.hasOwnProperty(field) ? type[field] : null;
- }
- /**
- * Read the injectable def (`ɵprov`) for `type` or read the `ɵprov` from one of its ancestors.
- *
- * @param type A type which may have `ɵprov`, via inheritance.
- *
- * @deprecated Will be removed in a future version of Angular, where an error will occur in the
- * scenario if we find the `ɵprov` on an ancestor only.
- */
- function getInheritedInjectableDef(type) {
- const def = type && (type[NG_PROV_DEF] || type[NG_INJECTABLE_DEF]);
- if (def) {
- const typeName = getTypeName(type);
- // TODO(FW-1307): Re-add ngDevMode when closure can handle it
- // ngDevMode &&
- console.warn(`DEPRECATED: DI is instantiating a token "${typeName}" that inherits its @Injectable decorator but does not provide one itself.\n` +
- `This will become an error in a future version of Angular. Please add @Injectable() to the "${typeName}" class.`);
- return def;
- }
- else {
- return null;
- }
- }
- /** Gets the name of a type, accounting for some cross-browser differences. */
- function getTypeName(type) {
- // `Function.prototype.name` behaves differently between IE and other browsers. In most browsers
- // it'll always return the name of the function itself, no matter how many other functions it
- // inherits from. On IE the function doesn't have its own `name` property, but it takes it from
- // the lowest level in the prototype chain. E.g. if we have `class Foo extends Parent` most
- // browsers will evaluate `Foo.name` to `Foo` while IE will return `Parent`. We work around
- // the issue by converting the function to a string and parsing its name out that way via a regex.
- if (type.hasOwnProperty('name')) {
- return type.name;
- }
- const match = ('' + type).match(/^function\s*([^\s(]+)/);
- return match === null ? '' : match[1];
- }
- /**
- * Read the injector def type in a way which is immune to accidentally reading inherited value.
- *
- * @param type type which may have an injector def (`ɵinj`)
- */
- function getInjectorDef(type) {
- return type && (type.hasOwnProperty(NG_INJ_DEF) || type.hasOwnProperty(NG_INJECTOR_DEF)) ?
- type[NG_INJ_DEF] :
- null;
- }
- const NG_PROV_DEF = getClosureSafeProperty({ ɵprov: getClosureSafeProperty });
- const NG_INJ_DEF = getClosureSafeProperty({ ɵinj: getClosureSafeProperty });
- // We need to keep these around so we can read off old defs if new defs are unavailable
- const NG_INJECTABLE_DEF = getClosureSafeProperty({ ngInjectableDef: getClosureSafeProperty });
- const NG_INJECTOR_DEF = getClosureSafeProperty({ ngInjectorDef: getClosureSafeProperty });
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Injection flags for DI.
- *
- * @publicApi
- */
- var InjectFlags;
- (function (InjectFlags) {
- // TODO(alxhub): make this 'const' when ngc no longer writes exports of it into ngfactory files.
- /** Check self and check parent injector if needed */
- InjectFlags[InjectFlags["Default"] = 0] = "Default";
- /**
- * Specifies that an injector should retrieve a dependency from any injector until reaching the
- * host element of the current component. (Only used with Element Injector)
- */
- InjectFlags[InjectFlags["Host"] = 1] = "Host";
- /** Don't ascend to ancestors of the node requesting injection. */
- InjectFlags[InjectFlags["Self"] = 2] = "Self";
- /** Skip the node that is requesting injection. */
- InjectFlags[InjectFlags["SkipSelf"] = 4] = "SkipSelf";
- /** Inject `defaultValue` instead if token not found. */
- InjectFlags[InjectFlags["Optional"] = 8] = "Optional";
- })(InjectFlags || (InjectFlags = {}));
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Current implementation of inject.
- *
- * By default, it is `injectInjectorOnly`, which makes it `Injector`-only aware. It can be changed
- * to `directiveInject`, which brings in the `NodeInjector` system of ivy. It is designed this
- * way for two reasons:
- * 1. `Injector` should not depend on ivy logic.
- * 2. To maintain tree shake-ability we don't want to bring in unnecessary code.
- */
- let _injectImplementation;
- function getInjectImplementation() {
- return _injectImplementation;
- }
- /**
- * Sets the current inject implementation.
- */
- function setInjectImplementation(impl) {
- const previous = _injectImplementation;
- _injectImplementation = impl;
- return previous;
- }
- /**
- * Injects `root` tokens in limp mode.
- *
- * If no injector exists, we can still inject tree-shakable providers which have `providedIn` set to
- * `"root"`. This is known as the limp mode injection. In such case the value is stored in the
- * `InjectableDef`.
- */
- function injectRootLimpMode(token, notFoundValue, flags) {
- const injectableDef = getInjectableDef(token);
- if (injectableDef && injectableDef.providedIn == 'root') {
- return injectableDef.value === undefined ? injectableDef.value = injectableDef.factory() :
- injectableDef.value;
- }
- if (flags & InjectFlags.Optional)
- return null;
- if (notFoundValue !== undefined)
- return notFoundValue;
- throw new Error(`Injector: NOT_FOUND [${stringify(token)}]`);
- }
- /**
- * Assert that `_injectImplementation` is not `fn`.
- *
- * This is useful, to prevent infinite recursion.
- *
- * @param fn Function which it should not equal to
- */
- function assertInjectImplementationNotEqual(fn) {
- ngDevMode &&
- assertNotEqual(_injectImplementation, fn, 'Calling ɵɵinject would cause infinite recursion');
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Convince closure compiler that the wrapped function has no side-effects.
- *
- * Closure compiler always assumes that `toString` has no side-effects. We use this quirk to
- * allow us to execute a function but have closure compiler mark the call as no-side-effects.
- * It is important that the return value for the `noSideEffects` function be assigned
- * to something which is retained otherwise the call to `noSideEffects` will be removed by closure
- * compiler.
- */
- function noSideEffects(fn) {
- return { toString: fn }.toString();
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * The strategy that the default change detector uses to detect changes.
- * When set, takes effect the next time change detection is triggered.
- *
- * @see {@link ChangeDetectorRef#usage-notes Change detection usage}
- *
- * @publicApi
- */
- var ChangeDetectionStrategy;
- (function (ChangeDetectionStrategy) {
- /**
- * Use the `CheckOnce` strategy, meaning that automatic change detection is deactivated
- * until reactivated by setting the strategy to `Default` (`CheckAlways`).
- * Change detection can still be explicitly invoked.
- * This strategy applies to all child directives and cannot be overridden.
- */
- ChangeDetectionStrategy[ChangeDetectionStrategy["OnPush"] = 0] = "OnPush";
- /**
- * Use the default `CheckAlways` strategy, in which change detection is automatic until
- * explicitly deactivated.
- */
- ChangeDetectionStrategy[ChangeDetectionStrategy["Default"] = 1] = "Default";
- })(ChangeDetectionStrategy || (ChangeDetectionStrategy = {}));
- /**
- * Defines the possible states of the default change detector.
- * @see `ChangeDetectorRef`
- */
- var ChangeDetectorStatus;
- (function (ChangeDetectorStatus) {
- /**
- * A state in which, after calling `detectChanges()`, the change detector
- * state becomes `Checked`, and must be explicitly invoked or reactivated.
- */
- ChangeDetectorStatus[ChangeDetectorStatus["CheckOnce"] = 0] = "CheckOnce";
- /**
- * A state in which change detection is skipped until the change detector mode
- * becomes `CheckOnce`.
- */
- ChangeDetectorStatus[ChangeDetectorStatus["Checked"] = 1] = "Checked";
- /**
- * A state in which change detection continues automatically until explicitly
- * deactivated.
- */
- ChangeDetectorStatus[ChangeDetectorStatus["CheckAlways"] = 2] = "CheckAlways";
- /**
- * A state in which a change detector sub tree is not a part of the main tree and
- * should be skipped.
- */
- ChangeDetectorStatus[ChangeDetectorStatus["Detached"] = 3] = "Detached";
- /**
- * Indicates that the change detector encountered an error checking a binding
- * or calling a directive lifecycle method and is now in an inconsistent state. Change
- * detectors in this state do not detect changes.
- */
- ChangeDetectorStatus[ChangeDetectorStatus["Errored"] = 4] = "Errored";
- /**
- * Indicates that the change detector has been destroyed.
- */
- ChangeDetectorStatus[ChangeDetectorStatus["Destroyed"] = 5] = "Destroyed";
- })(ChangeDetectorStatus || (ChangeDetectorStatus = {}));
- /**
- * Reports whether a given strategy is currently the default for change detection.
- * @param changeDetectionStrategy The strategy to check.
- * @returns True if the given strategy is the current default, false otherwise.
- * @see `ChangeDetectorStatus`
- * @see `ChangeDetectorRef`
- */
- function isDefaultChangeDetectionStrategy(changeDetectionStrategy) {
- return changeDetectionStrategy == null ||
- changeDetectionStrategy === ChangeDetectionStrategy.Default;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Defines template and style encapsulation options available for Component's {@link Component}.
- *
- * See {@link Component#encapsulation encapsulation}.
- *
- * @usageNotes
- * ### Example
- *
- * {@example core/ts/metadata/encapsulation.ts region='longform'}
- *
- * @publicApi
- */
- var ViewEncapsulation;
- (function (ViewEncapsulation) {
- /**
- * Emulate `Native` scoping of styles by adding an attribute containing surrogate id to the Host
- * Element and pre-processing the style rules provided via {@link Component#styles styles} or
- * {@link Component#styleUrls styleUrls}, and adding the new Host Element attribute to all
- * selectors.
- *
- * This is the default option.
- */
- ViewEncapsulation[ViewEncapsulation["Emulated"] = 0] = "Emulated";
- // Historically the 1 value was for `Native` encapsulation which has been removed as of v11.
- /**
- * Don't provide any template or style encapsulation.
- */
- ViewEncapsulation[ViewEncapsulation["None"] = 2] = "None";
- /**
- * Use Shadow DOM to encapsulate styles.
- *
- * For the DOM this means using modern [Shadow
- * DOM](https://w3c.github.io/webcomponents/spec/shadow/) and
- * creating a ShadowRoot for Component's Host Element.
- */
- ViewEncapsulation[ViewEncapsulation["ShadowDom"] = 3] = "ShadowDom";
- })(ViewEncapsulation || (ViewEncapsulation = {}));
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const __globalThis = typeof globalThis !== 'undefined' && globalThis;
- const __window = typeof window !== 'undefined' && window;
- const __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' &&
- self instanceof WorkerGlobalScope && self;
- const __global = typeof global !== 'undefined' && global;
- // Always use __globalThis if available, which is the spec-defined global variable across all
- // environments, then fallback to __global first, because in Node tests both __global and
- // __window may be defined and _global should be __global in that case.
- const _global = __globalThis || __global || __window || __self;
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function ngDevModeResetPerfCounters() {
- const locationString = typeof location !== 'undefined' ? location.toString() : '';
- const newCounters = {
- namedConstructors: locationString.indexOf('ngDevMode=namedConstructors') != -1,
- firstCreatePass: 0,
- tNode: 0,
- tView: 0,
- rendererCreateTextNode: 0,
- rendererSetText: 0,
- rendererCreateElement: 0,
- rendererAddEventListener: 0,
- rendererSetAttribute: 0,
- rendererRemoveAttribute: 0,
- rendererSetProperty: 0,
- rendererSetClassName: 0,
- rendererAddClass: 0,
- rendererRemoveClass: 0,
- rendererSetStyle: 0,
- rendererRemoveStyle: 0,
- rendererDestroy: 0,
- rendererDestroyNode: 0,
- rendererMoveNode: 0,
- rendererRemoveNode: 0,
- rendererAppendChild: 0,
- rendererInsertBefore: 0,
- rendererCreateComment: 0,
- };
- // Make sure to refer to ngDevMode as ['ngDevMode'] for closure.
- const allowNgDevModeTrue = locationString.indexOf('ngDevMode=false') === -1;
- _global['ngDevMode'] = allowNgDevModeTrue && newCounters;
- return newCounters;
- }
- /**
- * This function checks to see if the `ngDevMode` has been set. If yes,
- * then we honor it, otherwise we default to dev mode with additional checks.
- *
- * The idea is that unless we are doing production build where we explicitly
- * set `ngDevMode == false` we should be helping the developer by providing
- * as much early warning and errors as possible.
- *
- * `ɵɵdefineComponent` is guaranteed to have been called before any component template functions
- * (and thus Ivy instructions), so a single initialization there is sufficient to ensure ngDevMode
- * is defined for the entire instruction set.
- *
- * When checking `ngDevMode` on toplevel, always init it before referencing it
- * (e.g. `((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode())`), otherwise you can
- * get a `ReferenceError` like in https://github.com/angular/angular/issues/31595.
- *
- * Details on possible values for `ngDevMode` can be found on its docstring.
- *
- * NOTE:
- * - changes to the `ngDevMode` name must be synced with `compiler-cli/src/tooling.ts`.
- */
- function initNgDevMode() {
- // The below checks are to ensure that calling `initNgDevMode` multiple times does not
- // reset the counters.
- // If the `ngDevMode` is not an object, then it means we have not created the perf counters
- // yet.
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
- if (typeof ngDevMode !== 'object') {
- ngDevModeResetPerfCounters();
- }
- return typeof ngDevMode !== 'undefined' && !!ngDevMode;
- }
- return false;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * This file contains reuseable "empty" symbols that can be used as default return values
- * in different parts of the rendering code. Because the same symbols are returned, this
- * allows for identity checks against these values to be consistently used by the framework
- * code.
- */
- const EMPTY_OBJ = {};
- const EMPTY_ARRAY = [];
- // freezing the values prevents any code from accidentally inserting new values in
- if ((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode()) {
- // These property accesses can be ignored because ngDevMode will be set to false
- // when optimizing code and the whole if statement will be dropped.
- // tslint:disable-next-line:no-toplevel-property-access
- Object.freeze(EMPTY_OBJ);
- // tslint:disable-next-line:no-toplevel-property-access
- Object.freeze(EMPTY_ARRAY);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const NG_COMP_DEF = getClosureSafeProperty({ ɵcmp: getClosureSafeProperty });
- const NG_DIR_DEF = getClosureSafeProperty({ ɵdir: getClosureSafeProperty });
- const NG_PIPE_DEF = getClosureSafeProperty({ ɵpipe: getClosureSafeProperty });
- const NG_MOD_DEF = getClosureSafeProperty({ ɵmod: getClosureSafeProperty });
- const NG_LOC_ID_DEF = getClosureSafeProperty({ ɵloc: getClosureSafeProperty });
- const NG_FACTORY_DEF = getClosureSafeProperty({ ɵfac: getClosureSafeProperty });
- /**
- * If a directive is diPublic, bloomAdd sets a property on the type with this constant as
- * the key and the directive's unique ID as the value. This allows us to map directives to their
- * bloom filter bit for DI.
- */
- // TODO(misko): This is wrong. The NG_ELEMENT_ID should never be minified.
- const NG_ELEMENT_ID = getClosureSafeProperty({ __NG_ELEMENT_ID__: getClosureSafeProperty });
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- let _renderCompCount = 0;
- /**
- * Create a component definition object.
- *
- *
- * # Example
- * ```
- * class MyDirective {
- * // Generated by Angular Template Compiler
- * // [Symbol] syntax will not be supported by TypeScript until v2.7
- * static ɵcmp = defineComponent({
- * ...
- * });
- * }
- * ```
- * @codeGenApi
- */
- function ɵɵdefineComponent(componentDefinition) {
- return noSideEffects(() => {
- // Initialize ngDevMode. This must be the first statement in ɵɵdefineComponent.
- // See the `initNgDevMode` docstring for more information.
- (typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode();
- const type = componentDefinition.type;
- const typePrototype = type.prototype;
- const declaredInputs = {};
- const def = {
- type: type,
- providersResolver: null,
- decls: componentDefinition.decls,
- vars: componentDefinition.vars,
- factory: null,
- template: componentDefinition.template || null,
- consts: componentDefinition.consts || null,
- ngContentSelectors: componentDefinition.ngContentSelectors,
- hostBindings: componentDefinition.hostBindings || null,
- hostVars: componentDefinition.hostVars || 0,
- hostAttrs: componentDefinition.hostAttrs || null,
- contentQueries: componentDefinition.contentQueries || null,
- declaredInputs: declaredInputs,
- inputs: null,
- outputs: null,
- exportAs: componentDefinition.exportAs || null,
- onPush: componentDefinition.changeDetection === ChangeDetectionStrategy.OnPush,
- directiveDefs: null,
- pipeDefs: null,
- selectors: componentDefinition.selectors || EMPTY_ARRAY,
- viewQuery: componentDefinition.viewQuery || null,
- features: componentDefinition.features || null,
- data: componentDefinition.data || {},
- // TODO(misko): convert ViewEncapsulation into const enum so that it can be used
- // directly in the next line. Also `None` should be 0 not 2.
- encapsulation: componentDefinition.encapsulation || ViewEncapsulation.Emulated,
- id: 'c',
- styles: componentDefinition.styles || EMPTY_ARRAY,
- _: null,
- setInput: null,
- schemas: componentDefinition.schemas || null,
- tView: null,
- };
- const directiveTypes = componentDefinition.directives;
- const feature = componentDefinition.features;
- const pipeTypes = componentDefinition.pipes;
- def.id += _renderCompCount++;
- def.inputs = invertObject(componentDefinition.inputs, declaredInputs),
- def.outputs = invertObject(componentDefinition.outputs),
- feature && feature.forEach((fn) => fn(def));
- def.directiveDefs = directiveTypes ?
- () => (typeof directiveTypes === 'function' ? directiveTypes() : directiveTypes)
- .map(extractDirectiveDef) :
- null;
- def.pipeDefs = pipeTypes ?
- () => (typeof pipeTypes === 'function' ? pipeTypes() : pipeTypes).map(extractPipeDef) :
- null;
- return def;
- });
- }
- /**
- * Generated next to NgModules to monkey-patch directive and pipe references onto a component's
- * definition, when generating a direct reference in the component file would otherwise create an
- * import cycle.
- *
- * See [this explanation](https://hackmd.io/Odw80D0pR6yfsOjg_7XCJg?view) for more details.
- *
- * @codeGenApi
- */
- function ɵɵsetComponentScope(type, directives, pipes) {
- const def = type.ɵcmp;
- def.directiveDefs = () => directives.map(extractDirectiveDef);
- def.pipeDefs = () => pipes.map(extractPipeDef);
- }
- function extractDirectiveDef(type) {
- const def = getComponentDef(type) || getDirectiveDef(type);
- if (ngDevMode && !def) {
- throw new Error(`'${type.name}' is neither 'ComponentType' or 'DirectiveType'.`);
- }
- return def;
- }
- function extractPipeDef(type) {
- const def = getPipeDef(type);
- if (ngDevMode && !def) {
- throw new Error(`'${type.name}' is not a 'PipeType'.`);
- }
- return def;
- }
- const autoRegisterModuleById = {};
- /**
- * @codeGenApi
- */
- function ɵɵdefineNgModule(def) {
- const res = {
- type: def.type,
- bootstrap: def.bootstrap || EMPTY_ARRAY,
- declarations: def.declarations || EMPTY_ARRAY,
- imports: def.imports || EMPTY_ARRAY,
- exports: def.exports || EMPTY_ARRAY,
- transitiveCompileScopes: null,
- schemas: def.schemas || null,
- id: def.id || null,
- };
- if (def.id != null) {
- noSideEffects(() => {
- autoRegisterModuleById[def.id] = def.type;
- });
- }
- return res;
- }
- /**
- * Adds the module metadata that is necessary to compute the module's transitive scope to an
- * existing module definition.
- *
- * Scope metadata of modules is not used in production builds, so calls to this function can be
- * marked pure to tree-shake it from the bundle, allowing for all referenced declarations
- * to become eligible for tree-shaking as well.
- *
- * @codeGenApi
- */
- function ɵɵsetNgModuleScope(type, scope) {
- return noSideEffects(() => {
- const ngModuleDef = getNgModuleDef(type, true);
- ngModuleDef.declarations = scope.declarations || EMPTY_ARRAY;
- ngModuleDef.imports = scope.imports || EMPTY_ARRAY;
- ngModuleDef.exports = scope.exports || EMPTY_ARRAY;
- });
- }
- /**
- * Inverts an inputs or outputs lookup such that the keys, which were the
- * minified keys, are part of the values, and the values are parsed so that
- * the publicName of the property is the new key
- *
- * e.g. for
- *
- * ```
- * class Comp {
- * @Input()
- * propName1: string;
- *
- * @Input('publicName2')
- * declaredPropName2: number;
- * }
- * ```
- *
- * will be serialized as
- *
- * ```
- * {
- * propName1: 'propName1',
- * declaredPropName2: ['publicName2', 'declaredPropName2'],
- * }
- * ```
- *
- * which is than translated by the minifier as:
- *
- * ```
- * {
- * minifiedPropName1: 'propName1',
- * minifiedPropName2: ['publicName2', 'declaredPropName2'],
- * }
- * ```
- *
- * becomes: (public name => minifiedName)
- *
- * ```
- * {
- * 'propName1': 'minifiedPropName1',
- * 'publicName2': 'minifiedPropName2',
- * }
- * ```
- *
- * Optionally the function can take `secondary` which will result in: (public name => declared name)
- *
- * ```
- * {
- * 'propName1': 'propName1',
- * 'publicName2': 'declaredPropName2',
- * }
- * ```
- *
- */
- function invertObject(obj, secondary) {
- if (obj == null)
- return EMPTY_OBJ;
- const newLookup = {};
- for (const minifiedKey in obj) {
- if (obj.hasOwnProperty(minifiedKey)) {
- let publicName = obj[minifiedKey];
- let declaredName = publicName;
- if (Array.isArray(publicName)) {
- declaredName = publicName[1];
- publicName = publicName[0];
- }
- newLookup[publicName] = minifiedKey;
- if (secondary) {
- (secondary[publicName] = declaredName);
- }
- }
- }
- return newLookup;
- }
- /**
- * Create a directive definition object.
- *
- * # Example
- * ```ts
- * class MyDirective {
- * // Generated by Angular Template Compiler
- * // [Symbol] syntax will not be supported by TypeScript until v2.7
- * static ɵdir = ɵɵdefineDirective({
- * ...
- * });
- * }
- * ```
- *
- * @codeGenApi
- */
- const ɵɵdefineDirective = ɵɵdefineComponent;
- /**
- * Create a pipe definition object.
- *
- * # Example
- * ```
- * class MyPipe implements PipeTransform {
- * // Generated by Angular Template Compiler
- * static ɵpipe = definePipe({
- * ...
- * });
- * }
- * ```
- * @param pipeDef Pipe definition generated by the compiler
- *
- * @codeGenApi
- */
- function ɵɵdefinePipe(pipeDef) {
- return {
- type: pipeDef.type,
- name: pipeDef.name,
- factory: null,
- pure: pipeDef.pure !== false,
- onDestroy: pipeDef.type.prototype.ngOnDestroy || null
- };
- }
- /**
- * The following getter methods retrieve the definition from the type. Currently the retrieval
- * honors inheritance, but in the future we may change the rule to require that definitions are
- * explicit. This would require some sort of migration strategy.
- */
- function getComponentDef(type) {
- return type[NG_COMP_DEF] || null;
- }
- function getDirectiveDef(type) {
- return type[NG_DIR_DEF] || null;
- }
- function getPipeDef(type) {
- return type[NG_PIPE_DEF] || null;
- }
- function getNgModuleDef(type, throwNotFound) {
- const ngModuleDef = type[NG_MOD_DEF] || null;
- if (!ngModuleDef && throwNotFound === true) {
- throw new Error(`Type ${stringify(type)} does not have 'ɵmod' property.`);
- }
- return ngModuleDef;
- }
- function getNgLocaleIdDef(type) {
- return type[NG_LOC_ID_DEF] || null;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // Below are constants for LView indices to help us look up LView members
- // without having to remember the specific indices.
- // Uglify will inline these when minifying so there shouldn't be a cost.
- const HOST = 0;
- const TVIEW = 1;
- const FLAGS = 2;
- const PARENT = 3;
- const NEXT = 4;
- const TRANSPLANTED_VIEWS_TO_REFRESH = 5;
- const T_HOST = 6;
- const CLEANUP = 7;
- const CONTEXT = 8;
- const INJECTOR = 9;
- const RENDERER_FACTORY = 10;
- const RENDERER = 11;
- const SANITIZER = 12;
- const CHILD_HEAD = 13;
- const CHILD_TAIL = 14;
- // FIXME(misko): Investigate if the three declarations aren't all same thing.
- const DECLARATION_VIEW = 15;
- const DECLARATION_COMPONENT_VIEW = 16;
- const DECLARATION_LCONTAINER = 17;
- const PREORDER_HOOK_FLAGS = 18;
- const QUERIES = 19;
- /**
- * Size of LView's header. Necessary to adjust for it when setting slots.
- *
- * IMPORTANT: `HEADER_OFFSET` should only be referred to the in the `ɵɵ*` instructions to translate
- * instruction index into `LView` index. All other indexes should be in the `LView` index space and
- * there should be no need to refer to `HEADER_OFFSET` anywhere else.
- */
- const HEADER_OFFSET = 20;
- /**
- * Converts `TViewType` into human readable text.
- * Make sure this matches with `TViewType`
- */
- const TViewTypeAsString = [
- 'Root',
- 'Component',
- 'Embedded',
- ];
- // Note: This hack is necessary so we don't erroneously get a circular dependency
- // failure based on types.
- const unusedValueExportToPlacateAjd = 1;
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Special location which allows easy identification of type. If we have an array which was
- * retrieved from the `LView` and that array has `true` at `TYPE` location, we know it is
- * `LContainer`.
- */
- const TYPE = 1;
- /**
- * Below are constants for LContainer indices to help us look up LContainer members
- * without having to remember the specific indices.
- * Uglify will inline these when minifying so there shouldn't be a cost.
- */
- /**
- * Flag to signify that this `LContainer` may have transplanted views which need to be change
- * detected. (see: `LView[DECLARATION_COMPONENT_VIEW])`.
- *
- * This flag, once set, is never unset for the `LContainer`. This means that when unset we can skip
- * a lot of work in `refreshEmbeddedViews`. But when set we still need to verify
- * that the `MOVED_VIEWS` are transplanted and on-push.
- */
- const HAS_TRANSPLANTED_VIEWS = 2;
- // PARENT, NEXT, TRANSPLANTED_VIEWS_TO_REFRESH are indices 3, 4, and 5
- // As we already have these constants in LView, we don't need to re-create them.
- // T_HOST is index 6
- // We already have this constants in LView, we don't need to re-create it.
- const NATIVE = 7;
- const VIEW_REFS = 8;
- const MOVED_VIEWS = 9;
- /**
- * Size of LContainer's header. Represents the index after which all views in the
- * container will be inserted. We need to keep a record of current views so we know
- * which views are already in the DOM (and don't need to be re-added) and so we can
- * remove views from the DOM when they are no longer required.
- */
- const CONTAINER_HEADER_OFFSET = 10;
- // Note: This hack is necessary so we don't erroneously get a circular dependency
- // failure based on types.
- const unusedValueExportToPlacateAjd$1 = 1;
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * True if `value` is `LView`.
- * @param value wrapped value of `RNode`, `LView`, `LContainer`
- */
- function isLView(value) {
- return Array.isArray(value) && typeof value[TYPE] === 'object';
- }
- /**
- * True if `value` is `LContainer`.
- * @param value wrapped value of `RNode`, `LView`, `LContainer`
- */
- function isLContainer(value) {
- return Array.isArray(value) && value[TYPE] === true;
- }
- function isContentQueryHost(tNode) {
- return (tNode.flags & 8 /* hasContentQuery */) !== 0;
- }
- function isComponentHost(tNode) {
- return (tNode.flags & 2 /* isComponentHost */) === 2 /* isComponentHost */;
- }
- function isDirectiveHost(tNode) {
- return (tNode.flags & 1 /* isDirectiveHost */) === 1 /* isDirectiveHost */;
- }
- function isComponentDef(def) {
- return def.template !== null;
- }
- function isRootView(target) {
- return (target[FLAGS] & 512 /* IsRoot */) !== 0;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // [Assert functions do not constraint type when they are guarded by a truthy
- // expression.](https://github.com/microsoft/TypeScript/issues/37295)
- function assertTNodeForLView(tNode, lView) {
- assertTNodeForTView(tNode, lView[TVIEW]);
- }
- function assertTNodeForTView(tNode, tView) {
- assertTNode(tNode);
- tNode.hasOwnProperty('tView_') &&
- assertEqual(tNode.tView_, tView, 'This TNode does not belong to this TView.');
- }
- function assertTNode(tNode) {
- assertDefined(tNode, 'TNode must be defined');
- if (!(tNode && typeof tNode === 'object' && tNode.hasOwnProperty('directiveStylingLast'))) {
- throwError('Not of type TNode, got: ' + tNode);
- }
- }
- function assertTIcu(tIcu) {
- assertDefined(tIcu, 'Expected TIcu to be defined');
- if (!(typeof tIcu.currentCaseLViewIndex === 'number')) {
- throwError('Object is not of TIcu type.');
- }
- }
- function assertComponentType(actual, msg = 'Type passed in is not ComponentType, it does not have \'ɵcmp\' property.') {
- if (!getComponentDef(actual)) {
- throwError(msg);
- }
- }
- function assertNgModuleType(actual, msg = 'Type passed in is not NgModuleType, it does not have \'ɵmod\' property.') {
- if (!getNgModuleDef(actual)) {
- throwError(msg);
- }
- }
- function assertCurrentTNodeIsParent(isParent) {
- assertEqual(isParent, true, 'currentTNode should be a parent');
- }
- function assertHasParent(tNode) {
- assertDefined(tNode, 'currentTNode should exist!');
- assertDefined(tNode.parent, 'currentTNode should have a parent');
- }
- function assertDataNext(lView, index, arr) {
- if (arr == null)
- arr = lView;
- assertEqual(arr.length, index, `index ${index} expected to be at the end of arr (length ${arr.length})`);
- }
- function assertLContainer(value) {
- assertDefined(value, 'LContainer must be defined');
- assertEqual(isLContainer(value), true, 'Expecting LContainer');
- }
- function assertLViewOrUndefined(value) {
- value && assertEqual(isLView(value), true, 'Expecting LView or undefined or null');
- }
- function assertLView(value) {
- assertDefined(value, 'LView must be defined');
- assertEqual(isLView(value), true, 'Expecting LView');
- }
- function assertFirstCreatePass(tView, errMessage) {
- assertEqual(tView.firstCreatePass, true, errMessage || 'Should only be called in first create pass.');
- }
- function assertFirstUpdatePass(tView, errMessage) {
- assertEqual(tView.firstUpdatePass, true, errMessage || 'Should only be called in first update pass.');
- }
- /**
- * This is a basic sanity check that an object is probably a directive def. DirectiveDef is
- * an interface, so we can't do a direct instanceof check.
- */
- function assertDirectiveDef(obj) {
- if (obj.type === undefined || obj.selectors == undefined || obj.inputs === undefined) {
- throwError(`Expected a DirectiveDef/ComponentDef and this object does not seem to have the expected shape.`);
- }
- }
- function assertIndexInDeclRange(lView, index) {
- const tView = lView[1];
- assertBetween(HEADER_OFFSET, tView.bindingStartIndex, index);
- }
- function assertIndexInVarsRange(lView, index) {
- const tView = lView[1];
- assertBetween(tView.bindingStartIndex, tView.expandoStartIndex, index);
- }
- function assertIndexInExpandoRange(lView, index) {
- const tView = lView[1];
- assertBetween(tView.expandoStartIndex, lView.length, index);
- }
- function assertBetween(lower, upper, index) {
- if (!(lower <= index && index < upper)) {
- throwError(`Index out of range (expecting ${lower} <= ${index} < ${upper})`);
- }
- }
- /**
- * This is a basic sanity check that the `injectorIndex` seems to point to what looks like a
- * NodeInjector data structure.
- *
- * @param lView `LView` which should be checked.
- * @param injectorIndex index into the `LView` where the `NodeInjector` is expected.
- */
- function assertNodeInjector(lView, injectorIndex) {
- assertIndexInExpandoRange(lView, injectorIndex);
- assertIndexInExpandoRange(lView, injectorIndex + 8 /* PARENT */);
- assertNumber(lView[injectorIndex + 0], 'injectorIndex should point to a bloom filter');
- assertNumber(lView[injectorIndex + 1], 'injectorIndex should point to a bloom filter');
- assertNumber(lView[injectorIndex + 2], 'injectorIndex should point to a bloom filter');
- assertNumber(lView[injectorIndex + 3], 'injectorIndex should point to a bloom filter');
- assertNumber(lView[injectorIndex + 4], 'injectorIndex should point to a bloom filter');
- assertNumber(lView[injectorIndex + 5], 'injectorIndex should point to a bloom filter');
- assertNumber(lView[injectorIndex + 6], 'injectorIndex should point to a bloom filter');
- assertNumber(lView[injectorIndex + 7], 'injectorIndex should point to a bloom filter');
- assertNumber(lView[injectorIndex + 8 /* PARENT */], 'injectorIndex should point to parent injector');
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function getFactoryDef(type, throwNotFound) {
- const hasFactoryDef = type.hasOwnProperty(NG_FACTORY_DEF);
- if (!hasFactoryDef && throwNotFound === true && ngDevMode) {
- throw new Error(`Type ${stringify(type)} does not have 'ɵfac' property.`);
- }
- return hasFactoryDef ? type[NG_FACTORY_DEF] : null;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class RuntimeError extends Error {
- constructor(code, message) {
- super(formatRuntimeError(code, message));
- this.code = code;
- }
- }
- /** Called to format a runtime error */
- function formatRuntimeError(code, message) {
- const fullCode = code ? `NG0${code}: ` : '';
- return `${fullCode}${message}`;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Used for stringify render output in Ivy.
- * Important! This function is very performance-sensitive and we should
- * be extra careful not to introduce megamorphic reads in it.
- * Check `core/test/render3/perf/render_stringify` for benchmarks and alternate implementations.
- */
- function renderStringify(value) {
- if (typeof value === 'string')
- return value;
- if (value == null)
- return '';
- // Use `String` so that it invokes the `toString` method of the value. Note that this
- // appears to be faster than calling `value.toString` (see `render_stringify` benchmark).
- return String(value);
- }
- /**
- * Used to stringify a value so that it can be displayed in an error message.
- * Important! This function contains a megamorphic read and should only be
- * used for error messages.
- */
- function stringifyForError(value) {
- if (typeof value === 'function')
- return value.name || value.toString();
- if (typeof value === 'object' && value != null && typeof value.type === 'function') {
- return value.type.name || value.type.toString();
- }
- return renderStringify(value);
- }
- /** Called when directives inject each other (creating a circular dependency) */
- function throwCyclicDependencyError(token, path) {
- const depPath = path ? `. Dependency path: ${path.join(' > ')} > ${token}` : '';
- throw new RuntimeError("200" /* CYCLIC_DI_DEPENDENCY */, `Circular dependency in DI detected for ${token}${depPath}`);
- }
- function throwMixedMultiProviderError() {
- throw new Error(`Cannot mix multi providers and regular providers`);
- }
- function throwInvalidProviderError(ngModuleType, providers, provider) {
- let ngModuleDetail = '';
- if (ngModuleType && providers) {
- const providerDetail = providers.map(v => v == provider ? '?' + provider + '?' : '...');
- ngModuleDetail =
- ` - only instances of Provider and Type are allowed, got: [${providerDetail.join(', ')}]`;
- }
- throw new Error(`Invalid provider for the NgModule '${stringify(ngModuleType)}'` + ngModuleDetail);
- }
- /** Throws an error when a token is not found in DI. */
- function throwProviderNotFoundError(token, injectorName) {
- const injectorDetails = injectorName ? ` in ${injectorName}` : '';
- throw new RuntimeError("201" /* PROVIDER_NOT_FOUND */, `No provider for ${stringifyForError(token)} found${injectorDetails}`);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Represents a basic change from a previous to a new value for a single
- * property on a directive instance. Passed as a value in a
- * {@link SimpleChanges} object to the `ngOnChanges` hook.
- *
- * @see `OnChanges`
- *
- * @publicApi
- */
- class SimpleChange {
- constructor(previousValue, currentValue, firstChange) {
- this.previousValue = previousValue;
- this.currentValue = currentValue;
- this.firstChange = firstChange;
- }
- /**
- * Check whether the new value is the first value assigned.
- */
- isFirstChange() {
- return this.firstChange;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * The NgOnChangesFeature decorates a component with support for the ngOnChanges
- * lifecycle hook, so it should be included in any component that implements
- * that hook.
- *
- * If the component or directive uses inheritance, the NgOnChangesFeature MUST
- * be included as a feature AFTER {@link InheritDefinitionFeature}, otherwise
- * inherited properties will not be propagated to the ngOnChanges lifecycle
- * hook.
- *
- * Example usage:
- *
- * ```
- * static ɵcmp = defineComponent({
- * ...
- * inputs: {name: 'publicName'},
- * features: [NgOnChangesFeature]
- * });
- * ```
- *
- * @codeGenApi
- */
- function ɵɵNgOnChangesFeature() {
- return NgOnChangesFeatureImpl;
- }
- function NgOnChangesFeatureImpl(definition) {
- if (definition.type.prototype.ngOnChanges) {
- definition.setInput = ngOnChangesSetInput;
- }
- return rememberChangeHistoryAndInvokeOnChangesHook;
- }
- // This option ensures that the ngOnChanges lifecycle hook will be inherited
- // from superclasses (in InheritDefinitionFeature).
- /** @nocollapse */
- // tslint:disable-next-line:no-toplevel-property-access
- ɵɵNgOnChangesFeature.ngInherit = true;
- /**
- * This is a synthetic lifecycle hook which gets inserted into `TView.preOrderHooks` to simulate
- * `ngOnChanges`.
- *
- * The hook reads the `NgSimpleChangesStore` data from the component instance and if changes are
- * found it invokes `ngOnChanges` on the component instance.
- *
- * @param this Component instance. Because this function gets inserted into `TView.preOrderHooks`,
- * it is guaranteed to be called with component instance.
- */
- function rememberChangeHistoryAndInvokeOnChangesHook() {
- const simpleChangesStore = getSimpleChangesStore(this);
- const current = simpleChangesStore === null || simpleChangesStore === void 0 ? void 0 : simpleChangesStore.current;
- if (current) {
- const previous = simpleChangesStore.previous;
- if (previous === EMPTY_OBJ) {
- simpleChangesStore.previous = current;
- }
- else {
- // New changes are copied to the previous store, so that we don't lose history for inputs
- // which were not changed this time
- for (let key in current) {
- previous[key] = current[key];
- }
- }
- simpleChangesStore.current = null;
- this.ngOnChanges(current);
- }
- }
- function ngOnChangesSetInput(instance, value, publicName, privateName) {
- const simpleChangesStore = getSimpleChangesStore(instance) ||
- setSimpleChangesStore(instance, { previous: EMPTY_OBJ, current: null });
- const current = simpleChangesStore.current || (simpleChangesStore.current = {});
- const previous = simpleChangesStore.previous;
- const declaredName = this.declaredInputs[publicName];
- const previousChange = previous[declaredName];
- current[declaredName] = new SimpleChange(previousChange && previousChange.currentValue, value, previous === EMPTY_OBJ);
- instance[privateName] = value;
- }
- const SIMPLE_CHANGES_STORE = '__ngSimpleChanges__';
- function getSimpleChangesStore(instance) {
- return instance[SIMPLE_CHANGES_STORE] || null;
- }
- function setSimpleChangesStore(instance, store) {
- return instance[SIMPLE_CHANGES_STORE] = store;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';
- const MATH_ML_NAMESPACE = 'http://www.w3.org/1998/MathML/';
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * This property will be monkey-patched on elements, components and directives
- */
- const MONKEY_PATCH_KEY_NAME = '__ngContext__';
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Most of the use of `document` in Angular is from within the DI system so it is possible to simply
- * inject the `DOCUMENT` token and are done.
- *
- * Ivy is special because it does not rely upon the DI and must get hold of the document some other
- * way.
- *
- * The solution is to define `getDocument()` and `setDocument()` top-level functions for ivy.
- * Wherever ivy needs the global document, it calls `getDocument()` instead.
- *
- * When running ivy outside of a browser environment, it is necessary to call `setDocument()` to
- * tell ivy what the global `document` is.
- *
- * Angular does this for us in each of the standard platforms (`Browser`, `Server`, and `WebWorker`)
- * by calling `setDocument()` when providing the `DOCUMENT` token.
- */
- let DOCUMENT = undefined;
- /**
- * Tell ivy what the `document` is for this platform.
- *
- * It is only necessary to call this if the current platform is not a browser.
- *
- * @param document The object representing the global `document` in this environment.
- */
- function setDocument(document) {
- DOCUMENT = document;
- }
- /**
- * Access the object that represents the `document` for this platform.
- *
- * Ivy calls this whenever it needs to access the `document` object.
- * For example to create the renderer or to do sanitization.
- */
- function getDocument() {
- if (DOCUMENT !== undefined) {
- return DOCUMENT;
- }
- else if (typeof document !== 'undefined') {
- return document;
- }
- // No "document" can be found. This should only happen if we are running ivy outside Angular and
- // the current platform is not a browser. Since this is not a supported scenario at the moment
- // this should not happen in Angular apps.
- // Once we support running ivy outside of Angular we will need to publish `setDocument()` as a
- // public API. Meanwhile we just return `undefined` and let the application fail.
- return undefined;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // TODO: cleanup once the code is merged in angular/angular
- var RendererStyleFlags3;
- (function (RendererStyleFlags3) {
- RendererStyleFlags3[RendererStyleFlags3["Important"] = 1] = "Important";
- RendererStyleFlags3[RendererStyleFlags3["DashCase"] = 2] = "DashCase";
- })(RendererStyleFlags3 || (RendererStyleFlags3 = {}));
- /** Returns whether the `renderer` is a `ProceduralRenderer3` */
- function isProceduralRenderer(renderer) {
- return !!(renderer.listen);
- }
- const ɵ0 = (hostElement, rendererType) => {
- return getDocument();
- };
- const domRendererFactory3 = {
- createRenderer: ɵ0
- };
- // Note: This hack is necessary so we don't erroneously get a circular dependency
- // failure based on types.
- const unusedValueExportToPlacateAjd$2 = 1;
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * For efficiency reasons we often put several different data types (`RNode`, `LView`, `LContainer`)
- * in same location in `LView`. This is because we don't want to pre-allocate space for it
- * because the storage is sparse. This file contains utilities for dealing with such data types.
- *
- * How do we know what is stored at a given location in `LView`.
- * - `Array.isArray(value) === false` => `RNode` (The normal storage value)
- * - `Array.isArray(value) === true` => then the `value[0]` represents the wrapped value.
- * - `typeof value[TYPE] === 'object'` => `LView`
- * - This happens when we have a component at a given location
- * - `typeof value[TYPE] === true` => `LContainer`
- * - This happens when we have `LContainer` binding at a given location.
- *
- *
- * NOTE: it is assumed that `Array.isArray` and `typeof` operations are very efficient.
- */
- /**
- * Returns `RNode`.
- * @param value wrapped value of `RNode`, `LView`, `LContainer`
- */
- function unwrapRNode(value) {
- while (Array.isArray(value)) {
- value = value[HOST];
- }
- return value;
- }
- /**
- * Returns `LView` or `null` if not found.
- * @param value wrapped value of `RNode`, `LView`, `LContainer`
- */
- function unwrapLView(value) {
- while (Array.isArray(value)) {
- // This check is same as `isLView()` but we don't call at as we don't want to call
- // `Array.isArray()` twice and give JITer more work for inlining.
- if (typeof value[TYPE] === 'object')
- return value;
- value = value[HOST];
- }
- return null;
- }
- /**
- * Returns `LContainer` or `null` if not found.
- * @param value wrapped value of `RNode`, `LView`, `LContainer`
- */
- function unwrapLContainer(value) {
- while (Array.isArray(value)) {
- // This check is same as `isLContainer()` but we don't call at as we don't want to call
- // `Array.isArray()` twice and give JITer more work for inlining.
- if (value[TYPE] === true)
- return value;
- value = value[HOST];
- }
- return null;
- }
- /**
- * Retrieves an element value from the provided `viewData`, by unwrapping
- * from any containers, component views, or style contexts.
- */
- function getNativeByIndex(index, lView) {
- ngDevMode && assertIndexInRange(lView, index);
- ngDevMode && assertGreaterThanOrEqual(index, HEADER_OFFSET, 'Expected to be past HEADER_OFFSET');
- return unwrapRNode(lView[index]);
- }
- /**
- * Retrieve an `RNode` for a given `TNode` and `LView`.
- *
- * This function guarantees in dev mode to retrieve a non-null `RNode`.
- *
- * @param tNode
- * @param lView
- */
- function getNativeByTNode(tNode, lView) {
- ngDevMode && assertTNodeForLView(tNode, lView);
- ngDevMode && assertIndexInRange(lView, tNode.index);
- const node = unwrapRNode(lView[tNode.index]);
- ngDevMode && !isProceduralRenderer(lView[RENDERER]) && assertDomNode(node);
- return node;
- }
- /**
- * Retrieve an `RNode` or `null` for a given `TNode` and `LView`.
- *
- * Some `TNode`s don't have associated `RNode`s. For example `Projection`
- *
- * @param tNode
- * @param lView
- */
- function getNativeByTNodeOrNull(tNode, lView) {
- const index = tNode === null ? -1 : tNode.index;
- if (index !== -1) {
- ngDevMode && assertTNodeForLView(tNode, lView);
- const node = unwrapRNode(lView[index]);
- ngDevMode && node !== null && !isProceduralRenderer(lView[RENDERER]) && assertDomNode(node);
- return node;
- }
- return null;
- }
- // fixme(misko): The return Type should be `TNode|null`
- function getTNode(tView, index) {
- ngDevMode && assertGreaterThan(index, -1, 'wrong index for TNode');
- ngDevMode && assertLessThan(index, tView.data.length, 'wrong index for TNode');
- const tNode = tView.data[index];
- ngDevMode && tNode !== null && assertTNode(tNode);
- return tNode;
- }
- /** Retrieves a value from any `LView` or `TData`. */
- function load(view, index) {
- ngDevMode && assertIndexInRange(view, index);
- return view[index];
- }
- function getComponentLViewByIndex(nodeIndex, hostView) {
- // Could be an LView or an LContainer. If LContainer, unwrap to find LView.
- ngDevMode && assertIndexInRange(hostView, nodeIndex);
- const slotValue = hostView[nodeIndex];
- const lView = isLView(slotValue) ? slotValue : slotValue[HOST];
- return lView;
- }
- /**
- * Returns the monkey-patch value data present on the target (which could be
- * a component, directive or a DOM node).
- */
- function readPatchedData(target) {
- ngDevMode && assertDefined(target, 'Target expected');
- return target[MONKEY_PATCH_KEY_NAME] || null;
- }
- function readPatchedLView(target) {
- const value = readPatchedData(target);
- if (value) {
- return Array.isArray(value) ? value : value.lView;
- }
- return null;
- }
- /** Checks whether a given view is in creation mode */
- function isCreationMode(view) {
- return (view[FLAGS] & 4 /* CreationMode */) === 4 /* CreationMode */;
- }
- /**
- * Returns a boolean for whether the view is attached to the change detection tree.
- *
- * Note: This determines whether a view should be checked, not whether it's inserted
- * into a container. For that, you'll want `viewAttachedToContainer` below.
- */
- function viewAttachedToChangeDetector(view) {
- return (view[FLAGS] & 128 /* Attached */) === 128 /* Attached */;
- }
- /** Returns a boolean for whether the view is attached to a container. */
- function viewAttachedToContainer(view) {
- return isLContainer(view[PARENT]);
- }
- function getConstant(consts, index) {
- if (index === null || index === undefined)
- return null;
- ngDevMode && assertIndexInRange(consts, index);
- return consts[index];
- }
- /**
- * Resets the pre-order hook flags of the view.
- * @param lView the LView on which the flags are reset
- */
- function resetPreOrderHookFlags(lView) {
- lView[PREORDER_HOOK_FLAGS] = 0;
- }
- /**
- * Updates the `TRANSPLANTED_VIEWS_TO_REFRESH` counter on the `LContainer` as well as the parents
- * whose
- * 1. counter goes from 0 to 1, indicating that there is a new child that has a view to refresh
- * or
- * 2. counter goes from 1 to 0, indicating there are no more descendant views to refresh
- */
- function updateTransplantedViewCount(lContainer, amount) {
- lContainer[TRANSPLANTED_VIEWS_TO_REFRESH] += amount;
- let viewOrContainer = lContainer;
- let parent = lContainer[PARENT];
- while (parent !== null &&
- ((amount === 1 && viewOrContainer[TRANSPLANTED_VIEWS_TO_REFRESH] === 1) ||
- (amount === -1 && viewOrContainer[TRANSPLANTED_VIEWS_TO_REFRESH] === 0))) {
- parent[TRANSPLANTED_VIEWS_TO_REFRESH] += amount;
- viewOrContainer = parent;
- parent = parent[PARENT];
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const instructionState = {
- lFrame: createLFrame(null),
- bindingsEnabled: true,
- isInCheckNoChangesMode: false,
- };
- /**
- * Returns true if the instruction state stack is empty.
- *
- * Intended to be called from tests only (tree shaken otherwise).
- */
- function specOnlyIsInstructionStateEmpty() {
- return instructionState.lFrame.parent === null;
- }
- function getElementDepthCount() {
- return instructionState.lFrame.elementDepthCount;
- }
- function increaseElementDepthCount() {
- instructionState.lFrame.elementDepthCount++;
- }
- function decreaseElementDepthCount() {
- instructionState.lFrame.elementDepthCount--;
- }
- function getBindingsEnabled() {
- return instructionState.bindingsEnabled;
- }
- /**
- * Enables directive matching on elements.
- *
- * * Example:
- * ```
- * <my-comp my-directive>
- * Should match component / directive.
- * </my-comp>
- * <div ngNonBindable>
- * <!-- ɵɵdisableBindings() -->
- * <my-comp my-directive>
- * Should not match component / directive because we are in ngNonBindable.
- * </my-comp>
- * <!-- ɵɵenableBindings() -->
- * </div>
- * ```
- *
- * @codeGenApi
- */
- function ɵɵenableBindings() {
- instructionState.bindingsEnabled = true;
- }
- /**
- * Disables directive matching on element.
- *
- * * Example:
- * ```
- * <my-comp my-directive>
- * Should match component / directive.
- * </my-comp>
- * <div ngNonBindable>
- * <!-- ɵɵdisableBindings() -->
- * <my-comp my-directive>
- * Should not match component / directive because we are in ngNonBindable.
- * </my-comp>
- * <!-- ɵɵenableBindings() -->
- * </div>
- * ```
- *
- * @codeGenApi
- */
- function ɵɵdisableBindings() {
- instructionState.bindingsEnabled = false;
- }
- /**
- * Return the current `LView`.
- */
- function getLView() {
- return instructionState.lFrame.lView;
- }
- /**
- * Return the current `TView`.
- */
- function getTView() {
- return instructionState.lFrame.tView;
- }
- /**
- * Restores `contextViewData` to the given OpaqueViewState instance.
- *
- * Used in conjunction with the getCurrentView() instruction to save a snapshot
- * of the current view and restore it when listeners are invoked. This allows
- * walking the declaration view tree in listeners to get vars from parent views.
- *
- * @param viewToRestore The OpaqueViewState instance to restore.
- *
- * @codeGenApi
- */
- function ɵɵrestoreView(viewToRestore) {
- instructionState.lFrame.contextLView = viewToRestore;
- }
- function getCurrentTNode() {
- let currentTNode = getCurrentTNodePlaceholderOk();
- while (currentTNode !== null && currentTNode.type === 64 /* Placeholder */) {
- currentTNode = currentTNode.parent;
- }
- return currentTNode;
- }
- function getCurrentTNodePlaceholderOk() {
- return instructionState.lFrame.currentTNode;
- }
- function getCurrentParentTNode() {
- const lFrame = instructionState.lFrame;
- const currentTNode = lFrame.currentTNode;
- return lFrame.isParent ? currentTNode : currentTNode.parent;
- }
- function setCurrentTNode(tNode, isParent) {
- ngDevMode && tNode && assertTNodeForTView(tNode, instructionState.lFrame.tView);
- const lFrame = instructionState.lFrame;
- lFrame.currentTNode = tNode;
- lFrame.isParent = isParent;
- }
- function isCurrentTNodeParent() {
- return instructionState.lFrame.isParent;
- }
- function setCurrentTNodeAsNotParent() {
- instructionState.lFrame.isParent = false;
- }
- function setCurrentTNodeAsParent() {
- instructionState.lFrame.isParent = true;
- }
- function getContextLView() {
- return instructionState.lFrame.contextLView;
- }
- function isInCheckNoChangesMode() {
- // TODO(misko): remove this from the LView since it is ngDevMode=true mode only.
- return instructionState.isInCheckNoChangesMode;
- }
- function setIsInCheckNoChangesMode(mode) {
- instructionState.isInCheckNoChangesMode = mode;
- }
- // top level variables should not be exported for performance reasons (PERF_NOTES.md)
- function getBindingRoot() {
- const lFrame = instructionState.lFrame;
- let index = lFrame.bindingRootIndex;
- if (index === -1) {
- index = lFrame.bindingRootIndex = lFrame.tView.bindingStartIndex;
- }
- return index;
- }
- function getBindingIndex() {
- return instructionState.lFrame.bindingIndex;
- }
- function setBindingIndex(value) {
- return instructionState.lFrame.bindingIndex = value;
- }
- function nextBindingIndex() {
- return instructionState.lFrame.bindingIndex++;
- }
- function incrementBindingIndex(count) {
- const lFrame = instructionState.lFrame;
- const index = lFrame.bindingIndex;
- lFrame.bindingIndex = lFrame.bindingIndex + count;
- return index;
- }
- function isInI18nBlock() {
- return instructionState.lFrame.inI18n;
- }
- function setInI18nBlock(isInI18nBlock) {
- instructionState.lFrame.inI18n = isInI18nBlock;
- }
- /**
- * Set a new binding root index so that host template functions can execute.
- *
- * Bindings inside the host template are 0 index. But because we don't know ahead of time
- * how many host bindings we have we can't pre-compute them. For this reason they are all
- * 0 index and we just shift the root so that they match next available location in the LView.
- *
- * @param bindingRootIndex Root index for `hostBindings`
- * @param currentDirectiveIndex `TData[currentDirectiveIndex]` will point to the current directive
- * whose `hostBindings` are being processed.
- */
- function setBindingRootForHostBindings(bindingRootIndex, currentDirectiveIndex) {
- const lFrame = instructionState.lFrame;
- lFrame.bindingIndex = lFrame.bindingRootIndex = bindingRootIndex;
- setCurrentDirectiveIndex(currentDirectiveIndex);
- }
- /**
- * When host binding is executing this points to the directive index.
- * `TView.data[getCurrentDirectiveIndex()]` is `DirectiveDef`
- * `LView[getCurrentDirectiveIndex()]` is directive instance.
- */
- function getCurrentDirectiveIndex() {
- return instructionState.lFrame.currentDirectiveIndex;
- }
- /**
- * Sets an index of a directive whose `hostBindings` are being processed.
- *
- * @param currentDirectiveIndex `TData` index where current directive instance can be found.
- */
- function setCurrentDirectiveIndex(currentDirectiveIndex) {
- instructionState.lFrame.currentDirectiveIndex = currentDirectiveIndex;
- }
- /**
- * Retrieve the current `DirectiveDef` which is active when `hostBindings` instruction is being
- * executed.
- *
- * @param tData Current `TData` where the `DirectiveDef` will be looked up at.
- */
- function getCurrentDirectiveDef(tData) {
- const currentDirectiveIndex = instructionState.lFrame.currentDirectiveIndex;
- return currentDirectiveIndex === -1 ? null : tData[currentDirectiveIndex];
- }
- function getCurrentQueryIndex() {
- return instructionState.lFrame.currentQueryIndex;
- }
- function setCurrentQueryIndex(value) {
- instructionState.lFrame.currentQueryIndex = value;
- }
- /**
- * Returns a `TNode` of the location where the current `LView` is declared at.
- *
- * @param lView an `LView` that we want to find parent `TNode` for.
- */
- function getDeclarationTNode(lView) {
- const tView = lView[TVIEW];
- // Return the declaration parent for embedded views
- if (tView.type === 2 /* Embedded */) {
- ngDevMode && assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');
- return tView.declTNode;
- }
- // Components don't have `TView.declTNode` because each instance of component could be
- // inserted in different location, hence `TView.declTNode` is meaningless.
- // Falling back to `T_HOST` in case we cross component boundary.
- if (tView.type === 1 /* Component */) {
- return lView[T_HOST];
- }
- // Remaining TNode type is `TViewType.Root` which doesn't have a parent TNode.
- return null;
- }
- /**
- * This is a light weight version of the `enterView` which is needed by the DI system.
- *
- * @param lView `LView` location of the DI context.
- * @param tNode `TNode` for DI context
- * @param flags DI context flags. if `SkipSelf` flag is set than we walk up the declaration
- * tree from `tNode` until we find parent declared `TElementNode`.
- * @returns `true` if we have successfully entered DI associated with `tNode` (or with declared
- * `TNode` if `flags` has `SkipSelf`). Failing to enter DI implies that no associated
- * `NodeInjector` can be found and we should instead use `ModuleInjector`.
- * - If `true` than this call must be fallowed by `leaveDI`
- * - If `false` than this call failed and we should NOT call `leaveDI`
- */
- function enterDI(lView, tNode, flags) {
- ngDevMode && assertLViewOrUndefined(lView);
- if (flags & InjectFlags.SkipSelf) {
- ngDevMode && assertTNodeForTView(tNode, lView[TVIEW]);
- let parentTNode = tNode;
- let parentLView = lView;
- while (true) {
- ngDevMode && assertDefined(parentTNode, 'Parent TNode should be defined');
- parentTNode = parentTNode.parent;
- if (parentTNode === null && !(flags & InjectFlags.Host)) {
- parentTNode = getDeclarationTNode(parentLView);
- if (parentTNode === null)
- break;
- // In this case, a parent exists and is definitely an element. So it will definitely
- // have an existing lView as the declaration view, which is why we can assume it's defined.
- ngDevMode && assertDefined(parentLView, 'Parent LView should be defined');
- parentLView = parentLView[DECLARATION_VIEW];
- // In Ivy there are Comment nodes that correspond to ngIf and NgFor embedded directives
- // We want to skip those and look only at Elements and ElementContainers to ensure
- // we're looking at true parent nodes, and not content or other types.
- if (parentTNode.type & (2 /* Element */ | 8 /* ElementContainer */)) {
- break;
- }
- }
- else {
- break;
- }
- }
- if (parentTNode === null) {
- // If we failed to find a parent TNode this means that we should use module injector.
- return false;
- }
- else {
- tNode = parentTNode;
- lView = parentLView;
- }
- }
- ngDevMode && assertTNodeForLView(tNode, lView);
- const lFrame = instructionState.lFrame = allocLFrame();
- lFrame.currentTNode = tNode;
- lFrame.lView = lView;
- return true;
- }
- /**
- * Swap the current lView with a new lView.
- *
- * For performance reasons we store the lView in the top level of the module.
- * This way we minimize the number of properties to read. Whenever a new view
- * is entered we have to store the lView for later, and when the view is
- * exited the state has to be restored
- *
- * @param newView New lView to become active
- * @returns the previously active lView;
- */
- function enterView(newView) {
- ngDevMode && assertNotEqual(newView[0], newView[1], '????');
- ngDevMode && assertLViewOrUndefined(newView);
- const newLFrame = allocLFrame();
- if (ngDevMode) {
- assertEqual(newLFrame.isParent, true, 'Expected clean LFrame');
- assertEqual(newLFrame.lView, null, 'Expected clean LFrame');
- assertEqual(newLFrame.tView, null, 'Expected clean LFrame');
- assertEqual(newLFrame.selectedIndex, -1, 'Expected clean LFrame');
- assertEqual(newLFrame.elementDepthCount, 0, 'Expected clean LFrame');
- assertEqual(newLFrame.currentDirectiveIndex, -1, 'Expected clean LFrame');
- assertEqual(newLFrame.currentNamespace, null, 'Expected clean LFrame');
- assertEqual(newLFrame.bindingRootIndex, -1, 'Expected clean LFrame');
- assertEqual(newLFrame.currentQueryIndex, 0, 'Expected clean LFrame');
- }
- const tView = newView[TVIEW];
- instructionState.lFrame = newLFrame;
- ngDevMode && tView.firstChild && assertTNodeForTView(tView.firstChild, tView);
- newLFrame.currentTNode = tView.firstChild;
- newLFrame.lView = newView;
- newLFrame.tView = tView;
- newLFrame.contextLView = newView;
- newLFrame.bindingIndex = tView.bindingStartIndex;
- newLFrame.inI18n = false;
- }
- /**
- * Allocates next free LFrame. This function tries to reuse the `LFrame`s to lower memory pressure.
- */
- function allocLFrame() {
- const currentLFrame = instructionState.lFrame;
- const childLFrame = currentLFrame === null ? null : currentLFrame.child;
- const newLFrame = childLFrame === null ? createLFrame(currentLFrame) : childLFrame;
- return newLFrame;
- }
- function createLFrame(parent) {
- const lFrame = {
- currentTNode: null,
- isParent: true,
- lView: null,
- tView: null,
- selectedIndex: -1,
- contextLView: null,
- elementDepthCount: 0,
- currentNamespace: null,
- currentDirectiveIndex: -1,
- bindingRootIndex: -1,
- bindingIndex: -1,
- currentQueryIndex: 0,
- parent: parent,
- child: null,
- inI18n: false,
- };
- parent !== null && (parent.child = lFrame); // link the new LFrame for reuse.
- return lFrame;
- }
- /**
- * A lightweight version of leave which is used with DI.
- *
- * This function only resets `currentTNode` and `LView` as those are the only properties
- * used with DI (`enterDI()`).
- *
- * NOTE: This function is reexported as `leaveDI`. However `leaveDI` has return type of `void` where
- * as `leaveViewLight` has `LFrame`. This is so that `leaveViewLight` can be used in `leaveView`.
- */
- function leaveViewLight() {
- const oldLFrame = instructionState.lFrame;
- instructionState.lFrame = oldLFrame.parent;
- oldLFrame.currentTNode = null;
- oldLFrame.lView = null;
- return oldLFrame;
- }
- /**
- * This is a lightweight version of the `leaveView` which is needed by the DI system.
- *
- * NOTE: this function is an alias so that we can change the type of the function to have `void`
- * return type.
- */
- const leaveDI = leaveViewLight;
- /**
- * Leave the current `LView`
- *
- * This pops the `LFrame` with the associated `LView` from the stack.
- *
- * IMPORTANT: We must zero out the `LFrame` values here otherwise they will be retained. This is
- * because for performance reasons we don't release `LFrame` but rather keep it for next use.
- */
- function leaveView() {
- const oldLFrame = leaveViewLight();
- oldLFrame.isParent = true;
- oldLFrame.tView = null;
- oldLFrame.selectedIndex = -1;
- oldLFrame.contextLView = null;
- oldLFrame.elementDepthCount = 0;
- oldLFrame.currentDirectiveIndex = -1;
- oldLFrame.currentNamespace = null;
- oldLFrame.bindingRootIndex = -1;
- oldLFrame.bindingIndex = -1;
- oldLFrame.currentQueryIndex = 0;
- }
- function nextContextImpl(level) {
- const contextLView = instructionState.lFrame.contextLView =
- walkUpViews(level, instructionState.lFrame.contextLView);
- return contextLView[CONTEXT];
- }
- function walkUpViews(nestingLevel, currentView) {
- while (nestingLevel > 0) {
- ngDevMode &&
- assertDefined(currentView[DECLARATION_VIEW], 'Declaration view should be defined if nesting level is greater than 0.');
- currentView = currentView[DECLARATION_VIEW];
- nestingLevel--;
- }
- return currentView;
- }
- /**
- * Gets the currently selected element index.
- *
- * Used with {@link property} instruction (and more in the future) to identify the index in the
- * current `LView` to act on.
- */
- function getSelectedIndex() {
- return instructionState.lFrame.selectedIndex;
- }
- /**
- * Sets the most recent index passed to {@link select}
- *
- * Used with {@link property} instruction (and more in the future) to identify the index in the
- * current `LView` to act on.
- *
- * (Note that if an "exit function" was set earlier (via `setElementExitFn()`) then that will be
- * run if and when the provided `index` value is different from the current selected index value.)
- */
- function setSelectedIndex(index) {
- ngDevMode && index !== -1 &&
- assertGreaterThanOrEqual(index, HEADER_OFFSET, 'Index must be past HEADER_OFFSET (or -1).');
- ngDevMode &&
- assertLessThan(index, instructionState.lFrame.lView.length, 'Can\'t set index passed end of LView');
- instructionState.lFrame.selectedIndex = index;
- }
- /**
- * Gets the `tNode` that represents currently selected element.
- */
- function getSelectedTNode() {
- const lFrame = instructionState.lFrame;
- return getTNode(lFrame.tView, lFrame.selectedIndex);
- }
- /**
- * Sets the namespace used to create elements to `'http://www.w3.org/2000/svg'` in global state.
- *
- * @codeGenApi
- */
- function ɵɵnamespaceSVG() {
- instructionState.lFrame.currentNamespace = SVG_NAMESPACE;
- }
- /**
- * Sets the namespace used to create elements to `'http://www.w3.org/1998/MathML/'` in global state.
- *
- * @codeGenApi
- */
- function ɵɵnamespaceMathML() {
- instructionState.lFrame.currentNamespace = MATH_ML_NAMESPACE;
- }
- /**
- * Sets the namespace used to create elements to `null`, which forces element creation to use
- * `createElement` rather than `createElementNS`.
- *
- * @codeGenApi
- */
- function ɵɵnamespaceHTML() {
- namespaceHTMLInternal();
- }
- /**
- * Sets the namespace used to create elements to `null`, which forces element creation to use
- * `createElement` rather than `createElementNS`.
- */
- function namespaceHTMLInternal() {
- instructionState.lFrame.currentNamespace = null;
- }
- function getNamespace() {
- return instructionState.lFrame.currentNamespace;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Adds all directive lifecycle hooks from the given `DirectiveDef` to the given `TView`.
- *
- * Must be run *only* on the first template pass.
- *
- * Sets up the pre-order hooks on the provided `tView`,
- * see {@link HookData} for details about the data structure.
- *
- * @param directiveIndex The index of the directive in LView
- * @param directiveDef The definition containing the hooks to setup in tView
- * @param tView The current TView
- */
- function registerPreOrderHooks(directiveIndex, directiveDef, tView) {
- ngDevMode && assertFirstCreatePass(tView);
- const { ngOnChanges, ngOnInit, ngDoCheck } = directiveDef.type.prototype;
- if (ngOnChanges) {
- const wrappedOnChanges = NgOnChangesFeatureImpl(directiveDef);
- (tView.preOrderHooks || (tView.preOrderHooks = [])).push(directiveIndex, wrappedOnChanges);
- (tView.preOrderCheckHooks || (tView.preOrderCheckHooks = []))
- .push(directiveIndex, wrappedOnChanges);
- }
- if (ngOnInit) {
- (tView.preOrderHooks || (tView.preOrderHooks = [])).push(0 - directiveIndex, ngOnInit);
- }
- if (ngDoCheck) {
- (tView.preOrderHooks || (tView.preOrderHooks = [])).push(directiveIndex, ngDoCheck);
- (tView.preOrderCheckHooks || (tView.preOrderCheckHooks = [])).push(directiveIndex, ngDoCheck);
- }
- }
- /**
- *
- * Loops through the directives on the provided `tNode` and queues hooks to be
- * run that are not initialization hooks.
- *
- * Should be executed during `elementEnd()` and similar to
- * preserve hook execution order. Content, view, and destroy hooks for projected
- * components and directives must be called *before* their hosts.
- *
- * Sets up the content, view, and destroy hooks on the provided `tView`,
- * see {@link HookData} for details about the data structure.
- *
- * NOTE: This does not set up `onChanges`, `onInit` or `doCheck`, those are set up
- * separately at `elementStart`.
- *
- * @param tView The current TView
- * @param tNode The TNode whose directives are to be searched for hooks to queue
- */
- function registerPostOrderHooks(tView, tNode) {
- ngDevMode && assertFirstCreatePass(tView);
- // It's necessary to loop through the directives at elementEnd() (rather than processing in
- // directiveCreate) so we can preserve the current hook order. Content, view, and destroy
- // hooks for projected components and directives must be called *before* their hosts.
- for (let i = tNode.directiveStart, end = tNode.directiveEnd; i < end; i++) {
- const directiveDef = tView.data[i];
- ngDevMode && assertDefined(directiveDef, 'Expecting DirectiveDef');
- const lifecycleHooks = directiveDef.type.prototype;
- const { ngAfterContentInit, ngAfterContentChecked, ngAfterViewInit, ngAfterViewChecked, ngOnDestroy } = lifecycleHooks;
- if (ngAfterContentInit) {
- (tView.contentHooks || (tView.contentHooks = [])).push(-i, ngAfterContentInit);
- }
- if (ngAfterContentChecked) {
- (tView.contentHooks || (tView.contentHooks = [])).push(i, ngAfterContentChecked);
- (tView.contentCheckHooks || (tView.contentCheckHooks = [])).push(i, ngAfterContentChecked);
- }
- if (ngAfterViewInit) {
- (tView.viewHooks || (tView.viewHooks = [])).push(-i, ngAfterViewInit);
- }
- if (ngAfterViewChecked) {
- (tView.viewHooks || (tView.viewHooks = [])).push(i, ngAfterViewChecked);
- (tView.viewCheckHooks || (tView.viewCheckHooks = [])).push(i, ngAfterViewChecked);
- }
- if (ngOnDestroy != null) {
- (tView.destroyHooks || (tView.destroyHooks = [])).push(i, ngOnDestroy);
- }
- }
- }
- /**
- * Executing hooks requires complex logic as we need to deal with 2 constraints.
- *
- * 1. Init hooks (ngOnInit, ngAfterContentInit, ngAfterViewInit) must all be executed once and only
- * once, across many change detection cycles. This must be true even if some hooks throw, or if
- * some recursively trigger a change detection cycle.
- * To solve that, it is required to track the state of the execution of these init hooks.
- * This is done by storing and maintaining flags in the view: the {@link InitPhaseState},
- * and the index within that phase. They can be seen as a cursor in the following structure:
- * [[onInit1, onInit2], [afterContentInit1], [afterViewInit1, afterViewInit2, afterViewInit3]]
- * They are are stored as flags in LView[FLAGS].
- *
- * 2. Pre-order hooks can be executed in batches, because of the select instruction.
- * To be able to pause and resume their execution, we also need some state about the hook's array
- * that is being processed:
- * - the index of the next hook to be executed
- * - the number of init hooks already found in the processed part of the array
- * They are are stored as flags in LView[PREORDER_HOOK_FLAGS].
- */
- /**
- * Executes pre-order check hooks ( OnChanges, DoChanges) given a view where all the init hooks were
- * executed once. This is a light version of executeInitAndCheckPreOrderHooks where we can skip read
- * / write of the init-hooks related flags.
- * @param lView The LView where hooks are defined
- * @param hooks Hooks to be run
- * @param nodeIndex 3 cases depending on the value:
- * - undefined: all hooks from the array should be executed (post-order case)
- * - null: execute hooks only from the saved index until the end of the array (pre-order case, when
- * flushing the remaining hooks)
- * - number: execute hooks only from the saved index until that node index exclusive (pre-order
- * case, when executing select(number))
- */
- function executeCheckHooks(lView, hooks, nodeIndex) {
- callHooks(lView, hooks, 3 /* InitPhaseCompleted */, nodeIndex);
- }
- /**
- * Executes post-order init and check hooks (one of AfterContentInit, AfterContentChecked,
- * AfterViewInit, AfterViewChecked) given a view where there are pending init hooks to be executed.
- * @param lView The LView where hooks are defined
- * @param hooks Hooks to be run
- * @param initPhase A phase for which hooks should be run
- * @param nodeIndex 3 cases depending on the value:
- * - undefined: all hooks from the array should be executed (post-order case)
- * - null: execute hooks only from the saved index until the end of the array (pre-order case, when
- * flushing the remaining hooks)
- * - number: execute hooks only from the saved index until that node index exclusive (pre-order
- * case, when executing select(number))
- */
- function executeInitAndCheckHooks(lView, hooks, initPhase, nodeIndex) {
- ngDevMode &&
- assertNotEqual(initPhase, 3 /* InitPhaseCompleted */, 'Init pre-order hooks should not be called more than once');
- if ((lView[FLAGS] & 3 /* InitPhaseStateMask */) === initPhase) {
- callHooks(lView, hooks, initPhase, nodeIndex);
- }
- }
- function incrementInitPhaseFlags(lView, initPhase) {
- ngDevMode &&
- assertNotEqual(initPhase, 3 /* InitPhaseCompleted */, 'Init hooks phase should not be incremented after all init hooks have been run.');
- let flags = lView[FLAGS];
- if ((flags & 3 /* InitPhaseStateMask */) === initPhase) {
- flags &= 2047 /* IndexWithinInitPhaseReset */;
- flags += 1 /* InitPhaseStateIncrementer */;
- lView[FLAGS] = flags;
- }
- }
- /**
- * Calls lifecycle hooks with their contexts, skipping init hooks if it's not
- * the first LView pass
- *
- * @param currentView The current view
- * @param arr The array in which the hooks are found
- * @param initPhaseState the current state of the init phase
- * @param currentNodeIndex 3 cases depending on the value:
- * - undefined: all hooks from the array should be executed (post-order case)
- * - null: execute hooks only from the saved index until the end of the array (pre-order case, when
- * flushing the remaining hooks)
- * - number: execute hooks only from the saved index until that node index exclusive (pre-order
- * case, when executing select(number))
- */
- function callHooks(currentView, arr, initPhase, currentNodeIndex) {
- ngDevMode &&
- assertEqual(isInCheckNoChangesMode(), false, 'Hooks should never be run when in check no changes mode.');
- const startIndex = currentNodeIndex !== undefined ?
- (currentView[PREORDER_HOOK_FLAGS] & 65535 /* IndexOfTheNextPreOrderHookMaskMask */) :
- 0;
- const nodeIndexLimit = currentNodeIndex != null ? currentNodeIndex : -1;
- let lastNodeIndexFound = 0;
- for (let i = startIndex; i < arr.length; i++) {
- const hook = arr[i + 1];
- if (typeof hook === 'number') {
- lastNodeIndexFound = arr[i];
- if (currentNodeIndex != null && lastNodeIndexFound >= currentNodeIndex) {
- break;
- }
- }
- else {
- const isInitHook = arr[i] < 0;
- if (isInitHook)
- currentView[PREORDER_HOOK_FLAGS] += 65536 /* NumberOfInitHooksCalledIncrementer */;
- if (lastNodeIndexFound < nodeIndexLimit || nodeIndexLimit == -1) {
- callHook(currentView, initPhase, arr, i);
- currentView[PREORDER_HOOK_FLAGS] =
- (currentView[PREORDER_HOOK_FLAGS] & 4294901760 /* NumberOfInitHooksCalledMask */) + i +
- 2;
- }
- i++;
- }
- }
- }
- /**
- * Execute one hook against the current `LView`.
- *
- * @param currentView The current view
- * @param initPhaseState the current state of the init phase
- * @param arr The array in which the hooks are found
- * @param i The current index within the hook data array
- */
- function callHook(currentView, initPhase, arr, i) {
- const isInitHook = arr[i] < 0;
- const hook = arr[i + 1];
- const directiveIndex = isInitHook ? -arr[i] : arr[i];
- const directive = currentView[directiveIndex];
- if (isInitHook) {
- const indexWithintInitPhase = currentView[FLAGS] >> 11 /* IndexWithinInitPhaseShift */;
- // The init phase state must be always checked here as it may have been recursively
- // updated
- if (indexWithintInitPhase <
- (currentView[PREORDER_HOOK_FLAGS] >> 16 /* NumberOfInitHooksCalledShift */) &&
- (currentView[FLAGS] & 3 /* InitPhaseStateMask */) === initPhase) {
- currentView[FLAGS] += 2048 /* IndexWithinInitPhaseIncrementer */;
- hook.call(directive);
- }
- }
- else {
- hook.call(directive);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const NO_PARENT_INJECTOR = -1;
- /**
- * Each injector is saved in 9 contiguous slots in `LView` and 9 contiguous slots in
- * `TView.data`. This allows us to store information about the current node's tokens (which
- * can be shared in `TView`) as well as the tokens of its ancestor nodes (which cannot be
- * shared, so they live in `LView`).
- *
- * Each of these slots (aside from the last slot) contains a bloom filter. This bloom filter
- * determines whether a directive is available on the associated node or not. This prevents us
- * from searching the directives array at this level unless it's probable the directive is in it.
- *
- * See: https://en.wikipedia.org/wiki/Bloom_filter for more about bloom filters.
- *
- * Because all injectors have been flattened into `LView` and `TViewData`, they cannot typed
- * using interfaces as they were previously. The start index of each `LInjector` and `TInjector`
- * will differ based on where it is flattened into the main array, so it's not possible to know
- * the indices ahead of time and save their types here. The interfaces are still included here
- * for documentation purposes.
- *
- * export interface LInjector extends Array<any> {
- *
- * // Cumulative bloom for directive IDs 0-31 (IDs are % BLOOM_SIZE)
- * [0]: number;
- *
- * // Cumulative bloom for directive IDs 32-63
- * [1]: number;
- *
- * // Cumulative bloom for directive IDs 64-95
- * [2]: number;
- *
- * // Cumulative bloom for directive IDs 96-127
- * [3]: number;
- *
- * // Cumulative bloom for directive IDs 128-159
- * [4]: number;
- *
- * // Cumulative bloom for directive IDs 160 - 191
- * [5]: number;
- *
- * // Cumulative bloom for directive IDs 192 - 223
- * [6]: number;
- *
- * // Cumulative bloom for directive IDs 224 - 255
- * [7]: number;
- *
- * // We need to store a reference to the injector's parent so DI can keep looking up
- * // the injector tree until it finds the dependency it's looking for.
- * [PARENT_INJECTOR]: number;
- * }
- *
- * export interface TInjector extends Array<any> {
- *
- * // Shared node bloom for directive IDs 0-31 (IDs are % BLOOM_SIZE)
- * [0]: number;
- *
- * // Shared node bloom for directive IDs 32-63
- * [1]: number;
- *
- * // Shared node bloom for directive IDs 64-95
- * [2]: number;
- *
- * // Shared node bloom for directive IDs 96-127
- * [3]: number;
- *
- * // Shared node bloom for directive IDs 128-159
- * [4]: number;
- *
- * // Shared node bloom for directive IDs 160 - 191
- * [5]: number;
- *
- * // Shared node bloom for directive IDs 192 - 223
- * [6]: number;
- *
- * // Shared node bloom for directive IDs 224 - 255
- * [7]: number;
- *
- * // Necessary to find directive indices for a particular node.
- * [TNODE]: TElementNode|TElementContainerNode|TContainerNode;
- * }
- */
- /**
- * Factory for creating instances of injectors in the NodeInjector.
- *
- * This factory is complicated by the fact that it can resolve `multi` factories as well.
- *
- * NOTE: Some of the fields are optional which means that this class has two hidden classes.
- * - One without `multi` support (most common)
- * - One with `multi` values, (rare).
- *
- * Since VMs can cache up to 4 inline hidden classes this is OK.
- *
- * - Single factory: Only `resolving` and `factory` is defined.
- * - `providers` factory: `componentProviders` is a number and `index = -1`.
- * - `viewProviders` factory: `componentProviders` is a number and `index` points to `providers`.
- */
- class NodeInjectorFactory {
- constructor(
- /**
- * Factory to invoke in order to create a new instance.
- */
- factory,
- /**
- * Set to `true` if the token is declared in `viewProviders` (or if it is component).
- */
- isViewProvider, injectImplementation) {
- this.factory = factory;
- /**
- * Marker set to true during factory invocation to see if we get into recursive loop.
- * Recursive loop causes an error to be displayed.
- */
- this.resolving = false;
- ngDevMode && assertDefined(factory, 'Factory not specified');
- ngDevMode && assertEqual(typeof factory, 'function', 'Expected factory function.');
- this.canSeeViewProviders = isViewProvider;
- this.injectImpl = injectImplementation;
- }
- }
- function isFactory(obj) {
- return obj instanceof NodeInjectorFactory;
- }
- // Note: This hack is necessary so we don't erroneously get a circular dependency
- // failure based on types.
- const unusedValueExportToPlacateAjd$3 = 1;
- /**
- * Converts `TNodeType` into human readable text.
- * Make sure this matches with `TNodeType`
- */
- function toTNodeTypeAsString(tNodeType) {
- let text = '';
- (tNodeType & 1 /* Text */) && (text += '|Text');
- (tNodeType & 2 /* Element */) && (text += '|Element');
- (tNodeType & 4 /* Container */) && (text += '|Container');
- (tNodeType & 8 /* ElementContainer */) && (text += '|ElementContainer');
- (tNodeType & 16 /* Projection */) && (text += '|Projection');
- (tNodeType & 32 /* Icu */) && (text += '|IcuContainer');
- (tNodeType & 64 /* Placeholder */) && (text += '|Placeholder');
- return text.length > 0 ? text.substring(1) : text;
- }
- // Note: This hack is necessary so we don't erroneously get a circular dependency
- // failure based on types.
- const unusedValueExportToPlacateAjd$4 = 1;
- /**
- * Returns `true` if the `TNode` has a directive which has `@Input()` for `class` binding.
- *
- * ```
- * <div my-dir [class]="exp"></div>
- * ```
- * and
- * ```
- * @Directive({
- * })
- * class MyDirective {
- * @Input()
- * class: string;
- * }
- * ```
- *
- * In the above case it is necessary to write the reconciled styling information into the
- * directive's input.
- *
- * @param tNode
- */
- function hasClassInput(tNode) {
- return (tNode.flags & 16 /* hasClassInput */) !== 0;
- }
- /**
- * Returns `true` if the `TNode` has a directive which has `@Input()` for `style` binding.
- *
- * ```
- * <div my-dir [style]="exp"></div>
- * ```
- * and
- * ```
- * @Directive({
- * })
- * class MyDirective {
- * @Input()
- * class: string;
- * }
- * ```
- *
- * In the above case it is necessary to write the reconciled styling information into the
- * directive's input.
- *
- * @param tNode
- */
- function hasStyleInput(tNode) {
- return (tNode.flags & 32 /* hasStyleInput */) !== 0;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function assertTNodeType(tNode, expectedTypes, message) {
- assertDefined(tNode, 'should be called with a TNode');
- if ((tNode.type & expectedTypes) === 0) {
- throwError(message ||
- `Expected [${toTNodeTypeAsString(expectedTypes)}] but got ${toTNodeTypeAsString(tNode.type)}.`);
- }
- }
- function assertPureTNodeType(type) {
- if (!(type === 2 /* Element */ || //
- type === 1 /* Text */ || //
- type === 4 /* Container */ || //
- type === 8 /* ElementContainer */ || //
- type === 32 /* Icu */ || //
- type === 16 /* Projection */ || //
- type === 64 /* Placeholder */)) {
- throwError(`Expected TNodeType to have only a single type selected, but got ${toTNodeTypeAsString(type)}.`);
- }
- }
- /**
- * Assigns all attribute values to the provided element via the inferred renderer.
- *
- * This function accepts two forms of attribute entries:
- *
- * default: (key, value):
- * attrs = [key1, value1, key2, value2]
- *
- * namespaced: (NAMESPACE_MARKER, uri, name, value)
- * attrs = [NAMESPACE_MARKER, uri, name, value, NAMESPACE_MARKER, uri, name, value]
- *
- * The `attrs` array can contain a mix of both the default and namespaced entries.
- * The "default" values are set without a marker, but if the function comes across
- * a marker value then it will attempt to set a namespaced value. If the marker is
- * not of a namespaced value then the function will quit and return the index value
- * where it stopped during the iteration of the attrs array.
- *
- * See [AttributeMarker] to understand what the namespace marker value is.
- *
- * Note that this instruction does not support assigning style and class values to
- * an element. See `elementStart` and `elementHostAttrs` to learn how styling values
- * are applied to an element.
- * @param renderer The renderer to be used
- * @param native The element that the attributes will be assigned to
- * @param attrs The attribute array of values that will be assigned to the element
- * @returns the index value that was last accessed in the attributes array
- */
- function setUpAttributes(renderer, native, attrs) {
- const isProc = isProceduralRenderer(renderer);
- let i = 0;
- while (i < attrs.length) {
- const value = attrs[i];
- if (typeof value === 'number') {
- // only namespaces are supported. Other value types (such as style/class
- // entries) are not supported in this function.
- if (value !== 0 /* NamespaceURI */) {
- break;
- }
- // we just landed on the marker value ... therefore
- // we should skip to the next entry
- i++;
- const namespaceURI = attrs[i++];
- const attrName = attrs[i++];
- const attrVal = attrs[i++];
- ngDevMode && ngDevMode.rendererSetAttribute++;
- isProc ?
- renderer.setAttribute(native, attrName, attrVal, namespaceURI) :
- native.setAttributeNS(namespaceURI, attrName, attrVal);
- }
- else {
- // attrName is string;
- const attrName = value;
- const attrVal = attrs[++i];
- // Standard attributes
- ngDevMode && ngDevMode.rendererSetAttribute++;
- if (isAnimationProp(attrName)) {
- if (isProc) {
- renderer.setProperty(native, attrName, attrVal);
- }
- }
- else {
- isProc ?
- renderer.setAttribute(native, attrName, attrVal) :
- native.setAttribute(attrName, attrVal);
- }
- i++;
- }
- }
- // another piece of code may iterate over the same attributes array. Therefore
- // it may be helpful to return the exact spot where the attributes array exited
- // whether by running into an unsupported marker or if all the static values were
- // iterated over.
- return i;
- }
- /**
- * Test whether the given value is a marker that indicates that the following
- * attribute values in a `TAttributes` array are only the names of attributes,
- * and not name-value pairs.
- * @param marker The attribute marker to test.
- * @returns true if the marker is a "name-only" marker (e.g. `Bindings`, `Template` or `I18n`).
- */
- function isNameOnlyAttributeMarker(marker) {
- return marker === 3 /* Bindings */ || marker === 4 /* Template */ ||
- marker === 6 /* I18n */;
- }
- function isAnimationProp(name) {
- // Perf note: accessing charCodeAt to check for the first character of a string is faster as
- // compared to accessing a character at index 0 (ex. name[0]). The main reason for this is that
- // charCodeAt doesn't allocate memory to return a substring.
- return name.charCodeAt(0) === 64 /* AT_SIGN */;
- }
- /**
- * Merges `src` `TAttributes` into `dst` `TAttributes` removing any duplicates in the process.
- *
- * This merge function keeps the order of attrs same.
- *
- * @param dst Location of where the merged `TAttributes` should end up.
- * @param src `TAttributes` which should be appended to `dst`
- */
- function mergeHostAttrs(dst, src) {
- if (src === null || src.length === 0) {
- // do nothing
- }
- else if (dst === null || dst.length === 0) {
- // We have source, but dst is empty, just make a copy.
- dst = src.slice();
- }
- else {
- let srcMarker = -1 /* ImplicitAttributes */;
- for (let i = 0; i < src.length; i++) {
- const item = src[i];
- if (typeof item === 'number') {
- srcMarker = item;
- }
- else {
- if (srcMarker === 0 /* NamespaceURI */) {
- // Case where we need to consume `key1`, `key2`, `value` items.
- }
- else if (srcMarker === -1 /* ImplicitAttributes */ ||
- srcMarker === 2 /* Styles */) {
- // Case where we have to consume `key1` and `value` only.
- mergeHostAttribute(dst, srcMarker, item, null, src[++i]);
- }
- else {
- // Case where we have to consume `key1` only.
- mergeHostAttribute(dst, srcMarker, item, null, null);
- }
- }
- }
- }
- return dst;
- }
- /**
- * Append `key`/`value` to existing `TAttributes` taking region marker and duplicates into account.
- *
- * @param dst `TAttributes` to append to.
- * @param marker Region where the `key`/`value` should be added.
- * @param key1 Key to add to `TAttributes`
- * @param key2 Key to add to `TAttributes` (in case of `AttributeMarker.NamespaceURI`)
- * @param value Value to add or to overwrite to `TAttributes` Only used if `marker` is not Class.
- */
- function mergeHostAttribute(dst, marker, key1, key2, value) {
- let i = 0;
- // Assume that new markers will be inserted at the end.
- let markerInsertPosition = dst.length;
- // scan until correct type.
- if (marker === -1 /* ImplicitAttributes */) {
- markerInsertPosition = -1;
- }
- else {
- while (i < dst.length) {
- const dstValue = dst[i++];
- if (typeof dstValue === 'number') {
- if (dstValue === marker) {
- markerInsertPosition = -1;
- break;
- }
- else if (dstValue > marker) {
- // We need to save this as we want the markers to be inserted in specific order.
- markerInsertPosition = i - 1;
- break;
- }
- }
- }
- }
- // search until you find place of insertion
- while (i < dst.length) {
- const item = dst[i];
- if (typeof item === 'number') {
- // since `i` started as the index after the marker, we did not find it if we are at the next
- // marker
- break;
- }
- else if (item === key1) {
- // We already have same token
- if (key2 === null) {
- if (value !== null) {
- dst[i + 1] = value;
- }
- return;
- }
- else if (key2 === dst[i + 1]) {
- dst[i + 2] = value;
- return;
- }
- }
- // Increment counter.
- i++;
- if (key2 !== null)
- i++;
- if (value !== null)
- i++;
- }
- // insert at location.
- if (markerInsertPosition !== -1) {
- dst.splice(markerInsertPosition, 0, marker);
- i = markerInsertPosition + 1;
- }
- dst.splice(i++, 0, key1);
- if (key2 !== null) {
- dst.splice(i++, 0, key2);
- }
- if (value !== null) {
- dst.splice(i++, 0, value);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /// Parent Injector Utils ///////////////////////////////////////////////////////////////
- function hasParentInjector(parentLocation) {
- return parentLocation !== NO_PARENT_INJECTOR;
- }
- function getParentInjectorIndex(parentLocation) {
- ngDevMode && assertNumber(parentLocation, 'Number expected');
- ngDevMode && assertNotEqual(parentLocation, -1, 'Not a valid state.');
- const parentInjectorIndex = parentLocation & 32767 /* InjectorIndexMask */;
- ngDevMode &&
- assertGreaterThan(parentInjectorIndex, HEADER_OFFSET, 'Parent injector must be pointing past HEADER_OFFSET.');
- return parentLocation & 32767 /* InjectorIndexMask */;
- }
- function getParentInjectorViewOffset(parentLocation) {
- return parentLocation >> 16 /* ViewOffsetShift */;
- }
- /**
- * Unwraps a parent injector location number to find the view offset from the current injector,
- * then walks up the declaration view tree until the view is found that contains the parent
- * injector.
- *
- * @param location The location of the parent injector, which contains the view offset
- * @param startView The LView instance from which to start walking up the view tree
- * @returns The LView instance that contains the parent injector
- */
- function getParentInjectorView(location, startView) {
- let viewOffset = getParentInjectorViewOffset(location);
- let parentView = startView;
- // For most cases, the parent injector can be found on the host node (e.g. for component
- // or container), but we must keep the loop here to support the rarer case of deeply nested
- // <ng-template> tags or inline views, where the parent injector might live many views
- // above the child injector.
- while (viewOffset > 0) {
- parentView = parentView[DECLARATION_VIEW];
- viewOffset--;
- }
- return parentView;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Defines if the call to `inject` should include `viewProviders` in its resolution.
- *
- * This is set to true when we try to instantiate a component. This value is reset in
- * `getNodeInjectable` to a value which matches the declaration location of the token about to be
- * instantiated. This is done so that if we are injecting a token which was declared outside of
- * `viewProviders` we don't accidentally pull `viewProviders` in.
- *
- * Example:
- *
- * ```
- * @Injectable()
- * class MyService {
- * constructor(public value: String) {}
- * }
- *
- * @Component({
- * providers: [
- * MyService,
- * {provide: String, value: 'providers' }
- * ]
- * viewProviders: [
- * {provide: String, value: 'viewProviders'}
- * ]
- * })
- * class MyComponent {
- * constructor(myService: MyService, value: String) {
- * // We expect that Component can see into `viewProviders`.
- * expect(value).toEqual('viewProviders');
- * // `MyService` was not declared in `viewProviders` hence it can't see it.
- * expect(myService.value).toEqual('providers');
- * }
- * }
- *
- * ```
- */
- let includeViewProviders = true;
- function setIncludeViewProviders(v) {
- const oldValue = includeViewProviders;
- includeViewProviders = v;
- return oldValue;
- }
- /**
- * The number of slots in each bloom filter (used by DI). The larger this number, the fewer
- * directives that will share slots, and thus, the fewer false positives when checking for
- * the existence of a directive.
- */
- const BLOOM_SIZE = 256;
- const BLOOM_MASK = BLOOM_SIZE - 1;
- /** Counter used to generate unique IDs for directives. */
- let nextNgElementId = 0;
- /**
- * Registers this directive as present in its node's injector by flipping the directive's
- * corresponding bit in the injector's bloom filter.
- *
- * @param injectorIndex The index of the node injector where this token should be registered
- * @param tView The TView for the injector's bloom filters
- * @param type The directive token to register
- */
- function bloomAdd(injectorIndex, tView, type) {
- ngDevMode && assertEqual(tView.firstCreatePass, true, 'expected firstCreatePass to be true');
- let id;
- if (typeof type === 'string') {
- id = type.charCodeAt(0) || 0;
- }
- else if (type.hasOwnProperty(NG_ELEMENT_ID)) {
- id = type[NG_ELEMENT_ID];
- }
- // Set a unique ID on the directive type, so if something tries to inject the directive,
- // we can easily retrieve the ID and hash it into the bloom bit that should be checked.
- if (id == null) {
- id = type[NG_ELEMENT_ID] = nextNgElementId++;
- }
- // We only have BLOOM_SIZE (256) slots in our bloom filter (8 buckets * 32 bits each),
- // so all unique IDs must be modulo-ed into a number from 0 - 255 to fit into the filter.
- const bloomBit = id & BLOOM_MASK;
- // Create a mask that targets the specific bit associated with the directive.
- // JS bit operations are 32 bits, so this will be a number between 2^0 and 2^31, corresponding
- // to bit positions 0 - 31 in a 32 bit integer.
- const mask = 1 << bloomBit;
- // Use the raw bloomBit number to determine which bloom filter bucket we should check
- // e.g: bf0 = [0 - 31], bf1 = [32 - 63], bf2 = [64 - 95], bf3 = [96 - 127], etc
- const b7 = bloomBit & 0x80;
- const b6 = bloomBit & 0x40;
- const b5 = bloomBit & 0x20;
- const tData = tView.data;
- if (b7) {
- b6 ? (b5 ? (tData[injectorIndex + 7] |= mask) : (tData[injectorIndex + 6] |= mask)) :
- (b5 ? (tData[injectorIndex + 5] |= mask) : (tData[injectorIndex + 4] |= mask));
- }
- else {
- b6 ? (b5 ? (tData[injectorIndex + 3] |= mask) : (tData[injectorIndex + 2] |= mask)) :
- (b5 ? (tData[injectorIndex + 1] |= mask) : (tData[injectorIndex] |= mask));
- }
- }
- /**
- * Creates (or gets an existing) injector for a given element or container.
- *
- * @param tNode for which an injector should be retrieved / created.
- * @param lView View where the node is stored
- * @returns Node injector
- */
- function getOrCreateNodeInjectorForNode(tNode, lView) {
- const existingInjectorIndex = getInjectorIndex(tNode, lView);
- if (existingInjectorIndex !== -1) {
- return existingInjectorIndex;
- }
- const tView = lView[TVIEW];
- if (tView.firstCreatePass) {
- tNode.injectorIndex = lView.length;
- insertBloom(tView.data, tNode); // foundation for node bloom
- insertBloom(lView, null); // foundation for cumulative bloom
- insertBloom(tView.blueprint, null);
- }
- const parentLoc = getParentInjectorLocation(tNode, lView);
- const injectorIndex = tNode.injectorIndex;
- // If a parent injector can't be found, its location is set to -1.
- // In that case, we don't need to set up a cumulative bloom
- if (hasParentInjector(parentLoc)) {
- const parentIndex = getParentInjectorIndex(parentLoc);
- const parentLView = getParentInjectorView(parentLoc, lView);
- const parentData = parentLView[TVIEW].data;
- // Creates a cumulative bloom filter that merges the parent's bloom filter
- // and its own cumulative bloom (which contains tokens for all ancestors)
- for (let i = 0; i < 8 /* BLOOM_SIZE */; i++) {
- lView[injectorIndex + i] = parentLView[parentIndex + i] | parentData[parentIndex + i];
- }
- }
- lView[injectorIndex + 8 /* PARENT */] = parentLoc;
- return injectorIndex;
- }
- function insertBloom(arr, footer) {
- arr.push(0, 0, 0, 0, 0, 0, 0, 0, footer);
- }
- function getInjectorIndex(tNode, lView) {
- if (tNode.injectorIndex === -1 ||
- // If the injector index is the same as its parent's injector index, then the index has been
- // copied down from the parent node. No injector has been created yet on this node.
- (tNode.parent && tNode.parent.injectorIndex === tNode.injectorIndex) ||
- // After the first template pass, the injector index might exist but the parent values
- // might not have been calculated yet for this instance
- lView[tNode.injectorIndex + 8 /* PARENT */] === null) {
- return -1;
- }
- else {
- ngDevMode && assertIndexInRange(lView, tNode.injectorIndex);
- return tNode.injectorIndex;
- }
- }
- /**
- * Finds the index of the parent injector, with a view offset if applicable. Used to set the
- * parent injector initially.
- *
- * @returns Returns a number that is the combination of the number of LViews that we have to go up
- * to find the LView containing the parent inject AND the index of the injector within that LView.
- */
- function getParentInjectorLocation(tNode, lView) {
- if (tNode.parent && tNode.parent.injectorIndex !== -1) {
- // If we have a parent `TNode` and there is an injector associated with it we are done, because
- // the parent injector is within the current `LView`.
- return tNode.parent.injectorIndex; // ViewOffset is 0
- }
- // When parent injector location is computed it may be outside of the current view. (ie it could
- // be pointing to a declared parent location). This variable stores number of declaration parents
- // we need to walk up in order to find the parent injector location.
- let declarationViewOffset = 0;
- let parentTNode = null;
- let lViewCursor = lView;
- // The parent injector is not in the current `LView`. We will have to walk the declared parent
- // `LView` hierarchy and look for it. If we walk of the top, that means that there is no parent
- // `NodeInjector`.
- while (lViewCursor !== null) {
- // First determine the `parentTNode` location. The parent pointer differs based on `TView.type`.
- const tView = lViewCursor[TVIEW];
- const tViewType = tView.type;
- if (tViewType === 2 /* Embedded */) {
- ngDevMode &&
- assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');
- parentTNode = tView.declTNode;
- }
- else if (tViewType === 1 /* Component */) {
- // Components don't have `TView.declTNode` because each instance of component could be
- // inserted in different location, hence `TView.declTNode` is meaningless.
- parentTNode = lViewCursor[T_HOST];
- }
- else {
- ngDevMode && assertEqual(tView.type, 0 /* Root */, 'Root type expected');
- parentTNode = null;
- }
- if (parentTNode === null) {
- // If we have no parent, than we are done.
- return NO_PARENT_INJECTOR;
- }
- ngDevMode && parentTNode && assertTNodeForLView(parentTNode, lViewCursor[DECLARATION_VIEW]);
- // Every iteration of the loop requires that we go to the declared parent.
- declarationViewOffset++;
- lViewCursor = lViewCursor[DECLARATION_VIEW];
- if (parentTNode.injectorIndex !== -1) {
- // We found a NodeInjector which points to something.
- return (parentTNode.injectorIndex |
- (declarationViewOffset << 16 /* ViewOffsetShift */));
- }
- }
- return NO_PARENT_INJECTOR;
- }
- /**
- * Makes a type or an injection token public to the DI system by adding it to an
- * injector's bloom filter.
- *
- * @param di The node injector in which a directive will be added
- * @param token The type or the injection token to be made public
- */
- function diPublicInInjector(injectorIndex, tView, token) {
- bloomAdd(injectorIndex, tView, token);
- }
- /**
- * Inject static attribute value into directive constructor.
- *
- * This method is used with `factory` functions which are generated as part of
- * `defineDirective` or `defineComponent`. The method retrieves the static value
- * of an attribute. (Dynamic attributes are not supported since they are not resolved
- * at the time of injection and can change over time.)
- *
- * # Example
- * Given:
- * ```
- * @Component(...)
- * class MyComponent {
- * constructor(@Attribute('title') title: string) { ... }
- * }
- * ```
- * When instantiated with
- * ```
- * <my-component title="Hello"></my-component>
- * ```
- *
- * Then factory method generated is:
- * ```
- * MyComponent.ɵcmp = defineComponent({
- * factory: () => new MyComponent(injectAttribute('title'))
- * ...
- * })
- * ```
- *
- * @publicApi
- */
- function injectAttributeImpl(tNode, attrNameToInject) {
- ngDevMode && assertTNodeType(tNode, 12 /* AnyContainer */ | 3 /* AnyRNode */);
- ngDevMode && assertDefined(tNode, 'expecting tNode');
- if (attrNameToInject === 'class') {
- return tNode.classes;
- }
- if (attrNameToInject === 'style') {
- return tNode.styles;
- }
- const attrs = tNode.attrs;
- if (attrs) {
- const attrsLength = attrs.length;
- let i = 0;
- while (i < attrsLength) {
- const value = attrs[i];
- // If we hit a `Bindings` or `Template` marker then we are done.
- if (isNameOnlyAttributeMarker(value))
- break;
- // Skip namespaced attributes
- if (value === 0 /* NamespaceURI */) {
- // we skip the next two values
- // as namespaced attributes looks like
- // [..., AttributeMarker.NamespaceURI, 'http://someuri.com/test', 'test:exist',
- // 'existValue', ...]
- i = i + 2;
- }
- else if (typeof value === 'number') {
- // Skip to the first value of the marked attribute.
- i++;
- while (i < attrsLength && typeof attrs[i] === 'string') {
- i++;
- }
- }
- else if (value === attrNameToInject) {
- return attrs[i + 1];
- }
- else {
- i = i + 2;
- }
- }
- }
- return null;
- }
- function notFoundValueOrThrow(notFoundValue, token, flags) {
- if (flags & InjectFlags.Optional) {
- return notFoundValue;
- }
- else {
- throwProviderNotFoundError(token, 'NodeInjector');
- }
- }
- /**
- * Returns the value associated to the given token from the ModuleInjector or throws exception
- *
- * @param lView The `LView` that contains the `tNode`
- * @param token The token to look for
- * @param flags Injection flags
- * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`
- * @returns the value from the injector or throws an exception
- */
- function lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {
- if (flags & InjectFlags.Optional && notFoundValue === undefined) {
- // This must be set or the NullInjector will throw for optional deps
- notFoundValue = null;
- }
- if ((flags & (InjectFlags.Self | InjectFlags.Host)) === 0) {
- const moduleInjector = lView[INJECTOR];
- // switch to `injectInjectorOnly` implementation for module injector, since module injector
- // should not have access to Component/Directive DI scope (that may happen through
- // `directiveInject` implementation)
- const previousInjectImplementation = setInjectImplementation(undefined);
- try {
- if (moduleInjector) {
- return moduleInjector.get(token, notFoundValue, flags & InjectFlags.Optional);
- }
- else {
- return injectRootLimpMode(token, notFoundValue, flags & InjectFlags.Optional);
- }
- }
- finally {
- setInjectImplementation(previousInjectImplementation);
- }
- }
- return notFoundValueOrThrow(notFoundValue, token, flags);
- }
- /**
- * Returns the value associated to the given token from the NodeInjectors => ModuleInjector.
- *
- * Look for the injector providing the token by walking up the node injector tree and then
- * the module injector tree.
- *
- * This function patches `token` with `__NG_ELEMENT_ID__` which contains the id for the bloom
- * filter. `-1` is reserved for injecting `Injector` (implemented by `NodeInjector`)
- *
- * @param tNode The Node where the search for the injector should start
- * @param lView The `LView` that contains the `tNode`
- * @param token The token to look for
- * @param flags Injection flags
- * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`
- * @returns the value from the injector, `null` when not found, or `notFoundValue` if provided
- */
- function getOrCreateInjectable(tNode, lView, token, flags = InjectFlags.Default, notFoundValue) {
- if (tNode !== null) {
- const bloomHash = bloomHashBitOrFactory(token);
- // If the ID stored here is a function, this is a special object like ElementRef or TemplateRef
- // so just call the factory function to create it.
- if (typeof bloomHash === 'function') {
- if (!enterDI(lView, tNode, flags)) {
- // Failed to enter DI, try module injector instead. If a token is injected with the @Host
- // flag, the module injector is not searched for that token in Ivy.
- return (flags & InjectFlags.Host) ?
- notFoundValueOrThrow(notFoundValue, token, flags) :
- lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
- }
- try {
- const value = bloomHash();
- if (value == null && !(flags & InjectFlags.Optional)) {
- throwProviderNotFoundError(token);
- }
- else {
- return value;
- }
- }
- finally {
- leaveDI();
- }
- }
- else if (typeof bloomHash === 'number') {
- // A reference to the previous injector TView that was found while climbing the element
- // injector tree. This is used to know if viewProviders can be accessed on the current
- // injector.
- let previousTView = null;
- let injectorIndex = getInjectorIndex(tNode, lView);
- let parentLocation = NO_PARENT_INJECTOR;
- let hostTElementNode = flags & InjectFlags.Host ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;
- // If we should skip this injector, or if there is no injector on this node, start by
- // searching the parent injector.
- if (injectorIndex === -1 || flags & InjectFlags.SkipSelf) {
- parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) :
- lView[injectorIndex + 8 /* PARENT */];
- if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {
- injectorIndex = -1;
- }
- else {
- previousTView = lView[TVIEW];
- injectorIndex = getParentInjectorIndex(parentLocation);
- lView = getParentInjectorView(parentLocation, lView);
- }
- }
- // Traverse up the injector tree until we find a potential match or until we know there
- // *isn't* a match.
- while (injectorIndex !== -1) {
- ngDevMode && assertNodeInjector(lView, injectorIndex);
- // Check the current injector. If it matches, see if it contains token.
- const tView = lView[TVIEW];
- ngDevMode &&
- assertTNodeForLView(tView.data[injectorIndex + 8 /* TNODE */], lView);
- if (bloomHasToken(bloomHash, injectorIndex, tView.data)) {
- // At this point, we have an injector which *may* contain the token, so we step through
- // the providers and directives associated with the injector's corresponding node to get
- // the instance.
- const instance = searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode);
- if (instance !== NOT_FOUND) {
- return instance;
- }
- }
- parentLocation = lView[injectorIndex + 8 /* PARENT */];
- if (parentLocation !== NO_PARENT_INJECTOR &&
- shouldSearchParent(flags, lView[TVIEW].data[injectorIndex + 8 /* TNODE */] === hostTElementNode) &&
- bloomHasToken(bloomHash, injectorIndex, lView)) {
- // The def wasn't found anywhere on this node, so it was a false positive.
- // Traverse up the tree and continue searching.
- previousTView = tView;
- injectorIndex = getParentInjectorIndex(parentLocation);
- lView = getParentInjectorView(parentLocation, lView);
- }
- else {
- // If we should not search parent OR If the ancestor bloom filter value does not have the
- // bit corresponding to the directive we can give up on traversing up to find the specific
- // injector.
- injectorIndex = -1;
- }
- }
- }
- }
- return lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
- }
- const NOT_FOUND = {};
- function createNodeInjector() {
- return new NodeInjector(getCurrentTNode(), getLView());
- }
- function searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode) {
- const currentTView = lView[TVIEW];
- const tNode = currentTView.data[injectorIndex + 8 /* TNODE */];
- // First, we need to determine if view providers can be accessed by the starting element.
- // There are two possibilities
- const canAccessViewProviders = previousTView == null ?
- // 1) This is the first invocation `previousTView == null` which means that we are at the
- // `TNode` of where injector is starting to look. In such a case the only time we are allowed
- // to look into the ViewProviders is if:
- // - we are on a component
- // - AND the injector set `includeViewProviders` to true (implying that the token can see
- // ViewProviders because it is the Component or a Service which itself was declared in
- // ViewProviders)
- (isComponentHost(tNode) && includeViewProviders) :
- // 2) `previousTView != null` which means that we are now walking across the parent nodes.
- // In such a case we are only allowed to look into the ViewProviders if:
- // - We just crossed from child View to Parent View `previousTView != currentTView`
- // - AND the parent TNode is an Element.
- // This means that we just came from the Component's View and therefore are allowed to see
- // into the ViewProviders.
- (previousTView != currentTView && ((tNode.type & 3 /* AnyRNode */) !== 0));
- // This special case happens when there is a @host on the inject and when we are searching
- // on the host element node.
- const isHostSpecialCase = (flags & InjectFlags.Host) && hostTElementNode === tNode;
- const injectableIdx = locateDirectiveOrProvider(tNode, currentTView, token, canAccessViewProviders, isHostSpecialCase);
- if (injectableIdx !== null) {
- return getNodeInjectable(lView, currentTView, injectableIdx, tNode);
- }
- else {
- return NOT_FOUND;
- }
- }
- /**
- * Searches for the given token among the node's directives and providers.
- *
- * @param tNode TNode on which directives are present.
- * @param tView The tView we are currently processing
- * @param token Provider token or type of a directive to look for.
- * @param canAccessViewProviders Whether view providers should be considered.
- * @param isHostSpecialCase Whether the host special case applies.
- * @returns Index of a found directive or provider, or null when none found.
- */
- function locateDirectiveOrProvider(tNode, tView, token, canAccessViewProviders, isHostSpecialCase) {
- const nodeProviderIndexes = tNode.providerIndexes;
- const tInjectables = tView.data;
- const injectablesStart = nodeProviderIndexes & 1048575 /* ProvidersStartIndexMask */;
- const directivesStart = tNode.directiveStart;
- const directiveEnd = tNode.directiveEnd;
- const cptViewProvidersCount = nodeProviderIndexes >> 20 /* CptViewProvidersCountShift */;
- const startingIndex = canAccessViewProviders ? injectablesStart : injectablesStart + cptViewProvidersCount;
- // When the host special case applies, only the viewProviders and the component are visible
- const endIndex = isHostSpecialCase ? injectablesStart + cptViewProvidersCount : directiveEnd;
- for (let i = startingIndex; i < endIndex; i++) {
- const providerTokenOrDef = tInjectables[i];
- if (i < directivesStart && token === providerTokenOrDef ||
- i >= directivesStart && providerTokenOrDef.type === token) {
- return i;
- }
- }
- if (isHostSpecialCase) {
- const dirDef = tInjectables[directivesStart];
- if (dirDef && isComponentDef(dirDef) && dirDef.type === token) {
- return directivesStart;
- }
- }
- return null;
- }
- /**
- * Retrieve or instantiate the injectable from the `LView` at particular `index`.
- *
- * This function checks to see if the value has already been instantiated and if so returns the
- * cached `injectable`. Otherwise if it detects that the value is still a factory it
- * instantiates the `injectable` and caches the value.
- */
- function getNodeInjectable(lView, tView, index, tNode) {
- let value = lView[index];
- const tData = tView.data;
- if (isFactory(value)) {
- const factory = value;
- if (factory.resolving) {
- throwCyclicDependencyError(stringifyForError(tData[index]));
- }
- const previousIncludeViewProviders = setIncludeViewProviders(factory.canSeeViewProviders);
- factory.resolving = true;
- const previousInjectImplementation = factory.injectImpl ? setInjectImplementation(factory.injectImpl) : null;
- const success = enterDI(lView, tNode, InjectFlags.Default);
- ngDevMode &&
- assertEqual(success, true, 'Because flags do not contain \`SkipSelf\' we expect this to always succeed.');
- try {
- value = lView[index] = factory.factory(undefined, tData, lView, tNode);
- // This code path is hit for both directives and providers.
- // For perf reasons, we want to avoid searching for hooks on providers.
- // It does no harm to try (the hooks just won't exist), but the extra
- // checks are unnecessary and this is a hot path. So we check to see
- // if the index of the dependency is in the directive range for this
- // tNode. If it's not, we know it's a provider and skip hook registration.
- if (tView.firstCreatePass && index >= tNode.directiveStart) {
- ngDevMode && assertDirectiveDef(tData[index]);
- registerPreOrderHooks(index, tData[index], tView);
- }
- }
- finally {
- previousInjectImplementation !== null &&
- setInjectImplementation(previousInjectImplementation);
- setIncludeViewProviders(previousIncludeViewProviders);
- factory.resolving = false;
- leaveDI();
- }
- }
- return value;
- }
- /**
- * Returns the bit in an injector's bloom filter that should be used to determine whether or not
- * the directive might be provided by the injector.
- *
- * When a directive is public, it is added to the bloom filter and given a unique ID that can be
- * retrieved on the Type. When the directive isn't public or the token is not a directive `null`
- * is returned as the node injector can not possibly provide that token.
- *
- * @param token the injection token
- * @returns the matching bit to check in the bloom filter or `null` if the token is not known.
- * When the returned value is negative then it represents special values such as `Injector`.
- */
- function bloomHashBitOrFactory(token) {
- ngDevMode && assertDefined(token, 'token must be defined');
- if (typeof token === 'string') {
- return token.charCodeAt(0) || 0;
- }
- const tokenId =
- // First check with `hasOwnProperty` so we don't get an inherited ID.
- token.hasOwnProperty(NG_ELEMENT_ID) ? token[NG_ELEMENT_ID] : undefined;
- // Negative token IDs are used for special objects such as `Injector`
- if (typeof tokenId === 'number') {
- if (tokenId >= 0) {
- return tokenId & BLOOM_MASK;
- }
- else {
- ngDevMode &&
- assertEqual(tokenId, -1 /* Injector */, 'Expecting to get Special Injector Id');
- return createNodeInjector;
- }
- }
- else {
- return tokenId;
- }
- }
- function bloomHasToken(bloomHash, injectorIndex, injectorView) {
- // Create a mask that targets the specific bit associated with the directive we're looking for.
- // JS bit operations are 32 bits, so this will be a number between 2^0 and 2^31, corresponding
- // to bit positions 0 - 31 in a 32 bit integer.
- const mask = 1 << bloomHash;
- const b7 = bloomHash & 0x80;
- const b6 = bloomHash & 0x40;
- const b5 = bloomHash & 0x20;
- // Our bloom filter size is 256 bits, which is eight 32-bit bloom filter buckets:
- // bf0 = [0 - 31], bf1 = [32 - 63], bf2 = [64 - 95], bf3 = [96 - 127], etc.
- // Get the bloom filter value from the appropriate bucket based on the directive's bloomBit.
- let value;
- if (b7) {
- value = b6 ? (b5 ? injectorView[injectorIndex + 7] : injectorView[injectorIndex + 6]) :
- (b5 ? injectorView[injectorIndex + 5] : injectorView[injectorIndex + 4]);
- }
- else {
- value = b6 ? (b5 ? injectorView[injectorIndex + 3] : injectorView[injectorIndex + 2]) :
- (b5 ? injectorView[injectorIndex + 1] : injectorView[injectorIndex]);
- }
- // If the bloom filter value has the bit corresponding to the directive's bloomBit flipped on,
- // this injector is a potential match.
- return !!(value & mask);
- }
- /** Returns true if flags prevent parent injector from being searched for tokens */
- function shouldSearchParent(flags, isFirstHostTNode) {
- return !(flags & InjectFlags.Self) && !(flags & InjectFlags.Host && isFirstHostTNode);
- }
- class NodeInjector {
- constructor(_tNode, _lView) {
- this._tNode = _tNode;
- this._lView = _lView;
- }
- get(token, notFoundValue) {
- return getOrCreateInjectable(this._tNode, this._lView, token, undefined, notFoundValue);
- }
- }
- /**
- * @codeGenApi
- */
- function ɵɵgetFactoryOf(type) {
- const typeAny = type;
- if (isForwardRef(type)) {
- return (() => {
- const factory = ɵɵgetFactoryOf(resolveForwardRef(typeAny));
- return factory ? factory() : null;
- });
- }
- let factory = getFactoryDef(typeAny);
- if (factory === null) {
- const injectorDef = getInjectorDef(typeAny);
- factory = injectorDef && injectorDef.factory;
- }
- return factory || null;
- }
- /**
- * @codeGenApi
- */
- function ɵɵgetInheritedFactory(type) {
- return noSideEffects(() => {
- const ownConstructor = type.prototype.constructor;
- const ownFactory = ownConstructor[NG_FACTORY_DEF] || ɵɵgetFactoryOf(ownConstructor);
- const objectPrototype = Object.prototype;
- let parent = Object.getPrototypeOf(type.prototype).constructor;
- // Go up the prototype until we hit `Object`.
- while (parent && parent !== objectPrototype) {
- const factory = parent[NG_FACTORY_DEF] || ɵɵgetFactoryOf(parent);
- // If we hit something that has a factory and the factory isn't the same as the type,
- // we've found the inherited factory. Note the check that the factory isn't the type's
- // own factory is redundant in most cases, but if the user has custom decorators on the
- // class, this lookup will start one level down in the prototype chain, causing us to
- // find the own factory first and potentially triggering an infinite loop downstream.
- if (factory && factory !== ownFactory) {
- return factory;
- }
- parent = Object.getPrototypeOf(parent);
- }
- // There is no factory defined. Either this was improper usage of inheritance
- // (no Angular decorator on the superclass) or there is no constructor at all
- // in the inheritance chain. Since the two cases cannot be distinguished, the
- // latter has to be assumed.
- return t => new t();
- });
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Facade for the attribute injection from DI.
- *
- * @codeGenApi
- */
- function ɵɵinjectAttribute(attrNameToInject) {
- return injectAttributeImpl(getCurrentTNode(), attrNameToInject);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ANNOTATIONS = '__annotations__';
- const PARAMETERS = '__parameters__';
- const PROP_METADATA = '__prop__metadata__';
- /**
- * @suppress {globalThis}
- */
- function makeDecorator(name, props, parentClass, additionalProcessing, typeFn) {
- return noSideEffects(() => {
- const metaCtor = makeMetadataCtor(props);
- function DecoratorFactory(...args) {
- if (this instanceof DecoratorFactory) {
- metaCtor.call(this, ...args);
- return this;
- }
- const annotationInstance = new DecoratorFactory(...args);
- return function TypeDecorator(cls) {
- if (typeFn)
- typeFn(cls, ...args);
- // Use of Object.defineProperty is important since it creates non-enumerable property which
- // prevents the property is copied during subclassing.
- const annotations = cls.hasOwnProperty(ANNOTATIONS) ?
- cls[ANNOTATIONS] :
- Object.defineProperty(cls, ANNOTATIONS, { value: [] })[ANNOTATIONS];
- annotations.push(annotationInstance);
- if (additionalProcessing)
- additionalProcessing(cls);
- return cls;
- };
- }
- if (parentClass) {
- DecoratorFactory.prototype = Object.create(parentClass.prototype);
- }
- DecoratorFactory.prototype.ngMetadataName = name;
- DecoratorFactory.annotationCls = DecoratorFactory;
- return DecoratorFactory;
- });
- }
- function makeMetadataCtor(props) {
- return function ctor(...args) {
- if (props) {
- const values = props(...args);
- for (const propName in values) {
- this[propName] = values[propName];
- }
- }
- };
- }
- function makeParamDecorator(name, props, parentClass) {
- return noSideEffects(() => {
- const metaCtor = makeMetadataCtor(props);
- function ParamDecoratorFactory(...args) {
- if (this instanceof ParamDecoratorFactory) {
- metaCtor.apply(this, args);
- return this;
- }
- const annotationInstance = new ParamDecoratorFactory(...args);
- ParamDecorator.annotation = annotationInstance;
- return ParamDecorator;
- function ParamDecorator(cls, unusedKey, index) {
- // Use of Object.defineProperty is important since it creates non-enumerable property which
- // prevents the property is copied during subclassing.
- const parameters = cls.hasOwnProperty(PARAMETERS) ?
- cls[PARAMETERS] :
- Object.defineProperty(cls, PARAMETERS, { value: [] })[PARAMETERS];
- // there might be gaps if some in between parameters do not have annotations.
- // we pad with nulls.
- while (parameters.length <= index) {
- parameters.push(null);
- }
- (parameters[index] = parameters[index] || []).push(annotationInstance);
- return cls;
- }
- }
- if (parentClass) {
- ParamDecoratorFactory.prototype = Object.create(parentClass.prototype);
- }
- ParamDecoratorFactory.prototype.ngMetadataName = name;
- ParamDecoratorFactory.annotationCls = ParamDecoratorFactory;
- return ParamDecoratorFactory;
- });
- }
- function makePropDecorator(name, props, parentClass, additionalProcessing) {
- return noSideEffects(() => {
- const metaCtor = makeMetadataCtor(props);
- function PropDecoratorFactory(...args) {
- if (this instanceof PropDecoratorFactory) {
- metaCtor.apply(this, args);
- return this;
- }
- const decoratorInstance = new PropDecoratorFactory(...args);
- function PropDecorator(target, name) {
- const constructor = target.constructor;
- // Use of Object.defineProperty is important because it creates a non-enumerable property
- // which prevents the property from being copied during subclassing.
- const meta = constructor.hasOwnProperty(PROP_METADATA) ?
- constructor[PROP_METADATA] :
- Object.defineProperty(constructor, PROP_METADATA, { value: {} })[PROP_METADATA];
- meta[name] = meta.hasOwnProperty(name) && meta[name] || [];
- meta[name].unshift(decoratorInstance);
- if (additionalProcessing)
- additionalProcessing(target, name, ...args);
- }
- return PropDecorator;
- }
- if (parentClass) {
- PropDecoratorFactory.prototype = Object.create(parentClass.prototype);
- }
- PropDecoratorFactory.prototype.ngMetadataName = name;
- PropDecoratorFactory.annotationCls = PropDecoratorFactory;
- return PropDecoratorFactory;
- });
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function CREATE_ATTRIBUTE_DECORATOR__PRE_R3__() {
- return makeParamDecorator('Attribute', (attributeName) => ({ attributeName }));
- }
- function CREATE_ATTRIBUTE_DECORATOR__POST_R3__() {
- return makeParamDecorator('Attribute', (attributeName) => ({ attributeName, __NG_ELEMENT_ID__: () => ɵɵinjectAttribute(attributeName) }));
- }
- const CREATE_ATTRIBUTE_DECORATOR_IMPL = CREATE_ATTRIBUTE_DECORATOR__POST_R3__;
- /**
- * Attribute decorator and metadata.
- *
- * @Annotation
- * @publicApi
- */
- const Attribute = CREATE_ATTRIBUTE_DECORATOR_IMPL();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Creates a token that can be used in a DI Provider.
- *
- * Use an `InjectionToken` whenever the type you are injecting is not reified (does not have a
- * runtime representation) such as when injecting an interface, callable type, array or
- * parameterized type.
- *
- * `InjectionToken` is parameterized on `T` which is the type of object which will be returned by
- * the `Injector`. This provides additional level of type safety.
- *
- * ```
- * interface MyInterface {...}
- * var myInterface = injector.get(new InjectionToken<MyInterface>('SomeToken'));
- * // myInterface is inferred to be MyInterface.
- * ```
- *
- * When creating an `InjectionToken`, you can optionally specify a factory function which returns
- * (possibly by creating) a default value of the parameterized type `T`. This sets up the
- * `InjectionToken` using this factory as a provider as if it was defined explicitly in the
- * application's root injector. If the factory function, which takes zero arguments, needs to inject
- * dependencies, it can do so using the `inject` function. See below for an example.
- *
- * Additionally, if a `factory` is specified you can also specify the `providedIn` option, which
- * overrides the above behavior and marks the token as belonging to a particular `@NgModule`. As
- * mentioned above, `'root'` is the default value for `providedIn`.
- *
- * @usageNotes
- * ### Basic Example
- *
- * ### Plain InjectionToken
- *
- * {@example core/di/ts/injector_spec.ts region='InjectionToken'}
- *
- * ### Tree-shakable InjectionToken
- *
- * {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}
- *
- *
- * @publicApi
- */
- class InjectionToken {
- constructor(_desc, options) {
- this._desc = _desc;
- /** @internal */
- this.ngMetadataName = 'InjectionToken';
- this.ɵprov = undefined;
- if (typeof options == 'number') {
- (typeof ngDevMode === 'undefined' || ngDevMode) &&
- assertLessThan(options, 0, 'Only negative numbers are supported here');
- // This is a special hack to assign __NG_ELEMENT_ID__ to this instance.
- // See `InjectorMarkers`
- this.__NG_ELEMENT_ID__ = options;
- }
- else if (options !== undefined) {
- this.ɵprov = ɵɵdefineInjectable({
- token: this,
- providedIn: options.providedIn || 'root',
- factory: options.factory,
- });
- }
- }
- toString() {
- return `InjectionToken ${this._desc}`;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * A DI token that you can use to create a virtual [provider](guide/glossary#provider)
- * that will populate the `entryComponents` field of components and NgModules
- * based on its `useValue` property value.
- * All components that are referenced in the `useValue` value (either directly
- * or in a nested array or map) are added to the `entryComponents` property.
- *
- * @usageNotes
- *
- * The following example shows how the router can populate the `entryComponents`
- * field of an NgModule based on a router configuration that refers
- * to components.
- *
- * ```typescript
- * // helper function inside the router
- * function provideRoutes(routes) {
- * return [
- * {provide: ROUTES, useValue: routes},
- * {provide: ANALYZE_FOR_ENTRY_COMPONENTS, useValue: routes, multi: true}
- * ];
- * }
- *
- * // user code
- * let routes = [
- * {path: '/root', component: RootComp},
- * {path: '/teams', component: TeamsComp}
- * ];
- *
- * @NgModule({
- * providers: [provideRoutes(routes)]
- * })
- * class ModuleWithRoutes {}
- * ```
- *
- * @publicApi
- * @deprecated Since 9.0.0. With Ivy, this property is no longer necessary.
- */
- const ANALYZE_FOR_ENTRY_COMPONENTS = new InjectionToken('AnalyzeForEntryComponents');
- /**
- * Base class for query metadata.
- *
- * @see `ContentChildren`.
- * @see `ContentChild`.
- * @see `ViewChildren`.
- * @see `ViewChild`.
- *
- * @publicApi
- */
- class Query {
- }
- const ɵ0$1 = (selector, data = {}) => (Object.assign({ selector, first: false, isViewQuery: false, descendants: false }, data));
- /**
- * ContentChildren decorator and metadata.
- *
- *
- * @Annotation
- * @publicApi
- */
- const ContentChildren = makePropDecorator('ContentChildren', ɵ0$1, Query);
- const ɵ1 = (selector, data = {}) => (Object.assign({ selector, first: true, isViewQuery: false, descendants: true }, data));
- /**
- * ContentChild decorator and metadata.
- *
- *
- * @Annotation
- *
- * @publicApi
- */
- const ContentChild = makePropDecorator('ContentChild', ɵ1, Query);
- const ɵ2 = (selector, data = {}) => (Object.assign({ selector, first: false, isViewQuery: true, descendants: true }, data));
- /**
- * ViewChildren decorator and metadata.
- *
- * @Annotation
- * @publicApi
- */
- const ViewChildren = makePropDecorator('ViewChildren', ɵ2, Query);
- const ɵ3 = (selector, data) => (Object.assign({ selector, first: true, isViewQuery: true, descendants: true }, data));
- /**
- * ViewChild decorator and metadata.
- *
- * @Annotation
- * @publicApi
- */
- const ViewChild = makePropDecorator('ViewChild', ɵ3, Query);
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- var R3ResolvedDependencyType;
- (function (R3ResolvedDependencyType) {
- R3ResolvedDependencyType[R3ResolvedDependencyType["Token"] = 0] = "Token";
- R3ResolvedDependencyType[R3ResolvedDependencyType["Attribute"] = 1] = "Attribute";
- R3ResolvedDependencyType[R3ResolvedDependencyType["ChangeDetectorRef"] = 2] = "ChangeDetectorRef";
- R3ResolvedDependencyType[R3ResolvedDependencyType["Invalid"] = 3] = "Invalid";
- })(R3ResolvedDependencyType || (R3ResolvedDependencyType = {}));
- var R3FactoryTarget;
- (function (R3FactoryTarget) {
- R3FactoryTarget[R3FactoryTarget["Directive"] = 0] = "Directive";
- R3FactoryTarget[R3FactoryTarget["Component"] = 1] = "Component";
- R3FactoryTarget[R3FactoryTarget["Injectable"] = 2] = "Injectable";
- R3FactoryTarget[R3FactoryTarget["Pipe"] = 3] = "Pipe";
- R3FactoryTarget[R3FactoryTarget["NgModule"] = 4] = "NgModule";
- })(R3FactoryTarget || (R3FactoryTarget = {}));
- var ViewEncapsulation$1;
- (function (ViewEncapsulation) {
- ViewEncapsulation[ViewEncapsulation["Emulated"] = 0] = "Emulated";
- // Historically the 1 value was for `Native` encapsulation which has been removed as of v11.
- ViewEncapsulation[ViewEncapsulation["None"] = 2] = "None";
- ViewEncapsulation[ViewEncapsulation["ShadowDom"] = 3] = "ShadowDom";
- })(ViewEncapsulation$1 || (ViewEncapsulation$1 = {}));
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function getCompilerFacade() {
- const globalNg = _global['ng'];
- if (!globalNg || !globalNg.ɵcompilerFacade) {
- throw new Error(`Angular JIT compilation failed: '@angular/compiler' not loaded!\n` +
- ` - JIT compilation is discouraged for production use-cases! Consider AOT mode instead.\n` +
- ` - Did you bootstrap using '@angular/platform-browser-dynamic' or '@angular/platform-server'?\n` +
- ` - Alternatively provide the compiler with 'import "@angular/compiler";' before bootstrapping.`);
- }
- return globalNg.ɵcompilerFacade;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @description
- *
- * Represents a type that a Component or other object is instances of.
- *
- * An example of a `Type` is `MyCustomComponent` class, which in JavaScript is represented by
- * the `MyCustomComponent` constructor function.
- *
- * @publicApi
- */
- const Type = Function;
- function isType(v) {
- return typeof v === 'function';
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Equivalent to ES6 spread, add each item to an array.
- *
- * @param items The items to add
- * @param arr The array to which you want to add the items
- */
- function addAllToArray(items, arr) {
- for (let i = 0; i < items.length; i++) {
- arr.push(items[i]);
- }
- }
- /**
- * Flattens an array.
- */
- function flatten(list, dst) {
- if (dst === undefined)
- dst = list;
- for (let i = 0; i < list.length; i++) {
- let item = list[i];
- if (Array.isArray(item)) {
- // we need to inline it.
- if (dst === list) {
- // Our assumption that the list was already flat was wrong and
- // we need to clone flat since we need to write to it.
- dst = list.slice(0, i);
- }
- flatten(item, dst);
- }
- else if (dst !== list) {
- dst.push(item);
- }
- }
- return dst;
- }
- function deepForEach(input, fn) {
- input.forEach(value => Array.isArray(value) ? deepForEach(value, fn) : fn(value));
- }
- function addToArray(arr, index, value) {
- // perf: array.push is faster than array.splice!
- if (index >= arr.length) {
- arr.push(value);
- }
- else {
- arr.splice(index, 0, value);
- }
- }
- function removeFromArray(arr, index) {
- // perf: array.pop is faster than array.splice!
- if (index >= arr.length - 1) {
- return arr.pop();
- }
- else {
- return arr.splice(index, 1)[0];
- }
- }
- function newArray(size, value) {
- const list = [];
- for (let i = 0; i < size; i++) {
- list.push(value);
- }
- return list;
- }
- /**
- * Remove item from array (Same as `Array.splice()` but faster.)
- *
- * `Array.splice()` is not as fast because it has to allocate an array for the elements which were
- * removed. This causes memory pressure and slows down code when most of the time we don't
- * care about the deleted items array.
- *
- * https://jsperf.com/fast-array-splice (About 20x faster)
- *
- * @param array Array to splice
- * @param index Index of element in array to remove.
- * @param count Number of items to remove.
- */
- function arraySplice(array, index, count) {
- const length = array.length - count;
- while (index < length) {
- array[index] = array[index + count];
- index++;
- }
- while (count--) {
- array.pop(); // shrink the array
- }
- }
- /**
- * Same as `Array.splice(index, 0, value)` but faster.
- *
- * `Array.splice()` is not fast because it has to allocate an array for the elements which were
- * removed. This causes memory pressure and slows down code when most of the time we don't
- * care about the deleted items array.
- *
- * @param array Array to splice.
- * @param index Index in array where the `value` should be added.
- * @param value Value to add to array.
- */
- function arrayInsert(array, index, value) {
- ngDevMode && assertLessThanOrEqual(index, array.length, 'Can\'t insert past array end.');
- let end = array.length;
- while (end > index) {
- const previousEnd = end - 1;
- array[end] = array[previousEnd];
- end = previousEnd;
- }
- array[index] = value;
- }
- /**
- * Same as `Array.splice2(index, 0, value1, value2)` but faster.
- *
- * `Array.splice()` is not fast because it has to allocate an array for the elements which were
- * removed. This causes memory pressure and slows down code when most of the time we don't
- * care about the deleted items array.
- *
- * @param array Array to splice.
- * @param index Index in array where the `value` should be added.
- * @param value1 Value to add to array.
- * @param value2 Value to add to array.
- */
- function arrayInsert2(array, index, value1, value2) {
- ngDevMode && assertLessThanOrEqual(index, array.length, 'Can\'t insert past array end.');
- let end = array.length;
- if (end == index) {
- // inserting at the end.
- array.push(value1, value2);
- }
- else if (end === 1) {
- // corner case when we have less items in array than we have items to insert.
- array.push(value2, array[0]);
- array[0] = value1;
- }
- else {
- end--;
- array.push(array[end - 1], array[end]);
- while (end > index) {
- const previousEnd = end - 2;
- array[end] = array[previousEnd];
- end--;
- }
- array[index] = value1;
- array[index + 1] = value2;
- }
- }
- /**
- * Insert a `value` into an `array` so that the array remains sorted.
- *
- * NOTE:
- * - Duplicates are not allowed, and are ignored.
- * - This uses binary search algorithm for fast inserts.
- *
- * @param array A sorted array to insert into.
- * @param value The value to insert.
- * @returns index of the inserted value.
- */
- function arrayInsertSorted(array, value) {
- let index = arrayIndexOfSorted(array, value);
- if (index < 0) {
- // if we did not find it insert it.
- index = ~index;
- arrayInsert(array, index, value);
- }
- return index;
- }
- /**
- * Remove `value` from a sorted `array`.
- *
- * NOTE:
- * - This uses binary search algorithm for fast removals.
- *
- * @param array A sorted array to remove from.
- * @param value The value to remove.
- * @returns index of the removed value.
- * - positive index if value found and removed.
- * - negative index if value not found. (`~index` to get the value where it should have been
- * inserted)
- */
- function arrayRemoveSorted(array, value) {
- const index = arrayIndexOfSorted(array, value);
- if (index >= 0) {
- arraySplice(array, index, 1);
- }
- return index;
- }
- /**
- * Get an index of an `value` in a sorted `array`.
- *
- * NOTE:
- * - This uses binary search algorithm for fast removals.
- *
- * @param array A sorted array to binary search.
- * @param value The value to look for.
- * @returns index of the value.
- * - positive index if value found.
- * - negative index if value not found. (`~index` to get the value where it should have been
- * located)
- */
- function arrayIndexOfSorted(array, value) {
- return _arrayIndexOfSorted(array, value, 0);
- }
- /**
- * Set a `value` for a `key`.
- *
- * @param keyValueArray to modify.
- * @param key The key to locate or create.
- * @param value The value to set for a `key`.
- * @returns index (always even) of where the value vas set.
- */
- function keyValueArraySet(keyValueArray, key, value) {
- let index = keyValueArrayIndexOf(keyValueArray, key);
- if (index >= 0) {
- // if we found it set it.
- keyValueArray[index | 1] = value;
- }
- else {
- index = ~index;
- arrayInsert2(keyValueArray, index, key, value);
- }
- return index;
- }
- /**
- * Retrieve a `value` for a `key` (on `undefined` if not found.)
- *
- * @param keyValueArray to search.
- * @param key The key to locate.
- * @return The `value` stored at the `key` location or `undefined if not found.
- */
- function keyValueArrayGet(keyValueArray, key) {
- const index = keyValueArrayIndexOf(keyValueArray, key);
- if (index >= 0) {
- // if we found it retrieve it.
- return keyValueArray[index | 1];
- }
- return undefined;
- }
- /**
- * Retrieve a `key` index value in the array or `-1` if not found.
- *
- * @param keyValueArray to search.
- * @param key The key to locate.
- * @returns index of where the key is (or should have been.)
- * - positive (even) index if key found.
- * - negative index if key not found. (`~index` (even) to get the index where it should have
- * been inserted.)
- */
- function keyValueArrayIndexOf(keyValueArray, key) {
- return _arrayIndexOfSorted(keyValueArray, key, 1);
- }
- /**
- * Delete a `key` (and `value`) from the `KeyValueArray`.
- *
- * @param keyValueArray to modify.
- * @param key The key to locate or delete (if exist).
- * @returns index of where the key was (or should have been.)
- * - positive (even) index if key found and deleted.
- * - negative index if key not found. (`~index` (even) to get the index where it should have
- * been.)
- */
- function keyValueArrayDelete(keyValueArray, key) {
- const index = keyValueArrayIndexOf(keyValueArray, key);
- if (index >= 0) {
- // if we found it remove it.
- arraySplice(keyValueArray, index, 2);
- }
- return index;
- }
- /**
- * INTERNAL: Get an index of an `value` in a sorted `array` by grouping search by `shift`.
- *
- * NOTE:
- * - This uses binary search algorithm for fast removals.
- *
- * @param array A sorted array to binary search.
- * @param value The value to look for.
- * @param shift grouping shift.
- * - `0` means look at every location
- * - `1` means only look at every other (even) location (the odd locations are to be ignored as
- * they are values.)
- * @returns index of the value.
- * - positive index if value found.
- * - negative index if value not found. (`~index` to get the value where it should have been
- * inserted)
- */
- function _arrayIndexOfSorted(array, value, shift) {
- ngDevMode && assertEqual(Array.isArray(array), true, 'Expecting an array');
- let start = 0;
- let end = array.length >> shift;
- while (end !== start) {
- const middle = start + ((end - start) >> 1); // find the middle.
- const current = array[middle << shift];
- if (value === current) {
- return (middle << shift);
- }
- else if (current > value) {
- end = middle;
- }
- else {
- start = middle + 1; // We already searched middle so make it non-inclusive by adding 1
- }
- }
- return ~(end << shift);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /*
- * #########################
- * Attention: These Regular expressions have to hold even if the code is minified!
- * ##########################
- */
- /**
- * Regular expression that detects pass-through constructors for ES5 output. This Regex
- * intends to capture the common delegation pattern emitted by TypeScript and Babel. Also
- * it intends to capture the pattern where existing constructors have been downleveled from
- * ES2015 to ES5 using TypeScript w/ downlevel iteration. e.g.
- *
- * ```
- * function MyClass() {
- * var _this = _super.apply(this, arguments) || this;
- * ```
- *
- * ```
- * function MyClass() {
- * var _this = _super.apply(this, __spread(arguments)) || this;
- * ```
- *
- * More details can be found in: https://github.com/angular/angular/issues/38453.
- */
- const ES5_DELEGATE_CTOR = /^function\s+\S+\(\)\s*{[\s\S]+\.apply\(this,\s*(arguments|[^()]+\(arguments\))\)/;
- /** Regular expression that detects ES2015 classes which extend from other classes. */
- const ES2015_INHERITED_CLASS = /^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{/;
- /**
- * Regular expression that detects ES2015 classes which extend from other classes and
- * have an explicit constructor defined.
- */
- const ES2015_INHERITED_CLASS_WITH_CTOR = /^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{[\s\S]*constructor\s*\(/;
- /**
- * Regular expression that detects ES2015 classes which extend from other classes
- * and inherit a constructor.
- */
- const ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR = /^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{[\s\S]*constructor\s*\(\)\s*{\s*super\(\.\.\.arguments\)/;
- /**
- * Determine whether a stringified type is a class which delegates its constructor
- * to its parent.
- *
- * This is not trivial since compiled code can actually contain a constructor function
- * even if the original source code did not. For instance, when the child class contains
- * an initialized instance property.
- */
- function isDelegateCtor(typeStr) {
- return ES5_DELEGATE_CTOR.test(typeStr) ||
- ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR.test(typeStr) ||
- (ES2015_INHERITED_CLASS.test(typeStr) && !ES2015_INHERITED_CLASS_WITH_CTOR.test(typeStr));
- }
- class ReflectionCapabilities {
- constructor(reflect) {
- this._reflect = reflect || _global['Reflect'];
- }
- isReflectionEnabled() {
- return true;
- }
- factory(t) {
- return (...args) => new t(...args);
- }
- /** @internal */
- _zipTypesAndAnnotations(paramTypes, paramAnnotations) {
- let result;
- if (typeof paramTypes === 'undefined') {
- result = newArray(paramAnnotations.length);
- }
- else {
- result = newArray(paramTypes.length);
- }
- for (let i = 0; i < result.length; i++) {
- // TS outputs Object for parameters without types, while Traceur omits
- // the annotations. For now we preserve the Traceur behavior to aid
- // migration, but this can be revisited.
- if (typeof paramTypes === 'undefined') {
- result[i] = [];
- }
- else if (paramTypes[i] && paramTypes[i] != Object) {
- result[i] = [paramTypes[i]];
- }
- else {
- result[i] = [];
- }
- if (paramAnnotations && paramAnnotations[i] != null) {
- result[i] = result[i].concat(paramAnnotations[i]);
- }
- }
- return result;
- }
- _ownParameters(type, parentCtor) {
- const typeStr = type.toString();
- // If we have no decorators, we only have function.length as metadata.
- // In that case, to detect whether a child class declared an own constructor or not,
- // we need to look inside of that constructor to check whether it is
- // just calling the parent.
- // This also helps to work around for https://github.com/Microsoft/TypeScript/issues/12439
- // that sets 'design:paramtypes' to []
- // if a class inherits from another class but has no ctor declared itself.
- if (isDelegateCtor(typeStr)) {
- return null;
- }
- // Prefer the direct API.
- if (type.parameters && type.parameters !== parentCtor.parameters) {
- return type.parameters;
- }
- // API of tsickle for lowering decorators to properties on the class.
- const tsickleCtorParams = type.ctorParameters;
- if (tsickleCtorParams && tsickleCtorParams !== parentCtor.ctorParameters) {
- // Newer tsickle uses a function closure
- // Retain the non-function case for compatibility with older tsickle
- const ctorParameters = typeof tsickleCtorParams === 'function' ? tsickleCtorParams() : tsickleCtorParams;
- const paramTypes = ctorParameters.map((ctorParam) => ctorParam && ctorParam.type);
- const paramAnnotations = ctorParameters.map((ctorParam) => ctorParam && convertTsickleDecoratorIntoMetadata(ctorParam.decorators));
- return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);
- }
- // API for metadata created by invoking the decorators.
- const paramAnnotations = type.hasOwnProperty(PARAMETERS) && type[PARAMETERS];
- const paramTypes = this._reflect && this._reflect.getOwnMetadata &&
- this._reflect.getOwnMetadata('design:paramtypes', type);
- if (paramTypes || paramAnnotations) {
- return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);
- }
- // If a class has no decorators, at least create metadata
- // based on function.length.
- // Note: We know that this is a real constructor as we checked
- // the content of the constructor above.
- return newArray(type.length);
- }
- parameters(type) {
- // Note: only report metadata if we have at least one class decorator
- // to stay in sync with the static reflector.
- if (!isType(type)) {
- return [];
- }
- const parentCtor = getParentCtor(type);
- let parameters = this._ownParameters(type, parentCtor);
- if (!parameters && parentCtor !== Object) {
- parameters = this.parameters(parentCtor);
- }
- return parameters || [];
- }
- _ownAnnotations(typeOrFunc, parentCtor) {
- // Prefer the direct API.
- if (typeOrFunc.annotations && typeOrFunc.annotations !== parentCtor.annotations) {
- let annotations = typeOrFunc.annotations;
- if (typeof annotations === 'function' && annotations.annotations) {
- annotations = annotations.annotations;
- }
- return annotations;
- }
- // API of tsickle for lowering decorators to properties on the class.
- if (typeOrFunc.decorators && typeOrFunc.decorators !== parentCtor.decorators) {
- return convertTsickleDecoratorIntoMetadata(typeOrFunc.decorators);
- }
- // API for metadata created by invoking the decorators.
- if (typeOrFunc.hasOwnProperty(ANNOTATIONS)) {
- return typeOrFunc[ANNOTATIONS];
- }
- return null;
- }
- annotations(typeOrFunc) {
- if (!isType(typeOrFunc)) {
- return [];
- }
- const parentCtor = getParentCtor(typeOrFunc);
- const ownAnnotations = this._ownAnnotations(typeOrFunc, parentCtor) || [];
- const parentAnnotations = parentCtor !== Object ? this.annotations(parentCtor) : [];
- return parentAnnotations.concat(ownAnnotations);
- }
- _ownPropMetadata(typeOrFunc, parentCtor) {
- // Prefer the direct API.
- if (typeOrFunc.propMetadata &&
- typeOrFunc.propMetadata !== parentCtor.propMetadata) {
- let propMetadata = typeOrFunc.propMetadata;
- if (typeof propMetadata === 'function' && propMetadata.propMetadata) {
- propMetadata = propMetadata.propMetadata;
- }
- return propMetadata;
- }
- // API of tsickle for lowering decorators to properties on the class.
- if (typeOrFunc.propDecorators &&
- typeOrFunc.propDecorators !== parentCtor.propDecorators) {
- const propDecorators = typeOrFunc.propDecorators;
- const propMetadata = {};
- Object.keys(propDecorators).forEach(prop => {
- propMetadata[prop] = convertTsickleDecoratorIntoMetadata(propDecorators[prop]);
- });
- return propMetadata;
- }
- // API for metadata created by invoking the decorators.
- if (typeOrFunc.hasOwnProperty(PROP_METADATA)) {
- return typeOrFunc[PROP_METADATA];
- }
- return null;
- }
- propMetadata(typeOrFunc) {
- if (!isType(typeOrFunc)) {
- return {};
- }
- const parentCtor = getParentCtor(typeOrFunc);
- const propMetadata = {};
- if (parentCtor !== Object) {
- const parentPropMetadata = this.propMetadata(parentCtor);
- Object.keys(parentPropMetadata).forEach((propName) => {
- propMetadata[propName] = parentPropMetadata[propName];
- });
- }
- const ownPropMetadata = this._ownPropMetadata(typeOrFunc, parentCtor);
- if (ownPropMetadata) {
- Object.keys(ownPropMetadata).forEach((propName) => {
- const decorators = [];
- if (propMetadata.hasOwnProperty(propName)) {
- decorators.push(...propMetadata[propName]);
- }
- decorators.push(...ownPropMetadata[propName]);
- propMetadata[propName] = decorators;
- });
- }
- return propMetadata;
- }
- ownPropMetadata(typeOrFunc) {
- if (!isType(typeOrFunc)) {
- return {};
- }
- return this._ownPropMetadata(typeOrFunc, getParentCtor(typeOrFunc)) || {};
- }
- hasLifecycleHook(type, lcProperty) {
- return type instanceof Type && lcProperty in type.prototype;
- }
- guards(type) {
- return {};
- }
- getter(name) {
- return new Function('o', 'return o.' + name + ';');
- }
- setter(name) {
- return new Function('o', 'v', 'return o.' + name + ' = v;');
- }
- method(name) {
- const functionBody = `if (!o.${name}) throw new Error('"${name}" is undefined');
- return o.${name}.apply(o, args);`;
- return new Function('o', 'args', functionBody);
- }
- // There is not a concept of import uri in Js, but this is useful in developing Dart applications.
- importUri(type) {
- // StaticSymbol
- if (typeof type === 'object' && type['filePath']) {
- return type['filePath'];
- }
- // Runtime type
- return `./${stringify(type)}`;
- }
- resourceUri(type) {
- return `./${stringify(type)}`;
- }
- resolveIdentifier(name, moduleUrl, members, runtime) {
- return runtime;
- }
- resolveEnum(enumIdentifier, name) {
- return enumIdentifier[name];
- }
- }
- function convertTsickleDecoratorIntoMetadata(decoratorInvocations) {
- if (!decoratorInvocations) {
- return [];
- }
- return decoratorInvocations.map(decoratorInvocation => {
- const decoratorType = decoratorInvocation.type;
- const annotationCls = decoratorType.annotationCls;
- const annotationArgs = decoratorInvocation.args ? decoratorInvocation.args : [];
- return new annotationCls(...annotationArgs);
- });
- }
- function getParentCtor(ctor) {
- const parentProto = ctor.prototype ? Object.getPrototypeOf(ctor.prototype) : null;
- const parentCtor = parentProto ? parentProto.constructor : null;
- // Note: We always use `Object` as the null value
- // to simplify checking later on.
- return parentCtor || Object;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ɵ0$2 = (token) => ({ token });
- /**
- * Inject decorator and metadata.
- *
- * @Annotation
- * @publicApi
- */
- const Inject = makeParamDecorator('Inject', ɵ0$2);
- /**
- * Optional decorator and metadata.
- *
- * @Annotation
- * @publicApi
- */
- const Optional = makeParamDecorator('Optional');
- /**
- * Self decorator and metadata.
- *
- * @Annotation
- * @publicApi
- */
- const Self = makeParamDecorator('Self');
- /**
- * `SkipSelf` decorator and metadata.
- *
- * @Annotation
- * @publicApi
- */
- const SkipSelf = makeParamDecorator('SkipSelf');
- /**
- * Host decorator and metadata.
- *
- * @Annotation
- * @publicApi
- */
- const Host = makeParamDecorator('Host');
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- let _reflect = null;
- function getReflect() {
- return (_reflect = _reflect || new ReflectionCapabilities());
- }
- function reflectDependencies(type) {
- return convertDependencies(getReflect().parameters(type));
- }
- function convertDependencies(deps) {
- const compiler = getCompilerFacade();
- return deps.map(dep => reflectDependency(compiler, dep));
- }
- function reflectDependency(compiler, dep) {
- const meta = {
- token: null,
- host: false,
- optional: false,
- resolved: compiler.R3ResolvedDependencyType.Token,
- self: false,
- skipSelf: false,
- };
- function setTokenAndResolvedType(token) {
- meta.resolved = compiler.R3ResolvedDependencyType.Token;
- meta.token = token;
- }
- if (Array.isArray(dep) && dep.length > 0) {
- for (let j = 0; j < dep.length; j++) {
- const param = dep[j];
- if (param === undefined) {
- // param may be undefined if type of dep is not set by ngtsc
- continue;
- }
- const proto = Object.getPrototypeOf(param);
- if (param instanceof Optional || proto.ngMetadataName === 'Optional') {
- meta.optional = true;
- }
- else if (param instanceof SkipSelf || proto.ngMetadataName === 'SkipSelf') {
- meta.skipSelf = true;
- }
- else if (param instanceof Self || proto.ngMetadataName === 'Self') {
- meta.self = true;
- }
- else if (param instanceof Host || proto.ngMetadataName === 'Host') {
- meta.host = true;
- }
- else if (param instanceof Inject) {
- meta.token = param.token;
- }
- else if (param instanceof Attribute) {
- if (param.attributeName === undefined) {
- throw new Error(`Attribute name must be defined.`);
- }
- meta.token = param.attributeName;
- meta.resolved = compiler.R3ResolvedDependencyType.Attribute;
- }
- else if (param.__ChangeDetectorRef__ === true) {
- meta.token = param;
- meta.resolved = compiler.R3ResolvedDependencyType.ChangeDetectorRef;
- }
- else {
- setTokenAndResolvedType(param);
- }
- }
- }
- else if (dep === undefined || (Array.isArray(dep) && dep.length === 0)) {
- meta.token = undefined;
- meta.resolved = R3ResolvedDependencyType.Invalid;
- }
- else {
- setTokenAndResolvedType(dep);
- }
- return meta;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Used to resolve resource URLs on `@Component` when used with JIT compilation.
- *
- * Example:
- * ```
- * @Component({
- * selector: 'my-comp',
- * templateUrl: 'my-comp.html', // This requires asynchronous resolution
- * })
- * class MyComponent{
- * }
- *
- * // Calling `renderComponent` will fail because `renderComponent` is a synchronous process
- * // and `MyComponent`'s `@Component.templateUrl` needs to be resolved asynchronously.
- *
- * // Calling `resolveComponentResources()` will resolve `@Component.templateUrl` into
- * // `@Component.template`, which allows `renderComponent` to proceed in a synchronous manner.
- *
- * // Use browser's `fetch()` function as the default resource resolution strategy.
- * resolveComponentResources(fetch).then(() => {
- * // After resolution all URLs have been converted into `template` strings.
- * renderComponent(MyComponent);
- * });
- *
- * ```
- *
- * NOTE: In AOT the resolution happens during compilation, and so there should be no need
- * to call this method outside JIT mode.
- *
- * @param resourceResolver a function which is responsible for returning a `Promise` to the
- * contents of the resolved URL. Browser's `fetch()` method is a good default implementation.
- */
- function resolveComponentResources(resourceResolver) {
- // Store all promises which are fetching the resources.
- const componentResolved = [];
- // Cache so that we don't fetch the same resource more than once.
- const urlMap = new Map();
- function cachedResourceResolve(url) {
- let promise = urlMap.get(url);
- if (!promise) {
- const resp = resourceResolver(url);
- urlMap.set(url, promise = resp.then(unwrapResponse));
- }
- return promise;
- }
- componentResourceResolutionQueue.forEach((component, type) => {
- const promises = [];
- if (component.templateUrl) {
- promises.push(cachedResourceResolve(component.templateUrl).then((template) => {
- component.template = template;
- }));
- }
- const styleUrls = component.styleUrls;
- const styles = component.styles || (component.styles = []);
- const styleOffset = component.styles.length;
- styleUrls && styleUrls.forEach((styleUrl, index) => {
- styles.push(''); // pre-allocate array.
- promises.push(cachedResourceResolve(styleUrl).then((style) => {
- styles[styleOffset + index] = style;
- styleUrls.splice(styleUrls.indexOf(styleUrl), 1);
- if (styleUrls.length == 0) {
- component.styleUrls = undefined;
- }
- }));
- });
- const fullyResolved = Promise.all(promises).then(() => componentDefResolved(type));
- componentResolved.push(fullyResolved);
- });
- clearResolutionOfComponentResourcesQueue();
- return Promise.all(componentResolved).then(() => undefined);
- }
- let componentResourceResolutionQueue = new Map();
- // Track when existing ɵcmp for a Type is waiting on resources.
- const componentDefPendingResolution = new Set();
- function maybeQueueResolutionOfComponentResources(type, metadata) {
- if (componentNeedsResolution(metadata)) {
- componentResourceResolutionQueue.set(type, metadata);
- componentDefPendingResolution.add(type);
- }
- }
- function isComponentDefPendingResolution(type) {
- return componentDefPendingResolution.has(type);
- }
- function componentNeedsResolution(component) {
- return !!((component.templateUrl && !component.hasOwnProperty('template')) ||
- component.styleUrls && component.styleUrls.length);
- }
- function clearResolutionOfComponentResourcesQueue() {
- const old = componentResourceResolutionQueue;
- componentResourceResolutionQueue = new Map();
- return old;
- }
- function restoreComponentResolutionQueue(queue) {
- componentDefPendingResolution.clear();
- queue.forEach((_, type) => componentDefPendingResolution.add(type));
- componentResourceResolutionQueue = queue;
- }
- function isComponentResourceResolutionQueueEmpty() {
- return componentResourceResolutionQueue.size === 0;
- }
- function unwrapResponse(response) {
- return typeof response == 'string' ? response : response.text();
- }
- function componentDefResolved(type) {
- componentDefPendingResolution.delete(type);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const _THROW_IF_NOT_FOUND = {};
- const THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;
- const NG_TEMP_TOKEN_PATH = 'ngTempTokenPath';
- const NG_TOKEN_PATH = 'ngTokenPath';
- const NEW_LINE = /\n/gm;
- const NO_NEW_LINE = 'ɵ';
- const SOURCE = '__source';
- const ɵ0$3 = getClosureSafeProperty;
- const USE_VALUE = getClosureSafeProperty({ provide: String, useValue: ɵ0$3 });
- /**
- * Current injector value used by `inject`.
- * - `undefined`: it is an error to call `inject`
- * - `null`: `inject` can be called but there is no injector (limp-mode).
- * - Injector instance: Use the injector for resolution.
- */
- let _currentInjector = undefined;
- function setCurrentInjector(injector) {
- const former = _currentInjector;
- _currentInjector = injector;
- return former;
- }
- function injectInjectorOnly(token, flags = InjectFlags.Default) {
- if (_currentInjector === undefined) {
- throw new Error(`inject() must be called from an injection context`);
- }
- else if (_currentInjector === null) {
- return injectRootLimpMode(token, undefined, flags);
- }
- else {
- return _currentInjector.get(token, flags & InjectFlags.Optional ? null : undefined, flags);
- }
- }
- function ɵɵinject(token, flags = InjectFlags.Default) {
- return (getInjectImplementation() || injectInjectorOnly)(resolveForwardRef(token), flags);
- }
- /**
- * Throws an error indicating that a factory function could not be generated by the compiler for a
- * particular class.
- *
- * This instruction allows the actual error message to be optimized away when ngDevMode is turned
- * off, saving bytes of generated code while still providing a good experience in dev mode.
- *
- * The name of the class is not mentioned here, but will be in the generated factory function name
- * and thus in the stack trace.
- *
- * @codeGenApi
- */
- function ɵɵinvalidFactoryDep(index) {
- const msg = ngDevMode ?
- `This constructor is not compatible with Angular Dependency Injection because its dependency at index ${index} of the parameter list is invalid.
- This can happen if the dependency type is a primitive like a string or if an ancestor of this class is missing an Angular decorator.
- Please check that 1) the type for the parameter at index ${index} is correct and 2) the correct Angular decorators are defined for this class and its ancestors.` :
- 'invalid';
- throw new Error(msg);
- }
- /**
- * Injects a token from the currently active injector.
- *
- * Must be used in the context of a factory function such as one defined for an
- * `InjectionToken`. Throws an error if not called from such a context.
- *
- * Within such a factory function, using this function to request injection of a dependency
- * is faster and more type-safe than providing an additional array of dependencies
- * (as has been common with `useFactory` providers).
- *
- * @param token The injection token for the dependency to be injected.
- * @param flags Optional flags that control how injection is executed.
- * The flags correspond to injection strategies that can be specified with
- * parameter decorators `@Host`, `@Self`, `@SkipSef`, and `@Optional`.
- * @returns True if injection is successful, null otherwise.
- *
- * @usageNotes
- *
- * ### Example
- *
- * {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}
- *
- * @publicApi
- */
- const inject = ɵɵinject;
- function injectArgs(types) {
- const args = [];
- for (let i = 0; i < types.length; i++) {
- const arg = resolveForwardRef(types[i]);
- if (Array.isArray(arg)) {
- if (arg.length === 0) {
- throw new Error('Arguments array must have arguments.');
- }
- let type = undefined;
- let flags = InjectFlags.Default;
- for (let j = 0; j < arg.length; j++) {
- const meta = arg[j];
- if (meta instanceof Optional || meta.ngMetadataName === 'Optional' || meta === Optional) {
- flags |= InjectFlags.Optional;
- }
- else if (meta instanceof SkipSelf || meta.ngMetadataName === 'SkipSelf' || meta === SkipSelf) {
- flags |= InjectFlags.SkipSelf;
- }
- else if (meta instanceof Self || meta.ngMetadataName === 'Self' || meta === Self) {
- flags |= InjectFlags.Self;
- }
- else if (meta instanceof Inject || meta === Inject) {
- type = meta.token;
- }
- else {
- type = meta;
- }
- }
- args.push(ɵɵinject(type, flags));
- }
- else {
- args.push(ɵɵinject(arg));
- }
- }
- return args;
- }
- function catchInjectorError(e, token, injectorErrorName, source) {
- const tokenPath = e[NG_TEMP_TOKEN_PATH];
- if (token[SOURCE]) {
- tokenPath.unshift(token[SOURCE]);
- }
- e.message = formatError('\n' + e.message, tokenPath, injectorErrorName, source);
- e[NG_TOKEN_PATH] = tokenPath;
- e[NG_TEMP_TOKEN_PATH] = null;
- throw e;
- }
- function formatError(text, obj, injectorErrorName, source = null) {
- text = text && text.charAt(0) === '\n' && text.charAt(1) == NO_NEW_LINE ? text.substr(2) : text;
- let context = stringify(obj);
- if (Array.isArray(obj)) {
- context = obj.map(stringify).join(' -> ');
- }
- else if (typeof obj === 'object') {
- let parts = [];
- for (let key in obj) {
- if (obj.hasOwnProperty(key)) {
- let value = obj[key];
- parts.push(key + ':' + (typeof value === 'string' ? JSON.stringify(value) : stringify(value)));
- }
- }
- context = `{${parts.join(', ')}}`;
- }
- return `${injectorErrorName}${source ? '(' + source + ')' : ''}[${context}]: ${text.replace(NEW_LINE, '\n ')}`;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * The Trusted Types policy, or null if Trusted Types are not
- * enabled/supported, or undefined if the policy has not been created yet.
- */
- let policy;
- /**
- * Returns the Trusted Types policy, or null if Trusted Types are not
- * enabled/supported. The first call to this function will create the policy.
- */
- function getPolicy() {
- if (policy === undefined) {
- policy = null;
- if (_global.trustedTypes) {
- try {
- policy = _global.trustedTypes.createPolicy('angular', {
- createHTML: (s) => s,
- createScript: (s) => s,
- createScriptURL: (s) => s,
- });
- }
- catch (_a) {
- // trustedTypes.createPolicy throws if called with a name that is
- // already registered, even in report-only mode. Until the API changes,
- // catch the error not to break the applications functionally. In such
- // cases, the code will fall back to using strings.
- }
- }
- }
- return policy;
- }
- /**
- * Unsafely promote a string to a TrustedHTML, falling back to strings when
- * Trusted Types are not available.
- * @security This is a security-sensitive function; any use of this function
- * must go through security review. In particular, it must be assured that the
- * provided string will never cause an XSS vulnerability if used in a context
- * that will be interpreted as HTML by a browser, e.g. when assigning to
- * element.innerHTML.
- */
- function trustedHTMLFromString(html) {
- var _a;
- return ((_a = getPolicy()) === null || _a === void 0 ? void 0 : _a.createHTML(html)) || html;
- }
- /**
- * Unsafely promote a string to a TrustedScript, falling back to strings when
- * Trusted Types are not available.
- * @security In particular, it must be assured that the provided string will
- * never cause an XSS vulnerability if used in a context that will be
- * interpreted and executed as a script by a browser, e.g. when calling eval.
- */
- function trustedScriptFromString(script) {
- var _a;
- return ((_a = getPolicy()) === null || _a === void 0 ? void 0 : _a.createScript(script)) || script;
- }
- /**
- * Unsafely promote a string to a TrustedScriptURL, falling back to strings
- * when Trusted Types are not available.
- * @security This is a security-sensitive function; any use of this function
- * must go through security review. In particular, it must be assured that the
- * provided string will never cause an XSS vulnerability if used in a context
- * that will cause a browser to load and execute a resource, e.g. when
- * assigning to script.src.
- */
- function trustedScriptURLFromString(url) {
- var _a;
- return ((_a = getPolicy()) === null || _a === void 0 ? void 0 : _a.createScriptURL(url)) || url;
- }
- /**
- * Unsafely call the Function constructor with the given string arguments. It
- * is only available in development mode, and should be stripped out of
- * production code.
- * @security This is a security-sensitive function; any use of this function
- * must go through security review. In particular, it must be assured that it
- * is only called from development code, as use in production code can lead to
- * XSS vulnerabilities.
- */
- function newTrustedFunctionForDev(...args) {
- if (typeof ngDevMode === 'undefined') {
- throw new Error('newTrustedFunctionForDev should never be called in production');
- }
- if (!_global.trustedTypes) {
- // In environments that don't support Trusted Types, fall back to the most
- // straightforward implementation:
- return new Function(...args);
- }
- // Chrome currently does not support passing TrustedScript to the Function
- // constructor. The following implements the workaround proposed on the page
- // below, where the Chromium bug is also referenced:
- // https://github.com/w3c/webappsec-trusted-types/wiki/Trusted-Types-for-function-constructor
- const fnArgs = args.slice(0, -1).join(',');
- const fnBody = args.pop().toString();
- const body = `(function anonymous(${fnArgs}
- ) { ${fnBody}
- })`;
- // Using eval directly confuses the compiler and prevents this module from
- // being stripped out of JS binaries even if not used. The global['eval']
- // indirection fixes that.
- const fn = _global['eval'](trustedScriptFromString(body));
- // To completely mimic the behavior of calling "new Function", two more
- // things need to happen:
- // 1. Stringifying the resulting function should return its source code
- fn.toString = () => body;
- // 2. When calling the resulting function, `this` should refer to `global`
- return fn.bind(_global);
- // When Trusted Types support in Function constructors is widely available,
- // the implementation of this function can be simplified to:
- // return new Function(...args.map(a => trustedScriptFromString(a)));
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class SafeValueImpl {
- constructor(changingThisBreaksApplicationSecurity) {
- this.changingThisBreaksApplicationSecurity = changingThisBreaksApplicationSecurity;
- }
- toString() {
- return `SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity}` +
- ` (see https://g.co/ng/security#xss)`;
- }
- }
- class SafeHtmlImpl extends SafeValueImpl {
- getTypeName() {
- return "HTML" /* Html */;
- }
- }
- class SafeStyleImpl extends SafeValueImpl {
- getTypeName() {
- return "Style" /* Style */;
- }
- }
- class SafeScriptImpl extends SafeValueImpl {
- getTypeName() {
- return "Script" /* Script */;
- }
- }
- class SafeUrlImpl extends SafeValueImpl {
- getTypeName() {
- return "URL" /* Url */;
- }
- }
- class SafeResourceUrlImpl extends SafeValueImpl {
- getTypeName() {
- return "ResourceURL" /* ResourceUrl */;
- }
- }
- function unwrapSafeValue(value) {
- return value instanceof SafeValueImpl ? value.changingThisBreaksApplicationSecurity :
- value;
- }
- function allowSanitizationBypassAndThrow(value, type) {
- const actualType = getSanitizationBypassType(value);
- if (actualType != null && actualType !== type) {
- // Allow ResourceURLs in URL contexts, they are strictly more trusted.
- if (actualType === "ResourceURL" /* ResourceUrl */ && type === "URL" /* Url */)
- return true;
- throw new Error(`Required a safe ${type}, got a ${actualType} (see https://g.co/ng/security#xss)`);
- }
- return actualType === type;
- }
- function getSanitizationBypassType(value) {
- return value instanceof SafeValueImpl && value.getTypeName() || null;
- }
- /**
- * Mark `html` string as trusted.
- *
- * This function wraps the trusted string in `String` and brands it in a way which makes it
- * recognizable to {@link htmlSanitizer} to be trusted implicitly.
- *
- * @param trustedHtml `html` string which needs to be implicitly trusted.
- * @returns a `html` which has been branded to be implicitly trusted.
- */
- function bypassSanitizationTrustHtml(trustedHtml) {
- return new SafeHtmlImpl(trustedHtml);
- }
- /**
- * Mark `style` string as trusted.
- *
- * This function wraps the trusted string in `String` and brands it in a way which makes it
- * recognizable to {@link styleSanitizer} to be trusted implicitly.
- *
- * @param trustedStyle `style` string which needs to be implicitly trusted.
- * @returns a `style` hich has been branded to be implicitly trusted.
- */
- function bypassSanitizationTrustStyle(trustedStyle) {
- return new SafeStyleImpl(trustedStyle);
- }
- /**
- * Mark `script` string as trusted.
- *
- * This function wraps the trusted string in `String` and brands it in a way which makes it
- * recognizable to {@link scriptSanitizer} to be trusted implicitly.
- *
- * @param trustedScript `script` string which needs to be implicitly trusted.
- * @returns a `script` which has been branded to be implicitly trusted.
- */
- function bypassSanitizationTrustScript(trustedScript) {
- return new SafeScriptImpl(trustedScript);
- }
- /**
- * Mark `url` string as trusted.
- *
- * This function wraps the trusted string in `String` and brands it in a way which makes it
- * recognizable to {@link urlSanitizer} to be trusted implicitly.
- *
- * @param trustedUrl `url` string which needs to be implicitly trusted.
- * @returns a `url` which has been branded to be implicitly trusted.
- */
- function bypassSanitizationTrustUrl(trustedUrl) {
- return new SafeUrlImpl(trustedUrl);
- }
- /**
- * Mark `url` string as trusted.
- *
- * This function wraps the trusted string in `String` and brands it in a way which makes it
- * recognizable to {@link resourceUrlSanitizer} to be trusted implicitly.
- *
- * @param trustedResourceUrl `url` string which needs to be implicitly trusted.
- * @returns a `url` which has been branded to be implicitly trusted.
- */
- function bypassSanitizationTrustResourceUrl(trustedResourceUrl) {
- return new SafeResourceUrlImpl(trustedResourceUrl);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * This helper is used to get hold of an inert tree of DOM elements containing dirty HTML
- * that needs sanitizing.
- * Depending upon browser support we use one of two strategies for doing this.
- * Default: DOMParser strategy
- * Fallback: InertDocument strategy
- */
- function getInertBodyHelper(defaultDoc) {
- return isDOMParserAvailable() ? new DOMParserHelper() : new InertDocumentHelper(defaultDoc);
- }
- /**
- * Uses DOMParser to create and fill an inert body element.
- * This is the default strategy used in browsers that support it.
- */
- class DOMParserHelper {
- getInertBodyElement(html) {
- // We add these extra elements to ensure that the rest of the content is parsed as expected
- // e.g. leading whitespace is maintained and tags like `<meta>` do not get hoisted to the
- // `<head>` tag. Note that the `<body>` tag is closed implicitly to prevent unclosed tags
- // in `html` from consuming the otherwise explicit `</body>` tag.
- html = '<body><remove></remove>' + html;
- try {
- const body = new window.DOMParser()
- .parseFromString(trustedHTMLFromString(html), 'text/html')
- .body;
- body.removeChild(body.firstChild);
- return body;
- }
- catch (_a) {
- return null;
- }
- }
- }
- /**
- * Use an HTML5 `template` element, if supported, or an inert body element created via
- * `createHtmlDocument` to create and fill an inert DOM element.
- * This is the fallback strategy if the browser does not support DOMParser.
- */
- class InertDocumentHelper {
- constructor(defaultDoc) {
- this.defaultDoc = defaultDoc;
- this.inertDocument = this.defaultDoc.implementation.createHTMLDocument('sanitization-inert');
- if (this.inertDocument.body == null) {
- // usually there should be only one body element in the document, but IE doesn't have any, so
- // we need to create one.
- const inertHtml = this.inertDocument.createElement('html');
- this.inertDocument.appendChild(inertHtml);
- const inertBodyElement = this.inertDocument.createElement('body');
- inertHtml.appendChild(inertBodyElement);
- }
- }
- getInertBodyElement(html) {
- // Prefer using <template> element if supported.
- const templateEl = this.inertDocument.createElement('template');
- if ('content' in templateEl) {
- templateEl.innerHTML = trustedHTMLFromString(html);
- return templateEl;
- }
- // Note that previously we used to do something like `this.inertDocument.body.innerHTML = html`
- // and we returned the inert `body` node. This was changed, because IE seems to treat setting
- // `innerHTML` on an inserted element differently, compared to one that hasn't been inserted
- // yet. In particular, IE appears to split some of the text into multiple text nodes rather
- // than keeping them in a single one which ends up messing with Ivy's i18n parsing further
- // down the line. This has been worked around by creating a new inert `body` and using it as
- // the root node in which we insert the HTML.
- const inertBody = this.inertDocument.createElement('body');
- inertBody.innerHTML = trustedHTMLFromString(html);
- // Support: IE 11 only
- // strip custom-namespaced attributes on IE<=11
- if (this.defaultDoc.documentMode) {
- this.stripCustomNsAttrs(inertBody);
- }
- return inertBody;
- }
- /**
- * When IE11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1'
- * attribute to declare ns1 namespace and prefixes the attribute with 'ns1' (e.g.
- * 'ns1:xlink:foo').
- *
- * This is undesirable since we don't want to allow any of these custom attributes. This method
- * strips them all.
- */
- stripCustomNsAttrs(el) {
- const elAttrs = el.attributes;
- // loop backwards so that we can support removals.
- for (let i = elAttrs.length - 1; 0 < i; i--) {
- const attrib = elAttrs.item(i);
- const attrName = attrib.name;
- if (attrName === 'xmlns:ns1' || attrName.indexOf('ns1:') === 0) {
- el.removeAttribute(attrName);
- }
- }
- let childNode = el.firstChild;
- while (childNode) {
- if (childNode.nodeType === Node.ELEMENT_NODE)
- this.stripCustomNsAttrs(childNode);
- childNode = childNode.nextSibling;
- }
- }
- }
- /**
- * We need to determine whether the DOMParser exists in the global context and
- * supports parsing HTML; HTML parsing support is not as wide as other formats, see
- * https://developer.mozilla.org/en-US/docs/Web/API/DOMParser#Browser_compatibility.
- *
- * @suppress {uselessCode}
- */
- function isDOMParserAvailable() {
- try {
- return !!new window.DOMParser().parseFromString(trustedHTMLFromString(''), 'text/html');
- }
- catch (_a) {
- return false;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * A pattern that recognizes a commonly useful subset of URLs that are safe.
- *
- * This regular expression matches a subset of URLs that will not cause script
- * execution if used in URL context within a HTML document. Specifically, this
- * regular expression matches if (comment from here on and regex copied from
- * Soy's EscapingConventions):
- * (1) Either an allowed protocol (http, https, mailto or ftp).
- * (2) or no protocol. A protocol must be followed by a colon. The below
- * allows that by allowing colons only after one of the characters [/?#].
- * A colon after a hash (#) must be in the fragment.
- * Otherwise, a colon after a (?) must be in a query.
- * Otherwise, a colon after a single solidus (/) must be in a path.
- * Otherwise, a colon after a double solidus (//) must be in the authority
- * (before port).
- *
- * The pattern disallows &, used in HTML entity declarations before
- * one of the characters in [/?#]. This disallows HTML entities used in the
- * protocol name, which should never happen, e.g. "http" for "http".
- * It also disallows HTML entities in the first path part of a relative path,
- * e.g. "foo<bar/baz". Our existing escaping functions should not produce
- * that. More importantly, it disallows masking of a colon,
- * e.g. "javascript:...".
- *
- * This regular expression was taken from the Closure sanitization library.
- */
- const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^&:/?#]*(?:[/?#]|$))/gi;
- /* A pattern that matches safe srcset values */
- const SAFE_SRCSET_PATTERN = /^(?:(?:https?|file):|[^&:/?#]*(?:[/?#]|$))/gi;
- /** A pattern that matches safe data URLs. Only matches image, video and audio types. */
- const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\/]+=*$/i;
- function _sanitizeUrl(url) {
- url = String(url);
- if (url.match(SAFE_URL_PATTERN) || url.match(DATA_URL_PATTERN))
- return url;
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
- console.warn(`WARNING: sanitizing unsafe URL value ${url} (see https://g.co/ng/security#xss)`);
- }
- return 'unsafe:' + url;
- }
- function sanitizeSrcset(srcset) {
- srcset = String(srcset);
- return srcset.split(',').map((srcset) => _sanitizeUrl(srcset.trim())).join(', ');
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function tagSet(tags) {
- const res = {};
- for (const t of tags.split(','))
- res[t] = true;
- return res;
- }
- function merge(...sets) {
- const res = {};
- for (const s of sets) {
- for (const v in s) {
- if (s.hasOwnProperty(v))
- res[v] = true;
- }
- }
- return res;
- }
- // Good source of info about elements and attributes
- // https://html.spec.whatwg.org/#semantics
- // https://simon.html5.org/html-elements
- // Safe Void Elements - HTML5
- // https://html.spec.whatwg.org/#void-elements
- const VOID_ELEMENTS = tagSet('area,br,col,hr,img,wbr');
- // Elements that you can, intentionally, leave open (and which close themselves)
- // https://html.spec.whatwg.org/#optional-tags
- const OPTIONAL_END_TAG_BLOCK_ELEMENTS = tagSet('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr');
- const OPTIONAL_END_TAG_INLINE_ELEMENTS = tagSet('rp,rt');
- const OPTIONAL_END_TAG_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, OPTIONAL_END_TAG_BLOCK_ELEMENTS);
- // Safe Block Elements - HTML5
- const BLOCK_ELEMENTS = merge(OPTIONAL_END_TAG_BLOCK_ELEMENTS, tagSet('address,article,' +
- 'aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' +
- 'h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul'));
- // Inline Elements - HTML5
- const INLINE_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, tagSet('a,abbr,acronym,audio,b,' +
- 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,' +
- 'samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video'));
- const VALID_ELEMENTS = merge(VOID_ELEMENTS, BLOCK_ELEMENTS, INLINE_ELEMENTS, OPTIONAL_END_TAG_ELEMENTS);
- // Attributes that have href and hence need to be sanitized
- const URI_ATTRS = tagSet('background,cite,href,itemtype,longdesc,poster,src,xlink:href');
- // Attributes that have special href set hence need to be sanitized
- const SRCSET_ATTRS = tagSet('srcset');
- const HTML_ATTRS = tagSet('abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,' +
- 'compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,' +
- 'ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,' +
- 'scope,scrolling,shape,size,sizes,span,srclang,start,summary,tabindex,target,title,translate,type,usemap,' +
- 'valign,value,vspace,width');
- // Accessibility attributes as per WAI-ARIA 1.1 (W3C Working Draft 14 December 2018)
- const ARIA_ATTRS = tagSet('aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,' +
- 'aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,' +
- 'aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,' +
- 'aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,' +
- 'aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,' +
- 'aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,' +
- 'aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext');
- // NB: This currently consciously doesn't support SVG. SVG sanitization has had several security
- // issues in the past, so it seems safer to leave it out if possible. If support for binding SVG via
- // innerHTML is required, SVG attributes should be added here.
- // NB: Sanitization does not allow <form> elements or other active elements (<button> etc). Those
- // can be sanitized, but they increase security surface area without a legitimate use case, so they
- // are left out here.
- const VALID_ATTRS = merge(URI_ATTRS, SRCSET_ATTRS, HTML_ATTRS, ARIA_ATTRS);
- // Elements whose content should not be traversed/preserved, if the elements themselves are invalid.
- //
- // Typically, `<invalid>Some content</invalid>` would traverse (and in this case preserve)
- // `Some content`, but strip `invalid-element` opening/closing tags. For some elements, though, we
- // don't want to preserve the content, if the elements themselves are going to be removed.
- const SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS = tagSet('script,style,template');
- /**
- * SanitizingHtmlSerializer serializes a DOM fragment, stripping out any unsafe elements and unsafe
- * attributes.
- */
- class SanitizingHtmlSerializer {
- constructor() {
- // Explicitly track if something was stripped, to avoid accidentally warning of sanitization just
- // because characters were re-encoded.
- this.sanitizedSomething = false;
- this.buf = [];
- }
- sanitizeChildren(el) {
- // This cannot use a TreeWalker, as it has to run on Angular's various DOM adapters.
- // However this code never accesses properties off of `document` before deleting its contents
- // again, so it shouldn't be vulnerable to DOM clobbering.
- let current = el.firstChild;
- let traverseContent = true;
- while (current) {
- if (current.nodeType === Node.ELEMENT_NODE) {
- traverseContent = this.startElement(current);
- }
- else if (current.nodeType === Node.TEXT_NODE) {
- this.chars(current.nodeValue);
- }
- else {
- // Strip non-element, non-text nodes.
- this.sanitizedSomething = true;
- }
- if (traverseContent && current.firstChild) {
- current = current.firstChild;
- continue;
- }
- while (current) {
- // Leaving the element. Walk up and to the right, closing tags as we go.
- if (current.nodeType === Node.ELEMENT_NODE) {
- this.endElement(current);
- }
- let next = this.checkClobberedElement(current, current.nextSibling);
- if (next) {
- current = next;
- break;
- }
- current = this.checkClobberedElement(current, current.parentNode);
- }
- }
- return this.buf.join('');
- }
- /**
- * Sanitizes an opening element tag (if valid) and returns whether the element's contents should
- * be traversed. Element content must always be traversed (even if the element itself is not
- * valid/safe), unless the element is one of `SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS`.
- *
- * @param element The element to sanitize.
- * @return True if the element's contents should be traversed.
- */
- startElement(element) {
- const tagName = element.nodeName.toLowerCase();
- if (!VALID_ELEMENTS.hasOwnProperty(tagName)) {
- this.sanitizedSomething = true;
- return !SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS.hasOwnProperty(tagName);
- }
- this.buf.push('<');
- this.buf.push(tagName);
- const elAttrs = element.attributes;
- for (let i = 0; i < elAttrs.length; i++) {
- const elAttr = elAttrs.item(i);
- const attrName = elAttr.name;
- const lower = attrName.toLowerCase();
- if (!VALID_ATTRS.hasOwnProperty(lower)) {
- this.sanitizedSomething = true;
- continue;
- }
- let value = elAttr.value;
- // TODO(martinprobst): Special case image URIs for data:image/...
- if (URI_ATTRS[lower])
- value = _sanitizeUrl(value);
- if (SRCSET_ATTRS[lower])
- value = sanitizeSrcset(value);
- this.buf.push(' ', attrName, '="', encodeEntities(value), '"');
- }
- this.buf.push('>');
- return true;
- }
- endElement(current) {
- const tagName = current.nodeName.toLowerCase();
- if (VALID_ELEMENTS.hasOwnProperty(tagName) && !VOID_ELEMENTS.hasOwnProperty(tagName)) {
- this.buf.push('</');
- this.buf.push(tagName);
- this.buf.push('>');
- }
- }
- chars(chars) {
- this.buf.push(encodeEntities(chars));
- }
- checkClobberedElement(node, nextNode) {
- if (nextNode &&
- (node.compareDocumentPosition(nextNode) &
- Node.DOCUMENT_POSITION_CONTAINED_BY) === Node.DOCUMENT_POSITION_CONTAINED_BY) {
- throw new Error(`Failed to sanitize html because the element is clobbered: ${node.outerHTML}`);
- }
- return nextNode;
- }
- }
- // Regular Expressions for parsing tags and attributes
- const SURROGATE_PAIR_REGEXP = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
- // ! to ~ is the ASCII range.
- const NON_ALPHANUMERIC_REGEXP = /([^\#-~ |!])/g;
- /**
- * Escapes all potentially dangerous characters, so that the
- * resulting string can be safely inserted into attribute or
- * element text.
- * @param value
- */
- function encodeEntities(value) {
- return value.replace(/&/g, '&')
- .replace(SURROGATE_PAIR_REGEXP, function (match) {
- const hi = match.charCodeAt(0);
- const low = match.charCodeAt(1);
- return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';
- })
- .replace(NON_ALPHANUMERIC_REGEXP, function (match) {
- return '&#' + match.charCodeAt(0) + ';';
- })
- .replace(/</g, '<')
- .replace(/>/g, '>');
- }
- let inertBodyHelper;
- /**
- * Sanitizes the given unsafe, untrusted HTML fragment, and returns HTML text that is safe to add to
- * the DOM in a browser environment.
- */
- function _sanitizeHtml(defaultDoc, unsafeHtmlInput) {
- let inertBodyElement = null;
- try {
- inertBodyHelper = inertBodyHelper || getInertBodyHelper(defaultDoc);
- // Make sure unsafeHtml is actually a string (TypeScript types are not enforced at runtime).
- let unsafeHtml = unsafeHtmlInput ? String(unsafeHtmlInput) : '';
- inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);
- // mXSS protection. Repeatedly parse the document to make sure it stabilizes, so that a browser
- // trying to auto-correct incorrect HTML cannot cause formerly inert HTML to become dangerous.
- let mXSSAttempts = 5;
- let parsedHtml = unsafeHtml;
- do {
- if (mXSSAttempts === 0) {
- throw new Error('Failed to sanitize html because the input is unstable');
- }
- mXSSAttempts--;
- unsafeHtml = parsedHtml;
- parsedHtml = inertBodyElement.innerHTML;
- inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);
- } while (unsafeHtml !== parsedHtml);
- const sanitizer = new SanitizingHtmlSerializer();
- const safeHtml = sanitizer.sanitizeChildren(getTemplateContent(inertBodyElement) || inertBodyElement);
- if ((typeof ngDevMode === 'undefined' || ngDevMode) && sanitizer.sanitizedSomething) {
- console.warn('WARNING: sanitizing HTML stripped some content, see https://g.co/ng/security#xss');
- }
- return safeHtml;
- }
- finally {
- // In case anything goes wrong, clear out inertElement to reset the entire DOM structure.
- if (inertBodyElement) {
- const parent = getTemplateContent(inertBodyElement) || inertBodyElement;
- while (parent.firstChild) {
- parent.removeChild(parent.firstChild);
- }
- }
- }
- }
- function getTemplateContent(el) {
- return 'content' in el /** Microsoft/TypeScript#21517 */ && isTemplateElement(el) ?
- el.content :
- null;
- }
- function isTemplateElement(el) {
- return el.nodeType === Node.ELEMENT_NODE && el.nodeName === 'TEMPLATE';
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * A SecurityContext marks a location that has dangerous security implications, e.g. a DOM property
- * like `innerHTML` that could cause Cross Site Scripting (XSS) security bugs when improperly
- * handled.
- *
- * See DomSanitizer for more details on security in Angular applications.
- *
- * @publicApi
- */
- var SecurityContext;
- (function (SecurityContext) {
- SecurityContext[SecurityContext["NONE"] = 0] = "NONE";
- SecurityContext[SecurityContext["HTML"] = 1] = "HTML";
- SecurityContext[SecurityContext["STYLE"] = 2] = "STYLE";
- SecurityContext[SecurityContext["SCRIPT"] = 3] = "SCRIPT";
- SecurityContext[SecurityContext["URL"] = 4] = "URL";
- SecurityContext[SecurityContext["RESOURCE_URL"] = 5] = "RESOURCE_URL";
- })(SecurityContext || (SecurityContext = {}));
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * An `html` sanitizer which converts untrusted `html` **string** into trusted string by removing
- * dangerous content.
- *
- * This method parses the `html` and locates potentially dangerous content (such as urls and
- * javascript) and removes it.
- *
- * It is possible to mark a string as trusted by calling {@link bypassSanitizationTrustHtml}.
- *
- * @param unsafeHtml untrusted `html`, typically from the user.
- * @returns `html` string which is safe to display to user, because all of the dangerous javascript
- * and urls have been removed.
- *
- * @codeGenApi
- */
- function ɵɵsanitizeHtml(unsafeHtml) {
- const sanitizer = getSanitizer();
- if (sanitizer) {
- return sanitizer.sanitize(SecurityContext.HTML, unsafeHtml) || '';
- }
- if (allowSanitizationBypassAndThrow(unsafeHtml, "HTML" /* Html */)) {
- return unwrapSafeValue(unsafeHtml);
- }
- return _sanitizeHtml(getDocument(), renderStringify(unsafeHtml));
- }
- /**
- * A `style` sanitizer which converts untrusted `style` **string** into trusted string by removing
- * dangerous content.
- *
- * It is possible to mark a string as trusted by calling {@link bypassSanitizationTrustStyle}.
- *
- * @param unsafeStyle untrusted `style`, typically from the user.
- * @returns `style` string which is safe to bind to the `style` properties.
- *
- * @codeGenApi
- */
- function ɵɵsanitizeStyle(unsafeStyle) {
- const sanitizer = getSanitizer();
- if (sanitizer) {
- return sanitizer.sanitize(SecurityContext.STYLE, unsafeStyle) || '';
- }
- if (allowSanitizationBypassAndThrow(unsafeStyle, "Style" /* Style */)) {
- return unwrapSafeValue(unsafeStyle);
- }
- return renderStringify(unsafeStyle);
- }
- /**
- * A `url` sanitizer which converts untrusted `url` **string** into trusted string by removing
- * dangerous
- * content.
- *
- * This method parses the `url` and locates potentially dangerous content (such as javascript) and
- * removes it.
- *
- * It is possible to mark a string as trusted by calling {@link bypassSanitizationTrustUrl}.
- *
- * @param unsafeUrl untrusted `url`, typically from the user.
- * @returns `url` string which is safe to bind to the `src` properties such as `<img src>`, because
- * all of the dangerous javascript has been removed.
- *
- * @codeGenApi
- */
- function ɵɵsanitizeUrl(unsafeUrl) {
- const sanitizer = getSanitizer();
- if (sanitizer) {
- return sanitizer.sanitize(SecurityContext.URL, unsafeUrl) || '';
- }
- if (allowSanitizationBypassAndThrow(unsafeUrl, "URL" /* Url */)) {
- return unwrapSafeValue(unsafeUrl);
- }
- return _sanitizeUrl(renderStringify(unsafeUrl));
- }
- /**
- * A `url` sanitizer which only lets trusted `url`s through.
- *
- * This passes only `url`s marked trusted by calling {@link bypassSanitizationTrustResourceUrl}.
- *
- * @param unsafeResourceUrl untrusted `url`, typically from the user.
- * @returns `url` string which is safe to bind to the `src` properties such as `<img src>`, because
- * only trusted `url`s have been allowed to pass.
- *
- * @codeGenApi
- */
- function ɵɵsanitizeResourceUrl(unsafeResourceUrl) {
- const sanitizer = getSanitizer();
- if (sanitizer) {
- return sanitizer.sanitize(SecurityContext.RESOURCE_URL, unsafeResourceUrl) || '';
- }
- if (allowSanitizationBypassAndThrow(unsafeResourceUrl, "ResourceURL" /* ResourceUrl */)) {
- return unwrapSafeValue(unsafeResourceUrl);
- }
- throw new Error('unsafe value used in a resource URL context (see https://g.co/ng/security#xss)');
- }
- /**
- * A `script` sanitizer which only lets trusted javascript through.
- *
- * This passes only `script`s marked trusted by calling {@link
- * bypassSanitizationTrustScript}.
- *
- * @param unsafeScript untrusted `script`, typically from the user.
- * @returns `url` string which is safe to bind to the `<script>` element such as `<img src>`,
- * because only trusted `scripts` have been allowed to pass.
- *
- * @codeGenApi
- */
- function ɵɵsanitizeScript(unsafeScript) {
- const sanitizer = getSanitizer();
- if (sanitizer) {
- return sanitizer.sanitize(SecurityContext.SCRIPT, unsafeScript) || '';
- }
- if (allowSanitizationBypassAndThrow(unsafeScript, "Script" /* Script */)) {
- return unwrapSafeValue(unsafeScript);
- }
- throw new Error('unsafe value used in a script context');
- }
- /**
- * Promotes the given constant string to a TrustedHTML.
- * @param html constant string containing trusted HTML.
- * @returns TrustedHTML wrapping `html`.
- *
- * @security This is a security-sensitive function and should only be used to
- * convert constant values of attributes and properties found in
- * application-provided Angular templates to TrustedHTML.
- *
- * @codeGenApi
- */
- function ɵɵtrustConstantHtml(html) {
- return trustedHTMLFromString(html);
- }
- /**
- * Promotes the given constant string to a TrustedScript.
- * @param script constant string containing a trusted script.
- * @returns TrustedScript wrapping `script`.
- *
- * @security This is a security-sensitive function and should only be used to
- * convert constant values of attributes and properties found in
- * application-provided Angular templates to TrustedScript.
- *
- * @codeGenApi
- */
- function ɵɵtrustConstantScript(script) {
- return trustedScriptFromString(script);
- }
- /**
- * Promotes the given constant string to a TrustedScriptURL.
- * @param url constant string containing a trusted script URL.
- * @returns TrustedScriptURL wrapping `url`.
- *
- * @security This is a security-sensitive function and should only be used to
- * convert constant values of attributes and properties found in
- * application-provided Angular templates to TrustedScriptURL.
- *
- * @codeGenApi
- */
- function ɵɵtrustConstantResourceUrl(url) {
- return trustedScriptURLFromString(url);
- }
- /**
- * Detects which sanitizer to use for URL property, based on tag name and prop name.
- *
- * The rules are based on the RESOURCE_URL context config from
- * `packages/compiler/src/schema/dom_security_schema.ts`.
- * If tag and prop names don't match Resource URL schema, use URL sanitizer.
- */
- function getUrlSanitizer(tag, prop) {
- if ((prop === 'src' &&
- (tag === 'embed' || tag === 'frame' || tag === 'iframe' || tag === 'media' ||
- tag === 'script')) ||
- (prop === 'href' && (tag === 'base' || tag === 'link'))) {
- return ɵɵsanitizeResourceUrl;
- }
- return ɵɵsanitizeUrl;
- }
- /**
- * Sanitizes URL, selecting sanitizer function based on tag and property names.
- *
- * This function is used in case we can't define security context at compile time, when only prop
- * name is available. This happens when we generate host bindings for Directives/Components. The
- * host element is unknown at compile time, so we defer calculation of specific sanitizer to
- * runtime.
- *
- * @param unsafeUrl untrusted `url`, typically from the user.
- * @param tag target element tag name.
- * @param prop name of the property that contains the value.
- * @returns `url` string which is safe to bind.
- *
- * @codeGenApi
- */
- function ɵɵsanitizeUrlOrResourceUrl(unsafeUrl, tag, prop) {
- return getUrlSanitizer(tag, prop)(unsafeUrl);
- }
- function validateAgainstEventProperties(name) {
- if (name.toLowerCase().startsWith('on')) {
- const msg = `Binding to event property '${name}' is disallowed for security reasons, ` +
- `please use (${name.slice(2)})=...` +
- `\nIf '${name}' is a directive input, make sure the directive is imported by the` +
- ` current module.`;
- throw new Error(msg);
- }
- }
- function validateAgainstEventAttributes(name) {
- if (name.toLowerCase().startsWith('on')) {
- const msg = `Binding to event attribute '${name}' is disallowed for security reasons, ` +
- `please use (${name.slice(2)})=...`;
- throw new Error(msg);
- }
- }
- function getSanitizer() {
- const lView = getLView();
- return lView && lView[SANITIZER];
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ERROR_TYPE = 'ngType';
- const ERROR_DEBUG_CONTEXT = 'ngDebugContext';
- const ERROR_ORIGINAL_ERROR = 'ngOriginalError';
- const ERROR_LOGGER = 'ngErrorLogger';
- function wrappedError(message, originalError) {
- const msg = `${message} caused by: ${originalError instanceof Error ? originalError.message : originalError}`;
- const error = Error(msg);
- error[ERROR_ORIGINAL_ERROR] = originalError;
- return error;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function getType(error) {
- return error[ERROR_TYPE];
- }
- function getDebugContext(error) {
- return error[ERROR_DEBUG_CONTEXT];
- }
- function getOriginalError(error) {
- return error[ERROR_ORIGINAL_ERROR];
- }
- function getErrorLogger(error) {
- return error[ERROR_LOGGER] || defaultErrorLogger;
- }
- function defaultErrorLogger(console, ...values) {
- console.error(...values);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Provides a hook for centralized exception handling.
- *
- * The default implementation of `ErrorHandler` prints error messages to the `console`. To
- * intercept error handling, write a custom exception handler that replaces this default as
- * appropriate for your app.
- *
- * @usageNotes
- * ### Example
- *
- * ```
- * class MyErrorHandler implements ErrorHandler {
- * handleError(error) {
- * // do something with the exception
- * }
- * }
- *
- * @NgModule({
- * providers: [{provide: ErrorHandler, useClass: MyErrorHandler}]
- * })
- * class MyModule {}
- * ```
- *
- * @publicApi
- */
- class ErrorHandler {
- constructor() {
- /**
- * @internal
- */
- this._console = console;
- }
- handleError(error) {
- const originalError = this._findOriginalError(error);
- const context = this._findContext(error);
- // Note: Browser consoles show the place from where console.error was called.
- // We can use this to give users additional information about the error.
- const errorLogger = getErrorLogger(error);
- errorLogger(this._console, `ERROR`, error);
- if (originalError) {
- errorLogger(this._console, `ORIGINAL ERROR`, originalError);
- }
- if (context) {
- errorLogger(this._console, 'ERROR CONTEXT', context);
- }
- }
- /** @internal */
- _findContext(error) {
- if (error) {
- return getDebugContext(error) ? getDebugContext(error) :
- this._findContext(getOriginalError(error));
- }
- return null;
- }
- /** @internal */
- _findOriginalError(error) {
- let e = getOriginalError(error);
- while (e && getOriginalError(e)) {
- e = getOriginalError(e);
- }
- return e;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Defines a schema that allows an NgModule to contain the following:
- * - Non-Angular elements named with dash case (`-`).
- * - Element properties named with dash case (`-`).
- * Dash case is the naming convention for custom elements.
- *
- * @publicApi
- */
- const CUSTOM_ELEMENTS_SCHEMA = {
- name: 'custom-elements'
- };
- /**
- * Defines a schema that allows any property on any element.
- *
- * @publicApi
- */
- const NO_ERRORS_SCHEMA = {
- name: 'no-errors-schema'
- };
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * THIS FILE CONTAINS CODE WHICH SHOULD BE TREE SHAKEN AND NEVER CALLED FROM PRODUCTION CODE!!!
- */
- /**
- * Creates an `Array` construction with a given name. This is useful when
- * looking for memory consumption to see what time of array it is.
- *
- *
- * @param name Name to give to the constructor
- * @returns A subclass of `Array` if possible. This can only be done in
- * environments which support `class` construct.
- */
- function createNamedArrayType(name) {
- // This should never be called in prod mode, so let's verify that is the case.
- if (ngDevMode) {
- try {
- // If this function were compromised the following could lead to arbitrary
- // script execution. We bless it with Trusted Types anyway since this
- // function is stripped out of production binaries.
- return (newTrustedFunctionForDev('Array', `return class ${name} extends Array{}`))(Array);
- }
- catch (e) {
- // If it does not work just give up and fall back to regular Array.
- return Array;
- }
- }
- else {
- throw new Error('Looks like we are in \'prod mode\', but we are creating a named Array type, which is wrong! Check your code');
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function normalizeDebugBindingName(name) {
- // Attribute names with `$` (eg `x-y$`) are valid per spec, but unsupported by some browsers
- name = camelCaseToDashCase(name.replace(/[$@]/g, '_'));
- return `ng-reflect-${name}`;
- }
- const CAMEL_CASE_REGEXP = /([A-Z])/g;
- function camelCaseToDashCase(input) {
- return input.replace(CAMEL_CASE_REGEXP, (...m) => '-' + m[1].toLowerCase());
- }
- function normalizeDebugBindingValue(value) {
- try {
- // Limit the size of the value as otherwise the DOM just gets polluted.
- return value != null ? value.toString().slice(0, 30) : value;
- }
- catch (e) {
- return '[ERROR] Exception while trying to serialize the value';
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Returns the matching `LContext` data for a given DOM node, directive or component instance.
- *
- * This function will examine the provided DOM element, component, or directive instance\'s
- * monkey-patched property to derive the `LContext` data. Once called then the monkey-patched
- * value will be that of the newly created `LContext`.
- *
- * If the monkey-patched value is the `LView` instance then the context value for that
- * target will be created and the monkey-patch reference will be updated. Therefore when this
- * function is called it may mutate the provided element\'s, component\'s or any of the associated
- * directive\'s monkey-patch values.
- *
- * If the monkey-patch value is not detected then the code will walk up the DOM until an element
- * is found which contains a monkey-patch reference. When that occurs then the provided element
- * will be updated with a new context (which is then returned). If the monkey-patch value is not
- * detected for a component/directive instance then it will throw an error (all components and
- * directives should be automatically monkey-patched by ivy).
- *
- * @param target Component, Directive or DOM Node.
- */
- function getLContext(target) {
- let mpValue = readPatchedData(target);
- if (mpValue) {
- // only when it's an array is it considered an LView instance
- // ... otherwise it's an already constructed LContext instance
- if (Array.isArray(mpValue)) {
- const lView = mpValue;
- let nodeIndex;
- let component = undefined;
- let directives = undefined;
- if (isComponentInstance(target)) {
- nodeIndex = findViaComponent(lView, target);
- if (nodeIndex == -1) {
- throw new Error('The provided component was not found in the application');
- }
- component = target;
- }
- else if (isDirectiveInstance(target)) {
- nodeIndex = findViaDirective(lView, target);
- if (nodeIndex == -1) {
- throw new Error('The provided directive was not found in the application');
- }
- directives = getDirectivesAtNodeIndex(nodeIndex, lView, false);
- }
- else {
- nodeIndex = findViaNativeElement(lView, target);
- if (nodeIndex == -1) {
- return null;
- }
- }
- // the goal is not to fill the entire context full of data because the lookups
- // are expensive. Instead, only the target data (the element, component, container, ICU
- // expression or directive details) are filled into the context. If called multiple times
- // with different target values then the missing target data will be filled in.
- const native = unwrapRNode(lView[nodeIndex]);
- const existingCtx = readPatchedData(native);
- const context = (existingCtx && !Array.isArray(existingCtx)) ?
- existingCtx :
- createLContext(lView, nodeIndex, native);
- // only when the component has been discovered then update the monkey-patch
- if (component && context.component === undefined) {
- context.component = component;
- attachPatchData(context.component, context);
- }
- // only when the directives have been discovered then update the monkey-patch
- if (directives && context.directives === undefined) {
- context.directives = directives;
- for (let i = 0; i < directives.length; i++) {
- attachPatchData(directives[i], context);
- }
- }
- attachPatchData(context.native, context);
- mpValue = context;
- }
- }
- else {
- const rElement = target;
- ngDevMode && assertDomNode(rElement);
- // if the context is not found then we need to traverse upwards up the DOM
- // to find the nearest element that has already been monkey patched with data
- let parent = rElement;
- while (parent = parent.parentNode) {
- const parentContext = readPatchedData(parent);
- if (parentContext) {
- let lView;
- if (Array.isArray(parentContext)) {
- lView = parentContext;
- }
- else {
- lView = parentContext.lView;
- }
- // the edge of the app was also reached here through another means
- // (maybe because the DOM was changed manually).
- if (!lView) {
- return null;
- }
- const index = findViaNativeElement(lView, rElement);
- if (index >= 0) {
- const native = unwrapRNode(lView[index]);
- const context = createLContext(lView, index, native);
- attachPatchData(native, context);
- mpValue = context;
- break;
- }
- }
- }
- }
- return mpValue || null;
- }
- /**
- * Creates an empty instance of a `LContext` context
- */
- function createLContext(lView, nodeIndex, native) {
- return {
- lView,
- nodeIndex,
- native,
- component: undefined,
- directives: undefined,
- localRefs: undefined,
- };
- }
- /**
- * Takes a component instance and returns the view for that component.
- *
- * @param componentInstance
- * @returns The component's view
- */
- function getComponentViewByInstance(componentInstance) {
- let lView = readPatchedData(componentInstance);
- let view;
- if (Array.isArray(lView)) {
- const nodeIndex = findViaComponent(lView, componentInstance);
- view = getComponentLViewByIndex(nodeIndex, lView);
- const context = createLContext(lView, nodeIndex, view[HOST]);
- context.component = componentInstance;
- attachPatchData(componentInstance, context);
- attachPatchData(context.native, context);
- }
- else {
- const context = lView;
- view = getComponentLViewByIndex(context.nodeIndex, context.lView);
- }
- return view;
- }
- /**
- * Assigns the given data to the given target (which could be a component,
- * directive or DOM node instance) using monkey-patching.
- */
- function attachPatchData(target, data) {
- target[MONKEY_PATCH_KEY_NAME] = data;
- }
- function isComponentInstance(instance) {
- return instance && instance.constructor && instance.constructor.ɵcmp;
- }
- function isDirectiveInstance(instance) {
- return instance && instance.constructor && instance.constructor.ɵdir;
- }
- /**
- * Locates the element within the given LView and returns the matching index
- */
- function findViaNativeElement(lView, target) {
- const tView = lView[TVIEW];
- for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
- if (unwrapRNode(lView[i]) === target) {
- return i;
- }
- }
- return -1;
- }
- /**
- * Locates the next tNode (child, sibling or parent).
- */
- function traverseNextElement(tNode) {
- if (tNode.child) {
- return tNode.child;
- }
- else if (tNode.next) {
- return tNode.next;
- }
- else {
- // Let's take the following template: <div><span>text</span></div><component/>
- // After checking the text node, we need to find the next parent that has a "next" TNode,
- // in this case the parent `div`, so that we can find the component.
- while (tNode.parent && !tNode.parent.next) {
- tNode = tNode.parent;
- }
- return tNode.parent && tNode.parent.next;
- }
- }
- /**
- * Locates the component within the given LView and returns the matching index
- */
- function findViaComponent(lView, componentInstance) {
- const componentIndices = lView[TVIEW].components;
- if (componentIndices) {
- for (let i = 0; i < componentIndices.length; i++) {
- const elementComponentIndex = componentIndices[i];
- const componentView = getComponentLViewByIndex(elementComponentIndex, lView);
- if (componentView[CONTEXT] === componentInstance) {
- return elementComponentIndex;
- }
- }
- }
- else {
- const rootComponentView = getComponentLViewByIndex(HEADER_OFFSET, lView);
- const rootComponent = rootComponentView[CONTEXT];
- if (rootComponent === componentInstance) {
- // we are dealing with the root element here therefore we know that the
- // element is the very first element after the HEADER data in the lView
- return HEADER_OFFSET;
- }
- }
- return -1;
- }
- /**
- * Locates the directive within the given LView and returns the matching index
- */
- function findViaDirective(lView, directiveInstance) {
- // if a directive is monkey patched then it will (by default)
- // have a reference to the LView of the current view. The
- // element bound to the directive being search lives somewhere
- // in the view data. We loop through the nodes and check their
- // list of directives for the instance.
- let tNode = lView[TVIEW].firstChild;
- while (tNode) {
- const directiveIndexStart = tNode.directiveStart;
- const directiveIndexEnd = tNode.directiveEnd;
- for (let i = directiveIndexStart; i < directiveIndexEnd; i++) {
- if (lView[i] === directiveInstance) {
- return tNode.index;
- }
- }
- tNode = traverseNextElement(tNode);
- }
- return -1;
- }
- /**
- * Returns a list of directives extracted from the given view based on the
- * provided list of directive index values.
- *
- * @param nodeIndex The node index
- * @param lView The target view data
- * @param includeComponents Whether or not to include components in returned directives
- */
- function getDirectivesAtNodeIndex(nodeIndex, lView, includeComponents) {
- const tNode = lView[TVIEW].data[nodeIndex];
- let directiveStartIndex = tNode.directiveStart;
- if (directiveStartIndex == 0)
- return EMPTY_ARRAY;
- const directiveEndIndex = tNode.directiveEnd;
- if (!includeComponents && tNode.flags & 2 /* isComponentHost */)
- directiveStartIndex++;
- return lView.slice(directiveStartIndex, directiveEndIndex);
- }
- function getComponentAtNodeIndex(nodeIndex, lView) {
- const tNode = lView[TVIEW].data[nodeIndex];
- let directiveStartIndex = tNode.directiveStart;
- return tNode.flags & 2 /* isComponentHost */ ? lView[directiveStartIndex] : null;
- }
- /**
- * Returns a map of local references (local reference name => element or directive instance) that
- * exist on a given element.
- */
- function discoverLocalRefs(lView, nodeIndex) {
- const tNode = lView[TVIEW].data[nodeIndex];
- if (tNode && tNode.localNames) {
- const result = {};
- let localIndex = tNode.index + 1;
- for (let i = 0; i < tNode.localNames.length; i += 2) {
- result[tNode.localNames[i]] = lView[localIndex];
- localIndex++;
- }
- return result;
- }
- return null;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ɵ0$4 = () => (typeof requestAnimationFrame !== 'undefined' &&
- requestAnimationFrame || // browser only
- setTimeout // everything else
- )
- .bind(_global);
- const defaultScheduler = (ɵ0$4)();
- /**
- *
- * @codeGenApi
- */
- function ɵɵresolveWindow(element) {
- return { name: 'window', target: element.ownerDocument.defaultView };
- }
- /**
- *
- * @codeGenApi
- */
- function ɵɵresolveDocument(element) {
- return { name: 'document', target: element.ownerDocument };
- }
- /**
- *
- * @codeGenApi
- */
- function ɵɵresolveBody(element) {
- return { name: 'body', target: element.ownerDocument.body };
- }
- /**
- * The special delimiter we use to separate property names, prefixes, and suffixes
- * in property binding metadata. See storeBindingMetadata().
- *
- * We intentionally use the Unicode "REPLACEMENT CHARACTER" (U+FFFD) as a delimiter
- * because it is a very uncommon character that is unlikely to be part of a user's
- * property names or interpolation strings. If it is in fact used in a property
- * binding, DebugElement.properties will not return the correct value for that
- * binding. However, there should be no runtime effect for real applications.
- *
- * This character is typically rendered as a question mark inside of a diamond.
- * See https://en.wikipedia.org/wiki/Specials_(Unicode_block)
- *
- */
- const INTERPOLATION_DELIMITER = `�`;
- /**
- * Unwrap a value which might be behind a closure (for forward declaration reasons).
- */
- function maybeUnwrapFn(value) {
- if (value instanceof Function) {
- return value();
- }
- else {
- return value;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /** Called when there are multiple component selectors that match a given node */
- function throwMultipleComponentError(tNode) {
- throw new RuntimeError("300" /* MULTIPLE_COMPONENTS_MATCH */, `Multiple components match node with tagname ${tNode.value}`);
- }
- /** Throws an ExpressionChangedAfterChecked error if checkNoChanges mode is on. */
- function throwErrorIfNoChangesMode(creationMode, oldValue, currValue, propName) {
- const field = propName ? ` for '${propName}'` : '';
- let msg = `ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value${field}: '${oldValue}'. Current value: '${currValue}'.`;
- if (creationMode) {
- msg +=
- ` It seems like the view has been created after its parent and its children have been dirty checked.` +
- ` Has it been created in a change detection hook?`;
- }
- // TODO: include debug context, see `viewDebugError` function in
- // `packages/core/src/view/errors.ts` for reference.
- throw new RuntimeError("100" /* EXPRESSION_CHANGED_AFTER_CHECKED */, msg);
- }
- function constructDetailsForInterpolation(lView, rootIndex, expressionIndex, meta, changedValue) {
- const [propName, prefix, ...chunks] = meta.split(INTERPOLATION_DELIMITER);
- let oldValue = prefix, newValue = prefix;
- for (let i = 0; i < chunks.length; i++) {
- const slotIdx = rootIndex + i;
- oldValue += `${lView[slotIdx]}${chunks[i]}`;
- newValue += `${slotIdx === expressionIndex ? changedValue : lView[slotIdx]}${chunks[i]}`;
- }
- return { propName, oldValue, newValue };
- }
- /**
- * Constructs an object that contains details for the ExpressionChangedAfterItHasBeenCheckedError:
- * - property name (for property bindings or interpolations)
- * - old and new values, enriched using information from metadata
- *
- * More information on the metadata storage format can be found in `storePropertyBindingMetadata`
- * function description.
- */
- function getExpressionChangedErrorDetails(lView, bindingIndex, oldValue, newValue) {
- const tData = lView[TVIEW].data;
- const metadata = tData[bindingIndex];
- if (typeof metadata === 'string') {
- // metadata for property interpolation
- if (metadata.indexOf(INTERPOLATION_DELIMITER) > -1) {
- return constructDetailsForInterpolation(lView, bindingIndex, bindingIndex, metadata, newValue);
- }
- // metadata for property binding
- return { propName: metadata, oldValue, newValue };
- }
- // metadata is not available for this expression, check if this expression is a part of the
- // property interpolation by going from the current binding index left and look for a string that
- // contains INTERPOLATION_DELIMITER, the layout in tView.data for this case will look like this:
- // [..., 'id�Prefix � and � suffix', null, null, null, ...]
- if (metadata === null) {
- let idx = bindingIndex - 1;
- while (typeof tData[idx] !== 'string' && tData[idx + 1] === null) {
- idx--;
- }
- const meta = tData[idx];
- if (typeof meta === 'string') {
- const matches = meta.match(new RegExp(INTERPOLATION_DELIMITER, 'g'));
- // first interpolation delimiter separates property name from interpolation parts (in case of
- // property interpolations), so we subtract one from total number of found delimiters
- if (matches && (matches.length - 1) > bindingIndex - idx) {
- return constructDetailsForInterpolation(lView, idx, bindingIndex, meta, newValue);
- }
- }
- }
- return { propName: undefined, oldValue, newValue };
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Flags for renderer-specific style modifiers.
- * @publicApi
- */
- var RendererStyleFlags2;
- (function (RendererStyleFlags2) {
- // TODO(misko): This needs to be refactored into a separate file so that it can be imported from
- // `node_manipulation.ts` Currently doing the import cause resolution order to change and fails
- // the tests. The work around is to have hard coded value in `node_manipulation.ts` for now.
- /**
- * Marks a style as important.
- */
- RendererStyleFlags2[RendererStyleFlags2["Important"] = 1] = "Important";
- /**
- * Marks a style as using dash case naming (this-is-dash-case).
- */
- RendererStyleFlags2[RendererStyleFlags2["DashCase"] = 2] = "DashCase";
- })(RendererStyleFlags2 || (RendererStyleFlags2 = {}));
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- let _icuContainerIterate;
- /**
- * Iterator which provides ability to visit all of the `TIcuContainerNode` root `RNode`s.
- */
- function icuContainerIterate(tIcuContainerNode, lView) {
- return _icuContainerIterate(tIcuContainerNode, lView);
- }
- /**
- * Ensures that `IcuContainerVisitor`'s implementation is present.
- *
- * This function is invoked when i18n instruction comes across an ICU. The purpose is to allow the
- * bundler to tree shake ICU logic and only load it if ICU instruction is executed.
- */
- function ensureIcuContainerVisitorLoaded(loader) {
- if (_icuContainerIterate === undefined) {
- // Do not inline this function. We want to keep `ensureIcuContainerVisitorLoaded` light, so it
- // can be inlined into call-site.
- _icuContainerIterate = loader();
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // Note: This hack is necessary so we don't erroneously get a circular dependency
- // failure based on types.
- const unusedValueExportToPlacateAjd$5 = 1;
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Gets the parent LView of the passed LView, if the PARENT is an LContainer, will get the parent of
- * that LContainer, which is an LView
- * @param lView the lView whose parent to get
- */
- function getLViewParent(lView) {
- ngDevMode && assertLView(lView);
- const parent = lView[PARENT];
- return isLContainer(parent) ? parent[PARENT] : parent;
- }
- /**
- * Retrieve the root view from any component or `LView` by walking the parent `LView` until
- * reaching the root `LView`.
- *
- * @param componentOrLView any component or `LView`
- */
- function getRootView(componentOrLView) {
- ngDevMode && assertDefined(componentOrLView, 'component');
- let lView = isLView(componentOrLView) ? componentOrLView : readPatchedLView(componentOrLView);
- while (lView && !(lView[FLAGS] & 512 /* IsRoot */)) {
- lView = getLViewParent(lView);
- }
- ngDevMode && assertLView(lView);
- return lView;
- }
- /**
- * Returns the `RootContext` instance that is associated with
- * the application where the target is situated. It does this by walking the parent views until it
- * gets to the root view, then getting the context off of that.
- *
- * @param viewOrComponent the `LView` or component to get the root context for.
- */
- function getRootContext(viewOrComponent) {
- const rootView = getRootView(viewOrComponent);
- ngDevMode &&
- assertDefined(rootView[CONTEXT], 'RootView has no context. Perhaps it is disconnected?');
- return rootView[CONTEXT];
- }
- /**
- * Gets the first `LContainer` in the LView or `null` if none exists.
- */
- function getFirstLContainer(lView) {
- return getNearestLContainer(lView[CHILD_HEAD]);
- }
- /**
- * Gets the next `LContainer` that is a sibling of the given container.
- */
- function getNextLContainer(container) {
- return getNearestLContainer(container[NEXT]);
- }
- function getNearestLContainer(viewOrContainer) {
- while (viewOrContainer !== null && !isLContainer(viewOrContainer)) {
- viewOrContainer = viewOrContainer[NEXT];
- }
- return viewOrContainer;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const unusedValueToPlacateAjd = unusedValueExportToPlacateAjd$1 + unusedValueExportToPlacateAjd$4 + unusedValueExportToPlacateAjd$5 + unusedValueExportToPlacateAjd$2 + unusedValueExportToPlacateAjd;
- /**
- * NOTE: for performance reasons, the possible actions are inlined within the function instead of
- * being passed as an argument.
- */
- function applyToElementOrContainer(action, renderer, parent, lNodeToHandle, beforeNode) {
- // If this slot was allocated for a text node dynamically created by i18n, the text node itself
- // won't be created until i18nApply() in the update block, so this node should be skipped.
- // For more info, see "ICU expressions should work inside an ngTemplateOutlet inside an ngFor"
- // in `i18n_spec.ts`.
- if (lNodeToHandle != null) {
- let lContainer;
- let isComponent = false;
- // We are expecting an RNode, but in the case of a component or LContainer the `RNode` is
- // wrapped in an array which needs to be unwrapped. We need to know if it is a component and if
- // it has LContainer so that we can process all of those cases appropriately.
- if (isLContainer(lNodeToHandle)) {
- lContainer = lNodeToHandle;
- }
- else if (isLView(lNodeToHandle)) {
- isComponent = true;
- ngDevMode && assertDefined(lNodeToHandle[HOST], 'HOST must be defined for a component LView');
- lNodeToHandle = lNodeToHandle[HOST];
- }
- const rNode = unwrapRNode(lNodeToHandle);
- ngDevMode && !isProceduralRenderer(renderer) && assertDomNode(rNode);
- if (action === 0 /* Create */ && parent !== null) {
- if (beforeNode == null) {
- nativeAppendChild(renderer, parent, rNode);
- }
- else {
- nativeInsertBefore(renderer, parent, rNode, beforeNode || null, true);
- }
- }
- else if (action === 1 /* Insert */ && parent !== null) {
- nativeInsertBefore(renderer, parent, rNode, beforeNode || null, true);
- }
- else if (action === 2 /* Detach */) {
- nativeRemoveNode(renderer, rNode, isComponent);
- }
- else if (action === 3 /* Destroy */) {
- ngDevMode && ngDevMode.rendererDestroyNode++;
- renderer.destroyNode(rNode);
- }
- if (lContainer != null) {
- applyContainer(renderer, action, lContainer, parent, beforeNode);
- }
- }
- }
- function createTextNode(renderer, value) {
- ngDevMode && ngDevMode.rendererCreateTextNode++;
- ngDevMode && ngDevMode.rendererSetText++;
- return isProceduralRenderer(renderer) ? renderer.createText(value) :
- renderer.createTextNode(value);
- }
- function updateTextNode(renderer, rNode, value) {
- ngDevMode && ngDevMode.rendererSetText++;
- isProceduralRenderer(renderer) ? renderer.setValue(rNode, value) : rNode.textContent = value;
- }
- function createCommentNode(renderer, value) {
- ngDevMode && ngDevMode.rendererCreateComment++;
- // isProceduralRenderer check is not needed because both `Renderer2` and `Renderer3` have the same
- // method name.
- return renderer.createComment(value);
- }
- /**
- * Creates a native element from a tag name, using a renderer.
- * @param renderer A renderer to use
- * @param name the tag name
- * @param namespace Optional namespace for element.
- * @returns the element created
- */
- function createElementNode(renderer, name, namespace) {
- ngDevMode && ngDevMode.rendererCreateElement++;
- if (isProceduralRenderer(renderer)) {
- return renderer.createElement(name, namespace);
- }
- else {
- return namespace === null ? renderer.createElement(name) :
- renderer.createElementNS(namespace, name);
- }
- }
- /**
- * Removes all DOM elements associated with a view.
- *
- * Because some root nodes of the view may be containers, we sometimes need
- * to propagate deeply into the nested containers to remove all elements in the
- * views beneath it.
- *
- * @param tView The `TView' of the `LView` from which elements should be added or removed
- * @param lView The view from which elements should be added or removed
- */
- function removeViewFromContainer(tView, lView) {
- const renderer = lView[RENDERER];
- applyView(tView, lView, renderer, 2 /* Detach */, null, null);
- lView[HOST] = null;
- lView[T_HOST] = null;
- }
- /**
- * Adds all DOM elements associated with a view.
- *
- * Because some root nodes of the view may be containers, we sometimes need
- * to propagate deeply into the nested containers to add all elements in the
- * views beneath it.
- *
- * @param tView The `TView' of the `LView` from which elements should be added or removed
- * @param parentTNode The `TNode` where the `LView` should be attached to.
- * @param renderer Current renderer to use for DOM manipulations.
- * @param lView The view from which elements should be added or removed
- * @param parentNativeNode The parent `RElement` where it should be inserted into.
- * @param beforeNode The node before which elements should be added, if insert mode
- */
- function addViewToContainer(tView, parentTNode, renderer, lView, parentNativeNode, beforeNode) {
- lView[HOST] = parentNativeNode;
- lView[T_HOST] = parentTNode;
- applyView(tView, lView, renderer, 1 /* Insert */, parentNativeNode, beforeNode);
- }
- /**
- * Detach a `LView` from the DOM by detaching its nodes.
- *
- * @param tView The `TView' of the `LView` to be detached
- * @param lView the `LView` to be detached.
- */
- function renderDetachView(tView, lView) {
- applyView(tView, lView, lView[RENDERER], 2 /* Detach */, null, null);
- }
- /**
- * Traverses down and up the tree of views and containers to remove listeners and
- * call onDestroy callbacks.
- *
- * Notes:
- * - Because it's used for onDestroy calls, it needs to be bottom-up.
- * - Must process containers instead of their views to avoid splicing
- * when views are destroyed and re-added.
- * - Using a while loop because it's faster than recursion
- * - Destroy only called on movement to sibling or movement to parent (laterally or up)
- *
- * @param rootView The view to destroy
- */
- function destroyViewTree(rootView) {
- // If the view has no children, we can clean it up and return early.
- let lViewOrLContainer = rootView[CHILD_HEAD];
- if (!lViewOrLContainer) {
- return cleanUpView(rootView[TVIEW], rootView);
- }
- while (lViewOrLContainer) {
- let next = null;
- if (isLView(lViewOrLContainer)) {
- // If LView, traverse down to child.
- next = lViewOrLContainer[CHILD_HEAD];
- }
- else {
- ngDevMode && assertLContainer(lViewOrLContainer);
- // If container, traverse down to its first LView.
- const firstView = lViewOrLContainer[CONTAINER_HEADER_OFFSET];
- if (firstView)
- next = firstView;
- }
- if (!next) {
- // Only clean up view when moving to the side or up, as destroy hooks
- // should be called in order from the bottom up.
- while (lViewOrLContainer && !lViewOrLContainer[NEXT] && lViewOrLContainer !== rootView) {
- if (isLView(lViewOrLContainer)) {
- cleanUpView(lViewOrLContainer[TVIEW], lViewOrLContainer);
- }
- lViewOrLContainer = lViewOrLContainer[PARENT];
- }
- if (lViewOrLContainer === null)
- lViewOrLContainer = rootView;
- if (isLView(lViewOrLContainer)) {
- cleanUpView(lViewOrLContainer[TVIEW], lViewOrLContainer);
- }
- next = lViewOrLContainer && lViewOrLContainer[NEXT];
- }
- lViewOrLContainer = next;
- }
- }
- /**
- * Inserts a view into a container.
- *
- * This adds the view to the container's array of active views in the correct
- * position. It also adds the view's elements to the DOM if the container isn't a
- * root node of another view (in that case, the view's elements will be added when
- * the container's parent view is added later).
- *
- * @param tView The `TView' of the `LView` to insert
- * @param lView The view to insert
- * @param lContainer The container into which the view should be inserted
- * @param index Which index in the container to insert the child view into
- */
- function insertView(tView, lView, lContainer, index) {
- ngDevMode && assertLView(lView);
- ngDevMode && assertLContainer(lContainer);
- const indexInContainer = CONTAINER_HEADER_OFFSET + index;
- const containerLength = lContainer.length;
- if (index > 0) {
- // This is a new view, we need to add it to the children.
- lContainer[indexInContainer - 1][NEXT] = lView;
- }
- if (index < containerLength - CONTAINER_HEADER_OFFSET) {
- lView[NEXT] = lContainer[indexInContainer];
- addToArray(lContainer, CONTAINER_HEADER_OFFSET + index, lView);
- }
- else {
- lContainer.push(lView);
- lView[NEXT] = null;
- }
- lView[PARENT] = lContainer;
- // track views where declaration and insertion points are different
- const declarationLContainer = lView[DECLARATION_LCONTAINER];
- if (declarationLContainer !== null && lContainer !== declarationLContainer) {
- trackMovedView(declarationLContainer, lView);
- }
- // notify query that a new view has been added
- const lQueries = lView[QUERIES];
- if (lQueries !== null) {
- lQueries.insertView(tView);
- }
- // Sets the attached flag
- lView[FLAGS] |= 128 /* Attached */;
- }
- /**
- * Track views created from the declaration container (TemplateRef) and inserted into a
- * different LContainer.
- */
- function trackMovedView(declarationContainer, lView) {
- ngDevMode && assertDefined(lView, 'LView required');
- ngDevMode && assertLContainer(declarationContainer);
- const movedViews = declarationContainer[MOVED_VIEWS];
- const insertedLContainer = lView[PARENT];
- ngDevMode && assertLContainer(insertedLContainer);
- const insertedComponentLView = insertedLContainer[PARENT][DECLARATION_COMPONENT_VIEW];
- ngDevMode && assertDefined(insertedComponentLView, 'Missing insertedComponentLView');
- const declaredComponentLView = lView[DECLARATION_COMPONENT_VIEW];
- ngDevMode && assertDefined(declaredComponentLView, 'Missing declaredComponentLView');
- if (declaredComponentLView !== insertedComponentLView) {
- // At this point the declaration-component is not same as insertion-component; this means that
- // this is a transplanted view. Mark the declared lView as having transplanted views so that
- // those views can participate in CD.
- declarationContainer[HAS_TRANSPLANTED_VIEWS] = true;
- }
- if (movedViews === null) {
- declarationContainer[MOVED_VIEWS] = [lView];
- }
- else {
- movedViews.push(lView);
- }
- }
- function detachMovedView(declarationContainer, lView) {
- ngDevMode && assertLContainer(declarationContainer);
- ngDevMode &&
- assertDefined(declarationContainer[MOVED_VIEWS], 'A projected view should belong to a non-empty projected views collection');
- const movedViews = declarationContainer[MOVED_VIEWS];
- const declarationViewIndex = movedViews.indexOf(lView);
- const insertionLContainer = lView[PARENT];
- ngDevMode && assertLContainer(insertionLContainer);
- // If the view was marked for refresh but then detached before it was checked (where the flag
- // would be cleared and the counter decremented), we need to decrement the view counter here
- // instead.
- if (lView[FLAGS] & 1024 /* RefreshTransplantedView */) {
- lView[FLAGS] &= ~1024 /* RefreshTransplantedView */;
- updateTransplantedViewCount(insertionLContainer, -1);
- }
- movedViews.splice(declarationViewIndex, 1);
- }
- /**
- * Detaches a view from a container.
- *
- * This method removes the view from the container's array of active views. It also
- * removes the view's elements from the DOM.
- *
- * @param lContainer The container from which to detach a view
- * @param removeIndex The index of the view to detach
- * @returns Detached LView instance.
- */
- function detachView(lContainer, removeIndex) {
- if (lContainer.length <= CONTAINER_HEADER_OFFSET)
- return;
- const indexInContainer = CONTAINER_HEADER_OFFSET + removeIndex;
- const viewToDetach = lContainer[indexInContainer];
- if (viewToDetach) {
- const declarationLContainer = viewToDetach[DECLARATION_LCONTAINER];
- if (declarationLContainer !== null && declarationLContainer !== lContainer) {
- detachMovedView(declarationLContainer, viewToDetach);
- }
- if (removeIndex > 0) {
- lContainer[indexInContainer - 1][NEXT] = viewToDetach[NEXT];
- }
- const removedLView = removeFromArray(lContainer, CONTAINER_HEADER_OFFSET + removeIndex);
- removeViewFromContainer(viewToDetach[TVIEW], viewToDetach);
- // notify query that a view has been removed
- const lQueries = removedLView[QUERIES];
- if (lQueries !== null) {
- lQueries.detachView(removedLView[TVIEW]);
- }
- viewToDetach[PARENT] = null;
- viewToDetach[NEXT] = null;
- // Unsets the attached flag
- viewToDetach[FLAGS] &= ~128 /* Attached */;
- }
- return viewToDetach;
- }
- /**
- * A standalone function which destroys an LView,
- * conducting clean up (e.g. removing listeners, calling onDestroys).
- *
- * @param tView The `TView' of the `LView` to be destroyed
- * @param lView The view to be destroyed.
- */
- function destroyLView(tView, lView) {
- if (!(lView[FLAGS] & 256 /* Destroyed */)) {
- const renderer = lView[RENDERER];
- if (isProceduralRenderer(renderer) && renderer.destroyNode) {
- applyView(tView, lView, renderer, 3 /* Destroy */, null, null);
- }
- destroyViewTree(lView);
- }
- }
- /**
- * Calls onDestroys hooks for all directives and pipes in a given view and then removes all
- * listeners. Listeners are removed as the last step so events delivered in the onDestroys hooks
- * can be propagated to @Output listeners.
- *
- * @param tView `TView` for the `LView` to clean up.
- * @param lView The LView to clean up
- */
- function cleanUpView(tView, lView) {
- if (!(lView[FLAGS] & 256 /* Destroyed */)) {
- // Usually the Attached flag is removed when the view is detached from its parent, however
- // if it's a root view, the flag won't be unset hence why we're also removing on destroy.
- lView[FLAGS] &= ~128 /* Attached */;
- // Mark the LView as destroyed *before* executing the onDestroy hooks. An onDestroy hook
- // runs arbitrary user code, which could include its own `viewRef.destroy()` (or similar). If
- // We don't flag the view as destroyed before the hooks, this could lead to an infinite loop.
- // This also aligns with the ViewEngine behavior. It also means that the onDestroy hook is
- // really more of an "afterDestroy" hook if you think about it.
- lView[FLAGS] |= 256 /* Destroyed */;
- executeOnDestroys(tView, lView);
- processCleanups(tView, lView);
- // For component views only, the local renderer is destroyed at clean up time.
- if (lView[TVIEW].type === 1 /* Component */ && isProceduralRenderer(lView[RENDERER])) {
- ngDevMode && ngDevMode.rendererDestroy++;
- lView[RENDERER].destroy();
- }
- const declarationContainer = lView[DECLARATION_LCONTAINER];
- // we are dealing with an embedded view that is still inserted into a container
- if (declarationContainer !== null && isLContainer(lView[PARENT])) {
- // and this is a projected view
- if (declarationContainer !== lView[PARENT]) {
- detachMovedView(declarationContainer, lView);
- }
- // For embedded views still attached to a container: remove query result from this view.
- const lQueries = lView[QUERIES];
- if (lQueries !== null) {
- lQueries.detachView(tView);
- }
- }
- }
- }
- /** Removes listeners and unsubscribes from output subscriptions */
- function processCleanups(tView, lView) {
- const tCleanup = tView.cleanup;
- const lCleanup = lView[CLEANUP];
- // `LCleanup` contains both share information with `TCleanup` as well as instance specific
- // information appended at the end. We need to know where the end of the `TCleanup` information
- // is, and we track this with `lastLCleanupIndex`.
- let lastLCleanupIndex = -1;
- if (tCleanup !== null) {
- for (let i = 0; i < tCleanup.length - 1; i += 2) {
- if (typeof tCleanup[i] === 'string') {
- // This is a native DOM listener
- const idxOrTargetGetter = tCleanup[i + 1];
- const target = typeof idxOrTargetGetter === 'function' ?
- idxOrTargetGetter(lView) :
- unwrapRNode(lView[idxOrTargetGetter]);
- const listener = lCleanup[lastLCleanupIndex = tCleanup[i + 2]];
- const useCaptureOrSubIdx = tCleanup[i + 3];
- if (typeof useCaptureOrSubIdx === 'boolean') {
- // native DOM listener registered with Renderer3
- target.removeEventListener(tCleanup[i], listener, useCaptureOrSubIdx);
- }
- else {
- if (useCaptureOrSubIdx >= 0) {
- // unregister
- lCleanup[lastLCleanupIndex = useCaptureOrSubIdx]();
- }
- else {
- // Subscription
- lCleanup[lastLCleanupIndex = -useCaptureOrSubIdx].unsubscribe();
- }
- }
- i += 2;
- }
- else {
- // This is a cleanup function that is grouped with the index of its context
- const context = lCleanup[lastLCleanupIndex = tCleanup[i + 1]];
- tCleanup[i].call(context);
- }
- }
- if (lCleanup !== null) {
- for (let i = lastLCleanupIndex + 1; i < lCleanup.length; i++) {
- const instanceCleanupFn = lCleanup[i];
- ngDevMode && assertFunction(instanceCleanupFn, 'Expecting instance cleanup function.');
- instanceCleanupFn();
- }
- }
- lView[CLEANUP] = null;
- }
- }
- /** Calls onDestroy hooks for this view */
- function executeOnDestroys(tView, lView) {
- let destroyHooks;
- if (tView != null && (destroyHooks = tView.destroyHooks) != null) {
- for (let i = 0; i < destroyHooks.length; i += 2) {
- const context = lView[destroyHooks[i]];
- // Only call the destroy hook if the context has been requested.
- if (!(context instanceof NodeInjectorFactory)) {
- const toCall = destroyHooks[i + 1];
- if (Array.isArray(toCall)) {
- for (let j = 0; j < toCall.length; j += 2) {
- toCall[j + 1].call(context[toCall[j]]);
- }
- }
- else {
- toCall.call(context);
- }
- }
- }
- }
- }
- /**
- * Returns a native element if a node can be inserted into the given parent.
- *
- * There are two reasons why we may not be able to insert a element immediately.
- * - Projection: When creating a child content element of a component, we have to skip the
- * insertion because the content of a component will be projected.
- * `<component><content>delayed due to projection</content></component>`
- * - Parent container is disconnected: This can happen when we are inserting a view into
- * parent container, which itself is disconnected. For example the parent container is part
- * of a View which has not be inserted or is made for projection but has not been inserted
- * into destination.
- *
- * @param tView: Current `TView`.
- * @param tNode: `TNode` for which we wish to retrieve render parent.
- * @param lView: Current `LView`.
- */
- function getParentRElement(tView, tNode, lView) {
- return getClosestRElement(tView, tNode.parent, lView);
- }
- /**
- * Get closest `RElement` or `null` if it can't be found.
- *
- * If `TNode` is `TNodeType.Element` => return `RElement` at `LView[tNode.index]` location.
- * If `TNode` is `TNodeType.ElementContainer|IcuContain` => return the parent (recursively).
- * If `TNode` is `null` then return host `RElement`:
- * - return `null` if projection
- * - return `null` if parent container is disconnected (we have no parent.)
- *
- * @param tView: Current `TView`.
- * @param tNode: `TNode` for which we wish to retrieve `RElement` (or `null` if host element is
- * needed).
- * @param lView: Current `LView`.
- * @returns `null` if the `RElement` can't be determined at this time (no parent / projection)
- */
- function getClosestRElement(tView, tNode, lView) {
- let parentTNode = tNode;
- // Skip over element and ICU containers as those are represented by a comment node and
- // can't be used as a render parent.
- while (parentTNode !== null &&
- (parentTNode.type & (8 /* ElementContainer */ | 32 /* Icu */))) {
- tNode = parentTNode;
- parentTNode = tNode.parent;
- }
- // If the parent tNode is null, then we are inserting across views: either into an embedded view
- // or a component view.
- if (parentTNode === null) {
- // We are inserting a root element of the component view into the component host element and
- // it should always be eager.
- return lView[HOST];
- }
- else {
- ngDevMode && assertTNodeType(parentTNode, 3 /* AnyRNode */ | 4 /* Container */);
- if (parentTNode.flags & 2 /* isComponentHost */) {
- ngDevMode && assertTNodeForLView(parentTNode, lView);
- const encapsulation = tView.data[parentTNode.directiveStart].encapsulation;
- // We've got a parent which is an element in the current view. We just need to verify if the
- // parent element is not a component. Component's content nodes are not inserted immediately
- // because they will be projected, and so doing insert at this point would be wasteful.
- // Since the projection would then move it to its final destination. Note that we can't
- // make this assumption when using the Shadow DOM, because the native projection placeholders
- // (<content> or <slot>) have to be in place as elements are being inserted.
- if (encapsulation === ViewEncapsulation.None ||
- encapsulation === ViewEncapsulation.Emulated) {
- return null;
- }
- }
- return getNativeByTNode(parentTNode, lView);
- }
- }
- /**
- * Inserts a native node before another native node for a given parent using {@link Renderer3}.
- * This is a utility function that can be used when native nodes were determined - it abstracts an
- * actual renderer being used.
- */
- function nativeInsertBefore(renderer, parent, child, beforeNode, isMove) {
- ngDevMode && ngDevMode.rendererInsertBefore++;
- if (isProceduralRenderer(renderer)) {
- renderer.insertBefore(parent, child, beforeNode, isMove);
- }
- else {
- parent.insertBefore(child, beforeNode, isMove);
- }
- }
- function nativeAppendChild(renderer, parent, child) {
- ngDevMode && ngDevMode.rendererAppendChild++;
- ngDevMode && assertDefined(parent, 'parent node must be defined');
- if (isProceduralRenderer(renderer)) {
- renderer.appendChild(parent, child);
- }
- else {
- parent.appendChild(child);
- }
- }
- function nativeAppendOrInsertBefore(renderer, parent, child, beforeNode, isMove) {
- if (beforeNode !== null) {
- nativeInsertBefore(renderer, parent, child, beforeNode, isMove);
- }
- else {
- nativeAppendChild(renderer, parent, child);
- }
- }
- /** Removes a node from the DOM given its native parent. */
- function nativeRemoveChild(renderer, parent, child, isHostElement) {
- if (isProceduralRenderer(renderer)) {
- renderer.removeChild(parent, child, isHostElement);
- }
- else {
- parent.removeChild(child);
- }
- }
- /**
- * Returns a native parent of a given native node.
- */
- function nativeParentNode(renderer, node) {
- return (isProceduralRenderer(renderer) ? renderer.parentNode(node) : node.parentNode);
- }
- /**
- * Returns a native sibling of a given native node.
- */
- function nativeNextSibling(renderer, node) {
- return isProceduralRenderer(renderer) ? renderer.nextSibling(node) : node.nextSibling;
- }
- /**
- * Find a node in front of which `currentTNode` should be inserted.
- *
- * This method determines the `RNode` in front of which we should insert the `currentRNode`. This
- * takes `TNode.insertBeforeIndex` into account if i18n code has been invoked.
- *
- * @param parentTNode parent `TNode`
- * @param currentTNode current `TNode` (The node which we would like to insert into the DOM)
- * @param lView current `LView`
- */
- function getInsertInFrontOfRNode(parentTNode, currentTNode, lView) {
- return _getInsertInFrontOfRNodeWithI18n(parentTNode, currentTNode, lView);
- }
- /**
- * Find a node in front of which `currentTNode` should be inserted. (Does not take i18n into
- * account)
- *
- * This method determines the `RNode` in front of which we should insert the `currentRNode`. This
- * does not take `TNode.insertBeforeIndex` into account.
- *
- * @param parentTNode parent `TNode`
- * @param currentTNode current `TNode` (The node which we would like to insert into the DOM)
- * @param lView current `LView`
- */
- function getInsertInFrontOfRNodeWithNoI18n(parentTNode, currentTNode, lView) {
- if (parentTNode.type & (8 /* ElementContainer */ | 32 /* Icu */)) {
- return getNativeByTNode(parentTNode, lView);
- }
- return null;
- }
- /**
- * Tree shakable boundary for `getInsertInFrontOfRNodeWithI18n` function.
- *
- * This function will only be set if i18n code runs.
- */
- let _getInsertInFrontOfRNodeWithI18n = getInsertInFrontOfRNodeWithNoI18n;
- /**
- * Tree shakable boundary for `processI18nInsertBefore` function.
- *
- * This function will only be set if i18n code runs.
- */
- let _processI18nInsertBefore;
- function setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore) {
- _getInsertInFrontOfRNodeWithI18n = getInsertInFrontOfRNodeWithI18n;
- _processI18nInsertBefore = processI18nInsertBefore;
- }
- /**
- * Appends the `child` native node (or a collection of nodes) to the `parent`.
- *
- * @param tView The `TView' to be appended
- * @param lView The current LView
- * @param childRNode The native child (or children) that should be appended
- * @param childTNode The TNode of the child element
- */
- function appendChild(tView, lView, childRNode, childTNode) {
- const parentRNode = getParentRElement(tView, childTNode, lView);
- const renderer = lView[RENDERER];
- const parentTNode = childTNode.parent || lView[T_HOST];
- const anchorNode = getInsertInFrontOfRNode(parentTNode, childTNode, lView);
- if (parentRNode != null) {
- if (Array.isArray(childRNode)) {
- for (let i = 0; i < childRNode.length; i++) {
- nativeAppendOrInsertBefore(renderer, parentRNode, childRNode[i], anchorNode, false);
- }
- }
- else {
- nativeAppendOrInsertBefore(renderer, parentRNode, childRNode, anchorNode, false);
- }
- }
- _processI18nInsertBefore !== undefined &&
- _processI18nInsertBefore(renderer, childTNode, lView, childRNode, parentRNode);
- }
- /**
- * Returns the first native node for a given LView, starting from the provided TNode.
- *
- * Native nodes are returned in the order in which those appear in the native tree (DOM).
- */
- function getFirstNativeNode(lView, tNode) {
- if (tNode !== null) {
- ngDevMode &&
- assertTNodeType(tNode, 3 /* AnyRNode */ | 12 /* AnyContainer */ | 32 /* Icu */ | 16 /* Projection */);
- const tNodeType = tNode.type;
- if (tNodeType & 3 /* AnyRNode */) {
- return getNativeByTNode(tNode, lView);
- }
- else if (tNodeType & 4 /* Container */) {
- return getBeforeNodeForView(-1, lView[tNode.index]);
- }
- else if (tNodeType & 8 /* ElementContainer */) {
- const elIcuContainerChild = tNode.child;
- if (elIcuContainerChild !== null) {
- return getFirstNativeNode(lView, elIcuContainerChild);
- }
- else {
- const rNodeOrLContainer = lView[tNode.index];
- if (isLContainer(rNodeOrLContainer)) {
- return getBeforeNodeForView(-1, rNodeOrLContainer);
- }
- else {
- return unwrapRNode(rNodeOrLContainer);
- }
- }
- }
- else if (tNodeType & 32 /* Icu */) {
- let nextRNode = icuContainerIterate(tNode, lView);
- let rNode = nextRNode();
- // If the ICU container has no nodes, than we use the ICU anchor as the node.
- return rNode || unwrapRNode(lView[tNode.index]);
- }
- else {
- const componentView = lView[DECLARATION_COMPONENT_VIEW];
- const componentHost = componentView[T_HOST];
- const parentView = getLViewParent(componentView);
- const firstProjectedTNode = componentHost.projection[tNode.projection];
- if (firstProjectedTNode != null) {
- return getFirstNativeNode(parentView, firstProjectedTNode);
- }
- else {
- return getFirstNativeNode(lView, tNode.next);
- }
- }
- }
- return null;
- }
- function getBeforeNodeForView(viewIndexInContainer, lContainer) {
- const nextViewIndex = CONTAINER_HEADER_OFFSET + viewIndexInContainer + 1;
- if (nextViewIndex < lContainer.length) {
- const lView = lContainer[nextViewIndex];
- const firstTNodeOfView = lView[TVIEW].firstChild;
- if (firstTNodeOfView !== null) {
- return getFirstNativeNode(lView, firstTNodeOfView);
- }
- }
- return lContainer[NATIVE];
- }
- /**
- * Removes a native node itself using a given renderer. To remove the node we are looking up its
- * parent from the native tree as not all platforms / browsers support the equivalent of
- * node.remove().
- *
- * @param renderer A renderer to be used
- * @param rNode The native node that should be removed
- * @param isHostElement A flag indicating if a node to be removed is a host of a component.
- */
- function nativeRemoveNode(renderer, rNode, isHostElement) {
- ngDevMode && ngDevMode.rendererRemoveNode++;
- const nativeParent = nativeParentNode(renderer, rNode);
- if (nativeParent) {
- nativeRemoveChild(renderer, nativeParent, rNode, isHostElement);
- }
- }
- /**
- * Performs the operation of `action` on the node. Typically this involves inserting or removing
- * nodes on the LView or projection boundary.
- */
- function applyNodes(renderer, action, tNode, lView, parentRElement, beforeNode, isProjection) {
- while (tNode != null) {
- ngDevMode && assertTNodeForLView(tNode, lView);
- ngDevMode &&
- assertTNodeType(tNode, 3 /* AnyRNode */ | 12 /* AnyContainer */ | 16 /* Projection */ | 32 /* Icu */);
- const rawSlotValue = lView[tNode.index];
- const tNodeType = tNode.type;
- if (isProjection) {
- if (action === 0 /* Create */) {
- rawSlotValue && attachPatchData(unwrapRNode(rawSlotValue), lView);
- tNode.flags |= 4 /* isProjected */;
- }
- }
- if ((tNode.flags & 64 /* isDetached */) !== 64 /* isDetached */) {
- if (tNodeType & 8 /* ElementContainer */) {
- applyNodes(renderer, action, tNode.child, lView, parentRElement, beforeNode, false);
- applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);
- }
- else if (tNodeType & 32 /* Icu */) {
- const nextRNode = icuContainerIterate(tNode, lView);
- let rNode;
- while (rNode = nextRNode()) {
- applyToElementOrContainer(action, renderer, parentRElement, rNode, beforeNode);
- }
- applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);
- }
- else if (tNodeType & 16 /* Projection */) {
- applyProjectionRecursive(renderer, action, lView, tNode, parentRElement, beforeNode);
- }
- else {
- ngDevMode && assertTNodeType(tNode, 3 /* AnyRNode */ | 4 /* Container */);
- applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);
- }
- }
- tNode = isProjection ? tNode.projectionNext : tNode.next;
- }
- }
- function applyView(tView, lView, renderer, action, parentRElement, beforeNode) {
- applyNodes(renderer, action, tView.firstChild, lView, parentRElement, beforeNode, false);
- }
- /**
- * `applyProjection` performs operation on the projection.
- *
- * Inserting a projection requires us to locate the projected nodes from the parent component. The
- * complication is that those nodes themselves could be re-projected from their parent component.
- *
- * @param tView The `TView` of `LView` which needs to be inserted, detached, destroyed
- * @param lView The `LView` which needs to be inserted, detached, destroyed.
- * @param tProjectionNode node to project
- */
- function applyProjection(tView, lView, tProjectionNode) {
- const renderer = lView[RENDERER];
- const parentRNode = getParentRElement(tView, tProjectionNode, lView);
- const parentTNode = tProjectionNode.parent || lView[T_HOST];
- let beforeNode = getInsertInFrontOfRNode(parentTNode, tProjectionNode, lView);
- applyProjectionRecursive(renderer, 0 /* Create */, lView, tProjectionNode, parentRNode, beforeNode);
- }
- /**
- * `applyProjectionRecursive` performs operation on the projection specified by `action` (insert,
- * detach, destroy)
- *
- * Inserting a projection requires us to locate the projected nodes from the parent component. The
- * complication is that those nodes themselves could be re-projected from their parent component.
- *
- * @param renderer Render to use
- * @param action action to perform (insert, detach, destroy)
- * @param lView The LView which needs to be inserted, detached, destroyed.
- * @param tProjectionNode node to project
- * @param parentRElement parent DOM element for insertion/removal.
- * @param beforeNode Before which node the insertions should happen.
- */
- function applyProjectionRecursive(renderer, action, lView, tProjectionNode, parentRElement, beforeNode) {
- const componentLView = lView[DECLARATION_COMPONENT_VIEW];
- const componentNode = componentLView[T_HOST];
- ngDevMode &&
- assertEqual(typeof tProjectionNode.projection, 'number', 'expecting projection index');
- const nodeToProjectOrRNodes = componentNode.projection[tProjectionNode.projection];
- if (Array.isArray(nodeToProjectOrRNodes)) {
- // This should not exist, it is a bit of a hack. When we bootstrap a top level node and we
- // need to support passing projectable nodes, so we cheat and put them in the TNode
- // of the Host TView. (Yes we put instance info at the T Level). We can get away with it
- // because we know that that TView is not shared and therefore it will not be a problem.
- // This should be refactored and cleaned up.
- for (let i = 0; i < nodeToProjectOrRNodes.length; i++) {
- const rNode = nodeToProjectOrRNodes[i];
- applyToElementOrContainer(action, renderer, parentRElement, rNode, beforeNode);
- }
- }
- else {
- let nodeToProject = nodeToProjectOrRNodes;
- const projectedComponentLView = componentLView[PARENT];
- applyNodes(renderer, action, nodeToProject, projectedComponentLView, parentRElement, beforeNode, true);
- }
- }
- /**
- * `applyContainer` performs an operation on the container and its views as specified by
- * `action` (insert, detach, destroy)
- *
- * Inserting a Container is complicated by the fact that the container may have Views which
- * themselves have containers or projections.
- *
- * @param renderer Renderer to use
- * @param action action to perform (insert, detach, destroy)
- * @param lContainer The LContainer which needs to be inserted, detached, destroyed.
- * @param parentRElement parent DOM element for insertion/removal.
- * @param beforeNode Before which node the insertions should happen.
- */
- function applyContainer(renderer, action, lContainer, parentRElement, beforeNode) {
- ngDevMode && assertLContainer(lContainer);
- const anchor = lContainer[NATIVE]; // LContainer has its own before node.
- const native = unwrapRNode(lContainer);
- // An LContainer can be created dynamically on any node by injecting ViewContainerRef.
- // Asking for a ViewContainerRef on an element will result in a creation of a separate anchor
- // node (comment in the DOM) that will be different from the LContainer's host node. In this
- // particular case we need to execute action on 2 nodes:
- // - container's host node (this is done in the executeActionOnElementOrContainer)
- // - container's host node (this is done here)
- if (anchor !== native) {
- // This is very strange to me (Misko). I would expect that the native is same as anchor. I
- // don't see a reason why they should be different, but they are.
- //
- // If they are we need to process the second anchor as well.
- applyToElementOrContainer(action, renderer, parentRElement, anchor, beforeNode);
- }
- for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
- const lView = lContainer[i];
- applyView(lView[TVIEW], lView, renderer, action, parentRElement, anchor);
- }
- }
- /**
- * Writes class/style to element.
- *
- * @param renderer Renderer to use.
- * @param isClassBased `true` if it should be written to `class` (`false` to write to `style`)
- * @param rNode The Node to write to.
- * @param prop Property to write to. This would be the class/style name.
- * @param value Value to write. If `null`/`undefined`/`false` this is considered a remove (set/add
- * otherwise).
- */
- function applyStyling(renderer, isClassBased, rNode, prop, value) {
- const isProcedural = isProceduralRenderer(renderer);
- if (isClassBased) {
- // We actually want JS true/false here because any truthy value should add the class
- if (!value) {
- ngDevMode && ngDevMode.rendererRemoveClass++;
- if (isProcedural) {
- renderer.removeClass(rNode, prop);
- }
- else {
- rNode.classList.remove(prop);
- }
- }
- else {
- ngDevMode && ngDevMode.rendererAddClass++;
- if (isProcedural) {
- renderer.addClass(rNode, prop);
- }
- else {
- ngDevMode && assertDefined(rNode.classList, 'HTMLElement expected');
- rNode.classList.add(prop);
- }
- }
- }
- else {
- let flags = prop.indexOf('-') === -1 ? undefined : RendererStyleFlags2.DashCase;
- if (value == null /** || value === undefined */) {
- ngDevMode && ngDevMode.rendererRemoveStyle++;
- if (isProcedural) {
- renderer.removeStyle(rNode, prop, flags);
- }
- else {
- rNode.style.removeProperty(prop);
- }
- }
- else {
- // A value is important if it ends with `!important`. The style
- // parser strips any semicolons at the end of the value.
- const isImportant = typeof value === 'string' ? value.endsWith('!important') : false;
- if (isImportant) {
- // !important has to be stripped from the value for it to be valid.
- value = value.slice(0, -10);
- flags |= RendererStyleFlags2.Important;
- }
- ngDevMode && ngDevMode.rendererSetStyle++;
- if (isProcedural) {
- renderer.setStyle(rNode, prop, value, flags);
- }
- else {
- ngDevMode && assertDefined(rNode.style, 'HTMLElement expected');
- rNode.style.setProperty(prop, value, isImportant ? 'important' : '');
- }
- }
- }
- }
- /**
- * Write `cssText` to `RElement`.
- *
- * This function does direct write without any reconciliation. Used for writing initial values, so
- * that static styling values do not pull in the style parser.
- *
- * @param renderer Renderer to use
- * @param element The element which needs to be updated.
- * @param newValue The new class list to write.
- */
- function writeDirectStyle(renderer, element, newValue) {
- ngDevMode && assertString(newValue, '\'newValue\' should be a string');
- if (isProceduralRenderer(renderer)) {
- renderer.setAttribute(element, 'style', newValue);
- }
- else {
- element.style.cssText = newValue;
- }
- ngDevMode && ngDevMode.rendererSetStyle++;
- }
- /**
- * Write `className` to `RElement`.
- *
- * This function does direct write without any reconciliation. Used for writing initial values, so
- * that static styling values do not pull in the style parser.
- *
- * @param renderer Renderer to use
- * @param element The element which needs to be updated.
- * @param newValue The new class list to write.
- */
- function writeDirectClass(renderer, element, newValue) {
- ngDevMode && assertString(newValue, '\'newValue\' should be a string');
- if (isProceduralRenderer(renderer)) {
- if (newValue === '') {
- // There are tests in `google3` which expect `element.getAttribute('class')` to be `null`.
- renderer.removeAttribute(element, 'class');
- }
- else {
- renderer.setAttribute(element, 'class', newValue);
- }
- }
- else {
- element.className = newValue;
- }
- ngDevMode && ngDevMode.rendererSetClassName++;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Returns an index of `classToSearch` in `className` taking token boundaries into account.
- *
- * `classIndexOf('AB A', 'A', 0)` will be 3 (not 0 since `AB!==A`)
- *
- * @param className A string containing classes (whitespace separated)
- * @param classToSearch A class name to locate
- * @param startingIndex Starting location of search
- * @returns an index of the located class (or -1 if not found)
- */
- function classIndexOf(className, classToSearch, startingIndex) {
- ngDevMode && assertNotEqual(classToSearch, '', 'can not look for "" string.');
- let end = className.length;
- while (true) {
- const foundIndex = className.indexOf(classToSearch, startingIndex);
- if (foundIndex === -1)
- return foundIndex;
- if (foundIndex === 0 || className.charCodeAt(foundIndex - 1) <= 32 /* SPACE */) {
- // Ensure that it has leading whitespace
- const length = classToSearch.length;
- if (foundIndex + length === end ||
- className.charCodeAt(foundIndex + length) <= 32 /* SPACE */) {
- // Ensure that it has trailing whitespace
- return foundIndex;
- }
- }
- // False positive, keep searching from where we left off.
- startingIndex = foundIndex + 1;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const unusedValueToPlacateAjd$1 = unusedValueExportToPlacateAjd$4 + unusedValueExportToPlacateAjd$5;
- const NG_TEMPLATE_SELECTOR = 'ng-template';
- /**
- * Search the `TAttributes` to see if it contains `cssClassToMatch` (case insensitive)
- *
- * @param attrs `TAttributes` to search through.
- * @param cssClassToMatch class to match (lowercase)
- * @param isProjectionMode Whether or not class matching should look into the attribute `class` in
- * addition to the `AttributeMarker.Classes`.
- */
- function isCssClassMatching(attrs, cssClassToMatch, isProjectionMode) {
- // TODO(misko): The fact that this function needs to know about `isProjectionMode` seems suspect.
- // It is strange to me that sometimes the class information comes in form of `class` attribute
- // and sometimes in form of `AttributeMarker.Classes`. Some investigation is needed to determine
- // if that is the right behavior.
- ngDevMode &&
- assertEqual(cssClassToMatch, cssClassToMatch.toLowerCase(), 'Class name expected to be lowercase.');
- let i = 0;
- while (i < attrs.length) {
- let item = attrs[i++];
- if (isProjectionMode && item === 'class') {
- item = attrs[i];
- if (classIndexOf(item.toLowerCase(), cssClassToMatch, 0) !== -1) {
- return true;
- }
- }
- else if (item === 1 /* Classes */) {
- // We found the classes section. Start searching for the class.
- while (i < attrs.length && typeof (item = attrs[i++]) == 'string') {
- // while we have strings
- if (item.toLowerCase() === cssClassToMatch)
- return true;
- }
- return false;
- }
- }
- return false;
- }
- /**
- * Checks whether the `tNode` represents an inline template (e.g. `*ngFor`).
- *
- * @param tNode current TNode
- */
- function isInlineTemplate(tNode) {
- return tNode.type === 4 /* Container */ && tNode.value !== NG_TEMPLATE_SELECTOR;
- }
- /**
- * Function that checks whether a given tNode matches tag-based selector and has a valid type.
- *
- * Matching can be performed in 2 modes: projection mode (when we project nodes) and regular
- * directive matching mode:
- * - in the "directive matching" mode we do _not_ take TContainer's tagName into account if it is
- * different from NG_TEMPLATE_SELECTOR (value different from NG_TEMPLATE_SELECTOR indicates that a
- * tag name was extracted from * syntax so we would match the same directive twice);
- * - in the "projection" mode, we use a tag name potentially extracted from the * syntax processing
- * (applicable to TNodeType.Container only).
- */
- function hasTagAndTypeMatch(tNode, currentSelector, isProjectionMode) {
- const tagNameToCompare = tNode.type === 4 /* Container */ && !isProjectionMode ? NG_TEMPLATE_SELECTOR : tNode.value;
- return currentSelector === tagNameToCompare;
- }
- /**
- * A utility function to match an Ivy node static data against a simple CSS selector
- *
- * @param node static data of the node to match
- * @param selector The selector to try matching against the node.
- * @param isProjectionMode if `true` we are matching for content projection, otherwise we are doing
- * directive matching.
- * @returns true if node matches the selector.
- */
- function isNodeMatchingSelector(tNode, selector, isProjectionMode) {
- ngDevMode && assertDefined(selector[0], 'Selector should have a tag name');
- let mode = 4 /* ELEMENT */;
- const nodeAttrs = tNode.attrs || [];
- // Find the index of first attribute that has no value, only a name.
- const nameOnlyMarkerIdx = getNameOnlyMarkerIndex(nodeAttrs);
- // When processing ":not" selectors, we skip to the next ":not" if the
- // current one doesn't match
- let skipToNextSelector = false;
- for (let i = 0; i < selector.length; i++) {
- const current = selector[i];
- if (typeof current === 'number') {
- // If we finish processing a :not selector and it hasn't failed, return false
- if (!skipToNextSelector && !isPositive(mode) && !isPositive(current)) {
- return false;
- }
- // If we are skipping to the next :not() and this mode flag is positive,
- // it's a part of the current :not() selector, and we should keep skipping
- if (skipToNextSelector && isPositive(current))
- continue;
- skipToNextSelector = false;
- mode = current | (mode & 1 /* NOT */);
- continue;
- }
- if (skipToNextSelector)
- continue;
- if (mode & 4 /* ELEMENT */) {
- mode = 2 /* ATTRIBUTE */ | mode & 1 /* NOT */;
- if (current !== '' && !hasTagAndTypeMatch(tNode, current, isProjectionMode) ||
- current === '' && selector.length === 1) {
- if (isPositive(mode))
- return false;
- skipToNextSelector = true;
- }
- }
- else {
- const selectorAttrValue = mode & 8 /* CLASS */ ? current : selector[++i];
- // special case for matching against classes when a tNode has been instantiated with
- // class and style values as separate attribute values (e.g. ['title', CLASS, 'foo'])
- if ((mode & 8 /* CLASS */) && tNode.attrs !== null) {
- if (!isCssClassMatching(tNode.attrs, selectorAttrValue, isProjectionMode)) {
- if (isPositive(mode))
- return false;
- skipToNextSelector = true;
- }
- continue;
- }
- const attrName = (mode & 8 /* CLASS */) ? 'class' : current;
- const attrIndexInNode = findAttrIndexInNode(attrName, nodeAttrs, isInlineTemplate(tNode), isProjectionMode);
- if (attrIndexInNode === -1) {
- if (isPositive(mode))
- return false;
- skipToNextSelector = true;
- continue;
- }
- if (selectorAttrValue !== '') {
- let nodeAttrValue;
- if (attrIndexInNode > nameOnlyMarkerIdx) {
- nodeAttrValue = '';
- }
- else {
- ngDevMode &&
- assertNotEqual(nodeAttrs[attrIndexInNode], 0 /* NamespaceURI */, 'We do not match directives on namespaced attributes');
- // we lowercase the attribute value to be able to match
- // selectors without case-sensitivity
- // (selectors are already in lowercase when generated)
- nodeAttrValue = nodeAttrs[attrIndexInNode + 1].toLowerCase();
- }
- const compareAgainstClassName = mode & 8 /* CLASS */ ? nodeAttrValue : null;
- if (compareAgainstClassName &&
- classIndexOf(compareAgainstClassName, selectorAttrValue, 0) !== -1 ||
- mode & 2 /* ATTRIBUTE */ && selectorAttrValue !== nodeAttrValue) {
- if (isPositive(mode))
- return false;
- skipToNextSelector = true;
- }
- }
- }
- }
- return isPositive(mode) || skipToNextSelector;
- }
- function isPositive(mode) {
- return (mode & 1 /* NOT */) === 0;
- }
- /**
- * Examines the attribute's definition array for a node to find the index of the
- * attribute that matches the given `name`.
- *
- * NOTE: This will not match namespaced attributes.
- *
- * Attribute matching depends upon `isInlineTemplate` and `isProjectionMode`.
- * The following table summarizes which types of attributes we attempt to match:
- *
- * ===========================================================================================================
- * Modes | Normal Attributes | Bindings Attributes | Template Attributes | I18n
- * Attributes
- * ===========================================================================================================
- * Inline + Projection | YES | YES | NO | YES
- * -----------------------------------------------------------------------------------------------------------
- * Inline + Directive | NO | NO | YES | NO
- * -----------------------------------------------------------------------------------------------------------
- * Non-inline + Projection | YES | YES | NO | YES
- * -----------------------------------------------------------------------------------------------------------
- * Non-inline + Directive | YES | YES | NO | YES
- * ===========================================================================================================
- *
- * @param name the name of the attribute to find
- * @param attrs the attribute array to examine
- * @param isInlineTemplate true if the node being matched is an inline template (e.g. `*ngFor`)
- * rather than a manually expanded template node (e.g `<ng-template>`).
- * @param isProjectionMode true if we are matching against content projection otherwise we are
- * matching against directives.
- */
- function findAttrIndexInNode(name, attrs, isInlineTemplate, isProjectionMode) {
- if (attrs === null)
- return -1;
- let i = 0;
- if (isProjectionMode || !isInlineTemplate) {
- let bindingsMode = false;
- while (i < attrs.length) {
- const maybeAttrName = attrs[i];
- if (maybeAttrName === name) {
- return i;
- }
- else if (maybeAttrName === 3 /* Bindings */ || maybeAttrName === 6 /* I18n */) {
- bindingsMode = true;
- }
- else if (maybeAttrName === 1 /* Classes */ || maybeAttrName === 2 /* Styles */) {
- let value = attrs[++i];
- // We should skip classes here because we have a separate mechanism for
- // matching classes in projection mode.
- while (typeof value === 'string') {
- value = attrs[++i];
- }
- continue;
- }
- else if (maybeAttrName === 4 /* Template */) {
- // We do not care about Template attributes in this scenario.
- break;
- }
- else if (maybeAttrName === 0 /* NamespaceURI */) {
- // Skip the whole namespaced attribute and value. This is by design.
- i += 4;
- continue;
- }
- // In binding mode there are only names, rather than name-value pairs.
- i += bindingsMode ? 1 : 2;
- }
- // We did not match the attribute
- return -1;
- }
- else {
- return matchTemplateAttribute(attrs, name);
- }
- }
- function isNodeMatchingSelectorList(tNode, selector, isProjectionMode = false) {
- for (let i = 0; i < selector.length; i++) {
- if (isNodeMatchingSelector(tNode, selector[i], isProjectionMode)) {
- return true;
- }
- }
- return false;
- }
- function getProjectAsAttrValue(tNode) {
- const nodeAttrs = tNode.attrs;
- if (nodeAttrs != null) {
- const ngProjectAsAttrIdx = nodeAttrs.indexOf(5 /* ProjectAs */);
- // only check for ngProjectAs in attribute names, don't accidentally match attribute's value
- // (attribute names are stored at even indexes)
- if ((ngProjectAsAttrIdx & 1) === 0) {
- return nodeAttrs[ngProjectAsAttrIdx + 1];
- }
- }
- return null;
- }
- function getNameOnlyMarkerIndex(nodeAttrs) {
- for (let i = 0; i < nodeAttrs.length; i++) {
- const nodeAttr = nodeAttrs[i];
- if (isNameOnlyAttributeMarker(nodeAttr)) {
- return i;
- }
- }
- return nodeAttrs.length;
- }
- function matchTemplateAttribute(attrs, name) {
- let i = attrs.indexOf(4 /* Template */);
- if (i > -1) {
- i++;
- while (i < attrs.length) {
- const attr = attrs[i];
- // Return in case we checked all template attrs and are switching to the next section in the
- // attrs array (that starts with a number that represents an attribute marker).
- if (typeof attr === 'number')
- return -1;
- if (attr === name)
- return i;
- i++;
- }
- }
- return -1;
- }
- /**
- * Checks whether a selector is inside a CssSelectorList
- * @param selector Selector to be checked.
- * @param list List in which to look for the selector.
- */
- function isSelectorInSelectorList(selector, list) {
- selectorListLoop: for (let i = 0; i < list.length; i++) {
- const currentSelectorInList = list[i];
- if (selector.length !== currentSelectorInList.length) {
- continue;
- }
- for (let j = 0; j < selector.length; j++) {
- if (selector[j] !== currentSelectorInList[j]) {
- continue selectorListLoop;
- }
- }
- return true;
- }
- return false;
- }
- function maybeWrapInNotSelector(isNegativeMode, chunk) {
- return isNegativeMode ? ':not(' + chunk.trim() + ')' : chunk;
- }
- function stringifyCSSSelector(selector) {
- let result = selector[0];
- let i = 1;
- let mode = 2 /* ATTRIBUTE */;
- let currentChunk = '';
- let isNegativeMode = false;
- while (i < selector.length) {
- let valueOrMarker = selector[i];
- if (typeof valueOrMarker === 'string') {
- if (mode & 2 /* ATTRIBUTE */) {
- const attrValue = selector[++i];
- currentChunk +=
- '[' + valueOrMarker + (attrValue.length > 0 ? '="' + attrValue + '"' : '') + ']';
- }
- else if (mode & 8 /* CLASS */) {
- currentChunk += '.' + valueOrMarker;
- }
- else if (mode & 4 /* ELEMENT */) {
- currentChunk += ' ' + valueOrMarker;
- }
- }
- else {
- //
- // Append current chunk to the final result in case we come across SelectorFlag, which
- // indicates that the previous section of a selector is over. We need to accumulate content
- // between flags to make sure we wrap the chunk later in :not() selector if needed, e.g.
- // ```
- // ['', Flags.CLASS, '.classA', Flags.CLASS | Flags.NOT, '.classB', '.classC']
- // ```
- // should be transformed to `.classA :not(.classB .classC)`.
- //
- // Note: for negative selector part, we accumulate content between flags until we find the
- // next negative flag. This is needed to support a case where `:not()` rule contains more than
- // one chunk, e.g. the following selector:
- // ```
- // ['', Flags.ELEMENT | Flags.NOT, 'p', Flags.CLASS, 'foo', Flags.CLASS | Flags.NOT, 'bar']
- // ```
- // should be stringified to `:not(p.foo) :not(.bar)`
- //
- if (currentChunk !== '' && !isPositive(valueOrMarker)) {
- result += maybeWrapInNotSelector(isNegativeMode, currentChunk);
- currentChunk = '';
- }
- mode = valueOrMarker;
- // According to CssSelector spec, once we come across `SelectorFlags.NOT` flag, the negative
- // mode is maintained for remaining chunks of a selector.
- isNegativeMode = isNegativeMode || !isPositive(mode);
- }
- i++;
- }
- if (currentChunk !== '') {
- result += maybeWrapInNotSelector(isNegativeMode, currentChunk);
- }
- return result;
- }
- /**
- * Generates string representation of CSS selector in parsed form.
- *
- * ComponentDef and DirectiveDef are generated with the selector in parsed form to avoid doing
- * additional parsing at runtime (for example, for directive matching). However in some cases (for
- * example, while bootstrapping a component), a string version of the selector is required to query
- * for the host element on the page. This function takes the parsed form of a selector and returns
- * its string representation.
- *
- * @param selectorList selector in parsed form
- * @returns string representation of a given selector
- */
- function stringifyCSSSelectorList(selectorList) {
- return selectorList.map(stringifyCSSSelector).join(',');
- }
- /**
- * Extracts attributes and classes information from a given CSS selector.
- *
- * This function is used while creating a component dynamically. In this case, the host element
- * (that is created dynamically) should contain attributes and classes specified in component's CSS
- * selector.
- *
- * @param selector CSS selector in parsed form (in a form of array)
- * @returns object with `attrs` and `classes` fields that contain extracted information
- */
- function extractAttrsAndClassesFromSelector(selector) {
- const attrs = [];
- const classes = [];
- let i = 1;
- let mode = 2 /* ATTRIBUTE */;
- while (i < selector.length) {
- let valueOrMarker = selector[i];
- if (typeof valueOrMarker === 'string') {
- if (mode === 2 /* ATTRIBUTE */) {
- if (valueOrMarker !== '') {
- attrs.push(valueOrMarker, selector[++i]);
- }
- }
- else if (mode === 8 /* CLASS */) {
- classes.push(valueOrMarker);
- }
- }
- else {
- // According to CssSelector spec, once we come across `SelectorFlags.NOT` flag, the negative
- // mode is maintained for remaining chunks of a selector. Since attributes and classes are
- // extracted only for "positive" part of the selector, we can stop here.
- if (!isPositive(mode))
- break;
- mode = valueOrMarker;
- }
- i++;
- }
- return { attrs, classes };
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /** A special value which designates that a value has not changed. */
- const NO_CHANGE = (typeof ngDevMode === 'undefined' || ngDevMode) ? { __brand__: 'NO_CHANGE' } : {};
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Advances to an element for later binding instructions.
- *
- * Used in conjunction with instructions like {@link property} to act on elements with specified
- * indices, for example those created with {@link element} or {@link elementStart}.
- *
- * ```ts
- * (rf: RenderFlags, ctx: any) => {
- * if (rf & 1) {
- * text(0, 'Hello');
- * text(1, 'Goodbye')
- * element(2, 'div');
- * }
- * if (rf & 2) {
- * advance(2); // Advance twice to the <div>.
- * property('title', 'test');
- * }
- * }
- * ```
- * @param delta Number of elements to advance forwards by.
- *
- * @codeGenApi
- */
- function ɵɵadvance(delta) {
- ngDevMode && assertGreaterThan(delta, 0, 'Can only advance forward');
- selectIndexInternal(getTView(), getLView(), getSelectedIndex() + delta, isInCheckNoChangesMode());
- }
- function selectIndexInternal(tView, lView, index, checkNoChangesMode) {
- ngDevMode && assertIndexInDeclRange(lView, index);
- // Flush the initial hooks for elements in the view that have been added up to this point.
- // PERF WARNING: do NOT extract this to a separate function without running benchmarks
- if (!checkNoChangesMode) {
- const hooksInitPhaseCompleted = (lView[FLAGS] & 3 /* InitPhaseStateMask */) === 3 /* InitPhaseCompleted */;
- if (hooksInitPhaseCompleted) {
- const preOrderCheckHooks = tView.preOrderCheckHooks;
- if (preOrderCheckHooks !== null) {
- executeCheckHooks(lView, preOrderCheckHooks, index);
- }
- }
- else {
- const preOrderHooks = tView.preOrderHooks;
- if (preOrderHooks !== null) {
- executeInitAndCheckHooks(lView, preOrderHooks, 0 /* OnInitHooksToBeRun */, index);
- }
- }
- }
- // We must set the selected index *after* running the hooks, because hooks may have side-effects
- // that cause other template functions to run, thus updating the selected index, which is global
- // state. If we run `setSelectedIndex` *before* we run the hooks, in some cases the selected index
- // will be altered by the time we leave the `ɵɵadvance` instruction.
- setSelectedIndex(index);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function toTStylingRange(prev, next) {
- ngDevMode && assertNumberInRange(prev, 0, 32767 /* UNSIGNED_MASK */);
- ngDevMode && assertNumberInRange(next, 0, 32767 /* UNSIGNED_MASK */);
- return (prev << 17 /* PREV_SHIFT */ | next << 2 /* NEXT_SHIFT */);
- }
- function getTStylingRangePrev(tStylingRange) {
- ngDevMode && assertNumber(tStylingRange, 'expected number');
- return (tStylingRange >> 17 /* PREV_SHIFT */) & 32767 /* UNSIGNED_MASK */;
- }
- function getTStylingRangePrevDuplicate(tStylingRange) {
- ngDevMode && assertNumber(tStylingRange, 'expected number');
- return (tStylingRange & 2 /* PREV_DUPLICATE */) ==
- 2 /* PREV_DUPLICATE */;
- }
- function setTStylingRangePrev(tStylingRange, previous) {
- ngDevMode && assertNumber(tStylingRange, 'expected number');
- ngDevMode && assertNumberInRange(previous, 0, 32767 /* UNSIGNED_MASK */);
- return ((tStylingRange & ~4294836224 /* PREV_MASK */) |
- (previous << 17 /* PREV_SHIFT */));
- }
- function setTStylingRangePrevDuplicate(tStylingRange) {
- ngDevMode && assertNumber(tStylingRange, 'expected number');
- return (tStylingRange | 2 /* PREV_DUPLICATE */);
- }
- function getTStylingRangeNext(tStylingRange) {
- ngDevMode && assertNumber(tStylingRange, 'expected number');
- return (tStylingRange & 131068 /* NEXT_MASK */) >> 2 /* NEXT_SHIFT */;
- }
- function setTStylingRangeNext(tStylingRange, next) {
- ngDevMode && assertNumber(tStylingRange, 'expected number');
- ngDevMode && assertNumberInRange(next, 0, 32767 /* UNSIGNED_MASK */);
- return ((tStylingRange & ~131068 /* NEXT_MASK */) | //
- next << 2 /* NEXT_SHIFT */);
- }
- function getTStylingRangeNextDuplicate(tStylingRange) {
- ngDevMode && assertNumber(tStylingRange, 'expected number');
- return (tStylingRange & 1 /* NEXT_DUPLICATE */) ===
- 1 /* NEXT_DUPLICATE */;
- }
- function setTStylingRangeNextDuplicate(tStylingRange) {
- ngDevMode && assertNumber(tStylingRange, 'expected number');
- return (tStylingRange | 1 /* NEXT_DUPLICATE */);
- }
- function getTStylingRangeTail(tStylingRange) {
- ngDevMode && assertNumber(tStylingRange, 'expected number');
- const next = getTStylingRangeNext(tStylingRange);
- return next === 0 ? getTStylingRangePrev(tStylingRange) : next;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Patch a `debug` property on top of the existing object.
- *
- * NOTE: always call this method with `ngDevMode && attachDebugObject(...)`
- *
- * @param obj Object to patch
- * @param debug Value to patch
- */
- function attachDebugObject(obj, debug) {
- if (ngDevMode) {
- Object.defineProperty(obj, 'debug', { value: debug, enumerable: false });
- }
- else {
- throw new Error('This method should be guarded with `ngDevMode` so that it can be tree shaken in production!');
- }
- }
- /**
- * Patch a `debug` property getter on top of the existing object.
- *
- * NOTE: always call this method with `ngDevMode && attachDebugObject(...)`
- *
- * @param obj Object to patch
- * @param debugGetter Getter returning a value to patch
- */
- function attachDebugGetter(obj, debugGetter) {
- if (ngDevMode) {
- Object.defineProperty(obj, 'debug', { get: debugGetter, enumerable: false });
- }
- else {
- throw new Error('This method should be guarded with `ngDevMode` so that it can be tree shaken in production!');
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const NG_DEV_MODE = ((typeof ngDevMode === 'undefined' || !!ngDevMode) && initNgDevMode());
- /*
- * This file contains conditionally attached classes which provide human readable (debug) level
- * information for `LView`, `LContainer` and other internal data structures. These data structures
- * are stored internally as array which makes it very difficult during debugging to reason about the
- * current state of the system.
- *
- * Patching the array with extra property does change the array's hidden class' but it does not
- * change the cost of access, therefore this patching should not have significant if any impact in
- * `ngDevMode` mode. (see: https://jsperf.com/array-vs-monkey-patch-array)
- *
- * So instead of seeing:
- * ```
- * Array(30) [Object, 659, null, …]
- * ```
- *
- * You get to see:
- * ```
- * LViewDebug {
- * views: [...],
- * flags: {attached: true, ...}
- * nodes: [
- * {html: '<div id="123">', ..., nodes: [
- * {html: '<span>', ..., nodes: null}
- * ]}
- * ]
- * }
- * ```
- */
- let LVIEW_COMPONENT_CACHE;
- let LVIEW_EMBEDDED_CACHE;
- let LVIEW_ROOT;
- /**
- * This function clones a blueprint and creates LView.
- *
- * Simple slice will keep the same type, and we need it to be LView
- */
- function cloneToLViewFromTViewBlueprint(tView) {
- const debugTView = tView;
- const lView = getLViewToClone(debugTView.type, tView.template && tView.template.name);
- return lView.concat(tView.blueprint);
- }
- function getLViewToClone(type, name) {
- switch (type) {
- case 0 /* Root */:
- if (LVIEW_ROOT === undefined)
- LVIEW_ROOT = new (createNamedArrayType('LRootView'))();
- return LVIEW_ROOT;
- case 1 /* Component */:
- if (LVIEW_COMPONENT_CACHE === undefined)
- LVIEW_COMPONENT_CACHE = new Map();
- let componentArray = LVIEW_COMPONENT_CACHE.get(name);
- if (componentArray === undefined) {
- componentArray = new (createNamedArrayType('LComponentView' + nameSuffix(name)))();
- LVIEW_COMPONENT_CACHE.set(name, componentArray);
- }
- return componentArray;
- case 2 /* Embedded */:
- if (LVIEW_EMBEDDED_CACHE === undefined)
- LVIEW_EMBEDDED_CACHE = new Map();
- let embeddedArray = LVIEW_EMBEDDED_CACHE.get(name);
- if (embeddedArray === undefined) {
- embeddedArray = new (createNamedArrayType('LEmbeddedView' + nameSuffix(name)))();
- LVIEW_EMBEDDED_CACHE.set(name, embeddedArray);
- }
- return embeddedArray;
- }
- throw new Error('unreachable code');
- }
- function nameSuffix(text) {
- if (text == null)
- return '';
- const index = text.lastIndexOf('_Template');
- return '_' + (index === -1 ? text : text.substr(0, index));
- }
- /**
- * This class is a debug version of Object literal so that we can have constructor name show up
- * in
- * debug tools in ngDevMode.
- */
- const TViewConstructor = class TView {
- constructor(type, blueprint, template, queries, viewQuery, declTNode, data, bindingStartIndex, expandoStartIndex, hostBindingOpCodes, firstCreatePass, firstUpdatePass, staticViewQueries, staticContentQueries, preOrderHooks, preOrderCheckHooks, contentHooks, contentCheckHooks, viewHooks, viewCheckHooks, destroyHooks, cleanup, contentQueries, components, directiveRegistry, pipeRegistry, firstChild, schemas, consts, incompleteFirstPass, _decls, _vars) {
- this.type = type;
- this.blueprint = blueprint;
- this.template = template;
- this.queries = queries;
- this.viewQuery = viewQuery;
- this.declTNode = declTNode;
- this.data = data;
- this.bindingStartIndex = bindingStartIndex;
- this.expandoStartIndex = expandoStartIndex;
- this.hostBindingOpCodes = hostBindingOpCodes;
- this.firstCreatePass = firstCreatePass;
- this.firstUpdatePass = firstUpdatePass;
- this.staticViewQueries = staticViewQueries;
- this.staticContentQueries = staticContentQueries;
- this.preOrderHooks = preOrderHooks;
- this.preOrderCheckHooks = preOrderCheckHooks;
- this.contentHooks = contentHooks;
- this.contentCheckHooks = contentCheckHooks;
- this.viewHooks = viewHooks;
- this.viewCheckHooks = viewCheckHooks;
- this.destroyHooks = destroyHooks;
- this.cleanup = cleanup;
- this.contentQueries = contentQueries;
- this.components = components;
- this.directiveRegistry = directiveRegistry;
- this.pipeRegistry = pipeRegistry;
- this.firstChild = firstChild;
- this.schemas = schemas;
- this.consts = consts;
- this.incompleteFirstPass = incompleteFirstPass;
- this._decls = _decls;
- this._vars = _vars;
- }
- get template_() {
- const buf = [];
- processTNodeChildren(this.firstChild, buf);
- return buf.join('');
- }
- get type_() {
- return TViewTypeAsString[this.type] || `TViewType.?${this.type}?`;
- }
- };
- class TNode {
- constructor(tView_, //
- type, //
- index, //
- insertBeforeIndex, //
- injectorIndex, //
- directiveStart, //
- directiveEnd, //
- directiveStylingLast, //
- propertyBindings, //
- flags, //
- providerIndexes, //
- value, //
- attrs, //
- mergedAttrs, //
- localNames, //
- initialInputs, //
- inputs, //
- outputs, //
- tViews, //
- next, //
- projectionNext, //
- child, //
- parent, //
- projection, //
- styles, //
- stylesWithoutHost, //
- residualStyles, //
- classes, //
- classesWithoutHost, //
- residualClasses, //
- classBindings, //
- styleBindings) {
- this.tView_ = tView_;
- this.type = type;
- this.index = index;
- this.insertBeforeIndex = insertBeforeIndex;
- this.injectorIndex = injectorIndex;
- this.directiveStart = directiveStart;
- this.directiveEnd = directiveEnd;
- this.directiveStylingLast = directiveStylingLast;
- this.propertyBindings = propertyBindings;
- this.flags = flags;
- this.providerIndexes = providerIndexes;
- this.value = value;
- this.attrs = attrs;
- this.mergedAttrs = mergedAttrs;
- this.localNames = localNames;
- this.initialInputs = initialInputs;
- this.inputs = inputs;
- this.outputs = outputs;
- this.tViews = tViews;
- this.next = next;
- this.projectionNext = projectionNext;
- this.child = child;
- this.parent = parent;
- this.projection = projection;
- this.styles = styles;
- this.stylesWithoutHost = stylesWithoutHost;
- this.residualStyles = residualStyles;
- this.classes = classes;
- this.classesWithoutHost = classesWithoutHost;
- this.residualClasses = residualClasses;
- this.classBindings = classBindings;
- this.styleBindings = styleBindings;
- }
- /**
- * Return a human debug version of the set of `NodeInjector`s which will be consulted when
- * resolving tokens from this `TNode`.
- *
- * When debugging applications, it is often difficult to determine which `NodeInjector`s will be
- * consulted. This method shows a list of `DebugNode`s representing the `TNode`s which will be
- * consulted in order when resolving a token starting at this `TNode`.
- *
- * The original data is stored in `LView` and `TView` with a lot of offset indexes, and so it is
- * difficult to reason about.
- *
- * @param lView The `LView` instance for this `TNode`.
- */
- debugNodeInjectorPath(lView) {
- const path = [];
- let injectorIndex = getInjectorIndex(this, lView);
- ngDevMode && assertNodeInjector(lView, injectorIndex);
- while (injectorIndex !== -1) {
- const tNode = lView[TVIEW].data[injectorIndex + 8 /* TNODE */];
- path.push(buildDebugNode(tNode, lView));
- const parentLocation = lView[injectorIndex + 8 /* PARENT */];
- if (parentLocation === NO_PARENT_INJECTOR) {
- injectorIndex = -1;
- }
- else {
- injectorIndex = getParentInjectorIndex(parentLocation);
- lView = getParentInjectorView(parentLocation, lView);
- }
- }
- return path;
- }
- get type_() {
- return toTNodeTypeAsString(this.type) || `TNodeType.?${this.type}?`;
- }
- get flags_() {
- const flags = [];
- if (this.flags & 16 /* hasClassInput */)
- flags.push('TNodeFlags.hasClassInput');
- if (this.flags & 8 /* hasContentQuery */)
- flags.push('TNodeFlags.hasContentQuery');
- if (this.flags & 32 /* hasStyleInput */)
- flags.push('TNodeFlags.hasStyleInput');
- if (this.flags & 128 /* hasHostBindings */)
- flags.push('TNodeFlags.hasHostBindings');
- if (this.flags & 2 /* isComponentHost */)
- flags.push('TNodeFlags.isComponentHost');
- if (this.flags & 1 /* isDirectiveHost */)
- flags.push('TNodeFlags.isDirectiveHost');
- if (this.flags & 64 /* isDetached */)
- flags.push('TNodeFlags.isDetached');
- if (this.flags & 4 /* isProjected */)
- flags.push('TNodeFlags.isProjected');
- return flags.join('|');
- }
- get template_() {
- if (this.type & 1 /* Text */)
- return this.value;
- const buf = [];
- const tagName = typeof this.value === 'string' && this.value || this.type_;
- buf.push('<', tagName);
- if (this.flags) {
- buf.push(' ', this.flags_);
- }
- if (this.attrs) {
- for (let i = 0; i < this.attrs.length;) {
- const attrName = this.attrs[i++];
- if (typeof attrName == 'number') {
- break;
- }
- const attrValue = this.attrs[i++];
- buf.push(' ', attrName, '="', attrValue, '"');
- }
- }
- buf.push('>');
- processTNodeChildren(this.child, buf);
- buf.push('</', tagName, '>');
- return buf.join('');
- }
- get styleBindings_() {
- return toDebugStyleBinding(this, false);
- }
- get classBindings_() {
- return toDebugStyleBinding(this, true);
- }
- get providerIndexStart_() {
- return this.providerIndexes & 1048575 /* ProvidersStartIndexMask */;
- }
- get providerIndexEnd_() {
- return this.providerIndexStart_ +
- (this.providerIndexes >>> 20 /* CptViewProvidersCountShift */);
- }
- }
- const TNodeDebug = TNode;
- function toDebugStyleBinding(tNode, isClassBased) {
- const tData = tNode.tView_.data;
- const bindings = [];
- const range = isClassBased ? tNode.classBindings : tNode.styleBindings;
- const prev = getTStylingRangePrev(range);
- const next = getTStylingRangeNext(range);
- let isTemplate = next !== 0;
- let cursor = isTemplate ? next : prev;
- while (cursor !== 0) {
- const itemKey = tData[cursor];
- const itemRange = tData[cursor + 1];
- bindings.unshift({
- key: itemKey,
- index: cursor,
- isTemplate: isTemplate,
- prevDuplicate: getTStylingRangePrevDuplicate(itemRange),
- nextDuplicate: getTStylingRangeNextDuplicate(itemRange),
- nextIndex: getTStylingRangeNext(itemRange),
- prevIndex: getTStylingRangePrev(itemRange),
- });
- if (cursor === prev)
- isTemplate = false;
- cursor = getTStylingRangePrev(itemRange);
- }
- bindings.push((isClassBased ? tNode.residualClasses : tNode.residualStyles) || null);
- return bindings;
- }
- function processTNodeChildren(tNode, buf) {
- while (tNode) {
- buf.push(tNode.template_);
- tNode = tNode.next;
- }
- }
- const TViewData = NG_DEV_MODE && createNamedArrayType('TViewData') || null;
- let TVIEWDATA_EMPTY; // can't initialize here or it will not be tree shaken, because
- // `LView` constructor could have side-effects.
- /**
- * This function clones a blueprint and creates TData.
- *
- * Simple slice will keep the same type, and we need it to be TData
- */
- function cloneToTViewData(list) {
- if (TVIEWDATA_EMPTY === undefined)
- TVIEWDATA_EMPTY = new TViewData();
- return TVIEWDATA_EMPTY.concat(list);
- }
- const LViewBlueprint = NG_DEV_MODE && createNamedArrayType('LViewBlueprint') || null;
- const MatchesArray = NG_DEV_MODE && createNamedArrayType('MatchesArray') || null;
- const TViewComponents = NG_DEV_MODE && createNamedArrayType('TViewComponents') || null;
- const TNodeLocalNames = NG_DEV_MODE && createNamedArrayType('TNodeLocalNames') || null;
- const TNodeInitialInputs = NG_DEV_MODE && createNamedArrayType('TNodeInitialInputs') || null;
- const TNodeInitialData = NG_DEV_MODE && createNamedArrayType('TNodeInitialData') || null;
- const LCleanup = NG_DEV_MODE && createNamedArrayType('LCleanup') || null;
- const TCleanup = NG_DEV_MODE && createNamedArrayType('TCleanup') || null;
- function attachLViewDebug(lView) {
- attachDebugObject(lView, new LViewDebug(lView));
- }
- function attachLContainerDebug(lContainer) {
- attachDebugObject(lContainer, new LContainerDebug(lContainer));
- }
- function toDebug(obj) {
- if (obj) {
- const debug = obj.debug;
- assertDefined(debug, 'Object does not have a debug representation.');
- return debug;
- }
- else {
- return obj;
- }
- }
- /**
- * Use this method to unwrap a native element in `LView` and convert it into HTML for easier
- * reading.
- *
- * @param value possibly wrapped native DOM node.
- * @param includeChildren If `true` then the serialized HTML form will include child elements
- * (same
- * as `outerHTML`). If `false` then the serialized HTML form will only contain the element
- * itself
- * (will not serialize child elements).
- */
- function toHtml(value, includeChildren = false) {
- const node = unwrapRNode(value);
- if (node) {
- switch (node.nodeType) {
- case Node.TEXT_NODE:
- return node.textContent;
- case Node.COMMENT_NODE:
- return `<!--${node.textContent}-->`;
- case Node.ELEMENT_NODE:
- const outerHTML = node.outerHTML;
- if (includeChildren) {
- return outerHTML;
- }
- else {
- const innerHTML = '>' + node.innerHTML + '<';
- return (outerHTML.split(innerHTML)[0]) + '>';
- }
- }
- }
- return null;
- }
- class LViewDebug {
- constructor(_raw_lView) {
- this._raw_lView = _raw_lView;
- }
- /**
- * Flags associated with the `LView` unpacked into a more readable state.
- */
- get flags() {
- const flags = this._raw_lView[FLAGS];
- return {
- __raw__flags__: flags,
- initPhaseState: flags & 3 /* InitPhaseStateMask */,
- creationMode: !!(flags & 4 /* CreationMode */),
- firstViewPass: !!(flags & 8 /* FirstLViewPass */),
- checkAlways: !!(flags & 16 /* CheckAlways */),
- dirty: !!(flags & 64 /* Dirty */),
- attached: !!(flags & 128 /* Attached */),
- destroyed: !!(flags & 256 /* Destroyed */),
- isRoot: !!(flags & 512 /* IsRoot */),
- indexWithinInitPhase: flags >> 11 /* IndexWithinInitPhaseShift */,
- };
- }
- get parent() {
- return toDebug(this._raw_lView[PARENT]);
- }
- get hostHTML() {
- return toHtml(this._raw_lView[HOST], true);
- }
- get html() {
- return (this.nodes || []).map(mapToHTML).join('');
- }
- get context() {
- return this._raw_lView[CONTEXT];
- }
- /**
- * The tree of nodes associated with the current `LView`. The nodes have been normalized into
- * a tree structure with relevant details pulled out for readability.
- */
- get nodes() {
- const lView = this._raw_lView;
- const tNode = lView[TVIEW].firstChild;
- return toDebugNodes(tNode, lView);
- }
- get template() {
- return this.tView.template_;
- }
- get tView() {
- return this._raw_lView[TVIEW];
- }
- get cleanup() {
- return this._raw_lView[CLEANUP];
- }
- get injector() {
- return this._raw_lView[INJECTOR];
- }
- get rendererFactory() {
- return this._raw_lView[RENDERER_FACTORY];
- }
- get renderer() {
- return this._raw_lView[RENDERER];
- }
- get sanitizer() {
- return this._raw_lView[SANITIZER];
- }
- get childHead() {
- return toDebug(this._raw_lView[CHILD_HEAD]);
- }
- get next() {
- return toDebug(this._raw_lView[NEXT]);
- }
- get childTail() {
- return toDebug(this._raw_lView[CHILD_TAIL]);
- }
- get declarationView() {
- return toDebug(this._raw_lView[DECLARATION_VIEW]);
- }
- get queries() {
- return this._raw_lView[QUERIES];
- }
- get tHost() {
- return this._raw_lView[T_HOST];
- }
- get decls() {
- return toLViewRange(this.tView, this._raw_lView, HEADER_OFFSET, this.tView.bindingStartIndex);
- }
- get vars() {
- return toLViewRange(this.tView, this._raw_lView, this.tView.bindingStartIndex, this.tView.expandoStartIndex);
- }
- get expando() {
- return toLViewRange(this.tView, this._raw_lView, this.tView.expandoStartIndex, this._raw_lView.length);
- }
- /**
- * Normalized view of child views (and containers) attached at this location.
- */
- get childViews() {
- const childViews = [];
- let child = this.childHead;
- while (child) {
- childViews.push(child);
- child = child.next;
- }
- return childViews;
- }
- }
- function mapToHTML(node) {
- if (node.type === 'ElementContainer') {
- return (node.children || []).map(mapToHTML).join('');
- }
- else if (node.type === 'IcuContainer') {
- throw new Error('Not implemented');
- }
- else {
- return toHtml(node.native, true) || '';
- }
- }
- function toLViewRange(tView, lView, start, end) {
- let content = [];
- for (let index = start; index < end; index++) {
- content.push({ index: index, t: tView.data[index], l: lView[index] });
- }
- return { start: start, end: end, length: end - start, content: content };
- }
- /**
- * Turns a flat list of nodes into a tree by walking the associated `TNode` tree.
- *
- * @param tNode
- * @param lView
- */
- function toDebugNodes(tNode, lView) {
- if (tNode) {
- const debugNodes = [];
- let tNodeCursor = tNode;
- while (tNodeCursor) {
- debugNodes.push(buildDebugNode(tNodeCursor, lView));
- tNodeCursor = tNodeCursor.next;
- }
- return debugNodes;
- }
- else {
- return [];
- }
- }
- function buildDebugNode(tNode, lView) {
- const rawValue = lView[tNode.index];
- const native = unwrapRNode(rawValue);
- const factories = [];
- const instances = [];
- const tView = lView[TVIEW];
- for (let i = tNode.directiveStart; i < tNode.directiveEnd; i++) {
- const def = tView.data[i];
- factories.push(def.type);
- instances.push(lView[i]);
- }
- return {
- html: toHtml(native),
- type: toTNodeTypeAsString(tNode.type),
- native: native,
- children: toDebugNodes(tNode.child, lView),
- factories,
- instances,
- injector: buildNodeInjectorDebug(tNode, tView, lView)
- };
- }
- function buildNodeInjectorDebug(tNode, tView, lView) {
- const viewProviders = [];
- for (let i = tNode.providerIndexStart_; i < tNode.providerIndexEnd_; i++) {
- viewProviders.push(tView.data[i]);
- }
- const providers = [];
- for (let i = tNode.providerIndexEnd_; i < tNode.directiveEnd; i++) {
- providers.push(tView.data[i]);
- }
- const nodeInjectorDebug = {
- bloom: toBloom(lView, tNode.injectorIndex),
- cumulativeBloom: toBloom(tView.data, tNode.injectorIndex),
- providers,
- viewProviders,
- parentInjectorIndex: lView[tNode.providerIndexStart_ - 1],
- };
- return nodeInjectorDebug;
- }
- /**
- * Convert a number at `idx` location in `array` into binary representation.
- *
- * @param array
- * @param idx
- */
- function binary(array, idx) {
- const value = array[idx];
- // If not a number we print 8 `?` to retain alignment but let user know that it was called on
- // wrong type.
- if (typeof value !== 'number')
- return '????????';
- // We prefix 0s so that we have constant length number
- const text = '00000000' + value.toString(2);
- return text.substring(text.length - 8);
- }
- /**
- * Convert a bloom filter at location `idx` in `array` into binary representation.
- *
- * @param array
- * @param idx
- */
- function toBloom(array, idx) {
- return `${binary(array, idx + 7)}_${binary(array, idx + 6)}_${binary(array, idx + 5)}_${binary(array, idx + 4)}_${binary(array, idx + 3)}_${binary(array, idx + 2)}_${binary(array, idx + 1)}_${binary(array, idx + 0)}`;
- }
- class LContainerDebug {
- constructor(_raw_lContainer) {
- this._raw_lContainer = _raw_lContainer;
- }
- get hasTransplantedViews() {
- return this._raw_lContainer[HAS_TRANSPLANTED_VIEWS];
- }
- get views() {
- return this._raw_lContainer.slice(CONTAINER_HEADER_OFFSET)
- .map(toDebug);
- }
- get parent() {
- return toDebug(this._raw_lContainer[PARENT]);
- }
- get movedViews() {
- return this._raw_lContainer[MOVED_VIEWS];
- }
- get host() {
- return this._raw_lContainer[HOST];
- }
- get native() {
- return this._raw_lContainer[NATIVE];
- }
- get next() {
- return toDebug(this._raw_lContainer[NEXT]);
- }
- }
- const ɵ0$5 = () => Promise.resolve(null);
- /**
- * A permanent marker promise which signifies that the current CD tree is
- * clean.
- */
- const _CLEAN_PROMISE = (ɵ0$5)();
- /**
- * Invoke `HostBindingsFunction`s for view.
- *
- * This methods executes `TView.hostBindingOpCodes`. It is used to execute the
- * `HostBindingsFunction`s associated with the current `LView`.
- *
- * @param tView Current `TView`.
- * @param lView Current `LView`.
- */
- function processHostBindingOpCodes(tView, lView) {
- const hostBindingOpCodes = tView.hostBindingOpCodes;
- if (hostBindingOpCodes === null)
- return;
- try {
- for (let i = 0; i < hostBindingOpCodes.length; i++) {
- const opCode = hostBindingOpCodes[i];
- if (opCode < 0) {
- // Negative numbers are element indexes.
- setSelectedIndex(~opCode);
- }
- else {
- // Positive numbers are NumberTuple which store bindingRootIndex and directiveIndex.
- const directiveIdx = opCode;
- const bindingRootIndx = hostBindingOpCodes[++i];
- const hostBindingFn = hostBindingOpCodes[++i];
- setBindingRootForHostBindings(bindingRootIndx, directiveIdx);
- const context = lView[directiveIdx];
- hostBindingFn(2 /* Update */, context);
- }
- }
- }
- finally {
- setSelectedIndex(-1);
- }
- }
- /** Refreshes all content queries declared by directives in a given view */
- function refreshContentQueries(tView, lView) {
- const contentQueries = tView.contentQueries;
- if (contentQueries !== null) {
- for (let i = 0; i < contentQueries.length; i += 2) {
- const queryStartIdx = contentQueries[i];
- const directiveDefIdx = contentQueries[i + 1];
- if (directiveDefIdx !== -1) {
- const directiveDef = tView.data[directiveDefIdx];
- ngDevMode && assertDefined(directiveDef, 'DirectiveDef not found.');
- ngDevMode &&
- assertDefined(directiveDef.contentQueries, 'contentQueries function should be defined');
- setCurrentQueryIndex(queryStartIdx);
- directiveDef.contentQueries(2 /* Update */, lView[directiveDefIdx], directiveDefIdx);
- }
- }
- }
- }
- /** Refreshes child components in the current view (update mode). */
- function refreshChildComponents(hostLView, components) {
- for (let i = 0; i < components.length; i++) {
- refreshComponent(hostLView, components[i]);
- }
- }
- /** Renders child components in the current view (creation mode). */
- function renderChildComponents(hostLView, components) {
- for (let i = 0; i < components.length; i++) {
- renderComponent(hostLView, components[i]);
- }
- }
- function createLView(parentLView, tView, context, flags, host, tHostNode, rendererFactory, renderer, sanitizer, injector) {
- const lView = ngDevMode ? cloneToLViewFromTViewBlueprint(tView) : tView.blueprint.slice();
- lView[HOST] = host;
- lView[FLAGS] = flags | 4 /* CreationMode */ | 128 /* Attached */ | 8 /* FirstLViewPass */;
- resetPreOrderHookFlags(lView);
- ngDevMode && tView.declTNode && parentLView && assertTNodeForLView(tView.declTNode, parentLView);
- lView[PARENT] = lView[DECLARATION_VIEW] = parentLView;
- lView[CONTEXT] = context;
- lView[RENDERER_FACTORY] = (rendererFactory || parentLView && parentLView[RENDERER_FACTORY]);
- ngDevMode && assertDefined(lView[RENDERER_FACTORY], 'RendererFactory is required');
- lView[RENDERER] = (renderer || parentLView && parentLView[RENDERER]);
- ngDevMode && assertDefined(lView[RENDERER], 'Renderer is required');
- lView[SANITIZER] = sanitizer || parentLView && parentLView[SANITIZER] || null;
- lView[INJECTOR] = injector || parentLView && parentLView[INJECTOR] || null;
- lView[T_HOST] = tHostNode;
- ngDevMode &&
- assertEqual(tView.type == 2 /* Embedded */ ? parentLView !== null : true, true, 'Embedded views must have parentLView');
- lView[DECLARATION_COMPONENT_VIEW] =
- tView.type == 2 /* Embedded */ ? parentLView[DECLARATION_COMPONENT_VIEW] : lView;
- ngDevMode && attachLViewDebug(lView);
- return lView;
- }
- function getOrCreateTNode(tView, index, type, name, attrs) {
- ngDevMode && index !== 0 && // 0 are bogus nodes and they are OK. See `createContainerRef` in
- // `view_engine_compatibility` for additional context.
- assertGreaterThanOrEqual(index, HEADER_OFFSET, 'TNodes can\'t be in the LView header.');
- // Keep this function short, so that the VM will inline it.
- ngDevMode && assertPureTNodeType(type);
- let tNode = tView.data[index];
- if (tNode === null) {
- tNode = createTNodeAtIndex(tView, index, type, name, attrs);
- if (isInI18nBlock()) {
- // If we are in i18n block then all elements should be pre declared through `Placeholder`
- // See `TNodeType.Placeholder` and `LFrame.inI18n` for more context.
- // If the `TNode` was not pre-declared than it means it was not mentioned which means it was
- // removed, so we mark it as detached.
- tNode.flags |= 64 /* isDetached */;
- }
- }
- else if (tNode.type & 64 /* Placeholder */) {
- tNode.type = type;
- tNode.value = name;
- tNode.attrs = attrs;
- const parent = getCurrentParentTNode();
- tNode.injectorIndex = parent === null ? -1 : parent.injectorIndex;
- ngDevMode && assertTNodeForTView(tNode, tView);
- ngDevMode && assertEqual(index, tNode.index, 'Expecting same index');
- }
- setCurrentTNode(tNode, true);
- return tNode;
- }
- function createTNodeAtIndex(tView, index, type, name, attrs) {
- const currentTNode = getCurrentTNodePlaceholderOk();
- const isParent = isCurrentTNodeParent();
- const parent = isParent ? currentTNode : currentTNode && currentTNode.parent;
- // Parents cannot cross component boundaries because components will be used in multiple places.
- const tNode = tView.data[index] =
- createTNode(tView, parent, type, index, name, attrs);
- // Assign a pointer to the first child node of a given view. The first node is not always the one
- // at index 0, in case of i18n, index 0 can be the instruction `i18nStart` and the first node has
- // the index 1 or more, so we can't just check node index.
- if (tView.firstChild === null) {
- tView.firstChild = tNode;
- }
- if (currentTNode !== null) {
- if (isParent) {
- // FIXME(misko): This logic looks unnecessarily complicated. Could we simplify?
- if (currentTNode.child == null && tNode.parent !== null) {
- // We are in the same view, which means we are adding content node to the parent view.
- currentTNode.child = tNode;
- }
- }
- else {
- if (currentTNode.next === null) {
- // In the case of i18n the `currentTNode` may already be linked, in which case we don't want
- // to break the links which i18n created.
- currentTNode.next = tNode;
- }
- }
- }
- return tNode;
- }
- /**
- * When elements are created dynamically after a view blueprint is created (e.g. through
- * i18nApply()), we need to adjust the blueprint for future
- * template passes.
- *
- * @param tView `TView` associated with `LView`
- * @param lView The `LView` containing the blueprint to adjust
- * @param numSlotsToAlloc The number of slots to alloc in the LView, should be >0
- * @param initialValue Initial value to store in blueprint
- */
- function allocExpando(tView, lView, numSlotsToAlloc, initialValue) {
- if (numSlotsToAlloc === 0)
- return -1;
- if (ngDevMode) {
- assertFirstCreatePass(tView);
- assertSame(tView, lView[TVIEW], '`LView` must be associated with `TView`!');
- assertEqual(tView.data.length, lView.length, 'Expecting LView to be same size as TView');
- assertEqual(tView.data.length, tView.blueprint.length, 'Expecting Blueprint to be same size as TView');
- assertFirstUpdatePass(tView);
- }
- const allocIdx = lView.length;
- for (let i = 0; i < numSlotsToAlloc; i++) {
- lView.push(initialValue);
- tView.blueprint.push(initialValue);
- tView.data.push(null);
- }
- return allocIdx;
- }
- //////////////////////////
- //// Render
- //////////////////////////
- /**
- * Processes a view in the creation mode. This includes a number of steps in a specific order:
- * - creating view query functions (if any);
- * - executing a template function in the creation mode;
- * - updating static queries (if any);
- * - creating child components defined in a given view.
- */
- function renderView(tView, lView, context) {
- ngDevMode && assertEqual(isCreationMode(lView), true, 'Should be run in creation mode');
- enterView(lView);
- try {
- const viewQuery = tView.viewQuery;
- if (viewQuery !== null) {
- executeViewQueryFn(1 /* Create */, viewQuery, context);
- }
- // Execute a template associated with this view, if it exists. A template function might not be
- // defined for the root component views.
- const templateFn = tView.template;
- if (templateFn !== null) {
- executeTemplate(tView, lView, templateFn, 1 /* Create */, context);
- }
- // This needs to be set before children are processed to support recursive components.
- // This must be set to false immediately after the first creation run because in an
- // ngFor loop, all the views will be created together before update mode runs and turns
- // off firstCreatePass. If we don't set it here, instances will perform directive
- // matching, etc again and again.
- if (tView.firstCreatePass) {
- tView.firstCreatePass = false;
- }
- // We resolve content queries specifically marked as `static` in creation mode. Dynamic
- // content queries are resolved during change detection (i.e. update mode), after embedded
- // views are refreshed (see block above).
- if (tView.staticContentQueries) {
- refreshContentQueries(tView, lView);
- }
- // We must materialize query results before child components are processed
- // in case a child component has projected a container. The LContainer needs
- // to exist so the embedded views are properly attached by the container.
- if (tView.staticViewQueries) {
- executeViewQueryFn(2 /* Update */, tView.viewQuery, context);
- }
- // Render child component views.
- const components = tView.components;
- if (components !== null) {
- renderChildComponents(lView, components);
- }
- }
- catch (error) {
- // If we didn't manage to get past the first template pass due to
- // an error, mark the view as corrupted so we can try to recover.
- if (tView.firstCreatePass) {
- tView.incompleteFirstPass = true;
- }
- throw error;
- }
- finally {
- lView[FLAGS] &= ~4 /* CreationMode */;
- leaveView();
- }
- }
- /**
- * Processes a view in update mode. This includes a number of steps in a specific order:
- * - executing a template function in update mode;
- * - executing hooks;
- * - refreshing queries;
- * - setting host bindings;
- * - refreshing child (embedded and component) views.
- */
- function refreshView(tView, lView, templateFn, context) {
- ngDevMode && assertEqual(isCreationMode(lView), false, 'Should be run in update mode');
- const flags = lView[FLAGS];
- if ((flags & 256 /* Destroyed */) === 256 /* Destroyed */)
- return;
- enterView(lView);
- // Check no changes mode is a dev only mode used to verify that bindings have not changed
- // since they were assigned. We do not want to execute lifecycle hooks in that mode.
- const isInCheckNoChangesPass = isInCheckNoChangesMode();
- try {
- resetPreOrderHookFlags(lView);
- setBindingIndex(tView.bindingStartIndex);
- if (templateFn !== null) {
- executeTemplate(tView, lView, templateFn, 2 /* Update */, context);
- }
- const hooksInitPhaseCompleted = (flags & 3 /* InitPhaseStateMask */) === 3 /* InitPhaseCompleted */;
- // execute pre-order hooks (OnInit, OnChanges, DoCheck)
- // PERF WARNING: do NOT extract this to a separate function without running benchmarks
- if (!isInCheckNoChangesPass) {
- if (hooksInitPhaseCompleted) {
- const preOrderCheckHooks = tView.preOrderCheckHooks;
- if (preOrderCheckHooks !== null) {
- executeCheckHooks(lView, preOrderCheckHooks, null);
- }
- }
- else {
- const preOrderHooks = tView.preOrderHooks;
- if (preOrderHooks !== null) {
- executeInitAndCheckHooks(lView, preOrderHooks, 0 /* OnInitHooksToBeRun */, null);
- }
- incrementInitPhaseFlags(lView, 0 /* OnInitHooksToBeRun */);
- }
- }
- // First mark transplanted views that are declared in this lView as needing a refresh at their
- // insertion points. This is needed to avoid the situation where the template is defined in this
- // `LView` but its declaration appears after the insertion component.
- markTransplantedViewsForRefresh(lView);
- refreshEmbeddedViews(lView);
- // Content query results must be refreshed before content hooks are called.
- if (tView.contentQueries !== null) {
- refreshContentQueries(tView, lView);
- }
- // execute content hooks (AfterContentInit, AfterContentChecked)
- // PERF WARNING: do NOT extract this to a separate function without running benchmarks
- if (!isInCheckNoChangesPass) {
- if (hooksInitPhaseCompleted) {
- const contentCheckHooks = tView.contentCheckHooks;
- if (contentCheckHooks !== null) {
- executeCheckHooks(lView, contentCheckHooks);
- }
- }
- else {
- const contentHooks = tView.contentHooks;
- if (contentHooks !== null) {
- executeInitAndCheckHooks(lView, contentHooks, 1 /* AfterContentInitHooksToBeRun */);
- }
- incrementInitPhaseFlags(lView, 1 /* AfterContentInitHooksToBeRun */);
- }
- }
- processHostBindingOpCodes(tView, lView);
- // Refresh child component views.
- const components = tView.components;
- if (components !== null) {
- refreshChildComponents(lView, components);
- }
- // View queries must execute after refreshing child components because a template in this view
- // could be inserted in a child component. If the view query executes before child component
- // refresh, the template might not yet be inserted.
- const viewQuery = tView.viewQuery;
- if (viewQuery !== null) {
- executeViewQueryFn(2 /* Update */, viewQuery, context);
- }
- // execute view hooks (AfterViewInit, AfterViewChecked)
- // PERF WARNING: do NOT extract this to a separate function without running benchmarks
- if (!isInCheckNoChangesPass) {
- if (hooksInitPhaseCompleted) {
- const viewCheckHooks = tView.viewCheckHooks;
- if (viewCheckHooks !== null) {
- executeCheckHooks(lView, viewCheckHooks);
- }
- }
- else {
- const viewHooks = tView.viewHooks;
- if (viewHooks !== null) {
- executeInitAndCheckHooks(lView, viewHooks, 2 /* AfterViewInitHooksToBeRun */);
- }
- incrementInitPhaseFlags(lView, 2 /* AfterViewInitHooksToBeRun */);
- }
- }
- if (tView.firstUpdatePass === true) {
- // We need to make sure that we only flip the flag on successful `refreshView` only
- // Don't do this in `finally` block.
- // If we did this in `finally` block then an exception could block the execution of styling
- // instructions which in turn would be unable to insert themselves into the styling linked
- // list. The result of this would be that if the exception would not be throw on subsequent CD
- // the styling would be unable to process it data and reflect to the DOM.
- tView.firstUpdatePass = false;
- }
- // Do not reset the dirty state when running in check no changes mode. We don't want components
- // to behave differently depending on whether check no changes is enabled or not. For example:
- // Marking an OnPush component as dirty from within the `ngAfterViewInit` hook in order to
- // refresh a `NgClass` binding should work. If we would reset the dirty state in the check
- // no changes cycle, the component would be not be dirty for the next update pass. This would
- // be different in production mode where the component dirty state is not reset.
- if (!isInCheckNoChangesPass) {
- lView[FLAGS] &= ~(64 /* Dirty */ | 8 /* FirstLViewPass */);
- }
- if (lView[FLAGS] & 1024 /* RefreshTransplantedView */) {
- lView[FLAGS] &= ~1024 /* RefreshTransplantedView */;
- updateTransplantedViewCount(lView[PARENT], -1);
- }
- }
- finally {
- leaveView();
- }
- }
- function renderComponentOrTemplate(tView, lView, templateFn, context) {
- const rendererFactory = lView[RENDERER_FACTORY];
- const normalExecutionPath = !isInCheckNoChangesMode();
- const creationModeIsActive = isCreationMode(lView);
- try {
- if (normalExecutionPath && !creationModeIsActive && rendererFactory.begin) {
- rendererFactory.begin();
- }
- if (creationModeIsActive) {
- renderView(tView, lView, context);
- }
- refreshView(tView, lView, templateFn, context);
- }
- finally {
- if (normalExecutionPath && !creationModeIsActive && rendererFactory.end) {
- rendererFactory.end();
- }
- }
- }
- function executeTemplate(tView, lView, templateFn, rf, context) {
- const prevSelectedIndex = getSelectedIndex();
- try {
- setSelectedIndex(-1);
- if (rf & 2 /* Update */ && lView.length > HEADER_OFFSET) {
- // When we're updating, inherently select 0 so we don't
- // have to generate that instruction for most update blocks.
- selectIndexInternal(tView, lView, HEADER_OFFSET, isInCheckNoChangesMode());
- }
- templateFn(rf, context);
- }
- finally {
- setSelectedIndex(prevSelectedIndex);
- }
- }
- //////////////////////////
- //// Element
- //////////////////////////
- function executeContentQueries(tView, tNode, lView) {
- if (isContentQueryHost(tNode)) {
- const start = tNode.directiveStart;
- const end = tNode.directiveEnd;
- for (let directiveIndex = start; directiveIndex < end; directiveIndex++) {
- const def = tView.data[directiveIndex];
- if (def.contentQueries) {
- def.contentQueries(1 /* Create */, lView[directiveIndex], directiveIndex);
- }
- }
- }
- }
- /**
- * Creates directive instances.
- */
- function createDirectivesInstances(tView, lView, tNode) {
- if (!getBindingsEnabled())
- return;
- instantiateAllDirectives(tView, lView, tNode, getNativeByTNode(tNode, lView));
- if ((tNode.flags & 128 /* hasHostBindings */) === 128 /* hasHostBindings */) {
- invokeDirectivesHostBindings(tView, lView, tNode);
- }
- }
- /**
- * Takes a list of local names and indices and pushes the resolved local variable values
- * to LView in the same order as they are loaded in the template with load().
- */
- function saveResolvedLocalsInData(viewData, tNode, localRefExtractor = getNativeByTNode) {
- const localNames = tNode.localNames;
- if (localNames !== null) {
- let localIndex = tNode.index + 1;
- for (let i = 0; i < localNames.length; i += 2) {
- const index = localNames[i + 1];
- const value = index === -1 ?
- localRefExtractor(tNode, viewData) :
- viewData[index];
- viewData[localIndex++] = value;
- }
- }
- }
- /**
- * Gets TView from a template function or creates a new TView
- * if it doesn't already exist.
- *
- * @param def ComponentDef
- * @returns TView
- */
- function getOrCreateTComponentView(def) {
- const tView = def.tView;
- // Create a TView if there isn't one, or recreate it if the first create pass didn't
- // complete successfully since we can't know for sure whether it's in a usable shape.
- if (tView === null || tView.incompleteFirstPass) {
- // Declaration node here is null since this function is called when we dynamically create a
- // component and hence there is no declaration.
- const declTNode = null;
- return def.tView = createTView(1 /* Component */, declTNode, def.template, def.decls, def.vars, def.directiveDefs, def.pipeDefs, def.viewQuery, def.schemas, def.consts);
- }
- return tView;
- }
- /**
- * Creates a TView instance
- *
- * @param type Type of `TView`.
- * @param declTNode Declaration location of this `TView`.
- * @param templateFn Template function
- * @param decls The number of nodes, local refs, and pipes in this template
- * @param directives Registry of directives for this view
- * @param pipes Registry of pipes for this view
- * @param viewQuery View queries for this view
- * @param schemas Schemas for this view
- * @param consts Constants for this view
- */
- function createTView(type, declTNode, templateFn, decls, vars, directives, pipes, viewQuery, schemas, constsOrFactory) {
- ngDevMode && ngDevMode.tView++;
- const bindingStartIndex = HEADER_OFFSET + decls;
- // This length does not yet contain host bindings from child directives because at this point,
- // we don't know which directives are active on this template. As soon as a directive is matched
- // that has a host binding, we will update the blueprint with that def's hostVars count.
- const initialViewLength = bindingStartIndex + vars;
- const blueprint = createViewBlueprint(bindingStartIndex, initialViewLength);
- const consts = typeof constsOrFactory === 'function' ? constsOrFactory() : constsOrFactory;
- const tView = blueprint[TVIEW] = ngDevMode ?
- new TViewConstructor(type, // type: TViewType,
- blueprint, // blueprint: LView,
- templateFn, // template: ComponentTemplate<{}>|null,
- null, // queries: TQueries|null
- viewQuery, // viewQuery: ViewQueriesFunction<{}>|null,
- declTNode, // declTNode: TNode|null,
- cloneToTViewData(blueprint).fill(null, bindingStartIndex), // data: TData,
- bindingStartIndex, // bindingStartIndex: number,
- initialViewLength, // expandoStartIndex: number,
- null, // hostBindingOpCodes: HostBindingOpCodes,
- true, // firstCreatePass: boolean,
- true, // firstUpdatePass: boolean,
- false, // staticViewQueries: boolean,
- false, // staticContentQueries: boolean,
- null, // preOrderHooks: HookData|null,
- null, // preOrderCheckHooks: HookData|null,
- null, // contentHooks: HookData|null,
- null, // contentCheckHooks: HookData|null,
- null, // viewHooks: HookData|null,
- null, // viewCheckHooks: HookData|null,
- null, // destroyHooks: DestroyHookData|null,
- null, // cleanup: any[]|null,
- null, // contentQueries: number[]|null,
- null, // components: number[]|null,
- typeof directives === 'function' ? //
- directives() : //
- directives, // directiveRegistry: DirectiveDefList|null,
- typeof pipes === 'function' ? pipes() : pipes, // pipeRegistry: PipeDefList|null,
- null, // firstChild: TNode|null,
- schemas, // schemas: SchemaMetadata[]|null,
- consts, // consts: TConstants|null
- false, // incompleteFirstPass: boolean
- decls, // ngDevMode only: decls
- vars) :
- {
- type: type,
- blueprint: blueprint,
- template: templateFn,
- queries: null,
- viewQuery: viewQuery,
- declTNode: declTNode,
- data: blueprint.slice().fill(null, bindingStartIndex),
- bindingStartIndex: bindingStartIndex,
- expandoStartIndex: initialViewLength,
- hostBindingOpCodes: null,
- firstCreatePass: true,
- firstUpdatePass: true,
- staticViewQueries: false,
- staticContentQueries: false,
- preOrderHooks: null,
- preOrderCheckHooks: null,
- contentHooks: null,
- contentCheckHooks: null,
- viewHooks: null,
- viewCheckHooks: null,
- destroyHooks: null,
- cleanup: null,
- contentQueries: null,
- components: null,
- directiveRegistry: typeof directives === 'function' ? directives() : directives,
- pipeRegistry: typeof pipes === 'function' ? pipes() : pipes,
- firstChild: null,
- schemas: schemas,
- consts: consts,
- incompleteFirstPass: false
- };
- if (ngDevMode) {
- // For performance reasons it is important that the tView retains the same shape during runtime.
- // (To make sure that all of the code is monomorphic.) For this reason we seal the object to
- // prevent class transitions.
- Object.seal(tView);
- }
- return tView;
- }
- function createViewBlueprint(bindingStartIndex, initialViewLength) {
- const blueprint = ngDevMode ? new LViewBlueprint() : [];
- for (let i = 0; i < initialViewLength; i++) {
- blueprint.push(i < bindingStartIndex ? null : NO_CHANGE);
- }
- return blueprint;
- }
- function createError(text, token) {
- return new Error(`Renderer: ${text} [${stringifyForError(token)}]`);
- }
- function assertHostNodeExists(rElement, elementOrSelector) {
- if (!rElement) {
- if (typeof elementOrSelector === 'string') {
- throw createError('Host node with selector not found:', elementOrSelector);
- }
- else {
- throw createError('Host node is required:', elementOrSelector);
- }
- }
- }
- /**
- * Locates the host native element, used for bootstrapping existing nodes into rendering pipeline.
- *
- * @param rendererFactory Factory function to create renderer instance.
- * @param elementOrSelector Render element or CSS selector to locate the element.
- * @param encapsulation View Encapsulation defined for component that requests host element.
- */
- function locateHostElement(renderer, elementOrSelector, encapsulation) {
- if (isProceduralRenderer(renderer)) {
- // When using native Shadow DOM, do not clear host element to allow native slot projection
- const preserveContent = encapsulation === ViewEncapsulation.ShadowDom;
- return renderer.selectRootElement(elementOrSelector, preserveContent);
- }
- let rElement = typeof elementOrSelector === 'string' ?
- renderer.querySelector(elementOrSelector) :
- elementOrSelector;
- ngDevMode && assertHostNodeExists(rElement, elementOrSelector);
- // Always clear host element's content when Renderer3 is in use. For procedural renderer case we
- // make it depend on whether ShadowDom encapsulation is used (in which case the content should be
- // preserved to allow native slot projection). ShadowDom encapsulation requires procedural
- // renderer, and procedural renderer case is handled above.
- rElement.textContent = '';
- return rElement;
- }
- /**
- * Saves context for this cleanup function in LView.cleanupInstances.
- *
- * On the first template pass, saves in TView:
- * - Cleanup function
- * - Index of context we just saved in LView.cleanupInstances
- *
- * This function can also be used to store instance specific cleanup fns. In that case the `context`
- * is `null` and the function is store in `LView` (rather than it `TView`).
- */
- function storeCleanupWithContext(tView, lView, context, cleanupFn) {
- const lCleanup = getLCleanup(lView);
- if (context === null) {
- // If context is null that this is instance specific callback. These callbacks can only be
- // inserted after template shared instances. For this reason in ngDevMode we freeze the TView.
- if (ngDevMode) {
- Object.freeze(getTViewCleanup(tView));
- }
- lCleanup.push(cleanupFn);
- }
- else {
- lCleanup.push(context);
- if (tView.firstCreatePass) {
- getTViewCleanup(tView).push(cleanupFn, lCleanup.length - 1);
- }
- }
- }
- function createTNode(tView, tParent, type, index, value, attrs) {
- ngDevMode && index !== 0 && // 0 are bogus nodes and they are OK. See `createContainerRef` in
- // `view_engine_compatibility` for additional context.
- assertGreaterThanOrEqual(index, HEADER_OFFSET, 'TNodes can\'t be in the LView header.');
- ngDevMode && assertNotSame(attrs, undefined, '\'undefined\' is not valid value for \'attrs\'');
- ngDevMode && ngDevMode.tNode++;
- ngDevMode && tParent && assertTNodeForTView(tParent, tView);
- let injectorIndex = tParent ? tParent.injectorIndex : -1;
- const tNode = ngDevMode ?
- new TNodeDebug(tView, // tView_: TView
- type, // type: TNodeType
- index, // index: number
- null, // insertBeforeIndex: null|-1|number|number[]
- injectorIndex, // injectorIndex: number
- -1, // directiveStart: number
- -1, // directiveEnd: number
- -1, // directiveStylingLast: number
- null, // propertyBindings: number[]|null
- 0, // flags: TNodeFlags
- 0, // providerIndexes: TNodeProviderIndexes
- value, // value: string|null
- attrs, // attrs: (string|AttributeMarker|(string|SelectorFlags)[])[]|null
- null, // mergedAttrs
- null, // localNames: (string|number)[]|null
- undefined, // initialInputs: (string[]|null)[]|null|undefined
- null, // inputs: PropertyAliases|null
- null, // outputs: PropertyAliases|null
- null, // tViews: ITView|ITView[]|null
- null, // next: ITNode|null
- null, // projectionNext: ITNode|null
- null, // child: ITNode|null
- tParent, // parent: TElementNode|TContainerNode|null
- null, // projection: number|(ITNode|RNode[])[]|null
- null, // styles: string|null
- null, // stylesWithoutHost: string|null
- undefined, // residualStyles: string|null
- null, // classes: string|null
- null, // classesWithoutHost: string|null
- undefined, // residualClasses: string|null
- 0, // classBindings: TStylingRange;
- 0) :
- {
- type,
- index,
- insertBeforeIndex: null,
- injectorIndex,
- directiveStart: -1,
- directiveEnd: -1,
- directiveStylingLast: -1,
- propertyBindings: null,
- flags: 0,
- providerIndexes: 0,
- value: value,
- attrs: attrs,
- mergedAttrs: null,
- localNames: null,
- initialInputs: undefined,
- inputs: null,
- outputs: null,
- tViews: null,
- next: null,
- projectionNext: null,
- child: null,
- parent: tParent,
- projection: null,
- styles: null,
- stylesWithoutHost: null,
- residualStyles: undefined,
- classes: null,
- classesWithoutHost: null,
- residualClasses: undefined,
- classBindings: 0,
- styleBindings: 0,
- };
- if (ngDevMode) {
- // For performance reasons it is important that the tNode retains the same shape during runtime.
- // (To make sure that all of the code is monomorphic.) For this reason we seal the object to
- // prevent class transitions.
- Object.seal(tNode);
- }
- return tNode;
- }
- function generatePropertyAliases(inputAliasMap, directiveDefIdx, propStore) {
- for (let publicName in inputAliasMap) {
- if (inputAliasMap.hasOwnProperty(publicName)) {
- propStore = propStore === null ? {} : propStore;
- const internalName = inputAliasMap[publicName];
- if (propStore.hasOwnProperty(publicName)) {
- propStore[publicName].push(directiveDefIdx, internalName);
- }
- else {
- (propStore[publicName] = [directiveDefIdx, internalName]);
- }
- }
- }
- return propStore;
- }
- /**
- * Initializes data structures required to work with directive inputs and outputs.
- * Initialization is done for all directives matched on a given TNode.
- */
- function initializeInputAndOutputAliases(tView, tNode) {
- ngDevMode && assertFirstCreatePass(tView);
- const start = tNode.directiveStart;
- const end = tNode.directiveEnd;
- const tViewData = tView.data;
- const tNodeAttrs = tNode.attrs;
- const inputsFromAttrs = ngDevMode ? new TNodeInitialInputs() : [];
- let inputsStore = null;
- let outputsStore = null;
- for (let i = start; i < end; i++) {
- const directiveDef = tViewData[i];
- const directiveInputs = directiveDef.inputs;
- // Do not use unbound attributes as inputs to structural directives, since structural
- // directive inputs can only be set using microsyntax (e.g. `<div *dir="exp">`).
- // TODO(FW-1930): microsyntax expressions may also contain unbound/static attributes, which
- // should be set for inline templates.
- const initialInputs = (tNodeAttrs !== null && !isInlineTemplate(tNode)) ?
- generateInitialInputs(directiveInputs, tNodeAttrs) :
- null;
- inputsFromAttrs.push(initialInputs);
- inputsStore = generatePropertyAliases(directiveInputs, i, inputsStore);
- outputsStore = generatePropertyAliases(directiveDef.outputs, i, outputsStore);
- }
- if (inputsStore !== null) {
- if (inputsStore.hasOwnProperty('class')) {
- tNode.flags |= 16 /* hasClassInput */;
- }
- if (inputsStore.hasOwnProperty('style')) {
- tNode.flags |= 32 /* hasStyleInput */;
- }
- }
- tNode.initialInputs = inputsFromAttrs;
- tNode.inputs = inputsStore;
- tNode.outputs = outputsStore;
- }
- /**
- * Mapping between attributes names that don't correspond to their element property names.
- *
- * Performance note: this function is written as a series of if checks (instead of, say, a property
- * object lookup) for performance reasons - the series of `if` checks seems to be the fastest way of
- * mapping property names. Do NOT change without benchmarking.
- *
- * Note: this mapping has to be kept in sync with the equally named mapping in the template
- * type-checking machinery of ngtsc.
- */
- function mapPropName(name) {
- if (name === 'class')
- return 'className';
- if (name === 'for')
- return 'htmlFor';
- if (name === 'formaction')
- return 'formAction';
- if (name === 'innerHtml')
- return 'innerHTML';
- if (name === 'readonly')
- return 'readOnly';
- if (name === 'tabindex')
- return 'tabIndex';
- return name;
- }
- function elementPropertyInternal(tView, tNode, lView, propName, value, renderer, sanitizer, nativeOnly) {
- ngDevMode && assertNotSame(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');
- const element = getNativeByTNode(tNode, lView);
- let inputData = tNode.inputs;
- let dataValue;
- if (!nativeOnly && inputData != null && (dataValue = inputData[propName])) {
- setInputsForProperty(tView, lView, dataValue, propName, value);
- if (isComponentHost(tNode))
- markDirtyIfOnPush(lView, tNode.index);
- if (ngDevMode) {
- setNgReflectProperties(lView, element, tNode.type, dataValue, value);
- }
- }
- else if (tNode.type & 3 /* AnyRNode */) {
- propName = mapPropName(propName);
- if (ngDevMode) {
- validateAgainstEventProperties(propName);
- if (!validateProperty(tView, element, propName, tNode)) {
- // Return here since we only log warnings for unknown properties.
- logUnknownPropertyError(propName, tNode);
- return;
- }
- ngDevMode.rendererSetProperty++;
- }
- // It is assumed that the sanitizer is only added when the compiler determines that the
- // property is risky, so sanitization can be done without further checks.
- value = sanitizer != null ? sanitizer(value, tNode.value || '', propName) : value;
- if (isProceduralRenderer(renderer)) {
- renderer.setProperty(element, propName, value);
- }
- else if (!isAnimationProp(propName)) {
- element.setProperty ? element.setProperty(propName, value) :
- element[propName] = value;
- }
- }
- else if (tNode.type & 12 /* AnyContainer */) {
- // If the node is a container and the property didn't
- // match any of the inputs or schemas we should throw.
- if (ngDevMode && !matchingSchemas(tView, tNode.value)) {
- logUnknownPropertyError(propName, tNode);
- }
- }
- }
- /** If node is an OnPush component, marks its LView dirty. */
- function markDirtyIfOnPush(lView, viewIndex) {
- ngDevMode && assertLView(lView);
- const childComponentLView = getComponentLViewByIndex(viewIndex, lView);
- if (!(childComponentLView[FLAGS] & 16 /* CheckAlways */)) {
- childComponentLView[FLAGS] |= 64 /* Dirty */;
- }
- }
- function setNgReflectProperty(lView, element, type, attrName, value) {
- const renderer = lView[RENDERER];
- attrName = normalizeDebugBindingName(attrName);
- const debugValue = normalizeDebugBindingValue(value);
- if (type & 3 /* AnyRNode */) {
- if (value == null) {
- isProceduralRenderer(renderer) ? renderer.removeAttribute(element, attrName) :
- element.removeAttribute(attrName);
- }
- else {
- isProceduralRenderer(renderer) ?
- renderer.setAttribute(element, attrName, debugValue) :
- element.setAttribute(attrName, debugValue);
- }
- }
- else {
- const textContent = `bindings=${JSON.stringify({ [attrName]: debugValue }, null, 2)}`;
- if (isProceduralRenderer(renderer)) {
- renderer.setValue(element, textContent);
- }
- else {
- element.textContent = textContent;
- }
- }
- }
- function setNgReflectProperties(lView, element, type, dataValue, value) {
- if (type & (3 /* AnyRNode */ | 4 /* Container */)) {
- /**
- * dataValue is an array containing runtime input or output names for the directives:
- * i+0: directive instance index
- * i+1: privateName
- *
- * e.g. [0, 'change', 'change-minified']
- * we want to set the reflected property with the privateName: dataValue[i+1]
- */
- for (let i = 0; i < dataValue.length; i += 2) {
- setNgReflectProperty(lView, element, type, dataValue[i + 1], value);
- }
- }
- }
- function validateProperty(tView, element, propName, tNode) {
- // If `schemas` is set to `null`, that's an indication that this Component was compiled in AOT
- // mode where this check happens at compile time. In JIT mode, `schemas` is always present and
- // defined as an array (as an empty array in case `schemas` field is not defined) and we should
- // execute the check below.
- if (tView.schemas === null)
- return true;
- // The property is considered valid if the element matches the schema, it exists on the element
- // or it is synthetic, and we are in a browser context (web worker nodes should be skipped).
- if (matchingSchemas(tView, tNode.value) || propName in element || isAnimationProp(propName)) {
- return true;
- }
- // Note: `typeof Node` returns 'function' in most browsers, but on IE it is 'object' so we
- // need to account for both here, while being careful for `typeof null` also returning 'object'.
- return typeof Node === 'undefined' || Node === null || !(element instanceof Node);
- }
- function matchingSchemas(tView, tagName) {
- const schemas = tView.schemas;
- if (schemas !== null) {
- for (let i = 0; i < schemas.length; i++) {
- const schema = schemas[i];
- if (schema === NO_ERRORS_SCHEMA ||
- schema === CUSTOM_ELEMENTS_SCHEMA && tagName && tagName.indexOf('-') > -1) {
- return true;
- }
- }
- }
- return false;
- }
- /**
- * Logs an error that a property is not supported on an element.
- * @param propName Name of the invalid property.
- * @param tNode Node on which we encountered the property.
- */
- function logUnknownPropertyError(propName, tNode) {
- let message = `Can't bind to '${propName}' since it isn't a known property of '${tNode.value}'.`;
- console.error(formatRuntimeError("303" /* UNKNOWN_BINDING */, message));
- }
- /**
- * Instantiate a root component.
- */
- function instantiateRootComponent(tView, lView, def) {
- const rootTNode = getCurrentTNode();
- if (tView.firstCreatePass) {
- if (def.providersResolver)
- def.providersResolver(def);
- const directiveIndex = allocExpando(tView, lView, 1, null);
- ngDevMode &&
- assertEqual(directiveIndex, rootTNode.directiveStart, 'Because this is a root component the allocated expando should match the TNode component.');
- configureViewWithDirective(tView, rootTNode, lView, directiveIndex, def);
- }
- const directive = getNodeInjectable(lView, tView, rootTNode.directiveStart, rootTNode);
- attachPatchData(directive, lView);
- const native = getNativeByTNode(rootTNode, lView);
- if (native) {
- attachPatchData(native, lView);
- }
- return directive;
- }
- /**
- * Resolve the matched directives on a node.
- */
- function resolveDirectives(tView, lView, tNode, localRefs) {
- // Please make sure to have explicit type for `exportsMap`. Inferred type triggers bug in
- // tsickle.
- ngDevMode && assertFirstCreatePass(tView);
- let hasDirectives = false;
- if (getBindingsEnabled()) {
- const directiveDefs = findDirectiveDefMatches(tView, lView, tNode);
- const exportsMap = localRefs === null ? null : { '': -1 };
- if (directiveDefs !== null) {
- hasDirectives = true;
- initTNodeFlags(tNode, tView.data.length, directiveDefs.length);
- // When the same token is provided by several directives on the same node, some rules apply in
- // the viewEngine:
- // - viewProviders have priority over providers
- // - the last directive in NgModule.declarations has priority over the previous one
- // So to match these rules, the order in which providers are added in the arrays is very
- // important.
- for (let i = 0; i < directiveDefs.length; i++) {
- const def = directiveDefs[i];
- if (def.providersResolver)
- def.providersResolver(def);
- }
- let preOrderHooksFound = false;
- let preOrderCheckHooksFound = false;
- let directiveIdx = allocExpando(tView, lView, directiveDefs.length, null);
- ngDevMode &&
- assertSame(directiveIdx, tNode.directiveStart, 'TNode.directiveStart should point to just allocated space');
- for (let i = 0; i < directiveDefs.length; i++) {
- const def = directiveDefs[i];
- // Merge the attrs in the order of matches. This assumes that the first directive is the
- // component itself, so that the component has the least priority.
- tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, def.hostAttrs);
- configureViewWithDirective(tView, tNode, lView, directiveIdx, def);
- saveNameToExportMap(directiveIdx, def, exportsMap);
- if (def.contentQueries !== null)
- tNode.flags |= 8 /* hasContentQuery */;
- if (def.hostBindings !== null || def.hostAttrs !== null || def.hostVars !== 0)
- tNode.flags |= 128 /* hasHostBindings */;
- const lifeCycleHooks = def.type.prototype;
- // Only push a node index into the preOrderHooks array if this is the first
- // pre-order hook found on this node.
- if (!preOrderHooksFound &&
- (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngOnInit || lifeCycleHooks.ngDoCheck)) {
- // We will push the actual hook function into this array later during dir instantiation.
- // We cannot do it now because we must ensure hooks are registered in the same
- // order that directives are created (i.e. injection order).
- (tView.preOrderHooks || (tView.preOrderHooks = [])).push(tNode.index);
- preOrderHooksFound = true;
- }
- if (!preOrderCheckHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngDoCheck)) {
- (tView.preOrderCheckHooks || (tView.preOrderCheckHooks = [])).push(tNode.index);
- preOrderCheckHooksFound = true;
- }
- directiveIdx++;
- }
- initializeInputAndOutputAliases(tView, tNode);
- }
- if (exportsMap)
- cacheMatchingLocalNames(tNode, localRefs, exportsMap);
- }
- // Merge the template attrs last so that they have the highest priority.
- tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);
- return hasDirectives;
- }
- /**
- * Add `hostBindings` to the `TView.hostBindingOpCodes`.
- *
- * @param tView `TView` to which the `hostBindings` should be added.
- * @param tNode `TNode` the element which contains the directive
- * @param lView `LView` current `LView`
- * @param directiveIdx Directive index in view.
- * @param directiveVarsIdx Where will the directive's vars be stored
- * @param def `ComponentDef`/`DirectiveDef`, which contains the `hostVars`/`hostBindings` to add.
- */
- function registerHostBindingOpCodes(tView, tNode, lView, directiveIdx, directiveVarsIdx, def) {
- ngDevMode && assertFirstCreatePass(tView);
- const hostBindings = def.hostBindings;
- if (hostBindings) {
- let hostBindingOpCodes = tView.hostBindingOpCodes;
- if (hostBindingOpCodes === null) {
- hostBindingOpCodes = tView.hostBindingOpCodes = [];
- }
- const elementIndx = ~tNode.index;
- if (lastSelectedElementIdx(hostBindingOpCodes) != elementIndx) {
- // Conditionally add select element so that we are more efficient in execution.
- // NOTE: this is strictly not necessary and it trades code size for runtime perf.
- // (We could just always add it.)
- hostBindingOpCodes.push(elementIndx);
- }
- hostBindingOpCodes.push(directiveIdx, directiveVarsIdx, hostBindings);
- }
- }
- /**
- * Returns the last selected element index in the `HostBindingOpCodes`
- *
- * For perf reasons we don't need to update the selected element index in `HostBindingOpCodes` only
- * if it changes. This method returns the last index (or '0' if not found.)
- *
- * Selected element index are only the ones which are negative.
- */
- function lastSelectedElementIdx(hostBindingOpCodes) {
- let i = hostBindingOpCodes.length;
- while (i > 0) {
- const value = hostBindingOpCodes[--i];
- if (typeof value === 'number' && value < 0) {
- return value;
- }
- }
- return 0;
- }
- /**
- * Instantiate all the directives that were previously resolved on the current node.
- */
- function instantiateAllDirectives(tView, lView, tNode, native) {
- const start = tNode.directiveStart;
- const end = tNode.directiveEnd;
- if (!tView.firstCreatePass) {
- getOrCreateNodeInjectorForNode(tNode, lView);
- }
- attachPatchData(native, lView);
- const initialInputs = tNode.initialInputs;
- for (let i = start; i < end; i++) {
- const def = tView.data[i];
- const isComponent = isComponentDef(def);
- if (isComponent) {
- ngDevMode && assertTNodeType(tNode, 3 /* AnyRNode */);
- addComponentLogic(lView, tNode, def);
- }
- const directive = getNodeInjectable(lView, tView, i, tNode);
- attachPatchData(directive, lView);
- if (initialInputs !== null) {
- setInputsFromAttrs(lView, i - start, directive, def, tNode, initialInputs);
- }
- if (isComponent) {
- const componentView = getComponentLViewByIndex(tNode.index, lView);
- componentView[CONTEXT] = directive;
- }
- }
- }
- function invokeDirectivesHostBindings(tView, lView, tNode) {
- const start = tNode.directiveStart;
- const end = tNode.directiveEnd;
- const firstCreatePass = tView.firstCreatePass;
- const elementIndex = tNode.index;
- const currentDirectiveIndex = getCurrentDirectiveIndex();
- try {
- setSelectedIndex(elementIndex);
- for (let dirIndex = start; dirIndex < end; dirIndex++) {
- const def = tView.data[dirIndex];
- const directive = lView[dirIndex];
- setCurrentDirectiveIndex(dirIndex);
- if (def.hostBindings !== null || def.hostVars !== 0 || def.hostAttrs !== null) {
- invokeHostBindingsInCreationMode(def, directive);
- }
- }
- }
- finally {
- setSelectedIndex(-1);
- setCurrentDirectiveIndex(currentDirectiveIndex);
- }
- }
- /**
- * Invoke the host bindings in creation mode.
- *
- * @param def `DirectiveDef` which may contain the `hostBindings` function.
- * @param directive Instance of directive.
- */
- function invokeHostBindingsInCreationMode(def, directive) {
- if (def.hostBindings !== null) {
- def.hostBindings(1 /* Create */, directive);
- }
- }
- /**
- * Matches the current node against all available selectors.
- * If a component is matched (at most one), it is returned in first position in the array.
- */
- function findDirectiveDefMatches(tView, viewData, tNode) {
- ngDevMode && assertFirstCreatePass(tView);
- ngDevMode && assertTNodeType(tNode, 3 /* AnyRNode */ | 12 /* AnyContainer */);
- const registry = tView.directiveRegistry;
- let matches = null;
- if (registry) {
- for (let i = 0; i < registry.length; i++) {
- const def = registry[i];
- if (isNodeMatchingSelectorList(tNode, def.selectors, /* isProjectionMode */ false)) {
- matches || (matches = ngDevMode ? new MatchesArray() : []);
- diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, viewData), tView, def.type);
- if (isComponentDef(def)) {
- if (ngDevMode) {
- assertTNodeType(tNode, 2 /* Element */, `"${tNode.value}" tags cannot be used as component hosts. ` +
- `Please use a different tag to activate the ${stringify(def.type)} component.`);
- if (tNode.flags & 2 /* isComponentHost */)
- throwMultipleComponentError(tNode);
- }
- markAsComponentHost(tView, tNode);
- // The component is always stored first with directives after.
- matches.unshift(def);
- }
- else {
- matches.push(def);
- }
- }
- }
- }
- return matches;
- }
- /**
- * Marks a given TNode as a component's host. This consists of:
- * - setting appropriate TNode flags;
- * - storing index of component's host element so it will be queued for view refresh during CD.
- */
- function markAsComponentHost(tView, hostTNode) {
- ngDevMode && assertFirstCreatePass(tView);
- hostTNode.flags |= 2 /* isComponentHost */;
- (tView.components || (tView.components = ngDevMode ? new TViewComponents() : []))
- .push(hostTNode.index);
- }
- /** Caches local names and their matching directive indices for query and template lookups. */
- function cacheMatchingLocalNames(tNode, localRefs, exportsMap) {
- if (localRefs) {
- const localNames = tNode.localNames = ngDevMode ? new TNodeLocalNames() : [];
- // Local names must be stored in tNode in the same order that localRefs are defined
- // in the template to ensure the data is loaded in the same slots as their refs
- // in the template (for template queries).
- for (let i = 0; i < localRefs.length; i += 2) {
- const index = exportsMap[localRefs[i + 1]];
- if (index == null)
- throw new RuntimeError("301" /* EXPORT_NOT_FOUND */, `Export of name '${localRefs[i + 1]}' not found!`);
- localNames.push(localRefs[i], index);
- }
- }
- }
- /**
- * Builds up an export map as directives are created, so local refs can be quickly mapped
- * to their directive instances.
- */
- function saveNameToExportMap(directiveIdx, def, exportsMap) {
- if (exportsMap) {
- if (def.exportAs) {
- for (let i = 0; i < def.exportAs.length; i++) {
- exportsMap[def.exportAs[i]] = directiveIdx;
- }
- }
- if (isComponentDef(def))
- exportsMap[''] = directiveIdx;
- }
- }
- /**
- * Initializes the flags on the current node, setting all indices to the initial index,
- * the directive count to 0, and adding the isComponent flag.
- * @param index the initial index
- */
- function initTNodeFlags(tNode, index, numberOfDirectives) {
- ngDevMode &&
- assertNotEqual(numberOfDirectives, tNode.directiveEnd - tNode.directiveStart, 'Reached the max number of directives');
- tNode.flags |= 1 /* isDirectiveHost */;
- // When the first directive is created on a node, save the index
- tNode.directiveStart = index;
- tNode.directiveEnd = index + numberOfDirectives;
- tNode.providerIndexes = index;
- }
- /**
- * Setup directive for instantiation.
- *
- * We need to create a `NodeInjectorFactory` which is then inserted in both the `Blueprint` as well
- * as `LView`. `TView` gets the `DirectiveDef`.
- *
- * @param tView `TView`
- * @param tNode `TNode`
- * @param lView `LView`
- * @param directiveIndex Index where the directive will be stored in the Expando.
- * @param def `DirectiveDef`
- */
- function configureViewWithDirective(tView, tNode, lView, directiveIndex, def) {
- ngDevMode &&
- assertGreaterThanOrEqual(directiveIndex, HEADER_OFFSET, 'Must be in Expando section');
- tView.data[directiveIndex] = def;
- const directiveFactory = def.factory || (def.factory = getFactoryDef(def.type, true));
- const nodeInjectorFactory = new NodeInjectorFactory(directiveFactory, isComponentDef(def), null);
- tView.blueprint[directiveIndex] = nodeInjectorFactory;
- lView[directiveIndex] = nodeInjectorFactory;
- registerHostBindingOpCodes(tView, tNode, lView, directiveIndex, allocExpando(tView, lView, def.hostVars, NO_CHANGE), def);
- }
- function addComponentLogic(lView, hostTNode, def) {
- const native = getNativeByTNode(hostTNode, lView);
- const tView = getOrCreateTComponentView(def);
- // Only component views should be added to the view tree directly. Embedded views are
- // accessed through their containers because they may be removed / re-added later.
- const rendererFactory = lView[RENDERER_FACTORY];
- const componentView = addToViewTree(lView, createLView(lView, tView, null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, native, hostTNode, rendererFactory, rendererFactory.createRenderer(native, def), null, null));
- // Component view will always be created before any injected LContainers,
- // so this is a regular element, wrap it with the component view
- lView[hostTNode.index] = componentView;
- }
- function elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace) {
- if (ngDevMode) {
- assertNotSame(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');
- validateAgainstEventAttributes(name);
- assertTNodeType(tNode, 2 /* Element */, `Attempted to set attribute \`${name}\` on a container node. ` +
- `Host bindings are not valid on ng-container or ng-template.`);
- }
- const element = getNativeByTNode(tNode, lView);
- setElementAttribute(lView[RENDERER], element, namespace, tNode.value, name, value, sanitizer);
- }
- function setElementAttribute(renderer, element, namespace, tagName, name, value, sanitizer) {
- if (value == null) {
- ngDevMode && ngDevMode.rendererRemoveAttribute++;
- isProceduralRenderer(renderer) ? renderer.removeAttribute(element, name, namespace) :
- element.removeAttribute(name);
- }
- else {
- ngDevMode && ngDevMode.rendererSetAttribute++;
- const strValue = sanitizer == null ? renderStringify(value) : sanitizer(value, tagName || '', name);
- if (isProceduralRenderer(renderer)) {
- renderer.setAttribute(element, name, strValue, namespace);
- }
- else {
- namespace ? element.setAttributeNS(namespace, name, strValue) :
- element.setAttribute(name, strValue);
- }
- }
- }
- /**
- * Sets initial input properties on directive instances from attribute data
- *
- * @param lView Current LView that is being processed.
- * @param directiveIndex Index of the directive in directives array
- * @param instance Instance of the directive on which to set the initial inputs
- * @param def The directive def that contains the list of inputs
- * @param tNode The static data for this node
- */
- function setInputsFromAttrs(lView, directiveIndex, instance, def, tNode, initialInputData) {
- const initialInputs = initialInputData[directiveIndex];
- if (initialInputs !== null) {
- const setInput = def.setInput;
- for (let i = 0; i < initialInputs.length;) {
- const publicName = initialInputs[i++];
- const privateName = initialInputs[i++];
- const value = initialInputs[i++];
- if (setInput !== null) {
- def.setInput(instance, value, publicName, privateName);
- }
- else {
- instance[privateName] = value;
- }
- if (ngDevMode) {
- const nativeElement = getNativeByTNode(tNode, lView);
- setNgReflectProperty(lView, nativeElement, tNode.type, privateName, value);
- }
- }
- }
- }
- /**
- * Generates initialInputData for a node and stores it in the template's static storage
- * so subsequent template invocations don't have to recalculate it.
- *
- * initialInputData is an array containing values that need to be set as input properties
- * for directives on this node, but only once on creation. We need this array to support
- * the case where you set an @Input property of a directive using attribute-like syntax.
- * e.g. if you have a `name` @Input, you can set it once like this:
- *
- * <my-component name="Bess"></my-component>
- *
- * @param inputs The list of inputs from the directive def
- * @param attrs The static attrs on this node
- */
- function generateInitialInputs(inputs, attrs) {
- let inputsToStore = null;
- let i = 0;
- while (i < attrs.length) {
- const attrName = attrs[i];
- if (attrName === 0 /* NamespaceURI */) {
- // We do not allow inputs on namespaced attributes.
- i += 4;
- continue;
- }
- else if (attrName === 5 /* ProjectAs */) {
- // Skip over the `ngProjectAs` value.
- i += 2;
- continue;
- }
- // If we hit any other attribute markers, we're done anyway. None of those are valid inputs.
- if (typeof attrName === 'number')
- break;
- if (inputs.hasOwnProperty(attrName)) {
- if (inputsToStore === null)
- inputsToStore = [];
- inputsToStore.push(attrName, inputs[attrName], attrs[i + 1]);
- }
- i += 2;
- }
- return inputsToStore;
- }
- //////////////////////////
- //// ViewContainer & View
- //////////////////////////
- // Not sure why I need to do `any` here but TS complains later.
- const LContainerArray = ((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode()) &&
- createNamedArrayType('LContainer');
- /**
- * Creates a LContainer, either from a container instruction, or for a ViewContainerRef.
- *
- * @param hostNative The host element for the LContainer
- * @param hostTNode The host TNode for the LContainer
- * @param currentView The parent view of the LContainer
- * @param native The native comment element
- * @param isForViewContainerRef Optional a flag indicating the ViewContainerRef case
- * @returns LContainer
- */
- function createLContainer(hostNative, currentView, native, tNode) {
- ngDevMode && assertLView(currentView);
- ngDevMode && !isProceduralRenderer(currentView[RENDERER]) && assertDomNode(native);
- // https://jsperf.com/array-literal-vs-new-array-really
- const lContainer = new (ngDevMode ? LContainerArray : Array)(hostNative, // host native
- true, // Boolean `true` in this position signifies that this is an `LContainer`
- false, // has transplanted views
- currentView, // parent
- null, // next
- 0, // transplanted views to refresh count
- tNode, // t_host
- native, // native,
- null, // view refs
- null);
- ngDevMode &&
- assertEqual(lContainer.length, CONTAINER_HEADER_OFFSET, 'Should allocate correct number of slots for LContainer header.');
- ngDevMode && attachLContainerDebug(lContainer);
- return lContainer;
- }
- /**
- * Goes over embedded views (ones created through ViewContainerRef APIs) and refreshes
- * them by executing an associated template function.
- */
- function refreshEmbeddedViews(lView) {
- for (let lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {
- for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
- const embeddedLView = lContainer[i];
- const embeddedTView = embeddedLView[TVIEW];
- ngDevMode && assertDefined(embeddedTView, 'TView must be allocated');
- if (viewAttachedToChangeDetector(embeddedLView)) {
- refreshView(embeddedTView, embeddedLView, embeddedTView.template, embeddedLView[CONTEXT]);
- }
- }
- }
- }
- /**
- * Mark transplanted views as needing to be refreshed at their insertion points.
- *
- * @param lView The `LView` that may have transplanted views.
- */
- function markTransplantedViewsForRefresh(lView) {
- for (let lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {
- if (!lContainer[HAS_TRANSPLANTED_VIEWS])
- continue;
- const movedViews = lContainer[MOVED_VIEWS];
- ngDevMode && assertDefined(movedViews, 'Transplanted View flags set but missing MOVED_VIEWS');
- for (let i = 0; i < movedViews.length; i++) {
- const movedLView = movedViews[i];
- const insertionLContainer = movedLView[PARENT];
- ngDevMode && assertLContainer(insertionLContainer);
- // We don't want to increment the counter if the moved LView was already marked for
- // refresh.
- if ((movedLView[FLAGS] & 1024 /* RefreshTransplantedView */) === 0) {
- updateTransplantedViewCount(insertionLContainer, 1);
- }
- // Note, it is possible that the `movedViews` is tracking views that are transplanted *and*
- // those that aren't (declaration component === insertion component). In the latter case,
- // it's fine to add the flag, as we will clear it immediately in
- // `refreshEmbeddedViews` for the view currently being refreshed.
- movedLView[FLAGS] |= 1024 /* RefreshTransplantedView */;
- }
- }
- }
- /////////////
- /**
- * Refreshes components by entering the component view and processing its bindings, queries, etc.
- *
- * @param componentHostIdx Element index in LView[] (adjusted for HEADER_OFFSET)
- */
- function refreshComponent(hostLView, componentHostIdx) {
- ngDevMode && assertEqual(isCreationMode(hostLView), false, 'Should be run in update mode');
- const componentView = getComponentLViewByIndex(componentHostIdx, hostLView);
- // Only attached components that are CheckAlways or OnPush and dirty should be refreshed
- if (viewAttachedToChangeDetector(componentView)) {
- const tView = componentView[TVIEW];
- if (componentView[FLAGS] & (16 /* CheckAlways */ | 64 /* Dirty */)) {
- refreshView(tView, componentView, tView.template, componentView[CONTEXT]);
- }
- else if (componentView[TRANSPLANTED_VIEWS_TO_REFRESH] > 0) {
- // Only attached components that are CheckAlways or OnPush and dirty should be refreshed
- refreshContainsDirtyView(componentView);
- }
- }
- }
- /**
- * Refreshes all transplanted views marked with `LViewFlags.RefreshTransplantedView` that are
- * children or descendants of the given lView.
- *
- * @param lView The lView which contains descendant transplanted views that need to be refreshed.
- */
- function refreshContainsDirtyView(lView) {
- for (let lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {
- for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
- const embeddedLView = lContainer[i];
- if (embeddedLView[FLAGS] & 1024 /* RefreshTransplantedView */) {
- const embeddedTView = embeddedLView[TVIEW];
- ngDevMode && assertDefined(embeddedTView, 'TView must be allocated');
- refreshView(embeddedTView, embeddedLView, embeddedTView.template, embeddedLView[CONTEXT]);
- }
- else if (embeddedLView[TRANSPLANTED_VIEWS_TO_REFRESH] > 0) {
- refreshContainsDirtyView(embeddedLView);
- }
- }
- }
- const tView = lView[TVIEW];
- // Refresh child component views.
- const components = tView.components;
- if (components !== null) {
- for (let i = 0; i < components.length; i++) {
- const componentView = getComponentLViewByIndex(components[i], lView);
- // Only attached components that are CheckAlways or OnPush and dirty should be refreshed
- if (viewAttachedToChangeDetector(componentView) &&
- componentView[TRANSPLANTED_VIEWS_TO_REFRESH] > 0) {
- refreshContainsDirtyView(componentView);
- }
- }
- }
- }
- function renderComponent(hostLView, componentHostIdx) {
- ngDevMode && assertEqual(isCreationMode(hostLView), true, 'Should be run in creation mode');
- const componentView = getComponentLViewByIndex(componentHostIdx, hostLView);
- const componentTView = componentView[TVIEW];
- syncViewWithBlueprint(componentTView, componentView);
- renderView(componentTView, componentView, componentView[CONTEXT]);
- }
- /**
- * Syncs an LView instance with its blueprint if they have gotten out of sync.
- *
- * Typically, blueprints and their view instances should always be in sync, so the loop here
- * will be skipped. However, consider this case of two components side-by-side:
- *
- * App template:
- * ```
- * <comp></comp>
- * <comp></comp>
- * ```
- *
- * The following will happen:
- * 1. App template begins processing.
- * 2. First <comp> is matched as a component and its LView is created.
- * 3. Second <comp> is matched as a component and its LView is created.
- * 4. App template completes processing, so it's time to check child templates.
- * 5. First <comp> template is checked. It has a directive, so its def is pushed to blueprint.
- * 6. Second <comp> template is checked. Its blueprint has been updated by the first
- * <comp> template, but its LView was created before this update, so it is out of sync.
- *
- * Note that embedded views inside ngFor loops will never be out of sync because these views
- * are processed as soon as they are created.
- *
- * @param tView The `TView` that contains the blueprint for syncing
- * @param lView The view to sync
- */
- function syncViewWithBlueprint(tView, lView) {
- for (let i = lView.length; i < tView.blueprint.length; i++) {
- lView.push(tView.blueprint[i]);
- }
- }
- /**
- * Adds LView or LContainer to the end of the current view tree.
- *
- * This structure will be used to traverse through nested views to remove listeners
- * and call onDestroy callbacks.
- *
- * @param lView The view where LView or LContainer should be added
- * @param adjustedHostIndex Index of the view's host node in LView[], adjusted for header
- * @param lViewOrLContainer The LView or LContainer to add to the view tree
- * @returns The state passed in
- */
- function addToViewTree(lView, lViewOrLContainer) {
- // TODO(benlesh/misko): This implementation is incorrect, because it always adds the LContainer
- // to the end of the queue, which means if the developer retrieves the LContainers from RNodes out
- // of order, the change detection will run out of order, as the act of retrieving the the
- // LContainer from the RNode is what adds it to the queue.
- if (lView[CHILD_HEAD]) {
- lView[CHILD_TAIL][NEXT] = lViewOrLContainer;
- }
- else {
- lView[CHILD_HEAD] = lViewOrLContainer;
- }
- lView[CHILD_TAIL] = lViewOrLContainer;
- return lViewOrLContainer;
- }
- ///////////////////////////////
- //// Change detection
- ///////////////////////////////
- /**
- * Marks current view and all ancestors dirty.
- *
- * Returns the root view because it is found as a byproduct of marking the view tree
- * dirty, and can be used by methods that consume markViewDirty() to easily schedule
- * change detection. Otherwise, such methods would need to traverse up the view tree
- * an additional time to get the root view and schedule a tick on it.
- *
- * @param lView The starting LView to mark dirty
- * @returns the root LView
- */
- function markViewDirty(lView) {
- while (lView) {
- lView[FLAGS] |= 64 /* Dirty */;
- const parent = getLViewParent(lView);
- // Stop traversing up as soon as you find a root view that wasn't attached to any container
- if (isRootView(lView) && !parent) {
- return lView;
- }
- // continue otherwise
- lView = parent;
- }
- return null;
- }
- /**
- * Used to schedule change detection on the whole application.
- *
- * Unlike `tick`, `scheduleTick` coalesces multiple calls into one change detection run.
- * It is usually called indirectly by calling `markDirty` when the view needs to be
- * re-rendered.
- *
- * Typically `scheduleTick` uses `requestAnimationFrame` to coalesce multiple
- * `scheduleTick` requests. The scheduling function can be overridden in
- * `renderComponent`'s `scheduler` option.
- */
- function scheduleTick(rootContext, flags) {
- const nothingScheduled = rootContext.flags === 0 /* Empty */;
- if (nothingScheduled && rootContext.clean == _CLEAN_PROMISE) {
- // https://github.com/angular/angular/issues/39296
- // should only attach the flags when really scheduling a tick
- rootContext.flags |= flags;
- let res;
- rootContext.clean = new Promise((r) => res = r);
- rootContext.scheduler(() => {
- if (rootContext.flags & 1 /* DetectChanges */) {
- rootContext.flags &= ~1 /* DetectChanges */;
- tickRootContext(rootContext);
- }
- if (rootContext.flags & 2 /* FlushPlayers */) {
- rootContext.flags &= ~2 /* FlushPlayers */;
- const playerHandler = rootContext.playerHandler;
- if (playerHandler) {
- playerHandler.flushPlayers();
- }
- }
- rootContext.clean = _CLEAN_PROMISE;
- res(null);
- });
- }
- }
- function tickRootContext(rootContext) {
- for (let i = 0; i < rootContext.components.length; i++) {
- const rootComponent = rootContext.components[i];
- const lView = readPatchedLView(rootComponent);
- const tView = lView[TVIEW];
- renderComponentOrTemplate(tView, lView, tView.template, rootComponent);
- }
- }
- function detectChangesInternal(tView, lView, context) {
- const rendererFactory = lView[RENDERER_FACTORY];
- if (rendererFactory.begin)
- rendererFactory.begin();
- try {
- refreshView(tView, lView, tView.template, context);
- }
- catch (error) {
- handleError(lView, error);
- throw error;
- }
- finally {
- if (rendererFactory.end)
- rendererFactory.end();
- }
- }
- /**
- * Synchronously perform change detection on a root view and its components.
- *
- * @param lView The view which the change detection should be performed on.
- */
- function detectChangesInRootView(lView) {
- tickRootContext(lView[CONTEXT]);
- }
- function checkNoChangesInternal(tView, view, context) {
- setIsInCheckNoChangesMode(true);
- try {
- detectChangesInternal(tView, view, context);
- }
- finally {
- setIsInCheckNoChangesMode(false);
- }
- }
- /**
- * Checks the change detector on a root view and its components, and throws if any changes are
- * detected.
- *
- * This is used in development mode to verify that running change detection doesn't
- * introduce other changes.
- *
- * @param lView The view which the change detection should be checked on.
- */
- function checkNoChangesInRootView(lView) {
- setIsInCheckNoChangesMode(true);
- try {
- detectChangesInRootView(lView);
- }
- finally {
- setIsInCheckNoChangesMode(false);
- }
- }
- function executeViewQueryFn(flags, viewQueryFn, component) {
- ngDevMode && assertDefined(viewQueryFn, 'View queries function to execute must be defined.');
- setCurrentQueryIndex(0);
- viewQueryFn(flags, component);
- }
- ///////////////////////////////
- //// Bindings & interpolations
- ///////////////////////////////
- /**
- * Stores meta-data for a property binding to be used by TestBed's `DebugElement.properties`.
- *
- * In order to support TestBed's `DebugElement.properties` we need to save, for each binding:
- * - a bound property name;
- * - a static parts of interpolated strings;
- *
- * A given property metadata is saved at the binding's index in the `TView.data` (in other words, a
- * property binding metadata will be stored in `TView.data` at the same index as a bound value in
- * `LView`). Metadata are represented as `INTERPOLATION_DELIMITER`-delimited string with the
- * following format:
- * - `propertyName` for bound properties;
- * - `propertyName�prefix�interpolation_static_part1�..interpolation_static_partN�suffix` for
- * interpolated properties.
- *
- * @param tData `TData` where meta-data will be saved;
- * @param tNode `TNode` that is a target of the binding;
- * @param propertyName bound property name;
- * @param bindingIndex binding index in `LView`
- * @param interpolationParts static interpolation parts (for property interpolations)
- */
- function storePropertyBindingMetadata(tData, tNode, propertyName, bindingIndex, ...interpolationParts) {
- // Binding meta-data are stored only the first time a given property instruction is processed.
- // Since we don't have a concept of the "first update pass" we need to check for presence of the
- // binding meta-data to decide if one should be stored (or if was stored already).
- if (tData[bindingIndex] === null) {
- if (tNode.inputs == null || !tNode.inputs[propertyName]) {
- const propBindingIdxs = tNode.propertyBindings || (tNode.propertyBindings = []);
- propBindingIdxs.push(bindingIndex);
- let bindingMetadata = propertyName;
- if (interpolationParts.length > 0) {
- bindingMetadata +=
- INTERPOLATION_DELIMITER + interpolationParts.join(INTERPOLATION_DELIMITER);
- }
- tData[bindingIndex] = bindingMetadata;
- }
- }
- }
- const CLEAN_PROMISE = _CLEAN_PROMISE;
- function getLCleanup(view) {
- // top level variables should not be exported for performance reasons (PERF_NOTES.md)
- return view[CLEANUP] || (view[CLEANUP] = ngDevMode ? new LCleanup() : []);
- }
- function getTViewCleanup(tView) {
- return tView.cleanup || (tView.cleanup = ngDevMode ? new TCleanup() : []);
- }
- /**
- * There are cases where the sub component's renderer needs to be included
- * instead of the current renderer (see the componentSyntheticHost* instructions).
- */
- function loadComponentRenderer(currentDef, tNode, lView) {
- // TODO(FW-2043): the `currentDef` is null when host bindings are invoked while creating root
- // component (see packages/core/src/render3/component.ts). This is not consistent with the process
- // of creating inner components, when current directive index is available in the state. In order
- // to avoid relying on current def being `null` (thus special-casing root component creation), the
- // process of creating root component should be unified with the process of creating inner
- // components.
- if (currentDef === null || isComponentDef(currentDef)) {
- lView = unwrapLView(lView[tNode.index]);
- }
- return lView[RENDERER];
- }
- /** Handles an error thrown in an LView. */
- function handleError(lView, error) {
- const injector = lView[INJECTOR];
- const errorHandler = injector ? injector.get(ErrorHandler, null) : null;
- errorHandler && errorHandler.handleError(error);
- }
- /**
- * Set the inputs of directives at the current node to corresponding value.
- *
- * @param tView The current TView
- * @param lView the `LView` which contains the directives.
- * @param inputs mapping between the public "input" name and privately-known,
- * possibly minified, property names to write to.
- * @param value Value to set.
- */
- function setInputsForProperty(tView, lView, inputs, publicName, value) {
- for (let i = 0; i < inputs.length;) {
- const index = inputs[i++];
- const privateName = inputs[i++];
- const instance = lView[index];
- ngDevMode && assertIndexInRange(lView, index);
- const def = tView.data[index];
- if (def.setInput !== null) {
- def.setInput(instance, value, publicName, privateName);
- }
- else {
- instance[privateName] = value;
- }
- }
- }
- /**
- * Updates a text binding at a given index in a given LView.
- */
- function textBindingInternal(lView, index, value) {
- ngDevMode && assertString(value, 'Value should be a string');
- ngDevMode && assertNotSame(value, NO_CHANGE, 'value should not be NO_CHANGE');
- ngDevMode && assertIndexInRange(lView, index);
- const element = getNativeByIndex(index, lView);
- ngDevMode && assertDefined(element, 'native element should exist');
- updateTextNode(lView[RENDERER], element, value);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Compute the static styling (class/style) from `TAttributes`.
- *
- * This function should be called during `firstCreatePass` only.
- *
- * @param tNode The `TNode` into which the styling information should be loaded.
- * @param attrs `TAttributes` containing the styling information.
- * @param writeToHost Where should the resulting static styles be written?
- * - `false` Write to `TNode.stylesWithoutHost` / `TNode.classesWithoutHost`
- * - `true` Write to `TNode.styles` / `TNode.classes`
- */
- function computeStaticStyling(tNode, attrs, writeToHost) {
- ngDevMode &&
- assertFirstCreatePass(getTView(), 'Expecting to be called in first template pass only');
- let styles = writeToHost ? tNode.styles : null;
- let classes = writeToHost ? tNode.classes : null;
- let mode = 0;
- if (attrs !== null) {
- for (let i = 0; i < attrs.length; i++) {
- const value = attrs[i];
- if (typeof value === 'number') {
- mode = value;
- }
- else if (mode == 1 /* Classes */) {
- classes = concatStringsWithSpace(classes, value);
- }
- else if (mode == 2 /* Styles */) {
- const style = value;
- const styleValue = attrs[++i];
- styles = concatStringsWithSpace(styles, style + ': ' + styleValue + ';');
- }
- }
- }
- writeToHost ? tNode.styles = styles : tNode.stylesWithoutHost = styles;
- writeToHost ? tNode.classes = classes : tNode.classesWithoutHost = classes;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Synchronously perform change detection on a component (and possibly its sub-components).
- *
- * This function triggers change detection in a synchronous way on a component.
- *
- * @param component The component which the change detection should be performed on.
- */
- function detectChanges(component) {
- const view = getComponentViewByInstance(component);
- detectChangesInternal(view[TVIEW], view, component);
- }
- /**
- * Marks the component as dirty (needing change detection). Marking a component dirty will
- * schedule a change detection on it at some point in the future.
- *
- * Marking an already dirty component as dirty won't do anything. Only one outstanding change
- * detection can be scheduled per component tree.
- *
- * @param component Component to mark as dirty.
- */
- function markDirty(component) {
- ngDevMode && assertDefined(component, 'component');
- const rootView = markViewDirty(getComponentViewByInstance(component));
- ngDevMode && assertDefined(rootView[CONTEXT], 'rootContext should be defined');
- scheduleTick(rootView[CONTEXT], 1 /* DetectChanges */);
- }
- /**
- * Used to perform change detection on the whole application.
- *
- * This is equivalent to `detectChanges`, but invoked on root component. Additionally, `tick`
- * executes lifecycle hooks and conditionally checks components based on their
- * `ChangeDetectionStrategy` and dirtiness.
- *
- * The preferred way to trigger change detection is to call `markDirty`. `markDirty` internally
- * schedules `tick` using a scheduler in order to coalesce multiple `markDirty` calls into a
- * single change detection run. By default, the scheduler is `requestAnimationFrame`, but can
- * be changed when calling `renderComponent` and providing the `scheduler` option.
- */
- function tick(component) {
- const rootView = getRootView(component);
- const rootContext = rootView[CONTEXT];
- tickRootContext(rootContext);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * An InjectionToken that gets the current `Injector` for `createInjector()`-style injectors.
- *
- * Requesting this token instead of `Injector` allows `StaticInjector` to be tree-shaken from a
- * project.
- *
- * @publicApi
- */
- const INJECTOR$1 = new InjectionToken('INJECTOR',
- // Dissable tslint because this is const enum which gets inlined not top level prop access.
- // tslint:disable-next-line: no-toplevel-property-access
- -1 /* Injector */);
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class NullInjector {
- get(token, notFoundValue = THROW_IF_NOT_FOUND) {
- if (notFoundValue === THROW_IF_NOT_FOUND) {
- const error = new Error(`NullInjectorError: No provider for ${stringify(token)}!`);
- error.name = 'NullInjectorError';
- throw error;
- }
- return notFoundValue;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * An internal token whose presence in an injector indicates that the injector should treat itself
- * as a root scoped injector when processing requests for unknown tokens which may indicate
- * they are provided in the root scope.
- */
- const INJECTOR_SCOPE = new InjectionToken('Set Injector scope.');
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Marker which indicates that a value has not yet been created from the factory function.
- */
- const NOT_YET = {};
- /**
- * Marker which indicates that the factory function for a token is in the process of being called.
- *
- * If the injector is asked to inject a token with its value set to CIRCULAR, that indicates
- * injection of a dependency has recursively attempted to inject the original token, and there is
- * a circular dependency among the providers.
- */
- const CIRCULAR = {};
- const EMPTY_ARRAY$1 = [];
- /**
- * A lazily initialized NullInjector.
- */
- let NULL_INJECTOR = undefined;
- function getNullInjector() {
- if (NULL_INJECTOR === undefined) {
- NULL_INJECTOR = new NullInjector();
- }
- return NULL_INJECTOR;
- }
- /**
- * Create a new `Injector` which is configured using a `defType` of `InjectorType<any>`s.
- *
- * @publicApi
- */
- function createInjector(defType, parent = null, additionalProviders = null, name) {
- const injector = createInjectorWithoutInjectorInstances(defType, parent, additionalProviders, name);
- injector._resolveInjectorDefTypes();
- return injector;
- }
- /**
- * Creates a new injector without eagerly resolving its injector types. Can be used in places
- * where resolving the injector types immediately can lead to an infinite loop. The injector types
- * should be resolved at a later point by calling `_resolveInjectorDefTypes`.
- */
- function createInjectorWithoutInjectorInstances(defType, parent = null, additionalProviders = null, name) {
- return new R3Injector(defType, additionalProviders, parent || getNullInjector(), name);
- }
- class R3Injector {
- constructor(def, additionalProviders, parent, source = null) {
- this.parent = parent;
- /**
- * Map of tokens to records which contain the instances of those tokens.
- * - `null` value implies that we don't have the record. Used by tree-shakable injectors
- * to prevent further searches.
- */
- this.records = new Map();
- /**
- * The transitive set of `InjectorType`s which define this injector.
- */
- this.injectorDefTypes = new Set();
- /**
- * Set of values instantiated by this injector which contain `ngOnDestroy` lifecycle hooks.
- */
- this.onDestroy = new Set();
- this._destroyed = false;
- const dedupStack = [];
- // Start off by creating Records for every provider declared in every InjectorType
- // included transitively in additional providers then do the same for `def`. This order is
- // important because `def` may include providers that override ones in additionalProviders.
- additionalProviders &&
- deepForEach(additionalProviders, provider => this.processProvider(provider, def, additionalProviders));
- deepForEach([def], injectorDef => this.processInjectorType(injectorDef, [], dedupStack));
- // Make sure the INJECTOR token provides this injector.
- this.records.set(INJECTOR$1, makeRecord(undefined, this));
- // Detect whether this injector has the APP_ROOT_SCOPE token and thus should provide
- // any injectable scoped to APP_ROOT_SCOPE.
- const record = this.records.get(INJECTOR_SCOPE);
- this.scope = record != null ? record.value : null;
- // Source name, used for debugging
- this.source = source || (typeof def === 'object' ? null : stringify(def));
- }
- /**
- * Flag indicating that this injector was previously destroyed.
- */
- get destroyed() {
- return this._destroyed;
- }
- /**
- * Destroy the injector and release references to every instance or provider associated with it.
- *
- * Also calls the `OnDestroy` lifecycle hooks of every instance that was created for which a
- * hook was found.
- */
- destroy() {
- this.assertNotDestroyed();
- // Set destroyed = true first, in case lifecycle hooks re-enter destroy().
- this._destroyed = true;
- try {
- // Call all the lifecycle hooks.
- this.onDestroy.forEach(service => service.ngOnDestroy());
- }
- finally {
- // Release all references.
- this.records.clear();
- this.onDestroy.clear();
- this.injectorDefTypes.clear();
- }
- }
- get(token, notFoundValue = THROW_IF_NOT_FOUND, flags = InjectFlags.Default) {
- this.assertNotDestroyed();
- // Set the injection context.
- const previousInjector = setCurrentInjector(this);
- try {
- // Check for the SkipSelf flag.
- if (!(flags & InjectFlags.SkipSelf)) {
- // SkipSelf isn't set, check if the record belongs to this injector.
- let record = this.records.get(token);
- if (record === undefined) {
- // No record, but maybe the token is scoped to this injector. Look for an injectable
- // def with a scope matching this injector.
- const def = couldBeInjectableType(token) && getInjectableDef(token);
- if (def && this.injectableDefInScope(def)) {
- // Found an injectable def and it's scoped to this injector. Pretend as if it was here
- // all along.
- record = makeRecord(injectableDefOrInjectorDefFactory(token), NOT_YET);
- }
- else {
- record = null;
- }
- this.records.set(token, record);
- }
- // If a record was found, get the instance for it and return it.
- if (record != null /* NOT null || undefined */) {
- return this.hydrate(token, record);
- }
- }
- // Select the next injector based on the Self flag - if self is set, the next injector is
- // the NullInjector, otherwise it's the parent.
- const nextInjector = !(flags & InjectFlags.Self) ? this.parent : getNullInjector();
- // Set the notFoundValue based on the Optional flag - if optional is set and notFoundValue
- // is undefined, the value is null, otherwise it's the notFoundValue.
- notFoundValue = (flags & InjectFlags.Optional) && notFoundValue === THROW_IF_NOT_FOUND ?
- null :
- notFoundValue;
- return nextInjector.get(token, notFoundValue);
- }
- catch (e) {
- if (e.name === 'NullInjectorError') {
- const path = e[NG_TEMP_TOKEN_PATH] = e[NG_TEMP_TOKEN_PATH] || [];
- path.unshift(stringify(token));
- if (previousInjector) {
- // We still have a parent injector, keep throwing
- throw e;
- }
- else {
- // Format & throw the final error message when we don't have any previous injector
- return catchInjectorError(e, token, 'R3InjectorError', this.source);
- }
- }
- else {
- throw e;
- }
- }
- finally {
- // Lastly, clean up the state by restoring the previous injector.
- setCurrentInjector(previousInjector);
- }
- }
- /** @internal */
- _resolveInjectorDefTypes() {
- this.injectorDefTypes.forEach(defType => this.get(defType));
- }
- toString() {
- const tokens = [], records = this.records;
- records.forEach((v, token) => tokens.push(stringify(token)));
- return `R3Injector[${tokens.join(', ')}]`;
- }
- assertNotDestroyed() {
- if (this._destroyed) {
- throw new Error('Injector has already been destroyed.');
- }
- }
- /**
- * Add an `InjectorType` or `InjectorTypeWithProviders` and all of its transitive providers
- * to this injector.
- *
- * If an `InjectorTypeWithProviders` that declares providers besides the type is specified,
- * the function will return "true" to indicate that the providers of the type definition need
- * to be processed. This allows us to process providers of injector types after all imports of
- * an injector definition are processed. (following View Engine semantics: see FW-1349)
- */
- processInjectorType(defOrWrappedDef, parents, dedupStack) {
- defOrWrappedDef = resolveForwardRef(defOrWrappedDef);
- if (!defOrWrappedDef)
- return false;
- // Either the defOrWrappedDef is an InjectorType (with injector def) or an
- // InjectorDefTypeWithProviders (aka ModuleWithProviders). Detecting either is a megamorphic
- // read, so care is taken to only do the read once.
- // First attempt to read the injector def (`ɵinj`).
- let def = getInjectorDef(defOrWrappedDef);
- // If that's not present, then attempt to read ngModule from the InjectorDefTypeWithProviders.
- const ngModule = (def == null) && defOrWrappedDef.ngModule || undefined;
- // Determine the InjectorType. In the case where `defOrWrappedDef` is an `InjectorType`,
- // then this is easy. In the case of an InjectorDefTypeWithProviders, then the definition type
- // is the `ngModule`.
- const defType = (ngModule === undefined) ? defOrWrappedDef : ngModule;
- // Check for circular dependencies.
- if (ngDevMode && parents.indexOf(defType) !== -1) {
- const defName = stringify(defType);
- const path = parents.map(stringify);
- throwCyclicDependencyError(defName, path);
- }
- // Check for multiple imports of the same module
- const isDuplicate = dedupStack.indexOf(defType) !== -1;
- // Finally, if defOrWrappedType was an `InjectorDefTypeWithProviders`, then the actual
- // `InjectorDef` is on its `ngModule`.
- if (ngModule !== undefined) {
- def = getInjectorDef(ngModule);
- }
- // If no definition was found, it might be from exports. Remove it.
- if (def == null) {
- return false;
- }
- // Add providers in the same way that @NgModule resolution did:
- // First, include providers from any imports.
- if (def.imports != null && !isDuplicate) {
- // Before processing defType's imports, add it to the set of parents. This way, if it ends
- // up deeply importing itself, this can be detected.
- ngDevMode && parents.push(defType);
- // Add it to the set of dedups. This way we can detect multiple imports of the same module
- dedupStack.push(defType);
- let importTypesWithProviders;
- try {
- deepForEach(def.imports, imported => {
- if (this.processInjectorType(imported, parents, dedupStack)) {
- if (importTypesWithProviders === undefined)
- importTypesWithProviders = [];
- // If the processed import is an injector type with providers, we store it in the
- // list of import types with providers, so that we can process those afterwards.
- importTypesWithProviders.push(imported);
- }
- });
- }
- finally {
- // Remove it from the parents set when finished.
- ngDevMode && parents.pop();
- }
- // Imports which are declared with providers (TypeWithProviders) need to be processed
- // after all imported modules are processed. This is similar to how View Engine
- // processes/merges module imports in the metadata resolver. See: FW-1349.
- if (importTypesWithProviders !== undefined) {
- for (let i = 0; i < importTypesWithProviders.length; i++) {
- const { ngModule, providers } = importTypesWithProviders[i];
- deepForEach(providers, provider => this.processProvider(provider, ngModule, providers || EMPTY_ARRAY$1));
- }
- }
- }
- // Track the InjectorType and add a provider for it. It's important that this is done after the
- // def's imports.
- this.injectorDefTypes.add(defType);
- this.records.set(defType, makeRecord(def.factory, NOT_YET));
- // Next, include providers listed on the definition itself.
- const defProviders = def.providers;
- if (defProviders != null && !isDuplicate) {
- const injectorType = defOrWrappedDef;
- deepForEach(defProviders, provider => this.processProvider(provider, injectorType, defProviders));
- }
- return (ngModule !== undefined &&
- defOrWrappedDef.providers !== undefined);
- }
- /**
- * Process a `SingleProvider` and add it.
- */
- processProvider(provider, ngModuleType, providers) {
- // Determine the token from the provider. Either it's its own token, or has a {provide: ...}
- // property.
- provider = resolveForwardRef(provider);
- let token = isTypeProvider(provider) ? provider : resolveForwardRef(provider && provider.provide);
- // Construct a `Record` for the provider.
- const record = providerToRecord(provider, ngModuleType, providers);
- if (!isTypeProvider(provider) && provider.multi === true) {
- // If the provider indicates that it's a multi-provider, process it specially.
- // First check whether it's been defined already.
- let multiRecord = this.records.get(token);
- if (multiRecord) {
- // It has. Throw a nice error if
- if (ngDevMode && multiRecord.multi === undefined) {
- throwMixedMultiProviderError();
- }
- }
- else {
- multiRecord = makeRecord(undefined, NOT_YET, true);
- multiRecord.factory = () => injectArgs(multiRecord.multi);
- this.records.set(token, multiRecord);
- }
- token = provider;
- multiRecord.multi.push(provider);
- }
- else {
- const existing = this.records.get(token);
- if (ngDevMode && existing && existing.multi !== undefined) {
- throwMixedMultiProviderError();
- }
- }
- this.records.set(token, record);
- }
- hydrate(token, record) {
- if (ngDevMode && record.value === CIRCULAR) {
- throwCyclicDependencyError(stringify(token));
- }
- else if (record.value === NOT_YET) {
- record.value = CIRCULAR;
- record.value = record.factory();
- }
- if (typeof record.value === 'object' && record.value && hasOnDestroy(record.value)) {
- this.onDestroy.add(record.value);
- }
- return record.value;
- }
- injectableDefInScope(def) {
- if (!def.providedIn) {
- return false;
- }
- else if (typeof def.providedIn === 'string') {
- return def.providedIn === 'any' || (def.providedIn === this.scope);
- }
- else {
- return this.injectorDefTypes.has(def.providedIn);
- }
- }
- }
- function injectableDefOrInjectorDefFactory(token) {
- // Most tokens will have an injectable def directly on them, which specifies a factory directly.
- const injectableDef = getInjectableDef(token);
- const factory = injectableDef !== null ? injectableDef.factory : getFactoryDef(token);
- if (factory !== null) {
- return factory;
- }
- // If the token is an NgModule, it's also injectable but the factory is on its injector def
- // (`ɵinj`)
- const injectorDef = getInjectorDef(token);
- if (injectorDef !== null) {
- return injectorDef.factory;
- }
- // InjectionTokens should have an injectable def (ɵprov) and thus should be handled above.
- // If it's missing that, it's an error.
- if (token instanceof InjectionToken) {
- throw new Error(`Token ${stringify(token)} is missing a ɵprov definition.`);
- }
- // Undecorated types can sometimes be created if they have no constructor arguments.
- if (token instanceof Function) {
- return getUndecoratedInjectableFactory(token);
- }
- // There was no way to resolve a factory for this token.
- throw new Error('unreachable');
- }
- function getUndecoratedInjectableFactory(token) {
- // If the token has parameters then it has dependencies that we cannot resolve implicitly.
- const paramLength = token.length;
- if (paramLength > 0) {
- const args = newArray(paramLength, '?');
- throw new Error(`Can't resolve all parameters for ${stringify(token)}: (${args.join(', ')}).`);
- }
- // The constructor function appears to have no parameters.
- // This might be because it inherits from a super-class. In which case, use an injectable
- // def from an ancestor if there is one.
- // Otherwise this really is a simple class with no dependencies, so return a factory that
- // just instantiates the zero-arg constructor.
- const inheritedInjectableDef = getInheritedInjectableDef(token);
- if (inheritedInjectableDef !== null) {
- return () => inheritedInjectableDef.factory(token);
- }
- else {
- return () => new token();
- }
- }
- function providerToRecord(provider, ngModuleType, providers) {
- if (isValueProvider(provider)) {
- return makeRecord(undefined, provider.useValue);
- }
- else {
- const factory = providerToFactory(provider, ngModuleType, providers);
- return makeRecord(factory, NOT_YET);
- }
- }
- /**
- * Converts a `SingleProvider` into a factory function.
- *
- * @param provider provider to convert to factory
- */
- function providerToFactory(provider, ngModuleType, providers) {
- let factory = undefined;
- if (isTypeProvider(provider)) {
- const unwrappedProvider = resolveForwardRef(provider);
- return getFactoryDef(unwrappedProvider) || injectableDefOrInjectorDefFactory(unwrappedProvider);
- }
- else {
- if (isValueProvider(provider)) {
- factory = () => resolveForwardRef(provider.useValue);
- }
- else if (isFactoryProvider(provider)) {
- factory = () => provider.useFactory(...injectArgs(provider.deps || []));
- }
- else if (isExistingProvider(provider)) {
- factory = () => ɵɵinject(resolveForwardRef(provider.useExisting));
- }
- else {
- const classRef = resolveForwardRef(provider &&
- (provider.useClass || provider.provide));
- if (ngDevMode && !classRef) {
- throwInvalidProviderError(ngModuleType, providers, provider);
- }
- if (hasDeps(provider)) {
- factory = () => new (classRef)(...injectArgs(provider.deps));
- }
- else {
- return getFactoryDef(classRef) || injectableDefOrInjectorDefFactory(classRef);
- }
- }
- }
- return factory;
- }
- function makeRecord(factory, value, multi = false) {
- return {
- factory: factory,
- value: value,
- multi: multi ? [] : undefined,
- };
- }
- function isValueProvider(value) {
- return value !== null && typeof value == 'object' && USE_VALUE in value;
- }
- function isExistingProvider(value) {
- return !!(value && value.useExisting);
- }
- function isFactoryProvider(value) {
- return !!(value && value.useFactory);
- }
- function isTypeProvider(value) {
- return typeof value === 'function';
- }
- function isClassProvider(value) {
- return !!value.useClass;
- }
- function hasDeps(value) {
- return !!value.deps;
- }
- function hasOnDestroy(value) {
- return value !== null && typeof value === 'object' &&
- typeof value.ngOnDestroy === 'function';
- }
- function couldBeInjectableType(value) {
- return (typeof value === 'function') ||
- (typeof value === 'object' && value instanceof InjectionToken);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function INJECTOR_IMPL__PRE_R3__(providers, parent, name) {
- return new StaticInjector(providers, parent, name);
- }
- function INJECTOR_IMPL__POST_R3__(providers, parent, name) {
- return createInjector({ name: name }, parent, providers, name);
- }
- const INJECTOR_IMPL = INJECTOR_IMPL__POST_R3__;
- /**
- * Concrete injectors implement this interface. Injectors are configured
- * with [providers](guide/glossary#provider) that associate
- * dependencies of various types with [injection tokens](guide/glossary#di-token).
- *
- * @see ["DI Providers"](guide/dependency-injection-providers).
- * @see `StaticProvider`
- *
- * @usageNotes
- *
- * The following example creates a service injector instance.
- *
- * {@example core/di/ts/provider_spec.ts region='ConstructorProvider'}
- *
- * ### Usage example
- *
- * {@example core/di/ts/injector_spec.ts region='Injector'}
- *
- * `Injector` returns itself when given `Injector` as a token:
- *
- * {@example core/di/ts/injector_spec.ts region='injectInjector'}
- *
- * @publicApi
- */
- class Injector {
- static create(options, parent) {
- if (Array.isArray(options)) {
- return INJECTOR_IMPL(options, parent, '');
- }
- else {
- return INJECTOR_IMPL(options.providers, options.parent, options.name || '');
- }
- }
- }
- Injector.THROW_IF_NOT_FOUND = THROW_IF_NOT_FOUND;
- Injector.NULL = new NullInjector();
- /** @nocollapse */
- Injector.ɵprov = ɵɵdefineInjectable({
- token: Injector,
- providedIn: 'any',
- factory: () => ɵɵinject(INJECTOR$1),
- });
- /**
- * @internal
- * @nocollapse
- */
- Injector.__NG_ELEMENT_ID__ = -1 /* Injector */;
- const IDENT = function (value) {
- return value;
- };
- const ɵ0$6 = IDENT;
- const EMPTY = [];
- const CIRCULAR$1 = IDENT;
- const MULTI_PROVIDER_FN = function () {
- return Array.prototype.slice.call(arguments);
- };
- const ɵ1$1 = MULTI_PROVIDER_FN;
- const NO_NEW_LINE$1 = 'ɵ';
- class StaticInjector {
- constructor(providers, parent = Injector.NULL, source = null) {
- this.parent = parent;
- this.source = source;
- const records = this._records = new Map();
- records.set(Injector, { token: Injector, fn: IDENT, deps: EMPTY, value: this, useNew: false });
- records.set(INJECTOR$1, { token: INJECTOR$1, fn: IDENT, deps: EMPTY, value: this, useNew: false });
- this.scope = recursivelyProcessProviders(records, providers);
- }
- get(token, notFoundValue, flags = InjectFlags.Default) {
- const records = this._records;
- let record = records.get(token);
- if (record === undefined) {
- // This means we have never seen this record, see if it is tree shakable provider.
- const injectableDef = getInjectableDef(token);
- if (injectableDef) {
- const providedIn = injectableDef && injectableDef.providedIn;
- if (providedIn === 'any' || providedIn != null && providedIn === this.scope) {
- records.set(token, record = resolveProvider({ provide: token, useFactory: injectableDef.factory, deps: EMPTY }));
- }
- }
- if (record === undefined) {
- // Set record to null to make sure that we don't go through expensive lookup above again.
- records.set(token, null);
- }
- }
- let lastInjector = setCurrentInjector(this);
- try {
- return tryResolveToken(token, record, records, this.parent, notFoundValue, flags);
- }
- catch (e) {
- return catchInjectorError(e, token, 'StaticInjectorError', this.source);
- }
- finally {
- setCurrentInjector(lastInjector);
- }
- }
- toString() {
- const tokens = [], records = this._records;
- records.forEach((v, token) => tokens.push(stringify(token)));
- return `StaticInjector[${tokens.join(', ')}]`;
- }
- }
- function resolveProvider(provider) {
- const deps = computeDeps(provider);
- let fn = IDENT;
- let value = EMPTY;
- let useNew = false;
- let provide = resolveForwardRef(provider.provide);
- if (USE_VALUE in provider) {
- // We need to use USE_VALUE in provider since provider.useValue could be defined as undefined.
- value = provider.useValue;
- }
- else if (provider.useFactory) {
- fn = provider.useFactory;
- }
- else if (provider.useExisting) {
- // Just use IDENT
- }
- else if (provider.useClass) {
- useNew = true;
- fn = resolveForwardRef(provider.useClass);
- }
- else if (typeof provide == 'function') {
- useNew = true;
- fn = provide;
- }
- else {
- throw staticError('StaticProvider does not have [useValue|useFactory|useExisting|useClass] or [provide] is not newable', provider);
- }
- return { deps, fn, useNew, value };
- }
- function multiProviderMixError(token) {
- return staticError('Cannot mix multi providers and regular providers', token);
- }
- function recursivelyProcessProviders(records, provider) {
- let scope = null;
- if (provider) {
- provider = resolveForwardRef(provider);
- if (Array.isArray(provider)) {
- // if we have an array recurse into the array
- for (let i = 0; i < provider.length; i++) {
- scope = recursivelyProcessProviders(records, provider[i]) || scope;
- }
- }
- else if (typeof provider === 'function') {
- // Functions were supported in ReflectiveInjector, but are not here. For safety give useful
- // error messages
- throw staticError('Function/Class not supported', provider);
- }
- else if (provider && typeof provider === 'object' && provider.provide) {
- // At this point we have what looks like a provider: {provide: ?, ....}
- let token = resolveForwardRef(provider.provide);
- const resolvedProvider = resolveProvider(provider);
- if (provider.multi === true) {
- // This is a multi provider.
- let multiProvider = records.get(token);
- if (multiProvider) {
- if (multiProvider.fn !== MULTI_PROVIDER_FN) {
- throw multiProviderMixError(token);
- }
- }
- else {
- // Create a placeholder factory which will look up the constituents of the multi provider.
- records.set(token, multiProvider = {
- token: provider.provide,
- deps: [],
- useNew: false,
- fn: MULTI_PROVIDER_FN,
- value: EMPTY
- });
- }
- // Treat the provider as the token.
- token = provider;
- multiProvider.deps.push({ token, options: 6 /* Default */ });
- }
- const record = records.get(token);
- if (record && record.fn == MULTI_PROVIDER_FN) {
- throw multiProviderMixError(token);
- }
- if (token === INJECTOR_SCOPE) {
- scope = resolvedProvider.value;
- }
- records.set(token, resolvedProvider);
- }
- else {
- throw staticError('Unexpected provider', provider);
- }
- }
- return scope;
- }
- function tryResolveToken(token, record, records, parent, notFoundValue, flags) {
- try {
- return resolveToken(token, record, records, parent, notFoundValue, flags);
- }
- catch (e) {
- // ensure that 'e' is of type Error.
- if (!(e instanceof Error)) {
- e = new Error(e);
- }
- const path = e[NG_TEMP_TOKEN_PATH] = e[NG_TEMP_TOKEN_PATH] || [];
- path.unshift(token);
- if (record && record.value == CIRCULAR$1) {
- // Reset the Circular flag.
- record.value = EMPTY;
- }
- throw e;
- }
- }
- function resolveToken(token, record, records, parent, notFoundValue, flags) {
- let value;
- if (record && !(flags & InjectFlags.SkipSelf)) {
- // If we don't have a record, this implies that we don't own the provider hence don't know how
- // to resolve it.
- value = record.value;
- if (value == CIRCULAR$1) {
- throw Error(NO_NEW_LINE$1 + 'Circular dependency');
- }
- else if (value === EMPTY) {
- record.value = CIRCULAR$1;
- let obj = undefined;
- let useNew = record.useNew;
- let fn = record.fn;
- let depRecords = record.deps;
- let deps = EMPTY;
- if (depRecords.length) {
- deps = [];
- for (let i = 0; i < depRecords.length; i++) {
- const depRecord = depRecords[i];
- const options = depRecord.options;
- const childRecord = options & 2 /* CheckSelf */ ? records.get(depRecord.token) : undefined;
- deps.push(tryResolveToken(
- // Current Token to resolve
- depRecord.token,
- // A record which describes how to resolve the token.
- // If undefined, this means we don't have such a record
- childRecord,
- // Other records we know about.
- records,
- // If we don't know how to resolve dependency and we should not check parent for it,
- // than pass in Null injector.
- !childRecord && !(options & 4 /* CheckParent */) ? Injector.NULL : parent, options & 1 /* Optional */ ? null : Injector.THROW_IF_NOT_FOUND, InjectFlags.Default));
- }
- }
- record.value = value = useNew ? new fn(...deps) : fn.apply(obj, deps);
- }
- }
- else if (!(flags & InjectFlags.Self)) {
- value = parent.get(token, notFoundValue, InjectFlags.Default);
- }
- else if (!(flags & InjectFlags.Optional)) {
- value = Injector.NULL.get(token, notFoundValue);
- }
- else {
- value = Injector.NULL.get(token, typeof notFoundValue !== 'undefined' ? notFoundValue : null);
- }
- return value;
- }
- function computeDeps(provider) {
- let deps = EMPTY;
- const providerDeps = provider.deps;
- if (providerDeps && providerDeps.length) {
- deps = [];
- for (let i = 0; i < providerDeps.length; i++) {
- let options = 6 /* Default */;
- let token = resolveForwardRef(providerDeps[i]);
- if (Array.isArray(token)) {
- for (let j = 0, annotations = token; j < annotations.length; j++) {
- const annotation = annotations[j];
- if (annotation instanceof Optional || annotation == Optional) {
- options = options | 1 /* Optional */;
- }
- else if (annotation instanceof SkipSelf || annotation == SkipSelf) {
- options = options & ~2 /* CheckSelf */;
- }
- else if (annotation instanceof Self || annotation == Self) {
- options = options & ~4 /* CheckParent */;
- }
- else if (annotation instanceof Inject) {
- token = annotation.token;
- }
- else {
- token = resolveForwardRef(annotation);
- }
- }
- }
- deps.push({ token, options });
- }
- }
- else if (provider.useExisting) {
- const token = resolveForwardRef(provider.useExisting);
- deps = [{ token, options: 6 /* Default */ }];
- }
- else if (!providerDeps && !(USE_VALUE in provider)) {
- // useValue & useExisting are the only ones which are exempt from deps all others need it.
- throw staticError('\'deps\' required', provider);
- }
- return deps;
- }
- function staticError(text, obj) {
- return new Error(formatError(text, obj, 'StaticInjectorError'));
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Retrieves the component instance associated with a given DOM element.
- *
- * @usageNotes
- * Given the following DOM structure:
- * ```html
- * <my-app>
- * <div>
- * <child-comp></child-comp>
- * </div>
- * </my-app>
- * ```
- * Calling `getComponent` on `<child-comp>` will return the instance of `ChildComponent`
- * associated with this DOM element.
- *
- * Calling the function on `<my-app>` will return the `MyApp` instance.
- *
- *
- * @param element DOM element from which the component should be retrieved.
- * @returns Component instance associated with the element or `null` if there
- * is no component associated with it.
- *
- * @publicApi
- * @globalApi ng
- */
- function getComponent(element) {
- assertDomElement(element);
- const context = loadLContext(element, false);
- if (context === null)
- return null;
- if (context.component === undefined) {
- context.component = getComponentAtNodeIndex(context.nodeIndex, context.lView);
- }
- return context.component;
- }
- /**
- * If inside an embedded view (e.g. `*ngIf` or `*ngFor`), retrieves the context of the embedded
- * view that the element is part of. Otherwise retrieves the instance of the component whose view
- * owns the element (in this case, the result is the same as calling `getOwningComponent`).
- *
- * @param element Element for which to get the surrounding component instance.
- * @returns Instance of the component that is around the element or null if the element isn't
- * inside any component.
- *
- * @publicApi
- * @globalApi ng
- */
- function getContext(element) {
- assertDomElement(element);
- const context = loadLContext(element, false);
- return context === null ? null : context.lView[CONTEXT];
- }
- /**
- * Retrieves the component instance whose view contains the DOM element.
- *
- * For example, if `<child-comp>` is used in the template of `<app-comp>`
- * (i.e. a `ViewChild` of `<app-comp>`), calling `getOwningComponent` on `<child-comp>`
- * would return `<app-comp>`.
- *
- * @param elementOrDir DOM element, component or directive instance
- * for which to retrieve the root components.
- * @returns Component instance whose view owns the DOM element or null if the element is not
- * part of a component view.
- *
- * @publicApi
- * @globalApi ng
- */
- function getOwningComponent(elementOrDir) {
- const context = loadLContext(elementOrDir, false);
- if (context === null)
- return null;
- let lView = context.lView;
- let parent;
- ngDevMode && assertLView(lView);
- while (lView[TVIEW].type === 2 /* Embedded */ && (parent = getLViewParent(lView))) {
- lView = parent;
- }
- return lView[FLAGS] & 512 /* IsRoot */ ? null : lView[CONTEXT];
- }
- /**
- * Retrieves all root components associated with a DOM element, directive or component instance.
- * Root components are those which have been bootstrapped by Angular.
- *
- * @param elementOrDir DOM element, component or directive instance
- * for which to retrieve the root components.
- * @returns Root components associated with the target object.
- *
- * @publicApi
- * @globalApi ng
- */
- function getRootComponents(elementOrDir) {
- return [...getRootContext(elementOrDir).components];
- }
- /**
- * Retrieves an `Injector` associated with an element, component or directive instance.
- *
- * @param elementOrDir DOM element, component or directive instance for which to
- * retrieve the injector.
- * @returns Injector associated with the element, component or directive instance.
- *
- * @publicApi
- * @globalApi ng
- */
- function getInjector(elementOrDir) {
- const context = loadLContext(elementOrDir, false);
- if (context === null)
- return Injector.NULL;
- const tNode = context.lView[TVIEW].data[context.nodeIndex];
- return new NodeInjector(tNode, context.lView);
- }
- /**
- * Retrieve a set of injection tokens at a given DOM node.
- *
- * @param element Element for which the injection tokens should be retrieved.
- */
- function getInjectionTokens(element) {
- const context = loadLContext(element, false);
- if (context === null)
- return [];
- const lView = context.lView;
- const tView = lView[TVIEW];
- const tNode = tView.data[context.nodeIndex];
- const providerTokens = [];
- const startIndex = tNode.providerIndexes & 1048575 /* ProvidersStartIndexMask */;
- const endIndex = tNode.directiveEnd;
- for (let i = startIndex; i < endIndex; i++) {
- let value = tView.data[i];
- if (isDirectiveDefHack(value)) {
- // The fact that we sometimes store Type and sometimes DirectiveDef in this location is a
- // design flaw. We should always store same type so that we can be monomorphic. The issue
- // is that for Components/Directives we store the def instead the type. The correct behavior
- // is that we should always be storing injectable type in this location.
- value = value.type;
- }
- providerTokens.push(value);
- }
- return providerTokens;
- }
- /**
- * Retrieves directive instances associated with a given DOM element. Does not include
- * component instances.
- *
- * @usageNotes
- * Given the following DOM structure:
- * ```
- * <my-app>
- * <button my-button></button>
- * <my-comp></my-comp>
- * </my-app>
- * ```
- * Calling `getDirectives` on `<button>` will return an array with an instance of the `MyButton`
- * directive that is associated with the DOM element.
- *
- * Calling `getDirectives` on `<my-comp>` will return an empty array.
- *
- * @param element DOM element for which to get the directives.
- * @returns Array of directives associated with the element.
- *
- * @publicApi
- * @globalApi ng
- */
- function getDirectives(element) {
- const context = loadLContext(element);
- if (context.directives === undefined) {
- context.directives = getDirectivesAtNodeIndex(context.nodeIndex, context.lView, false);
- }
- // The `directives` in this case are a named array called `LComponentView`. Clone the
- // result so we don't expose an internal data structure in the user's console.
- return context.directives === null ? [] : [...context.directives];
- }
- function loadLContext(target, throwOnNotFound = true) {
- const context = getLContext(target);
- if (!context && throwOnNotFound) {
- throw new Error(ngDevMode ? `Unable to find context associated with ${stringifyForError(target)}` :
- 'Invalid ng target');
- }
- return context;
- }
- /**
- * Retrieve map of local references.
- *
- * The references are retrieved as a map of local reference name to element or directive instance.
- *
- * @param target DOM element, component or directive instance for which to retrieve
- * the local references.
- */
- function getLocalRefs(target) {
- const context = loadLContext(target, false);
- if (context === null)
- return {};
- if (context.localRefs === undefined) {
- context.localRefs = discoverLocalRefs(context.lView, context.nodeIndex);
- }
- return context.localRefs || {};
- }
- /**
- * Retrieves the host element of a component or directive instance.
- * The host element is the DOM element that matched the selector of the directive.
- *
- * @param componentOrDirective Component or directive instance for which the host
- * element should be retrieved.
- * @returns Host element of the target.
- *
- * @publicApi
- * @globalApi ng
- */
- function getHostElement(componentOrDirective) {
- return getLContext(componentOrDirective).native;
- }
- /**
- * Retrieves the rendered text for a given component.
- *
- * This function retrieves the host element of a component and
- * and then returns the `textContent` for that element. This implies
- * that the text returned will include re-projected content of
- * the component as well.
- *
- * @param component The component to return the content text for.
- */
- function getRenderedText(component) {
- const hostElement = getHostElement(component);
- return hostElement.textContent || '';
- }
- function loadLContextFromNode(node) {
- if (!(node instanceof Node))
- throw new Error('Expecting instance of DOM Element');
- return loadLContext(node);
- }
- /**
- * Retrieves a list of event listeners associated with a DOM element. The list does include host
- * listeners, but it does not include event listeners defined outside of the Angular context
- * (e.g. through `addEventListener`).
- *
- * @usageNotes
- * Given the following DOM structure:
- * ```
- * <my-app>
- * <div (click)="doSomething()"></div>
- * </my-app>
- *
- * ```
- * Calling `getListeners` on `<div>` will return an object that looks as follows:
- * ```
- * {
- * name: 'click',
- * element: <div>,
- * callback: () => doSomething(),
- * useCapture: false
- * }
- * ```
- *
- * @param element Element for which the DOM listeners should be retrieved.
- * @returns Array of event listeners on the DOM element.
- *
- * @publicApi
- * @globalApi ng
- */
- function getListeners(element) {
- assertDomElement(element);
- const lContext = loadLContext(element, false);
- if (lContext === null)
- return [];
- const lView = lContext.lView;
- const tView = lView[TVIEW];
- const lCleanup = lView[CLEANUP];
- const tCleanup = tView.cleanup;
- const listeners = [];
- if (tCleanup && lCleanup) {
- for (let i = 0; i < tCleanup.length;) {
- const firstParam = tCleanup[i++];
- const secondParam = tCleanup[i++];
- if (typeof firstParam === 'string') {
- const name = firstParam;
- const listenerElement = unwrapRNode(lView[secondParam]);
- const callback = lCleanup[tCleanup[i++]];
- const useCaptureOrIndx = tCleanup[i++];
- // if useCaptureOrIndx is boolean then report it as is.
- // if useCaptureOrIndx is positive number then it in unsubscribe method
- // if useCaptureOrIndx is negative number then it is a Subscription
- const type = (typeof useCaptureOrIndx === 'boolean' || useCaptureOrIndx >= 0) ? 'dom' : 'output';
- const useCapture = typeof useCaptureOrIndx === 'boolean' ? useCaptureOrIndx : false;
- if (element == listenerElement) {
- listeners.push({ element, name, callback, useCapture, type });
- }
- }
- }
- }
- listeners.sort(sortListeners);
- return listeners;
- }
- function sortListeners(a, b) {
- if (a.name == b.name)
- return 0;
- return a.name < b.name ? -1 : 1;
- }
- /**
- * This function should not exist because it is megamorphic and only mostly correct.
- *
- * See call site for more info.
- */
- function isDirectiveDefHack(obj) {
- return obj.type !== undefined && obj.template !== undefined && obj.declaredInputs !== undefined;
- }
- /**
- * Returns the attached `DebugNode` instance for an element in the DOM.
- *
- * @param element DOM element which is owned by an existing component's view.
- */
- function getDebugNode(element) {
- let debugNode = null;
- const lContext = loadLContextFromNode(element);
- const lView = lContext.lView;
- const nodeIndex = lContext.nodeIndex;
- if (nodeIndex !== -1) {
- const valueInLView = lView[nodeIndex];
- // this means that value in the lView is a component with its own
- // data. In this situation the TNode is not accessed at the same spot.
- const tNode = isLView(valueInLView) ? valueInLView[T_HOST] : getTNode(lView[TVIEW], nodeIndex);
- ngDevMode &&
- assertEqual(tNode.index, nodeIndex, 'Expecting that TNode at index is same as index');
- debugNode = buildDebugNode(tNode, lView);
- }
- return debugNode;
- }
- /**
- * Retrieve the component `LView` from component/element.
- *
- * NOTE: `LView` is a private and should not be leaked outside.
- * Don't export this method to `ng.*` on window.
- *
- * @param target DOM element or component instance for which to retrieve the LView.
- */
- function getComponentLView(target) {
- const lContext = loadLContext(target);
- const nodeIndx = lContext.nodeIndex;
- const lView = lContext.lView;
- const componentLView = lView[nodeIndx];
- ngDevMode && assertLView(componentLView);
- return componentLView;
- }
- /** Asserts that a value is a DOM Element. */
- function assertDomElement(value) {
- if (typeof Element !== 'undefined' && !(value instanceof Element)) {
- throw new Error('Expecting instance of DOM Element');
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Marks a component for check (in case of OnPush components) and synchronously
- * performs change detection on the application this component belongs to.
- *
- * @param component Component to {@link ChangeDetectorRef#markForCheck mark for check}.
- *
- * @publicApi
- * @globalApi ng
- */
- function applyChanges(component) {
- markDirty(component);
- getRootComponents(component).forEach(rootComponent => detectChanges(rootComponent));
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * This file introduces series of globally accessible debug tools
- * to allow for the Angular debugging story to function.
- *
- * To see this in action run the following command:
- *
- * bazel run --config=ivy
- * //packages/core/test/bundling/todo:devserver
- *
- * Then load `localhost:5432` and start using the console tools.
- */
- /**
- * This value reflects the property on the window where the dev
- * tools are patched (window.ng).
- * */
- const GLOBAL_PUBLISH_EXPANDO_KEY = 'ng';
- let _published = false;
- /**
- * Publishes a collection of default debug tools onto`window.ng`.
- *
- * These functions are available globally when Angular is in development
- * mode and are automatically stripped away from prod mode is on.
- */
- function publishDefaultGlobalUtils() {
- if (!_published) {
- _published = true;
- publishGlobalUtil('getComponent', getComponent);
- publishGlobalUtil('getContext', getContext);
- publishGlobalUtil('getListeners', getListeners);
- publishGlobalUtil('getOwningComponent', getOwningComponent);
- publishGlobalUtil('getHostElement', getHostElement);
- publishGlobalUtil('getInjector', getInjector);
- publishGlobalUtil('getRootComponents', getRootComponents);
- publishGlobalUtil('getDirectives', getDirectives);
- publishGlobalUtil('applyChanges', applyChanges);
- }
- }
- /**
- * Publishes the given function to `window.ng` so that it can be
- * used from the browser console when an application is not in production.
- */
- function publishGlobalUtil(name, fn) {
- if (typeof COMPILED === 'undefined' || !COMPILED) {
- // Note: we can't export `ng` when using closure enhanced optimization as:
- // - closure declares globals itself for minified names, which sometimes clobber our `ng` global
- // - we can't declare a closure extern as the namespace `ng` is already used within Google
- // for typings for AngularJS (via `goog.provide('ng....')`).
- const w = _global;
- ngDevMode && assertDefined(fn, 'function not defined');
- if (w) {
- let container = w[GLOBAL_PUBLISH_EXPANDO_KEY];
- if (!container) {
- container = w[GLOBAL_PUBLISH_EXPANDO_KEY] = {};
- }
- container[name] = fn;
- }
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ɵ0$7 = (token, notFoundValue) => {
- throwProviderNotFoundError(token, 'NullInjector');
- };
- // TODO: A hack to not pull in the NullInjector from @angular/core.
- const NULL_INJECTOR$1 = {
- get: ɵ0$7
- };
- /**
- * Bootstraps a Component into an existing host element and returns an instance
- * of the component.
- *
- * Use this function to bootstrap a component into the DOM tree. Each invocation
- * of this function will create a separate tree of components, injectors and
- * change detection cycles and lifetimes. To dynamically insert a new component
- * into an existing tree such that it shares the same injection, change detection
- * and object lifetime, use {@link ViewContainer#createComponent}.
- *
- * @param componentType Component to bootstrap
- * @param options Optional parameters which control bootstrapping
- */
- function renderComponent$1(componentType /* Type as workaround for: Microsoft/TypeScript/issues/4881 */, opts = {}) {
- ngDevMode && publishDefaultGlobalUtils();
- ngDevMode && assertComponentType(componentType);
- const rendererFactory = opts.rendererFactory || domRendererFactory3;
- const sanitizer = opts.sanitizer || null;
- const componentDef = getComponentDef(componentType);
- if (componentDef.type != componentType)
- componentDef.type = componentType;
- // The first index of the first selector is the tag name.
- const componentTag = componentDef.selectors[0][0];
- const hostRenderer = rendererFactory.createRenderer(null, null);
- const hostRNode = locateHostElement(hostRenderer, opts.host || componentTag, componentDef.encapsulation);
- const rootFlags = componentDef.onPush ? 64 /* Dirty */ | 512 /* IsRoot */ :
- 16 /* CheckAlways */ | 512 /* IsRoot */;
- const rootContext = createRootContext(opts.scheduler, opts.playerHandler);
- const renderer = rendererFactory.createRenderer(hostRNode, componentDef);
- const rootTView = createTView(0 /* Root */, null, null, 1, 0, null, null, null, null, null);
- const rootView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, renderer, null, opts.injector || null);
- enterView(rootView);
- let component;
- try {
- if (rendererFactory.begin)
- rendererFactory.begin();
- const componentView = createRootComponentView(hostRNode, componentDef, rootView, rendererFactory, renderer, sanitizer);
- component = createRootComponent(componentView, componentDef, rootView, rootContext, opts.hostFeatures || null);
- // create mode pass
- renderView(rootTView, rootView, null);
- // update mode pass
- refreshView(rootTView, rootView, null, null);
- }
- finally {
- leaveView();
- if (rendererFactory.end)
- rendererFactory.end();
- }
- return component;
- }
- /**
- * Creates the root component view and the root component node.
- *
- * @param rNode Render host element.
- * @param def ComponentDef
- * @param rootView The parent view where the host node is stored
- * @param rendererFactory Factory to be used for creating child renderers.
- * @param hostRenderer The current renderer
- * @param sanitizer The sanitizer, if provided
- *
- * @returns Component view created
- */
- function createRootComponentView(rNode, def, rootView, rendererFactory, hostRenderer, sanitizer) {
- const tView = rootView[TVIEW];
- const index = HEADER_OFFSET;
- ngDevMode && assertIndexInRange(rootView, index);
- rootView[index] = rNode;
- // '#host' is added here as we don't know the real host DOM name (we don't want to read it) and at
- // the same time we want to communicate the the debug `TNode` that this is a special `TNode`
- // representing a host element.
- const tNode = getOrCreateTNode(tView, index, 2 /* Element */, '#host', null);
- const mergedAttrs = tNode.mergedAttrs = def.hostAttrs;
- if (mergedAttrs !== null) {
- computeStaticStyling(tNode, mergedAttrs, true);
- if (rNode !== null) {
- setUpAttributes(hostRenderer, rNode, mergedAttrs);
- if (tNode.classes !== null) {
- writeDirectClass(hostRenderer, rNode, tNode.classes);
- }
- if (tNode.styles !== null) {
- writeDirectStyle(hostRenderer, rNode, tNode.styles);
- }
- }
- }
- const viewRenderer = rendererFactory.createRenderer(rNode, def);
- const componentView = createLView(rootView, getOrCreateTComponentView(def), null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, rootView[index], tNode, rendererFactory, viewRenderer, sanitizer || null, null);
- if (tView.firstCreatePass) {
- diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, rootView), tView, def.type);
- markAsComponentHost(tView, tNode);
- initTNodeFlags(tNode, rootView.length, 1);
- }
- addToViewTree(rootView, componentView);
- // Store component view at node index, with node as the HOST
- return rootView[index] = componentView;
- }
- /**
- * Creates a root component and sets it up with features and host bindings. Shared by
- * renderComponent() and ViewContainerRef.createComponent().
- */
- function createRootComponent(componentView, componentDef, rootLView, rootContext, hostFeatures) {
- const tView = rootLView[TVIEW];
- // Create directive instance with factory() and store at next index in viewData
- const component = instantiateRootComponent(tView, rootLView, componentDef);
- rootContext.components.push(component);
- componentView[CONTEXT] = component;
- hostFeatures && hostFeatures.forEach((feature) => feature(component, componentDef));
- // We want to generate an empty QueryList for root content queries for backwards
- // compatibility with ViewEngine.
- if (componentDef.contentQueries) {
- const tNode = getCurrentTNode();
- ngDevMode && assertDefined(tNode, 'TNode expected');
- componentDef.contentQueries(1 /* Create */, component, tNode.directiveStart);
- }
- const rootTNode = getCurrentTNode();
- ngDevMode && assertDefined(rootTNode, 'tNode should have been already created');
- if (tView.firstCreatePass &&
- (componentDef.hostBindings !== null || componentDef.hostAttrs !== null)) {
- setSelectedIndex(rootTNode.index);
- const rootTView = rootLView[TVIEW];
- registerHostBindingOpCodes(rootTView, rootTNode, rootLView, rootTNode.directiveStart, rootTNode.directiveEnd, componentDef);
- invokeHostBindingsInCreationMode(componentDef, component);
- }
- return component;
- }
- function createRootContext(scheduler, playerHandler) {
- return {
- components: [],
- scheduler: scheduler || defaultScheduler,
- clean: CLEAN_PROMISE,
- playerHandler: playerHandler || null,
- flags: 0 /* Empty */
- };
- }
- /**
- * Used to enable lifecycle hooks on the root component.
- *
- * Include this feature when calling `renderComponent` if the root component
- * you are rendering has lifecycle hooks defined. Otherwise, the hooks won't
- * be called properly.
- *
- * Example:
- *
- * ```
- * renderComponent(AppComponent, {hostFeatures: [LifecycleHooksFeature]});
- * ```
- */
- function LifecycleHooksFeature(component, def) {
- const lView = readPatchedLView(component);
- ngDevMode && assertDefined(lView, 'LView is required');
- const tView = lView[TVIEW];
- const tNode = getCurrentTNode();
- ngDevMode && assertDefined(tNode, 'TNode is required');
- registerPostOrderHooks(tView, tNode);
- }
- /**
- * Wait on component until it is rendered.
- *
- * This function returns a `Promise` which is resolved when the component's
- * change detection is executed. This is determined by finding the scheduler
- * associated with the `component`'s render tree and waiting until the scheduler
- * flushes. If nothing is scheduled, the function returns a resolved promise.
- *
- * Example:
- * ```
- * await whenRendered(myComponent);
- * ```
- *
- * @param component Component to wait upon
- * @returns Promise which resolves when the component is rendered.
- */
- function whenRendered(component) {
- return getRootContext(component).clean;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function getSuperType(type) {
- return Object.getPrototypeOf(type.prototype).constructor;
- }
- /**
- * Merges the definition from a super class to a sub class.
- * @param definition The definition that is a SubClass of another directive of component
- *
- * @codeGenApi
- */
- function ɵɵInheritDefinitionFeature(definition) {
- let superType = getSuperType(definition.type);
- let shouldInheritFields = true;
- const inheritanceChain = [definition];
- while (superType) {
- let superDef = undefined;
- if (isComponentDef(definition)) {
- // Don't use getComponentDef/getDirectiveDef. This logic relies on inheritance.
- superDef = superType.ɵcmp || superType.ɵdir;
- }
- else {
- if (superType.ɵcmp) {
- throw new Error('Directives cannot inherit Components');
- }
- // Don't use getComponentDef/getDirectiveDef. This logic relies on inheritance.
- superDef = superType.ɵdir;
- }
- if (superDef) {
- if (shouldInheritFields) {
- inheritanceChain.push(superDef);
- // Some fields in the definition may be empty, if there were no values to put in them that
- // would've justified object creation. Unwrap them if necessary.
- const writeableDef = definition;
- writeableDef.inputs = maybeUnwrapEmpty(definition.inputs);
- writeableDef.declaredInputs = maybeUnwrapEmpty(definition.declaredInputs);
- writeableDef.outputs = maybeUnwrapEmpty(definition.outputs);
- // Merge hostBindings
- const superHostBindings = superDef.hostBindings;
- superHostBindings && inheritHostBindings(definition, superHostBindings);
- // Merge queries
- const superViewQuery = superDef.viewQuery;
- const superContentQueries = superDef.contentQueries;
- superViewQuery && inheritViewQuery(definition, superViewQuery);
- superContentQueries && inheritContentQueries(definition, superContentQueries);
- // Merge inputs and outputs
- fillProperties(definition.inputs, superDef.inputs);
- fillProperties(definition.declaredInputs, superDef.declaredInputs);
- fillProperties(definition.outputs, superDef.outputs);
- // Merge animations metadata.
- // If `superDef` is a Component, the `data` field is present (defaults to an empty object).
- if (isComponentDef(superDef) && superDef.data.animation) {
- // If super def is a Component, the `definition` is also a Component, since Directives can
- // not inherit Components (we throw an error above and cannot reach this code).
- const defData = definition.data;
- defData.animation = (defData.animation || []).concat(superDef.data.animation);
- }
- }
- // Run parent features
- const features = superDef.features;
- if (features) {
- for (let i = 0; i < features.length; i++) {
- const feature = features[i];
- if (feature && feature.ngInherit) {
- feature(definition);
- }
- // If `InheritDefinitionFeature` is a part of the current `superDef`, it means that this
- // def already has all the necessary information inherited from its super class(es), so we
- // can stop merging fields from super classes. However we need to iterate through the
- // prototype chain to look for classes that might contain other "features" (like
- // NgOnChanges), which we should invoke for the original `definition`. We set the
- // `shouldInheritFields` flag to indicate that, essentially skipping fields inheritance
- // logic and only invoking functions from the "features" list.
- if (feature === ɵɵInheritDefinitionFeature) {
- shouldInheritFields = false;
- }
- }
- }
- }
- superType = Object.getPrototypeOf(superType);
- }
- mergeHostAttrsAcrossInheritance(inheritanceChain);
- }
- /**
- * Merge the `hostAttrs` and `hostVars` from the inherited parent to the base class.
- *
- * @param inheritanceChain A list of `WritableDefs` starting at the top most type and listing
- * sub-types in order. For each type take the `hostAttrs` and `hostVars` and merge it with the child
- * type.
- */
- function mergeHostAttrsAcrossInheritance(inheritanceChain) {
- let hostVars = 0;
- let hostAttrs = null;
- // We process the inheritance order from the base to the leaves here.
- for (let i = inheritanceChain.length - 1; i >= 0; i--) {
- const def = inheritanceChain[i];
- // For each `hostVars`, we need to add the superclass amount.
- def.hostVars = (hostVars += def.hostVars);
- // for each `hostAttrs` we need to merge it with superclass.
- def.hostAttrs =
- mergeHostAttrs(def.hostAttrs, hostAttrs = mergeHostAttrs(hostAttrs, def.hostAttrs));
- }
- }
- function maybeUnwrapEmpty(value) {
- if (value === EMPTY_OBJ) {
- return {};
- }
- else if (value === EMPTY_ARRAY) {
- return [];
- }
- else {
- return value;
- }
- }
- function inheritViewQuery(definition, superViewQuery) {
- const prevViewQuery = definition.viewQuery;
- if (prevViewQuery) {
- definition.viewQuery = (rf, ctx) => {
- superViewQuery(rf, ctx);
- prevViewQuery(rf, ctx);
- };
- }
- else {
- definition.viewQuery = superViewQuery;
- }
- }
- function inheritContentQueries(definition, superContentQueries) {
- const prevContentQueries = definition.contentQueries;
- if (prevContentQueries) {
- definition.contentQueries = (rf, ctx, directiveIndex) => {
- superContentQueries(rf, ctx, directiveIndex);
- prevContentQueries(rf, ctx, directiveIndex);
- };
- }
- else {
- definition.contentQueries = superContentQueries;
- }
- }
- function inheritHostBindings(definition, superHostBindings) {
- const prevHostBindings = definition.hostBindings;
- if (prevHostBindings) {
- definition.hostBindings = (rf, ctx) => {
- superHostBindings(rf, ctx);
- prevHostBindings(rf, ctx);
- };
- }
- else {
- definition.hostBindings = superHostBindings;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Fields which exist on either directive or component definitions, and need to be copied from
- * parent to child classes by the `ɵɵCopyDefinitionFeature`.
- */
- const COPY_DIRECTIVE_FIELDS = [
- // The child class should use the providers of its parent.
- 'providersResolver',
- ];
- /**
- * Fields which exist only on component definitions, and need to be copied from parent to child
- * classes by the `ɵɵCopyDefinitionFeature`.
- *
- * The type here allows any field of `ComponentDef` which is not also a property of `DirectiveDef`,
- * since those should go in `COPY_DIRECTIVE_FIELDS` above.
- */
- const COPY_COMPONENT_FIELDS = [
- // The child class should use the template function of its parent, including all template
- // semantics.
- 'template',
- 'decls',
- 'consts',
- 'vars',
- 'onPush',
- 'ngContentSelectors',
- // The child class should use the CSS styles of its parent, including all styling semantics.
- 'styles',
- 'encapsulation',
- // The child class should be checked by the runtime in the same way as its parent.
- 'schemas',
- ];
- /**
- * Copies the fields not handled by the `ɵɵInheritDefinitionFeature` from the supertype of a
- * definition.
- *
- * This exists primarily to support ngcc migration of an existing View Engine pattern, where an
- * entire decorator is inherited from a parent to a child class. When ngcc detects this case, it
- * generates a skeleton definition on the child class, and applies this feature.
- *
- * The `ɵɵCopyDefinitionFeature` then copies any needed fields from the parent class' definition,
- * including things like the component template function.
- *
- * @param definition The definition of a child class which inherits from a parent class with its
- * own definition.
- *
- * @codeGenApi
- */
- function ɵɵCopyDefinitionFeature(definition) {
- let superType = getSuperType(definition.type);
- let superDef = undefined;
- if (isComponentDef(definition)) {
- // Don't use getComponentDef/getDirectiveDef. This logic relies on inheritance.
- superDef = superType.ɵcmp;
- }
- else {
- // Don't use getComponentDef/getDirectiveDef. This logic relies on inheritance.
- superDef = superType.ɵdir;
- }
- // Needed because `definition` fields are readonly.
- const defAny = definition;
- // Copy over any fields that apply to either directives or components.
- for (const field of COPY_DIRECTIVE_FIELDS) {
- defAny[field] = superDef[field];
- }
- if (isComponentDef(superDef)) {
- // Copy over any component-specific fields.
- for (const field of COPY_COMPONENT_FIELDS) {
- defAny[field] = superDef[field];
- }
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- let _symbolIterator = null;
- function getSymbolIterator() {
- if (!_symbolIterator) {
- const Symbol = _global['Symbol'];
- if (Symbol && Symbol.iterator) {
- _symbolIterator = Symbol.iterator;
- }
- else {
- // es6-shim specific logic
- const keys = Object.getOwnPropertyNames(Map.prototype);
- for (let i = 0; i < keys.length; ++i) {
- const key = keys[i];
- if (key !== 'entries' && key !== 'size' &&
- Map.prototype[key] === Map.prototype['entries']) {
- _symbolIterator = key;
- }
- }
- }
- }
- return _symbolIterator;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function devModeEqual(a, b) {
- const isListLikeIterableA = isListLikeIterable(a);
- const isListLikeIterableB = isListLikeIterable(b);
- if (isListLikeIterableA && isListLikeIterableB) {
- return areIterablesEqual(a, b, devModeEqual);
- }
- else {
- const isAObject = a && (typeof a === 'object' || typeof a === 'function');
- const isBObject = b && (typeof b === 'object' || typeof b === 'function');
- if (!isListLikeIterableA && isAObject && !isListLikeIterableB && isBObject) {
- return true;
- }
- else {
- return Object.is(a, b);
- }
- }
- }
- /**
- * Indicates that the result of a {@link Pipe} transformation has changed even though the
- * reference has not changed.
- *
- * Wrapped values are unwrapped automatically during the change detection, and the unwrapped value
- * is stored.
- *
- * Example:
- *
- * ```
- * if (this._latestValue === this._latestReturnedValue) {
- * return this._latestReturnedValue;
- * } else {
- * this._latestReturnedValue = this._latestValue;
- * return WrappedValue.wrap(this._latestValue); // this will force update
- * }
- * ```
- *
- * @publicApi
- * @deprecated from v10 stop using. (No replacement, deemed unnecessary.)
- */
- class WrappedValue {
- constructor(value) {
- this.wrapped = value;
- }
- /** Creates a wrapped value. */
- static wrap(value) {
- return new WrappedValue(value);
- }
- /**
- * Returns the underlying value of a wrapped value.
- * Returns the given `value` when it is not wrapped.
- **/
- static unwrap(value) {
- return WrappedValue.isWrapped(value) ? value.wrapped : value;
- }
- /** Returns true if `value` is a wrapped value. */
- static isWrapped(value) {
- return value instanceof WrappedValue;
- }
- }
- function isListLikeIterable(obj) {
- if (!isJsObject(obj))
- return false;
- return Array.isArray(obj) ||
- (!(obj instanceof Map) && // JS Map are iterables but return entries as [k, v]
- getSymbolIterator() in obj); // JS Iterable have a Symbol.iterator prop
- }
- function areIterablesEqual(a, b, comparator) {
- const iterator1 = a[getSymbolIterator()]();
- const iterator2 = b[getSymbolIterator()]();
- while (true) {
- const item1 = iterator1.next();
- const item2 = iterator2.next();
- if (item1.done && item2.done)
- return true;
- if (item1.done || item2.done)
- return false;
- if (!comparator(item1.value, item2.value))
- return false;
- }
- }
- function iterateListLike(obj, fn) {
- if (Array.isArray(obj)) {
- for (let i = 0; i < obj.length; i++) {
- fn(obj[i]);
- }
- }
- else {
- const iterator = obj[getSymbolIterator()]();
- let item;
- while (!((item = iterator.next()).done)) {
- fn(item.value);
- }
- }
- }
- function isJsObject(o) {
- return o !== null && (typeof o === 'function' || typeof o === 'object');
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // TODO(misko): consider inlining
- /** Updates binding and returns the value. */
- function updateBinding(lView, bindingIndex, value) {
- return lView[bindingIndex] = value;
- }
- /** Gets the current binding value. */
- function getBinding(lView, bindingIndex) {
- ngDevMode && assertIndexInRange(lView, bindingIndex);
- ngDevMode &&
- assertNotSame(lView[bindingIndex], NO_CHANGE, 'Stored value should never be NO_CHANGE.');
- return lView[bindingIndex];
- }
- /**
- * Updates binding if changed, then returns whether it was updated.
- *
- * This function also checks the `CheckNoChangesMode` and throws if changes are made.
- * Some changes (Objects/iterables) during `CheckNoChangesMode` are exempt to comply with VE
- * behavior.
- *
- * @param lView current `LView`
- * @param bindingIndex The binding in the `LView` to check
- * @param value New value to check against `lView[bindingIndex]`
- * @returns `true` if the bindings has changed. (Throws if binding has changed during
- * `CheckNoChangesMode`)
- */
- function bindingUpdated(lView, bindingIndex, value) {
- ngDevMode && assertNotSame(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');
- ngDevMode &&
- assertLessThan(bindingIndex, lView.length, `Slot should have been initialized to NO_CHANGE`);
- const oldValue = lView[bindingIndex];
- if (Object.is(oldValue, value)) {
- return false;
- }
- else {
- if (ngDevMode && isInCheckNoChangesMode()) {
- // View engine didn't report undefined values as changed on the first checkNoChanges pass
- // (before the change detection was run).
- const oldValueToCompare = oldValue !== NO_CHANGE ? oldValue : undefined;
- if (!devModeEqual(oldValueToCompare, value)) {
- const details = getExpressionChangedErrorDetails(lView, bindingIndex, oldValueToCompare, value);
- throwErrorIfNoChangesMode(oldValue === NO_CHANGE, details.oldValue, details.newValue, details.propName);
- }
- // There was a change, but the `devModeEqual` decided that the change is exempt from an error.
- // For this reason we exit as if no change. The early exit is needed to prevent the changed
- // value to be written into `LView` (If we would write the new value that we would not see it
- // as change on next CD.)
- return false;
- }
- lView[bindingIndex] = value;
- return true;
- }
- }
- /** Updates 2 bindings if changed, then returns whether either was updated. */
- function bindingUpdated2(lView, bindingIndex, exp1, exp2) {
- const different = bindingUpdated(lView, bindingIndex, exp1);
- return bindingUpdated(lView, bindingIndex + 1, exp2) || different;
- }
- /** Updates 3 bindings if changed, then returns whether any was updated. */
- function bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) {
- const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);
- return bindingUpdated(lView, bindingIndex + 2, exp3) || different;
- }
- /** Updates 4 bindings if changed, then returns whether any was updated. */
- function bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) {
- const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);
- return bindingUpdated2(lView, bindingIndex + 2, exp3, exp4) || different;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Updates the value of or removes a bound attribute on an Element.
- *
- * Used in the case of `[attr.title]="value"`
- *
- * @param name name The name of the attribute.
- * @param value value The attribute is removed when value is `null` or `undefined`.
- * Otherwise the attribute value is set to the stringified value.
- * @param sanitizer An optional function used to sanitize the value.
- * @param namespace Optional namespace to use when setting the attribute.
- *
- * @codeGenApi
- */
- function ɵɵattribute(name, value, sanitizer, namespace) {
- const lView = getLView();
- const bindingIndex = nextBindingIndex();
- if (bindingUpdated(lView, bindingIndex, value)) {
- const tView = getTView();
- const tNode = getSelectedTNode();
- elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace);
- ngDevMode && storePropertyBindingMetadata(tView.data, tNode, 'attr.' + name, bindingIndex);
- }
- return ɵɵattribute;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Create interpolation bindings with a variable number of expressions.
- *
- * If there are 1 to 8 expressions `interpolation1()` to `interpolation8()` should be used instead.
- * Those are faster because there is no need to create an array of expressions and iterate over it.
- *
- * `values`:
- * - has static text at even indexes,
- * - has evaluated expressions at odd indexes.
- *
- * Returns the concatenated string when any of the arguments changes, `NO_CHANGE` otherwise.
- */
- function interpolationV(lView, values) {
- ngDevMode && assertLessThan(2, values.length, 'should have at least 3 values');
- ngDevMode && assertEqual(values.length % 2, 1, 'should have an odd number of values');
- let isBindingUpdated = false;
- let bindingIndex = getBindingIndex();
- for (let i = 1; i < values.length; i += 2) {
- // Check if bindings (odd indexes) have changed
- isBindingUpdated = bindingUpdated(lView, bindingIndex++, values[i]) || isBindingUpdated;
- }
- setBindingIndex(bindingIndex);
- if (!isBindingUpdated) {
- return NO_CHANGE;
- }
- // Build the updated content
- let content = values[0];
- for (let i = 1; i < values.length; i += 2) {
- content += renderStringify(values[i]) + values[i + 1];
- }
- return content;
- }
- /**
- * Creates an interpolation binding with 1 expression.
- *
- * @param prefix static value used for concatenation only.
- * @param v0 value checked for change.
- * @param suffix static value used for concatenation only.
- */
- function interpolation1(lView, prefix, v0, suffix) {
- const different = bindingUpdated(lView, nextBindingIndex(), v0);
- return different ? prefix + renderStringify(v0) + suffix : NO_CHANGE;
- }
- /**
- * Creates an interpolation binding with 2 expressions.
- */
- function interpolation2(lView, prefix, v0, i0, v1, suffix) {
- const bindingIndex = getBindingIndex();
- const different = bindingUpdated2(lView, bindingIndex, v0, v1);
- incrementBindingIndex(2);
- return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + suffix : NO_CHANGE;
- }
- /**
- * Creates an interpolation binding with 3 expressions.
- */
- function interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix) {
- const bindingIndex = getBindingIndex();
- const different = bindingUpdated3(lView, bindingIndex, v0, v1, v2);
- incrementBindingIndex(3);
- return different ?
- prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + suffix :
- NO_CHANGE;
- }
- /**
- * Create an interpolation binding with 4 expressions.
- */
- function interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
- const bindingIndex = getBindingIndex();
- const different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
- incrementBindingIndex(4);
- return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 +
- renderStringify(v2) + i2 + renderStringify(v3) + suffix :
- NO_CHANGE;
- }
- /**
- * Creates an interpolation binding with 5 expressions.
- */
- function interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
- const bindingIndex = getBindingIndex();
- let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
- different = bindingUpdated(lView, bindingIndex + 4, v4) || different;
- incrementBindingIndex(5);
- return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 +
- renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + suffix :
- NO_CHANGE;
- }
- /**
- * Creates an interpolation binding with 6 expressions.
- */
- function interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
- const bindingIndex = getBindingIndex();
- let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
- different = bindingUpdated2(lView, bindingIndex + 4, v4, v5) || different;
- incrementBindingIndex(6);
- return different ?
- prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 +
- renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + suffix :
- NO_CHANGE;
- }
- /**
- * Creates an interpolation binding with 7 expressions.
- */
- function interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
- const bindingIndex = getBindingIndex();
- let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
- different = bindingUpdated3(lView, bindingIndex + 4, v4, v5, v6) || different;
- incrementBindingIndex(7);
- return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 +
- renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 +
- renderStringify(v5) + i5 + renderStringify(v6) + suffix :
- NO_CHANGE;
- }
- /**
- * Creates an interpolation binding with 8 expressions.
- */
- function interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
- const bindingIndex = getBindingIndex();
- let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
- different = bindingUpdated4(lView, bindingIndex + 4, v4, v5, v6, v7) || different;
- incrementBindingIndex(8);
- return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 +
- renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 +
- renderStringify(v5) + i5 + renderStringify(v6) + i6 + renderStringify(v7) + suffix :
- NO_CHANGE;
- }
- /**
- *
- * Update an interpolated attribute on an element with single bound value surrounded by text.
- *
- * Used when the value passed to a property has 1 interpolated value in it:
- *
- * ```html
- * <div attr.title="prefix{{v0}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵattributeInterpolate1('title', 'prefix', v0, 'suffix');
- * ```
- *
- * @param attrName The name of the attribute to update
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵattributeInterpolate1(attrName, prefix, v0, suffix, sanitizer, namespace) {
- const lView = getLView();
- const interpolatedValue = interpolation1(lView, prefix, v0, suffix);
- if (interpolatedValue !== NO_CHANGE) {
- const tNode = getSelectedTNode();
- elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
- ngDevMode &&
- storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 1, prefix, suffix);
- }
- return ɵɵattributeInterpolate1;
- }
- /**
- *
- * Update an interpolated attribute on an element with 2 bound values surrounded by text.
- *
- * Used when the value passed to a property has 2 interpolated values in it:
- *
- * ```html
- * <div attr.title="prefix{{v0}}-{{v1}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵattributeInterpolate2('title', 'prefix', v0, '-', v1, 'suffix');
- * ```
- *
- * @param attrName The name of the attribute to update
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵattributeInterpolate2(attrName, prefix, v0, i0, v1, suffix, sanitizer, namespace) {
- const lView = getLView();
- const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
- if (interpolatedValue !== NO_CHANGE) {
- const tNode = getSelectedTNode();
- elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
- ngDevMode &&
- storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 2, prefix, i0, suffix);
- }
- return ɵɵattributeInterpolate2;
- }
- /**
- *
- * Update an interpolated attribute on an element with 3 bound values surrounded by text.
- *
- * Used when the value passed to a property has 3 interpolated values in it:
- *
- * ```html
- * <div attr.title="prefix{{v0}}-{{v1}}-{{v2}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵattributeInterpolate3(
- * 'title', 'prefix', v0, '-', v1, '-', v2, 'suffix');
- * ```
- *
- * @param attrName The name of the attribute to update
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵattributeInterpolate3(attrName, prefix, v0, i0, v1, i1, v2, suffix, sanitizer, namespace) {
- const lView = getLView();
- const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
- if (interpolatedValue !== NO_CHANGE) {
- const tNode = getSelectedTNode();
- elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
- ngDevMode &&
- storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 3, prefix, i0, i1, suffix);
- }
- return ɵɵattributeInterpolate3;
- }
- /**
- *
- * Update an interpolated attribute on an element with 4 bound values surrounded by text.
- *
- * Used when the value passed to a property has 4 interpolated values in it:
- *
- * ```html
- * <div attr.title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵattributeInterpolate4(
- * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');
- * ```
- *
- * @param attrName The name of the attribute to update
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵattributeInterpolate4(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, sanitizer, namespace) {
- const lView = getLView();
- const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
- if (interpolatedValue !== NO_CHANGE) {
- const tNode = getSelectedTNode();
- elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
- ngDevMode &&
- storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 4, prefix, i0, i1, i2, suffix);
- }
- return ɵɵattributeInterpolate4;
- }
- /**
- *
- * Update an interpolated attribute on an element with 5 bound values surrounded by text.
- *
- * Used when the value passed to a property has 5 interpolated values in it:
- *
- * ```html
- * <div attr.title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵattributeInterpolate5(
- * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');
- * ```
- *
- * @param attrName The name of the attribute to update
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵattributeInterpolate5(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, sanitizer, namespace) {
- const lView = getLView();
- const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
- if (interpolatedValue !== NO_CHANGE) {
- const tNode = getSelectedTNode();
- elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
- ngDevMode &&
- storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 5, prefix, i0, i1, i2, i3, suffix);
- }
- return ɵɵattributeInterpolate5;
- }
- /**
- *
- * Update an interpolated attribute on an element with 6 bound values surrounded by text.
- *
- * Used when the value passed to a property has 6 interpolated values in it:
- *
- * ```html
- * <div attr.title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵattributeInterpolate6(
- * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');
- * ```
- *
- * @param attrName The name of the attribute to update
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param i4 Static value used for concatenation only.
- * @param v5 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵattributeInterpolate6(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, sanitizer, namespace) {
- const lView = getLView();
- const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
- if (interpolatedValue !== NO_CHANGE) {
- const tNode = getSelectedTNode();
- elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
- ngDevMode &&
- storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 6, prefix, i0, i1, i2, i3, i4, suffix);
- }
- return ɵɵattributeInterpolate6;
- }
- /**
- *
- * Update an interpolated attribute on an element with 7 bound values surrounded by text.
- *
- * Used when the value passed to a property has 7 interpolated values in it:
- *
- * ```html
- * <div attr.title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵattributeInterpolate7(
- * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');
- * ```
- *
- * @param attrName The name of the attribute to update
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param i4 Static value used for concatenation only.
- * @param v5 Value checked for change.
- * @param i5 Static value used for concatenation only.
- * @param v6 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵattributeInterpolate7(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, sanitizer, namespace) {
- const lView = getLView();
- const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
- if (interpolatedValue !== NO_CHANGE) {
- const tNode = getSelectedTNode();
- elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
- ngDevMode &&
- storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 7, prefix, i0, i1, i2, i3, i4, i5, suffix);
- }
- return ɵɵattributeInterpolate7;
- }
- /**
- *
- * Update an interpolated attribute on an element with 8 bound values surrounded by text.
- *
- * Used when the value passed to a property has 8 interpolated values in it:
- *
- * ```html
- * <div attr.title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵattributeInterpolate8(
- * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');
- * ```
- *
- * @param attrName The name of the attribute to update
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param i4 Static value used for concatenation only.
- * @param v5 Value checked for change.
- * @param i5 Static value used for concatenation only.
- * @param v6 Value checked for change.
- * @param i6 Static value used for concatenation only.
- * @param v7 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵattributeInterpolate8(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, sanitizer, namespace) {
- const lView = getLView();
- const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
- if (interpolatedValue !== NO_CHANGE) {
- const tNode = getSelectedTNode();
- elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
- ngDevMode &&
- storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 8, prefix, i0, i1, i2, i3, i4, i5, i6, suffix);
- }
- return ɵɵattributeInterpolate8;
- }
- /**
- * Update an interpolated attribute on an element with 9 or more bound values surrounded by text.
- *
- * Used when the number of interpolated values exceeds 8.
- *
- * ```html
- * <div
- * title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵattributeInterpolateV(
- * 'title', ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,
- * 'suffix']);
- * ```
- *
- * @param attrName The name of the attribute to update.
- * @param values The collection of values and the strings in-between those values, beginning with
- * a string prefix and ending with a string suffix.
- * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵattributeInterpolateV(attrName, values, sanitizer, namespace) {
- const lView = getLView();
- const interpolated = interpolationV(lView, values);
- if (interpolated !== NO_CHANGE) {
- const tNode = getSelectedTNode();
- elementAttributeInternal(tNode, lView, attrName, interpolated, sanitizer, namespace);
- if (ngDevMode) {
- const interpolationInBetween = [values[0]]; // prefix
- for (let i = 2; i < values.length; i += 2) {
- interpolationInBetween.push(values[i]);
- }
- storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - interpolationInBetween.length + 1, ...interpolationInBetween);
- }
- }
- return ɵɵattributeInterpolateV;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function templateFirstCreatePass(index, tView, lView, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex) {
- ngDevMode && assertFirstCreatePass(tView);
- ngDevMode && ngDevMode.firstCreatePass++;
- const tViewConsts = tView.consts;
- // TODO(pk): refactor getOrCreateTNode to have the "create" only version
- const tNode = getOrCreateTNode(tView, index, 4 /* Container */, tagName || null, getConstant(tViewConsts, attrsIndex));
- resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex));
- registerPostOrderHooks(tView, tNode);
- const embeddedTView = tNode.tViews = createTView(2 /* Embedded */, tNode, templateFn, decls, vars, tView.directiveRegistry, tView.pipeRegistry, null, tView.schemas, tViewConsts);
- if (tView.queries !== null) {
- tView.queries.template(tView, tNode);
- embeddedTView.queries = tView.queries.embeddedTView(tNode);
- }
- return tNode;
- }
- /**
- * Creates an LContainer for an ng-template (dynamically-inserted view), e.g.
- *
- * <ng-template #foo>
- * <div></div>
- * </ng-template>
- *
- * @param index The index of the container in the data array
- * @param templateFn Inline template
- * @param decls The number of nodes, local refs, and pipes for this template
- * @param vars The number of bindings for this template
- * @param tagName The name of the container element, if applicable
- * @param attrsIndex Index of template attributes in the `consts` array.
- * @param localRefs Index of the local references in the `consts` array.
- * @param localRefExtractor A function which extracts local-refs values from the template.
- * Defaults to the current element associated with the local-ref.
- *
- * @codeGenApi
- */
- function ɵɵtemplate(index, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex, localRefExtractor) {
- const lView = getLView();
- const tView = getTView();
- const adjustedIndex = index + HEADER_OFFSET;
- const tNode = tView.firstCreatePass ? templateFirstCreatePass(adjustedIndex, tView, lView, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex) :
- tView.data[adjustedIndex];
- setCurrentTNode(tNode, false);
- const comment = lView[RENDERER].createComment(ngDevMode ? 'container' : '');
- appendChild(tView, lView, comment, tNode);
- attachPatchData(comment, lView);
- addToViewTree(lView, lView[adjustedIndex] = createLContainer(comment, lView, comment, tNode));
- if (isDirectiveHost(tNode)) {
- createDirectivesInstances(tView, lView, tNode);
- }
- if (localRefsIndex != null) {
- saveResolvedLocalsInData(lView, tNode, localRefExtractor);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /** Store a value in the `data` at a given `index`. */
- function store(tView, lView, index, value) {
- // We don't store any static data for local variables, so the first time
- // we see the template, we should store as null to avoid a sparse array
- if (index >= tView.data.length) {
- tView.data[index] = null;
- tView.blueprint[index] = null;
- }
- lView[index] = value;
- }
- /**
- * Retrieves a local reference from the current contextViewData.
- *
- * If the reference to retrieve is in a parent view, this instruction is used in conjunction
- * with a nextContext() call, which walks up the tree and updates the contextViewData instance.
- *
- * @param index The index of the local ref in contextViewData.
- *
- * @codeGenApi
- */
- function ɵɵreference(index) {
- const contextLView = getContextLView();
- return load(contextLView, HEADER_OFFSET + index);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * A mapping of the @angular/core API surface used in generated expressions to the actual symbols.
- *
- * This should be kept up to date with the public exports of @angular/core.
- */
- const angularCoreDiEnv = {
- 'ɵɵdefineInjectable': ɵɵdefineInjectable,
- 'ɵɵdefineInjector': ɵɵdefineInjector,
- 'ɵɵinject': ɵɵinject,
- 'ɵɵgetFactoryOf': getFactoryOf,
- 'ɵɵinvalidFactoryDep': ɵɵinvalidFactoryDep,
- };
- function getFactoryOf(type) {
- const typeAny = type;
- if (isForwardRef(type)) {
- return (() => {
- const factory = getFactoryOf(resolveForwardRef(typeAny));
- return factory ? factory() : null;
- });
- }
- const def = getInjectableDef(typeAny) || getInjectorDef(typeAny);
- if (!def || def.factory === undefined) {
- return null;
- }
- return def.factory;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Compile an Angular injectable according to its `Injectable` metadata, and patch the resulting
- * injectable def (`ɵprov`) onto the injectable type.
- */
- function compileInjectable(type, srcMeta) {
- let ngInjectableDef = null;
- let ngFactoryDef = null;
- // if NG_PROV_DEF is already defined on this class then don't overwrite it
- if (!type.hasOwnProperty(NG_PROV_DEF)) {
- Object.defineProperty(type, NG_PROV_DEF, {
- get: () => {
- if (ngInjectableDef === null) {
- ngInjectableDef = getCompilerFacade().compileInjectable(angularCoreDiEnv, `ng:///${type.name}/ɵprov.js`, getInjectableMetadata(type, srcMeta));
- }
- return ngInjectableDef;
- },
- });
- }
- // if NG_FACTORY_DEF is already defined on this class then don't overwrite it
- if (!type.hasOwnProperty(NG_FACTORY_DEF)) {
- Object.defineProperty(type, NG_FACTORY_DEF, {
- get: () => {
- if (ngFactoryDef === null) {
- const metadata = getInjectableMetadata(type, srcMeta);
- const compiler = getCompilerFacade();
- ngFactoryDef = compiler.compileFactory(angularCoreDiEnv, `ng:///${type.name}/ɵfac.js`, {
- name: metadata.name,
- type: metadata.type,
- typeArgumentCount: metadata.typeArgumentCount,
- deps: reflectDependencies(type),
- injectFn: 'inject',
- target: compiler.R3FactoryTarget.Injectable
- });
- }
- return ngFactoryDef;
- },
- // Leave this configurable so that the factories from directives or pipes can take precedence.
- configurable: true
- });
- }
- }
- const ɵ0$8 = getClosureSafeProperty;
- const USE_VALUE$1 = getClosureSafeProperty({ provide: String, useValue: ɵ0$8 });
- function isUseClassProvider(meta) {
- return meta.useClass !== undefined;
- }
- function isUseValueProvider(meta) {
- return USE_VALUE$1 in meta;
- }
- function isUseFactoryProvider(meta) {
- return meta.useFactory !== undefined;
- }
- function isUseExistingProvider(meta) {
- return meta.useExisting !== undefined;
- }
- function getInjectableMetadata(type, srcMeta) {
- // Allow the compilation of a class with a `@Injectable()` decorator without parameters
- const meta = srcMeta || { providedIn: null };
- const compilerMeta = {
- name: type.name,
- type: type,
- typeArgumentCount: 0,
- providedIn: meta.providedIn,
- userDeps: undefined,
- };
- if ((isUseClassProvider(meta) || isUseFactoryProvider(meta)) && meta.deps !== undefined) {
- compilerMeta.userDeps = convertDependencies(meta.deps);
- }
- if (isUseClassProvider(meta)) {
- // The user explicitly specified useClass, and may or may not have provided deps.
- compilerMeta.useClass = resolveForwardRef(meta.useClass);
- }
- else if (isUseValueProvider(meta)) {
- // The user explicitly specified useValue.
- compilerMeta.useValue = resolveForwardRef(meta.useValue);
- }
- else if (isUseFactoryProvider(meta)) {
- // The user explicitly specified useFactory.
- compilerMeta.useFactory = meta.useFactory;
- }
- else if (isUseExistingProvider(meta)) {
- // The user explicitly specified useExisting.
- compilerMeta.useExisting = resolveForwardRef(meta.useExisting);
- }
- return compilerMeta;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ɵ0$9 = getClosureSafeProperty;
- const USE_VALUE$2 = getClosureSafeProperty({ provide: String, useValue: ɵ0$9 });
- const EMPTY_ARRAY$2 = [];
- function convertInjectableProviderToFactory(type, provider) {
- if (!provider) {
- const reflectionCapabilities = new ReflectionCapabilities();
- const deps = reflectionCapabilities.parameters(type);
- // TODO - convert to flags.
- return () => new type(...injectArgs(deps));
- }
- if (USE_VALUE$2 in provider) {
- const valueProvider = provider;
- return () => valueProvider.useValue;
- }
- else if (provider.useExisting) {
- const existingProvider = provider;
- return () => ɵɵinject(resolveForwardRef(existingProvider.useExisting));
- }
- else if (provider.useFactory) {
- const factoryProvider = provider;
- return () => factoryProvider.useFactory(...injectArgs(factoryProvider.deps || EMPTY_ARRAY$2));
- }
- else if (provider.useClass) {
- const classProvider = provider;
- let deps = provider.deps;
- if (!deps) {
- const reflectionCapabilities = new ReflectionCapabilities();
- deps = reflectionCapabilities.parameters(type);
- }
- return () => new (resolveForwardRef(classProvider.useClass))(...injectArgs(deps));
- }
- else {
- let deps = provider.deps;
- if (!deps) {
- const reflectionCapabilities = new ReflectionCapabilities();
- deps = reflectionCapabilities.parameters(type);
- }
- return () => new type(...injectArgs(deps));
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ɵ0$a = (type, meta) => SWITCH_COMPILE_INJECTABLE(type, meta);
- /**
- * Injectable decorator and metadata.
- *
- * @Annotation
- * @publicApi
- */
- const Injectable = makeDecorator('Injectable', undefined, undefined, undefined, ɵ0$a);
- /**
- * Supports @Injectable() in JIT mode for Render2.
- */
- function render2CompileInjectable(injectableType, options) {
- if (options && options.providedIn !== undefined && !getInjectableDef(injectableType)) {
- injectableType.ɵprov = ɵɵdefineInjectable({
- token: injectableType,
- providedIn: options.providedIn,
- factory: convertInjectableProviderToFactory(injectableType, options),
- });
- }
- }
- const SWITCH_COMPILE_INJECTABLE__POST_R3__ = compileInjectable;
- const SWITCH_COMPILE_INJECTABLE__PRE_R3__ = render2CompileInjectable;
- const SWITCH_COMPILE_INJECTABLE = SWITCH_COMPILE_INJECTABLE__POST_R3__;
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function findFirstClosedCycle(keys) {
- const res = [];
- for (let i = 0; i < keys.length; ++i) {
- if (res.indexOf(keys[i]) > -1) {
- res.push(keys[i]);
- return res;
- }
- res.push(keys[i]);
- }
- return res;
- }
- function constructResolvingPath(keys) {
- if (keys.length > 1) {
- const reversed = findFirstClosedCycle(keys.slice().reverse());
- const tokenStrs = reversed.map(k => stringify(k.token));
- return ' (' + tokenStrs.join(' -> ') + ')';
- }
- return '';
- }
- function injectionError(injector, key, constructResolvingMessage, originalError) {
- const keys = [key];
- const errMsg = constructResolvingMessage(keys);
- const error = (originalError ? wrappedError(errMsg, originalError) : Error(errMsg));
- error.addKey = addKey;
- error.keys = keys;
- error.injectors = [injector];
- error.constructResolvingMessage = constructResolvingMessage;
- error[ERROR_ORIGINAL_ERROR] = originalError;
- return error;
- }
- function addKey(injector, key) {
- this.injectors.push(injector);
- this.keys.push(key);
- // Note: This updated message won't be reflected in the `.stack` property
- this.message = this.constructResolvingMessage(this.keys);
- }
- /**
- * Thrown when trying to retrieve a dependency by key from {@link Injector}, but the
- * {@link Injector} does not have a {@link Provider} for the given key.
- *
- * @usageNotes
- * ### Example
- *
- * ```typescript
- * class A {
- * constructor(b:B) {}
- * }
- *
- * expect(() => Injector.resolveAndCreate([A])).toThrowError();
- * ```
- */
- function noProviderError(injector, key) {
- return injectionError(injector, key, function (keys) {
- const first = stringify(keys[0].token);
- return `No provider for ${first}!${constructResolvingPath(keys)}`;
- });
- }
- /**
- * Thrown when dependencies form a cycle.
- *
- * @usageNotes
- * ### Example
- *
- * ```typescript
- * var injector = Injector.resolveAndCreate([
- * {provide: "one", useFactory: (two) => "two", deps: [[new Inject("two")]]},
- * {provide: "two", useFactory: (one) => "one", deps: [[new Inject("one")]]}
- * ]);
- *
- * expect(() => injector.get("one")).toThrowError();
- * ```
- *
- * Retrieving `A` or `B` throws a `CyclicDependencyError` as the graph above cannot be constructed.
- */
- function cyclicDependencyError(injector, key) {
- return injectionError(injector, key, function (keys) {
- return `Cannot instantiate cyclic dependency!${constructResolvingPath(keys)}`;
- });
- }
- /**
- * Thrown when a constructing type returns with an Error.
- *
- * The `InstantiationError` class contains the original error plus the dependency graph which caused
- * this object to be instantiated.
- *
- * @usageNotes
- * ### Example
- *
- * ```typescript
- * class A {
- * constructor() {
- * throw new Error('message');
- * }
- * }
- *
- * var injector = Injector.resolveAndCreate([A]);
- * try {
- * injector.get(A);
- * } catch (e) {
- * expect(e instanceof InstantiationError).toBe(true);
- * expect(e.originalException.message).toEqual("message");
- * expect(e.originalStack).toBeDefined();
- * }
- * ```
- */
- function instantiationError(injector, originalException, originalStack, key) {
- return injectionError(injector, key, function (keys) {
- const first = stringify(keys[0].token);
- return `${originalException.message}: Error during instantiation of ${first}!${constructResolvingPath(keys)}.`;
- }, originalException);
- }
- /**
- * Thrown when an object other then {@link Provider} (or `Type`) is passed to {@link Injector}
- * creation.
- *
- * @usageNotes
- * ### Example
- *
- * ```typescript
- * expect(() => Injector.resolveAndCreate(["not a type"])).toThrowError();
- * ```
- */
- function invalidProviderError(provider) {
- return Error(`Invalid provider - only instances of Provider and Type are allowed, got: ${provider}`);
- }
- /**
- * Thrown when the class has no annotation information.
- *
- * Lack of annotation information prevents the {@link Injector} from determining which dependencies
- * need to be injected into the constructor.
- *
- * @usageNotes
- * ### Example
- *
- * ```typescript
- * class A {
- * constructor(b) {}
- * }
- *
- * expect(() => Injector.resolveAndCreate([A])).toThrowError();
- * ```
- *
- * This error is also thrown when the class not marked with {@link Injectable} has parameter types.
- *
- * ```typescript
- * class B {}
- *
- * class A {
- * constructor(b:B) {} // no information about the parameter types of A is available at runtime.
- * }
- *
- * expect(() => Injector.resolveAndCreate([A,B])).toThrowError();
- * ```
- *
- */
- function noAnnotationError(typeOrFunc, params) {
- const signature = [];
- for (let i = 0, ii = params.length; i < ii; i++) {
- const parameter = params[i];
- if (!parameter || parameter.length == 0) {
- signature.push('?');
- }
- else {
- signature.push(parameter.map(stringify).join(' '));
- }
- }
- return Error('Cannot resolve all parameters for \'' + stringify(typeOrFunc) + '\'(' +
- signature.join(', ') + '). ' +
- 'Make sure that all the parameters are decorated with Inject or have valid type annotations and that \'' +
- stringify(typeOrFunc) + '\' is decorated with Injectable.');
- }
- /**
- * Thrown when getting an object by index.
- *
- * @usageNotes
- * ### Example
- *
- * ```typescript
- * class A {}
- *
- * var injector = Injector.resolveAndCreate([A]);
- *
- * expect(() => injector.getAt(100)).toThrowError();
- * ```
- *
- */
- function outOfBoundsError(index) {
- return Error(`Index ${index} is out-of-bounds.`);
- }
- // TODO: add a working example after alpha38 is released
- /**
- * Thrown when a multi provider and a regular provider are bound to the same token.
- *
- * @usageNotes
- * ### Example
- *
- * ```typescript
- * expect(() => Injector.resolveAndCreate([
- * { provide: "Strings", useValue: "string1", multi: true},
- * { provide: "Strings", useValue: "string2", multi: false}
- * ])).toThrowError();
- * ```
- */
- function mixingMultiProvidersWithRegularProvidersError(provider1, provider2) {
- return Error(`Cannot mix multi providers and regular providers, got: ${provider1} ${provider2}`);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * A unique object used for retrieving items from the {@link ReflectiveInjector}.
- *
- * Keys have:
- * - a system-wide unique `id`.
- * - a `token`.
- *
- * `Key` is used internally by {@link ReflectiveInjector} because its system-wide unique `id` allows
- * the
- * injector to store created objects in a more efficient way.
- *
- * `Key` should not be created directly. {@link ReflectiveInjector} creates keys automatically when
- * resolving
- * providers.
- *
- * @deprecated No replacement
- * @publicApi
- */
- class ReflectiveKey {
- /**
- * Private
- */
- constructor(token, id) {
- this.token = token;
- this.id = id;
- if (!token) {
- throw new Error('Token must be defined!');
- }
- this.displayName = stringify(this.token);
- }
- /**
- * Retrieves a `Key` for a token.
- */
- static get(token) {
- return _globalKeyRegistry.get(resolveForwardRef(token));
- }
- /**
- * @returns the number of keys registered in the system.
- */
- static get numberOfKeys() {
- return _globalKeyRegistry.numberOfKeys;
- }
- }
- class KeyRegistry {
- constructor() {
- this._allKeys = new Map();
- }
- get(token) {
- if (token instanceof ReflectiveKey)
- return token;
- if (this._allKeys.has(token)) {
- return this._allKeys.get(token);
- }
- const newKey = new ReflectiveKey(token, ReflectiveKey.numberOfKeys);
- this._allKeys.set(token, newKey);
- return newKey;
- }
- get numberOfKeys() {
- return this._allKeys.size;
- }
- }
- const _globalKeyRegistry = new KeyRegistry();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Provides access to reflection data about symbols. Used internally by Angular
- * to power dependency injection and compilation.
- */
- class Reflector {
- constructor(reflectionCapabilities) {
- this.reflectionCapabilities = reflectionCapabilities;
- }
- updateCapabilities(caps) {
- this.reflectionCapabilities = caps;
- }
- factory(type) {
- return this.reflectionCapabilities.factory(type);
- }
- parameters(typeOrFunc) {
- return this.reflectionCapabilities.parameters(typeOrFunc);
- }
- annotations(typeOrFunc) {
- return this.reflectionCapabilities.annotations(typeOrFunc);
- }
- propMetadata(typeOrFunc) {
- return this.reflectionCapabilities.propMetadata(typeOrFunc);
- }
- hasLifecycleHook(type, lcProperty) {
- return this.reflectionCapabilities.hasLifecycleHook(type, lcProperty);
- }
- getter(name) {
- return this.reflectionCapabilities.getter(name);
- }
- setter(name) {
- return this.reflectionCapabilities.setter(name);
- }
- method(name) {
- return this.reflectionCapabilities.method(name);
- }
- importUri(type) {
- return this.reflectionCapabilities.importUri(type);
- }
- resourceUri(type) {
- return this.reflectionCapabilities.resourceUri(type);
- }
- resolveIdentifier(name, moduleUrl, members, runtime) {
- return this.reflectionCapabilities.resolveIdentifier(name, moduleUrl, members, runtime);
- }
- resolveEnum(identifier, name) {
- return this.reflectionCapabilities.resolveEnum(identifier, name);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * The {@link Reflector} used internally in Angular to access metadata
- * about symbols.
- */
- const reflector = new Reflector(new ReflectionCapabilities());
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * `Dependency` is used by the framework to extend DI.
- * This is internal to Angular and should not be used directly.
- */
- class ReflectiveDependency {
- constructor(key, optional, visibility) {
- this.key = key;
- this.optional = optional;
- this.visibility = visibility;
- }
- static fromKey(key) {
- return new ReflectiveDependency(key, false, null);
- }
- }
- const _EMPTY_LIST = [];
- class ResolvedReflectiveProvider_ {
- constructor(key, resolvedFactories, multiProvider) {
- this.key = key;
- this.resolvedFactories = resolvedFactories;
- this.multiProvider = multiProvider;
- this.resolvedFactory = this.resolvedFactories[0];
- }
- }
- /**
- * An internal resolved representation of a factory function created by resolving `Provider`.
- * @publicApi
- */
- class ResolvedReflectiveFactory {
- constructor(
- /**
- * Factory function which can return an instance of an object represented by a key.
- */
- factory,
- /**
- * Arguments (dependencies) to the `factory` function.
- */
- dependencies) {
- this.factory = factory;
- this.dependencies = dependencies;
- }
- }
- /**
- * Resolve a single provider.
- */
- function resolveReflectiveFactory(provider) {
- let factoryFn;
- let resolvedDeps;
- if (provider.useClass) {
- const useClass = resolveForwardRef(provider.useClass);
- factoryFn = reflector.factory(useClass);
- resolvedDeps = _dependenciesFor(useClass);
- }
- else if (provider.useExisting) {
- factoryFn = (aliasInstance) => aliasInstance;
- resolvedDeps = [ReflectiveDependency.fromKey(ReflectiveKey.get(provider.useExisting))];
- }
- else if (provider.useFactory) {
- factoryFn = provider.useFactory;
- resolvedDeps = constructDependencies(provider.useFactory, provider.deps);
- }
- else {
- factoryFn = () => provider.useValue;
- resolvedDeps = _EMPTY_LIST;
- }
- return new ResolvedReflectiveFactory(factoryFn, resolvedDeps);
- }
- /**
- * Converts the `Provider` into `ResolvedProvider`.
- *
- * `Injector` internally only uses `ResolvedProvider`, `Provider` contains convenience provider
- * syntax.
- */
- function resolveReflectiveProvider(provider) {
- return new ResolvedReflectiveProvider_(ReflectiveKey.get(provider.provide), [resolveReflectiveFactory(provider)], provider.multi || false);
- }
- /**
- * Resolve a list of Providers.
- */
- function resolveReflectiveProviders(providers) {
- const normalized = _normalizeProviders(providers, []);
- const resolved = normalized.map(resolveReflectiveProvider);
- const resolvedProviderMap = mergeResolvedReflectiveProviders(resolved, new Map());
- return Array.from(resolvedProviderMap.values());
- }
- /**
- * Merges a list of ResolvedProviders into a list where each key is contained exactly once and
- * multi providers have been merged.
- */
- function mergeResolvedReflectiveProviders(providers, normalizedProvidersMap) {
- for (let i = 0; i < providers.length; i++) {
- const provider = providers[i];
- const existing = normalizedProvidersMap.get(provider.key.id);
- if (existing) {
- if (provider.multiProvider !== existing.multiProvider) {
- throw mixingMultiProvidersWithRegularProvidersError(existing, provider);
- }
- if (provider.multiProvider) {
- for (let j = 0; j < provider.resolvedFactories.length; j++) {
- existing.resolvedFactories.push(provider.resolvedFactories[j]);
- }
- }
- else {
- normalizedProvidersMap.set(provider.key.id, provider);
- }
- }
- else {
- let resolvedProvider;
- if (provider.multiProvider) {
- resolvedProvider = new ResolvedReflectiveProvider_(provider.key, provider.resolvedFactories.slice(), provider.multiProvider);
- }
- else {
- resolvedProvider = provider;
- }
- normalizedProvidersMap.set(provider.key.id, resolvedProvider);
- }
- }
- return normalizedProvidersMap;
- }
- function _normalizeProviders(providers, res) {
- providers.forEach(b => {
- if (b instanceof Type) {
- res.push({ provide: b, useClass: b });
- }
- else if (b && typeof b == 'object' && b.provide !== undefined) {
- res.push(b);
- }
- else if (Array.isArray(b)) {
- _normalizeProviders(b, res);
- }
- else {
- throw invalidProviderError(b);
- }
- });
- return res;
- }
- function constructDependencies(typeOrFunc, dependencies) {
- if (!dependencies) {
- return _dependenciesFor(typeOrFunc);
- }
- else {
- const params = dependencies.map(t => [t]);
- return dependencies.map(t => _extractToken(typeOrFunc, t, params));
- }
- }
- function _dependenciesFor(typeOrFunc) {
- const params = reflector.parameters(typeOrFunc);
- if (!params)
- return [];
- if (params.some(p => p == null)) {
- throw noAnnotationError(typeOrFunc, params);
- }
- return params.map(p => _extractToken(typeOrFunc, p, params));
- }
- function _extractToken(typeOrFunc, metadata, params) {
- let token = null;
- let optional = false;
- if (!Array.isArray(metadata)) {
- if (metadata instanceof Inject) {
- return _createDependency(metadata.token, optional, null);
- }
- else {
- return _createDependency(metadata, optional, null);
- }
- }
- let visibility = null;
- for (let i = 0; i < metadata.length; ++i) {
- const paramMetadata = metadata[i];
- if (paramMetadata instanceof Type) {
- token = paramMetadata;
- }
- else if (paramMetadata instanceof Inject) {
- token = paramMetadata.token;
- }
- else if (paramMetadata instanceof Optional) {
- optional = true;
- }
- else if (paramMetadata instanceof Self || paramMetadata instanceof SkipSelf) {
- visibility = paramMetadata;
- }
- else if (paramMetadata instanceof InjectionToken) {
- token = paramMetadata;
- }
- }
- token = resolveForwardRef(token);
- if (token != null) {
- return _createDependency(token, optional, visibility);
- }
- else {
- throw noAnnotationError(typeOrFunc, params);
- }
- }
- function _createDependency(token, optional, visibility) {
- return new ReflectiveDependency(ReflectiveKey.get(token), optional, visibility);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // Threshold for the dynamic version
- const UNDEFINED = {};
- /**
- * A ReflectiveDependency injection container used for instantiating objects and resolving
- * dependencies.
- *
- * An `Injector` is a replacement for a `new` operator, which can automatically resolve the
- * constructor dependencies.
- *
- * In typical use, application code asks for the dependencies in the constructor and they are
- * resolved by the `Injector`.
- *
- * @usageNotes
- * ### Example
- *
- * The following example creates an `Injector` configured to create `Engine` and `Car`.
- *
- * ```typescript
- * @Injectable()
- * class Engine {
- * }
- *
- * @Injectable()
- * class Car {
- * constructor(public engine:Engine) {}
- * }
- *
- * var injector = ReflectiveInjector.resolveAndCreate([Car, Engine]);
- * var car = injector.get(Car);
- * expect(car instanceof Car).toBe(true);
- * expect(car.engine instanceof Engine).toBe(true);
- * ```
- *
- * Notice, we don't use the `new` operator because we explicitly want to have the `Injector`
- * resolve all of the object's dependencies automatically.
- *
- * @deprecated from v5 - slow and brings in a lot of code, Use `Injector.create` instead.
- * @publicApi
- */
- class ReflectiveInjector {
- /**
- * Turns an array of provider definitions into an array of resolved providers.
- *
- * A resolution is a process of flattening multiple nested arrays and converting individual
- * providers into an array of `ResolvedReflectiveProvider`s.
- *
- * @usageNotes
- * ### Example
- *
- * ```typescript
- * @Injectable()
- * class Engine {
- * }
- *
- * @Injectable()
- * class Car {
- * constructor(public engine:Engine) {}
- * }
- *
- * var providers = ReflectiveInjector.resolve([Car, [[Engine]]]);
- *
- * expect(providers.length).toEqual(2);
- *
- * expect(providers[0] instanceof ResolvedReflectiveProvider).toBe(true);
- * expect(providers[0].key.displayName).toBe("Car");
- * expect(providers[0].dependencies.length).toEqual(1);
- * expect(providers[0].factory).toBeDefined();
- *
- * expect(providers[1].key.displayName).toBe("Engine");
- * });
- * ```
- *
- */
- static resolve(providers) {
- return resolveReflectiveProviders(providers);
- }
- /**
- * Resolves an array of providers and creates an injector from those providers.
- *
- * The passed-in providers can be an array of `Type`, `Provider`,
- * or a recursive array of more providers.
- *
- * @usageNotes
- * ### Example
- *
- * ```typescript
- * @Injectable()
- * class Engine {
- * }
- *
- * @Injectable()
- * class Car {
- * constructor(public engine:Engine) {}
- * }
- *
- * var injector = ReflectiveInjector.resolveAndCreate([Car, Engine]);
- * expect(injector.get(Car) instanceof Car).toBe(true);
- * ```
- */
- static resolveAndCreate(providers, parent) {
- const ResolvedReflectiveProviders = ReflectiveInjector.resolve(providers);
- return ReflectiveInjector.fromResolvedProviders(ResolvedReflectiveProviders, parent);
- }
- /**
- * Creates an injector from previously resolved providers.
- *
- * This API is the recommended way to construct injectors in performance-sensitive parts.
- *
- * @usageNotes
- * ### Example
- *
- * ```typescript
- * @Injectable()
- * class Engine {
- * }
- *
- * @Injectable()
- * class Car {
- * constructor(public engine:Engine) {}
- * }
- *
- * var providers = ReflectiveInjector.resolve([Car, Engine]);
- * var injector = ReflectiveInjector.fromResolvedProviders(providers);
- * expect(injector.get(Car) instanceof Car).toBe(true);
- * ```
- */
- static fromResolvedProviders(providers, parent) {
- return new ReflectiveInjector_(providers, parent);
- }
- }
- class ReflectiveInjector_ {
- /**
- * Private
- */
- constructor(_providers, _parent) {
- /** @internal */
- this._constructionCounter = 0;
- this._providers = _providers;
- this.parent = _parent || null;
- const len = _providers.length;
- this.keyIds = [];
- this.objs = [];
- for (let i = 0; i < len; i++) {
- this.keyIds[i] = _providers[i].key.id;
- this.objs[i] = UNDEFINED;
- }
- }
- get(token, notFoundValue = THROW_IF_NOT_FOUND) {
- return this._getByKey(ReflectiveKey.get(token), null, notFoundValue);
- }
- resolveAndCreateChild(providers) {
- const ResolvedReflectiveProviders = ReflectiveInjector.resolve(providers);
- return this.createChildFromResolved(ResolvedReflectiveProviders);
- }
- createChildFromResolved(providers) {
- const inj = new ReflectiveInjector_(providers);
- inj.parent = this;
- return inj;
- }
- resolveAndInstantiate(provider) {
- return this.instantiateResolved(ReflectiveInjector.resolve([provider])[0]);
- }
- instantiateResolved(provider) {
- return this._instantiateProvider(provider);
- }
- getProviderAtIndex(index) {
- if (index < 0 || index >= this._providers.length) {
- throw outOfBoundsError(index);
- }
- return this._providers[index];
- }
- /** @internal */
- _new(provider) {
- if (this._constructionCounter++ > this._getMaxNumberOfObjects()) {
- throw cyclicDependencyError(this, provider.key);
- }
- return this._instantiateProvider(provider);
- }
- _getMaxNumberOfObjects() {
- return this.objs.length;
- }
- _instantiateProvider(provider) {
- if (provider.multiProvider) {
- const res = [];
- for (let i = 0; i < provider.resolvedFactories.length; ++i) {
- res[i] = this._instantiate(provider, provider.resolvedFactories[i]);
- }
- return res;
- }
- else {
- return this._instantiate(provider, provider.resolvedFactories[0]);
- }
- }
- _instantiate(provider, ResolvedReflectiveFactory) {
- const factory = ResolvedReflectiveFactory.factory;
- let deps;
- try {
- deps =
- ResolvedReflectiveFactory.dependencies.map(dep => this._getByReflectiveDependency(dep));
- }
- catch (e) {
- if (e.addKey) {
- e.addKey(this, provider.key);
- }
- throw e;
- }
- let obj;
- try {
- obj = factory(...deps);
- }
- catch (e) {
- throw instantiationError(this, e, e.stack, provider.key);
- }
- return obj;
- }
- _getByReflectiveDependency(dep) {
- return this._getByKey(dep.key, dep.visibility, dep.optional ? null : THROW_IF_NOT_FOUND);
- }
- _getByKey(key, visibility, notFoundValue) {
- if (key === ReflectiveInjector_.INJECTOR_KEY) {
- return this;
- }
- if (visibility instanceof Self) {
- return this._getByKeySelf(key, notFoundValue);
- }
- else {
- return this._getByKeyDefault(key, notFoundValue, visibility);
- }
- }
- _getObjByKeyId(keyId) {
- for (let i = 0; i < this.keyIds.length; i++) {
- if (this.keyIds[i] === keyId) {
- if (this.objs[i] === UNDEFINED) {
- this.objs[i] = this._new(this._providers[i]);
- }
- return this.objs[i];
- }
- }
- return UNDEFINED;
- }
- /** @internal */
- _throwOrNull(key, notFoundValue) {
- if (notFoundValue !== THROW_IF_NOT_FOUND) {
- return notFoundValue;
- }
- else {
- throw noProviderError(this, key);
- }
- }
- /** @internal */
- _getByKeySelf(key, notFoundValue) {
- const obj = this._getObjByKeyId(key.id);
- return (obj !== UNDEFINED) ? obj : this._throwOrNull(key, notFoundValue);
- }
- /** @internal */
- _getByKeyDefault(key, notFoundValue, visibility) {
- let inj;
- if (visibility instanceof SkipSelf) {
- inj = this.parent;
- }
- else {
- inj = this;
- }
- while (inj instanceof ReflectiveInjector_) {
- const inj_ = inj;
- const obj = inj_._getObjByKeyId(key.id);
- if (obj !== UNDEFINED)
- return obj;
- inj = inj_.parent;
- }
- if (inj !== null) {
- return inj.get(key.token, notFoundValue);
- }
- else {
- return this._throwOrNull(key, notFoundValue);
- }
- }
- get displayName() {
- const providers = _mapProviders(this, (b) => ' "' + b.key.displayName + '" ')
- .join(', ');
- return `ReflectiveInjector(providers: [${providers}])`;
- }
- toString() {
- return this.displayName;
- }
- }
- ReflectiveInjector_.INJECTOR_KEY = ReflectiveKey.get(Injector);
- function _mapProviders(injector, fn) {
- const res = [];
- for (let i = 0; i < injector._providers.length; ++i) {
- res[i] = fn(injector.getProviderAtIndex(i));
- }
- return res;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function ɵɵdirectiveInject(token, flags = InjectFlags.Default) {
- const lView = getLView();
- // Fall back to inject() if view hasn't been created. This situation can happen in tests
- // if inject utilities are used before bootstrapping.
- if (lView === null) {
- // Verify that we will not get into infinite loop.
- ngDevMode && assertInjectImplementationNotEqual(ɵɵdirectiveInject);
- return ɵɵinject(token, flags);
- }
- const tNode = getCurrentTNode();
- return getOrCreateInjectable(tNode, lView, resolveForwardRef(token), flags);
- }
- /**
- * Throws an error indicating that a factory function could not be generated by the compiler for a
- * particular class.
- *
- * This instruction allows the actual error message to be optimized away when ngDevMode is turned
- * off, saving bytes of generated code while still providing a good experience in dev mode.
- *
- * The name of the class is not mentioned here, but will be in the generated factory function name
- * and thus in the stack trace.
- *
- * @codeGenApi
- */
- function ɵɵinvalidFactory() {
- const msg = ngDevMode ? `This constructor was not compatible with Dependency Injection.` : 'invalid';
- throw new Error(msg);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Update a property on a selected element.
- *
- * Operates on the element selected by index via the {@link select} instruction.
- *
- * If the property name also exists as an input property on one of the element's directives,
- * the component property will be set instead of the element property. This check must
- * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled
- *
- * @param propName Name of property. Because it is going to DOM, this is not subject to
- * renaming as part of minification.
- * @param value New value to write.
- * @param sanitizer An optional function used to sanitize the value.
- * @returns This function returns itself so that it may be chained
- * (e.g. `property('name', ctx.name)('title', ctx.title)`)
- *
- * @codeGenApi
- */
- function ɵɵproperty(propName, value, sanitizer) {
- const lView = getLView();
- const bindingIndex = nextBindingIndex();
- if (bindingUpdated(lView, bindingIndex, value)) {
- const tView = getTView();
- const tNode = getSelectedTNode();
- elementPropertyInternal(tView, tNode, lView, propName, value, lView[RENDERER], sanitizer, false);
- ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);
- }
- return ɵɵproperty;
- }
- /**
- * Given `<div style="..." my-dir>` and `MyDir` with `@Input('style')` we need to write to
- * directive input.
- */
- function setDirectiveInputsWhichShadowsStyling(tView, tNode, lView, value, isClassBased) {
- const inputs = tNode.inputs;
- const property = isClassBased ? 'class' : 'style';
- // We support both 'class' and `className` hence the fallback.
- setInputsForProperty(tView, lView, inputs[property], property, value);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function elementStartFirstCreatePass(index, tView, lView, native, name, attrsIndex, localRefsIndex) {
- ngDevMode && assertFirstCreatePass(tView);
- ngDevMode && ngDevMode.firstCreatePass++;
- const tViewConsts = tView.consts;
- const attrs = getConstant(tViewConsts, attrsIndex);
- const tNode = getOrCreateTNode(tView, index, 2 /* Element */, name, attrs);
- const hasDirectives = resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex));
- ngDevMode && logUnknownElementError(tView, native, tNode, hasDirectives);
- if (tNode.attrs !== null) {
- computeStaticStyling(tNode, tNode.attrs, false);
- }
- if (tNode.mergedAttrs !== null) {
- computeStaticStyling(tNode, tNode.mergedAttrs, true);
- }
- if (tView.queries !== null) {
- tView.queries.elementStart(tView, tNode);
- }
- return tNode;
- }
- /**
- * Create DOM element. The instruction must later be followed by `elementEnd()` call.
- *
- * @param index Index of the element in the LView array
- * @param name Name of the DOM Node
- * @param attrsIndex Index of the element's attributes in the `consts` array.
- * @param localRefsIndex Index of the element's local references in the `consts` array.
- *
- * Attributes and localRefs are passed as an array of strings where elements with an even index
- * hold an attribute name and elements with an odd index hold an attribute value, ex.:
- * ['id', 'warning5', 'class', 'alert']
- *
- * @codeGenApi
- */
- function ɵɵelementStart(index, name, attrsIndex, localRefsIndex) {
- const lView = getLView();
- const tView = getTView();
- const adjustedIndex = HEADER_OFFSET + index;
- ngDevMode &&
- assertEqual(getBindingIndex(), tView.bindingStartIndex, 'elements should be created before any bindings');
- ngDevMode && assertIndexInRange(lView, adjustedIndex);
- const renderer = lView[RENDERER];
- const native = lView[adjustedIndex] = createElementNode(renderer, name, getNamespace());
- const tNode = tView.firstCreatePass ?
- elementStartFirstCreatePass(adjustedIndex, tView, lView, native, name, attrsIndex, localRefsIndex) :
- tView.data[adjustedIndex];
- setCurrentTNode(tNode, true);
- const mergedAttrs = tNode.mergedAttrs;
- if (mergedAttrs !== null) {
- setUpAttributes(renderer, native, mergedAttrs);
- }
- const classes = tNode.classes;
- if (classes !== null) {
- writeDirectClass(renderer, native, classes);
- }
- const styles = tNode.styles;
- if (styles !== null) {
- writeDirectStyle(renderer, native, styles);
- }
- if ((tNode.flags & 64 /* isDetached */) !== 64 /* isDetached */) {
- // In the i18n case, the translation may have removed this element, so only add it if it is not
- // detached. See `TNodeType.Placeholder` and `LFrame.inI18n` for more context.
- appendChild(tView, lView, native, tNode);
- }
- // any immediate children of a component or template container must be pre-emptively
- // monkey-patched with the component view data so that the element can be inspected
- // later on using any element discovery utility methods (see `element_discovery.ts`)
- if (getElementDepthCount() === 0) {
- attachPatchData(native, lView);
- }
- increaseElementDepthCount();
- if (isDirectiveHost(tNode)) {
- createDirectivesInstances(tView, lView, tNode);
- executeContentQueries(tView, tNode, lView);
- }
- if (localRefsIndex !== null) {
- saveResolvedLocalsInData(lView, tNode);
- }
- }
- /**
- * Mark the end of the element.
- *
- * @codeGenApi
- */
- function ɵɵelementEnd() {
- let currentTNode = getCurrentTNode();
- ngDevMode && assertDefined(currentTNode, 'No parent node to close.');
- if (isCurrentTNodeParent()) {
- setCurrentTNodeAsNotParent();
- }
- else {
- ngDevMode && assertHasParent(getCurrentTNode());
- currentTNode = currentTNode.parent;
- setCurrentTNode(currentTNode, false);
- }
- const tNode = currentTNode;
- ngDevMode && assertTNodeType(tNode, 3 /* AnyRNode */);
- decreaseElementDepthCount();
- const tView = getTView();
- if (tView.firstCreatePass) {
- registerPostOrderHooks(tView, currentTNode);
- if (isContentQueryHost(currentTNode)) {
- tView.queries.elementEnd(currentTNode);
- }
- }
- if (tNode.classesWithoutHost != null && hasClassInput(tNode)) {
- setDirectiveInputsWhichShadowsStyling(tView, tNode, getLView(), tNode.classesWithoutHost, true);
- }
- if (tNode.stylesWithoutHost != null && hasStyleInput(tNode)) {
- setDirectiveInputsWhichShadowsStyling(tView, tNode, getLView(), tNode.stylesWithoutHost, false);
- }
- }
- /**
- * Creates an empty element using {@link elementStart} and {@link elementEnd}
- *
- * @param index Index of the element in the data array
- * @param name Name of the DOM Node
- * @param attrsIndex Index of the element's attributes in the `consts` array.
- * @param localRefsIndex Index of the element's local references in the `consts` array.
- *
- * @codeGenApi
- */
- function ɵɵelement(index, name, attrsIndex, localRefsIndex) {
- ɵɵelementStart(index, name, attrsIndex, localRefsIndex);
- ɵɵelementEnd();
- }
- function logUnknownElementError(tView, element, tNode, hasDirectives) {
- const schemas = tView.schemas;
- // If `schemas` is set to `null`, that's an indication that this Component was compiled in AOT
- // mode where this check happens at compile time. In JIT mode, `schemas` is always present and
- // defined as an array (as an empty array in case `schemas` field is not defined) and we should
- // execute the check below.
- if (schemas === null)
- return;
- const tagName = tNode.value;
- // If the element matches any directive, it's considered as valid.
- if (!hasDirectives && tagName !== null) {
- // The element is unknown if it's an instance of HTMLUnknownElement or it isn't registered
- // as a custom element. Note that unknown elements with a dash in their name won't be instances
- // of HTMLUnknownElement in browsers that support web components.
- const isUnknown =
- // Note that we can't check for `typeof HTMLUnknownElement === 'function'`,
- // because while most browsers return 'function', IE returns 'object'.
- (typeof HTMLUnknownElement !== 'undefined' && HTMLUnknownElement &&
- element instanceof HTMLUnknownElement) ||
- (typeof customElements !== 'undefined' && tagName.indexOf('-') > -1 &&
- !customElements.get(tagName));
- if (isUnknown && !matchingSchemas(tView, tagName)) {
- let message = `'${tagName}' is not a known element:\n`;
- message += `1. If '${tagName}' is an Angular component, then verify that it is part of this module.\n`;
- if (tagName && tagName.indexOf('-') > -1) {
- message += `2. If '${tagName}' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.`;
- }
- else {
- message +=
- `2. To allow any element add 'NO_ERRORS_SCHEMA' to the '@NgModule.schemas' of this component.`;
- }
- console.error(formatRuntimeError("304" /* UNKNOWN_ELEMENT */, message));
- }
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function elementContainerStartFirstCreatePass(index, tView, lView, attrsIndex, localRefsIndex) {
- ngDevMode && ngDevMode.firstCreatePass++;
- const tViewConsts = tView.consts;
- const attrs = getConstant(tViewConsts, attrsIndex);
- const tNode = getOrCreateTNode(tView, index, 8 /* ElementContainer */, 'ng-container', attrs);
- // While ng-container doesn't necessarily support styling, we use the style context to identify
- // and execute directives on the ng-container.
- if (attrs !== null) {
- computeStaticStyling(tNode, attrs, true);
- }
- const localRefs = getConstant(tViewConsts, localRefsIndex);
- resolveDirectives(tView, lView, tNode, localRefs);
- if (tView.queries !== null) {
- tView.queries.elementStart(tView, tNode);
- }
- return tNode;
- }
- /**
- * Creates a logical container for other nodes (<ng-container>) backed by a comment node in the DOM.
- * The instruction must later be followed by `elementContainerEnd()` call.
- *
- * @param index Index of the element in the LView array
- * @param attrsIndex Index of the container attributes in the `consts` array.
- * @param localRefsIndex Index of the container's local references in the `consts` array.
- *
- * Even if this instruction accepts a set of attributes no actual attribute values are propagated to
- * the DOM (as a comment node can't have attributes). Attributes are here only for directive
- * matching purposes and setting initial inputs of directives.
- *
- * @codeGenApi
- */
- function ɵɵelementContainerStart(index, attrsIndex, localRefsIndex) {
- const lView = getLView();
- const tView = getTView();
- const adjustedIndex = index + HEADER_OFFSET;
- ngDevMode && assertIndexInRange(lView, adjustedIndex);
- ngDevMode &&
- assertEqual(getBindingIndex(), tView.bindingStartIndex, 'element containers should be created before any bindings');
- const tNode = tView.firstCreatePass ?
- elementContainerStartFirstCreatePass(adjustedIndex, tView, lView, attrsIndex, localRefsIndex) :
- tView.data[adjustedIndex];
- setCurrentTNode(tNode, true);
- ngDevMode && ngDevMode.rendererCreateComment++;
- const native = lView[adjustedIndex] =
- lView[RENDERER].createComment(ngDevMode ? 'ng-container' : '');
- appendChild(tView, lView, native, tNode);
- attachPatchData(native, lView);
- if (isDirectiveHost(tNode)) {
- createDirectivesInstances(tView, lView, tNode);
- executeContentQueries(tView, tNode, lView);
- }
- if (localRefsIndex != null) {
- saveResolvedLocalsInData(lView, tNode);
- }
- }
- /**
- * Mark the end of the <ng-container>.
- *
- * @codeGenApi
- */
- function ɵɵelementContainerEnd() {
- let currentTNode = getCurrentTNode();
- const tView = getTView();
- if (isCurrentTNodeParent()) {
- setCurrentTNodeAsNotParent();
- }
- else {
- ngDevMode && assertHasParent(currentTNode);
- currentTNode = currentTNode.parent;
- setCurrentTNode(currentTNode, false);
- }
- ngDevMode && assertTNodeType(currentTNode, 8 /* ElementContainer */);
- if (tView.firstCreatePass) {
- registerPostOrderHooks(tView, currentTNode);
- if (isContentQueryHost(currentTNode)) {
- tView.queries.elementEnd(currentTNode);
- }
- }
- }
- /**
- * Creates an empty logical container using {@link elementContainerStart}
- * and {@link elementContainerEnd}
- *
- * @param index Index of the element in the LView array
- * @param attrsIndex Index of the container attributes in the `consts` array.
- * @param localRefsIndex Index of the container's local references in the `consts` array.
- *
- * @codeGenApi
- */
- function ɵɵelementContainer(index, attrsIndex, localRefsIndex) {
- ɵɵelementContainerStart(index, attrsIndex, localRefsIndex);
- ɵɵelementContainerEnd();
- }
- /**
- * Returns the current OpaqueViewState instance.
- *
- * Used in conjunction with the restoreView() instruction to save a snapshot
- * of the current view and restore it when listeners are invoked. This allows
- * walking the declaration view tree in listeners to get vars from parent views.
- *
- * @codeGenApi
- */
- function ɵɵgetCurrentView() {
- return getLView();
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Determine if the argument is shaped like a Promise
- */
- function isPromise(obj) {
- // allow any Promise/A+ compliant thenable.
- // It's up to the caller to ensure that obj.then conforms to the spec
- return !!obj && typeof obj.then === 'function';
- }
- /**
- * Determine if the argument is an Observable
- *
- * Strictly this tests that the `obj` is `Subscribable`, since `Observable`
- * types need additional methods, such as `lift()`. But it is adequate for our
- * needs since within the Angular framework code we only ever need to use the
- * `subscribe()` method, and RxJS has mechanisms to wrap `Subscribable` objects
- * into `Observable` as needed.
- */
- function isObservable(obj) {
- return !!obj && typeof obj.subscribe === 'function';
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Adds an event listener to the current node.
- *
- * If an output exists on one of the node's directives, it also subscribes to the output
- * and saves the subscription for later cleanup.
- *
- * @param eventName Name of the event
- * @param listenerFn The function to be called when event emits
- * @param useCapture Whether or not to use capture in event listener
- * @param eventTargetResolver Function that returns global target information in case this listener
- * should be attached to a global object like window, document or body
- *
- * @codeGenApi
- */
- function ɵɵlistener(eventName, listenerFn, useCapture = false, eventTargetResolver) {
- const lView = getLView();
- const tView = getTView();
- const tNode = getCurrentTNode();
- listenerInternal(tView, lView, lView[RENDERER], tNode, eventName, listenerFn, useCapture, eventTargetResolver);
- return ɵɵlistener;
- }
- /**
- * Registers a synthetic host listener (e.g. `(@foo.start)`) on a component or directive.
- *
- * This instruction is for compatibility purposes and is designed to ensure that a
- * synthetic host listener (e.g. `@HostListener('@foo.start')`) properly gets rendered
- * in the component's renderer. Normally all host listeners are evaluated with the
- * parent component's renderer, but, in the case of animation @triggers, they need
- * to be evaluated with the sub component's renderer (because that's where the
- * animation triggers are defined).
- *
- * Do not use this instruction as a replacement for `listener`. This instruction
- * only exists to ensure compatibility with the ViewEngine's host binding behavior.
- *
- * @param eventName Name of the event
- * @param listenerFn The function to be called when event emits
- * @param useCapture Whether or not to use capture in event listener
- * @param eventTargetResolver Function that returns global target information in case this listener
- * should be attached to a global object like window, document or body
- *
- * @codeGenApi
- */
- function ɵɵsyntheticHostListener(eventName, listenerFn, useCapture = false, eventTargetResolver) {
- const tNode = getCurrentTNode();
- const lView = getLView();
- const tView = getTView();
- const currentDef = getCurrentDirectiveDef(tView.data);
- const renderer = loadComponentRenderer(currentDef, tNode, lView);
- listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn, useCapture, eventTargetResolver);
- return ɵɵsyntheticHostListener;
- }
- /**
- * A utility function that checks if a given element has already an event handler registered for an
- * event with a specified name. The TView.cleanup data structure is used to find out which events
- * are registered for a given element.
- */
- function findExistingListener(tView, lView, eventName, tNodeIdx) {
- const tCleanup = tView.cleanup;
- if (tCleanup != null) {
- for (let i = 0; i < tCleanup.length - 1; i += 2) {
- const cleanupEventName = tCleanup[i];
- if (cleanupEventName === eventName && tCleanup[i + 1] === tNodeIdx) {
- // We have found a matching event name on the same node but it might not have been
- // registered yet, so we must explicitly verify entries in the LView cleanup data
- // structures.
- const lCleanup = lView[CLEANUP];
- const listenerIdxInLCleanup = tCleanup[i + 2];
- return lCleanup.length > listenerIdxInLCleanup ? lCleanup[listenerIdxInLCleanup] : null;
- }
- // TView.cleanup can have a mix of 4-elements entries (for event handler cleanups) or
- // 2-element entries (for directive and queries destroy hooks). As such we can encounter
- // blocks of 4 or 2 items in the tView.cleanup and this is why we iterate over 2 elements
- // first and jump another 2 elements if we detect listeners cleanup (4 elements). Also check
- // documentation of TView.cleanup for more details of this data structure layout.
- if (typeof cleanupEventName === 'string') {
- i += 2;
- }
- }
- }
- return null;
- }
- function listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn, useCapture = false, eventTargetResolver) {
- const isTNodeDirectiveHost = isDirectiveHost(tNode);
- const firstCreatePass = tView.firstCreatePass;
- const tCleanup = firstCreatePass && getTViewCleanup(tView);
- // When the ɵɵlistener instruction was generated and is executed we know that there is either a
- // native listener or a directive output on this element. As such we we know that we will have to
- // register a listener and store its cleanup function on LView.
- const lCleanup = getLCleanup(lView);
- ngDevMode && assertTNodeType(tNode, 3 /* AnyRNode */ | 12 /* AnyContainer */);
- let processOutputs = true;
- // add native event listener - applicable to elements only
- if (tNode.type & 3 /* AnyRNode */) {
- const native = getNativeByTNode(tNode, lView);
- const resolved = eventTargetResolver ? eventTargetResolver(native) : EMPTY_OBJ;
- const target = resolved.target || native;
- const lCleanupIndex = lCleanup.length;
- const idxOrTargetGetter = eventTargetResolver ?
- (_lView) => eventTargetResolver(unwrapRNode(_lView[tNode.index])).target :
- tNode.index;
- // In order to match current behavior, native DOM event listeners must be added for all
- // events (including outputs).
- if (isProceduralRenderer(renderer)) {
- // There might be cases where multiple directives on the same element try to register an event
- // handler function for the same event. In this situation we want to avoid registration of
- // several native listeners as each registration would be intercepted by NgZone and
- // trigger change detection. This would mean that a single user action would result in several
- // change detections being invoked. To avoid this situation we want to have only one call to
- // native handler registration (for the same element and same type of event).
- //
- // In order to have just one native event handler in presence of multiple handler functions,
- // we just register a first handler function as a native event listener and then chain
- // (coalesce) other handler functions on top of the first native handler function.
- let existingListener = null;
- // Please note that the coalescing described here doesn't happen for events specifying an
- // alternative target (ex. (document:click)) - this is to keep backward compatibility with the
- // view engine.
- // Also, we don't have to search for existing listeners is there are no directives
- // matching on a given node as we can't register multiple event handlers for the same event in
- // a template (this would mean having duplicate attributes).
- if (!eventTargetResolver && isTNodeDirectiveHost) {
- existingListener = findExistingListener(tView, lView, eventName, tNode.index);
- }
- if (existingListener !== null) {
- // Attach a new listener to coalesced listeners list, maintaining the order in which
- // listeners are registered. For performance reasons, we keep a reference to the last
- // listener in that list (in `__ngLastListenerFn__` field), so we can avoid going through
- // the entire set each time we need to add a new listener.
- const lastListenerFn = existingListener.__ngLastListenerFn__ || existingListener;
- lastListenerFn.__ngNextListenerFn__ = listenerFn;
- existingListener.__ngLastListenerFn__ = listenerFn;
- processOutputs = false;
- }
- else {
- // The first argument of `listen` function in Procedural Renderer is:
- // - either a target name (as a string) in case of global target (window, document, body)
- // - or element reference (in all other cases)
- listenerFn = wrapListener(tNode, lView, listenerFn, false /** preventDefault */);
- const cleanupFn = renderer.listen(resolved.name || target, eventName, listenerFn);
- ngDevMode && ngDevMode.rendererAddEventListener++;
- lCleanup.push(listenerFn, cleanupFn);
- tCleanup && tCleanup.push(eventName, idxOrTargetGetter, lCleanupIndex, lCleanupIndex + 1);
- }
- }
- else {
- listenerFn = wrapListener(tNode, lView, listenerFn, true /** preventDefault */);
- target.addEventListener(eventName, listenerFn, useCapture);
- ngDevMode && ngDevMode.rendererAddEventListener++;
- lCleanup.push(listenerFn);
- tCleanup && tCleanup.push(eventName, idxOrTargetGetter, lCleanupIndex, useCapture);
- }
- }
- else {
- // Even if there is no native listener to add, we still need to wrap the listener so that OnPush
- // ancestors are marked dirty when an event occurs.
- listenerFn = wrapListener(tNode, lView, listenerFn, false /** preventDefault */);
- }
- // subscribe to directive outputs
- const outputs = tNode.outputs;
- let props;
- if (processOutputs && outputs !== null && (props = outputs[eventName])) {
- const propsLength = props.length;
- if (propsLength) {
- for (let i = 0; i < propsLength; i += 2) {
- const index = props[i];
- ngDevMode && assertIndexInRange(lView, index);
- const minifiedName = props[i + 1];
- const directiveInstance = lView[index];
- const output = directiveInstance[minifiedName];
- if (ngDevMode && !isObservable(output)) {
- throw new Error(`@Output ${minifiedName} not initialized in '${directiveInstance.constructor.name}'.`);
- }
- const subscription = output.subscribe(listenerFn);
- const idx = lCleanup.length;
- lCleanup.push(listenerFn, subscription);
- tCleanup && tCleanup.push(eventName, tNode.index, idx, -(idx + 1));
- }
- }
- }
- }
- function executeListenerWithErrorHandling(lView, listenerFn, e) {
- try {
- // Only explicitly returning false from a listener should preventDefault
- return listenerFn(e) !== false;
- }
- catch (error) {
- handleError(lView, error);
- return false;
- }
- }
- /**
- * Wraps an event listener with a function that marks ancestors dirty and prevents default behavior,
- * if applicable.
- *
- * @param tNode The TNode associated with this listener
- * @param lView The LView that contains this listener
- * @param listenerFn The listener function to call
- * @param wrapWithPreventDefault Whether or not to prevent default behavior
- * (the procedural renderer does this already, so in those cases, we should skip)
- */
- function wrapListener(tNode, lView, listenerFn, wrapWithPreventDefault) {
- // Note: we are performing most of the work in the listener function itself
- // to optimize listener registration.
- return function wrapListenerIn_markDirtyAndPreventDefault(e) {
- // Ivy uses `Function` as a special token that allows us to unwrap the function
- // so that it can be invoked programmatically by `DebugNode.triggerEventHandler`.
- if (e === Function) {
- return listenerFn;
- }
- // In order to be backwards compatible with View Engine, events on component host nodes
- // must also mark the component view itself dirty (i.e. the view that it owns).
- const startView = tNode.flags & 2 /* isComponentHost */ ?
- getComponentLViewByIndex(tNode.index, lView) :
- lView;
- // See interfaces/view.ts for more on LViewFlags.ManualOnPush
- if ((lView[FLAGS] & 32 /* ManualOnPush */) === 0) {
- markViewDirty(startView);
- }
- let result = executeListenerWithErrorHandling(lView, listenerFn, e);
- // A just-invoked listener function might have coalesced listeners so we need to check for
- // their presence and invoke as needed.
- let nextListenerFn = wrapListenerIn_markDirtyAndPreventDefault.__ngNextListenerFn__;
- while (nextListenerFn) {
- // We should prevent default if any of the listeners explicitly return false
- result = executeListenerWithErrorHandling(lView, nextListenerFn, e) && result;
- nextListenerFn = nextListenerFn.__ngNextListenerFn__;
- }
- if (wrapWithPreventDefault && result === false) {
- e.preventDefault();
- // Necessary for legacy browsers that don't support preventDefault (e.g. IE)
- e.returnValue = false;
- }
- return result;
- };
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Retrieves a context at the level specified and saves it as the global, contextViewData.
- * Will get the next level up if level is not specified.
- *
- * This is used to save contexts of parent views so they can be bound in embedded views, or
- * in conjunction with reference() to bind a ref from a parent view.
- *
- * @param level The relative level of the view from which to grab context compared to contextVewData
- * @returns context
- *
- * @codeGenApi
- */
- function ɵɵnextContext(level = 1) {
- return nextContextImpl(level);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Checks a given node against matching projection slots and returns the
- * determined slot index. Returns "null" if no slot matched the given node.
- *
- * This function takes into account the parsed ngProjectAs selector from the
- * node's attributes. If present, it will check whether the ngProjectAs selector
- * matches any of the projection slot selectors.
- */
- function matchingProjectionSlotIndex(tNode, projectionSlots) {
- let wildcardNgContentIndex = null;
- const ngProjectAsAttrVal = getProjectAsAttrValue(tNode);
- for (let i = 0; i < projectionSlots.length; i++) {
- const slotValue = projectionSlots[i];
- // The last wildcard projection slot should match all nodes which aren't matching
- // any selector. This is necessary to be backwards compatible with view engine.
- if (slotValue === '*') {
- wildcardNgContentIndex = i;
- continue;
- }
- // If we ran into an `ngProjectAs` attribute, we should match its parsed selector
- // to the list of selectors, otherwise we fall back to matching against the node.
- if (ngProjectAsAttrVal === null ?
- isNodeMatchingSelectorList(tNode, slotValue, /* isProjectionMode */ true) :
- isSelectorInSelectorList(ngProjectAsAttrVal, slotValue)) {
- return i; // first matching selector "captures" a given node
- }
- }
- return wildcardNgContentIndex;
- }
- /**
- * Instruction to distribute projectable nodes among <ng-content> occurrences in a given template.
- * It takes all the selectors from the entire component's template and decides where
- * each projected node belongs (it re-distributes nodes among "buckets" where each "bucket" is
- * backed by a selector).
- *
- * This function requires CSS selectors to be provided in 2 forms: parsed (by a compiler) and text,
- * un-parsed form.
- *
- * The parsed form is needed for efficient matching of a node against a given CSS selector.
- * The un-parsed, textual form is needed for support of the ngProjectAs attribute.
- *
- * Having a CSS selector in 2 different formats is not ideal, but alternatives have even more
- * drawbacks:
- * - having only a textual form would require runtime parsing of CSS selectors;
- * - we can't have only a parsed as we can't re-construct textual form from it (as entered by a
- * template author).
- *
- * @param projectionSlots? A collection of projection slots. A projection slot can be based
- * on a parsed CSS selectors or set to the wildcard selector ("*") in order to match
- * all nodes which do not match any selector. If not specified, a single wildcard
- * selector projection slot will be defined.
- *
- * @codeGenApi
- */
- function ɵɵprojectionDef(projectionSlots) {
- const componentNode = getLView()[DECLARATION_COMPONENT_VIEW][T_HOST];
- if (!componentNode.projection) {
- // If no explicit projection slots are defined, fall back to a single
- // projection slot with the wildcard selector.
- const numProjectionSlots = projectionSlots ? projectionSlots.length : 1;
- const projectionHeads = componentNode.projection =
- newArray(numProjectionSlots, null);
- const tails = projectionHeads.slice();
- let componentChild = componentNode.child;
- while (componentChild !== null) {
- const slotIndex = projectionSlots ? matchingProjectionSlotIndex(componentChild, projectionSlots) : 0;
- if (slotIndex !== null) {
- if (tails[slotIndex]) {
- tails[slotIndex].projectionNext = componentChild;
- }
- else {
- projectionHeads[slotIndex] = componentChild;
- }
- tails[slotIndex] = componentChild;
- }
- componentChild = componentChild.next;
- }
- }
- }
- /**
- * Inserts previously re-distributed projected nodes. This instruction must be preceded by a call
- * to the projectionDef instruction.
- *
- * @param nodeIndex
- * @param selectorIndex:
- * - 0 when the selector is `*` (or unspecified as this is the default value),
- * - 1 based index of the selector from the {@link projectionDef}
- *
- * @codeGenApi
- */
- function ɵɵprojection(nodeIndex, selectorIndex = 0, attrs) {
- const lView = getLView();
- const tView = getTView();
- const tProjectionNode = getOrCreateTNode(tView, HEADER_OFFSET + nodeIndex, 16 /* Projection */, null, attrs || null);
- // We can't use viewData[HOST_NODE] because projection nodes can be nested in embedded views.
- if (tProjectionNode.projection === null)
- tProjectionNode.projection = selectorIndex;
- // `<ng-content>` has no content
- setCurrentTNodeAsNotParent();
- if ((tProjectionNode.flags & 64 /* isDetached */) !== 64 /* isDetached */) {
- // re-distribution of projectable nodes is stored on a component's view level
- applyProjection(tView, lView, tProjectionNode);
- }
- }
- /**
- *
- * Update an interpolated property on an element with a lone bound value
- *
- * Used when the value passed to a property has 1 interpolated value in it, an no additional text
- * surrounds that interpolated value:
- *
- * ```html
- * <div title="{{v0}}"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵpropertyInterpolate('title', v0);
- * ```
- *
- * If the property name also exists as an input property on one of the element's directives,
- * the component property will be set instead of the element property. This check must
- * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
- *
- * @param propName The name of the property to update
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵpropertyInterpolate(propName, v0, sanitizer) {
- ɵɵpropertyInterpolate1(propName, '', v0, '', sanitizer);
- return ɵɵpropertyInterpolate;
- }
- /**
- *
- * Update an interpolated property on an element with single bound value surrounded by text.
- *
- * Used when the value passed to a property has 1 interpolated value in it:
- *
- * ```html
- * <div title="prefix{{v0}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵpropertyInterpolate1('title', 'prefix', v0, 'suffix');
- * ```
- *
- * If the property name also exists as an input property on one of the element's directives,
- * the component property will be set instead of the element property. This check must
- * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
- *
- * @param propName The name of the property to update
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵpropertyInterpolate1(propName, prefix, v0, suffix, sanitizer) {
- const lView = getLView();
- const interpolatedValue = interpolation1(lView, prefix, v0, suffix);
- if (interpolatedValue !== NO_CHANGE) {
- const tView = getTView();
- const tNode = getSelectedTNode();
- elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
- ngDevMode &&
- storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 1, prefix, suffix);
- }
- return ɵɵpropertyInterpolate1;
- }
- /**
- *
- * Update an interpolated property on an element with 2 bound values surrounded by text.
- *
- * Used when the value passed to a property has 2 interpolated values in it:
- *
- * ```html
- * <div title="prefix{{v0}}-{{v1}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵpropertyInterpolate2('title', 'prefix', v0, '-', v1, 'suffix');
- * ```
- *
- * If the property name also exists as an input property on one of the element's directives,
- * the component property will be set instead of the element property. This check must
- * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
- *
- * @param propName The name of the property to update
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵpropertyInterpolate2(propName, prefix, v0, i0, v1, suffix, sanitizer) {
- const lView = getLView();
- const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
- if (interpolatedValue !== NO_CHANGE) {
- const tView = getTView();
- const tNode = getSelectedTNode();
- elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
- ngDevMode &&
- storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 2, prefix, i0, suffix);
- }
- return ɵɵpropertyInterpolate2;
- }
- /**
- *
- * Update an interpolated property on an element with 3 bound values surrounded by text.
- *
- * Used when the value passed to a property has 3 interpolated values in it:
- *
- * ```html
- * <div title="prefix{{v0}}-{{v1}}-{{v2}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵpropertyInterpolate3(
- * 'title', 'prefix', v0, '-', v1, '-', v2, 'suffix');
- * ```
- *
- * If the property name also exists as an input property on one of the element's directives,
- * the component property will be set instead of the element property. This check must
- * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
- *
- * @param propName The name of the property to update
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵpropertyInterpolate3(propName, prefix, v0, i0, v1, i1, v2, suffix, sanitizer) {
- const lView = getLView();
- const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
- if (interpolatedValue !== NO_CHANGE) {
- const tView = getTView();
- const tNode = getSelectedTNode();
- elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
- ngDevMode &&
- storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 3, prefix, i0, i1, suffix);
- }
- return ɵɵpropertyInterpolate3;
- }
- /**
- *
- * Update an interpolated property on an element with 4 bound values surrounded by text.
- *
- * Used when the value passed to a property has 4 interpolated values in it:
- *
- * ```html
- * <div title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵpropertyInterpolate4(
- * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');
- * ```
- *
- * If the property name also exists as an input property on one of the element's directives,
- * the component property will be set instead of the element property. This check must
- * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
- *
- * @param propName The name of the property to update
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵpropertyInterpolate4(propName, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, sanitizer) {
- const lView = getLView();
- const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
- if (interpolatedValue !== NO_CHANGE) {
- const tView = getTView();
- const tNode = getSelectedTNode();
- elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
- ngDevMode &&
- storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 4, prefix, i0, i1, i2, suffix);
- }
- return ɵɵpropertyInterpolate4;
- }
- /**
- *
- * Update an interpolated property on an element with 5 bound values surrounded by text.
- *
- * Used when the value passed to a property has 5 interpolated values in it:
- *
- * ```html
- * <div title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵpropertyInterpolate5(
- * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');
- * ```
- *
- * If the property name also exists as an input property on one of the element's directives,
- * the component property will be set instead of the element property. This check must
- * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
- *
- * @param propName The name of the property to update
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵpropertyInterpolate5(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, sanitizer) {
- const lView = getLView();
- const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
- if (interpolatedValue !== NO_CHANGE) {
- const tView = getTView();
- const tNode = getSelectedTNode();
- elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
- ngDevMode &&
- storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 5, prefix, i0, i1, i2, i3, suffix);
- }
- return ɵɵpropertyInterpolate5;
- }
- /**
- *
- * Update an interpolated property on an element with 6 bound values surrounded by text.
- *
- * Used when the value passed to a property has 6 interpolated values in it:
- *
- * ```html
- * <div title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵpropertyInterpolate6(
- * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');
- * ```
- *
- * If the property name also exists as an input property on one of the element's directives,
- * the component property will be set instead of the element property. This check must
- * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
- *
- * @param propName The name of the property to update
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param i4 Static value used for concatenation only.
- * @param v5 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵpropertyInterpolate6(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, sanitizer) {
- const lView = getLView();
- const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
- if (interpolatedValue !== NO_CHANGE) {
- const tView = getTView();
- const tNode = getSelectedTNode();
- elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
- ngDevMode &&
- storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 6, prefix, i0, i1, i2, i3, i4, suffix);
- }
- return ɵɵpropertyInterpolate6;
- }
- /**
- *
- * Update an interpolated property on an element with 7 bound values surrounded by text.
- *
- * Used when the value passed to a property has 7 interpolated values in it:
- *
- * ```html
- * <div title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵpropertyInterpolate7(
- * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');
- * ```
- *
- * If the property name also exists as an input property on one of the element's directives,
- * the component property will be set instead of the element property. This check must
- * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
- *
- * @param propName The name of the property to update
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param i4 Static value used for concatenation only.
- * @param v5 Value checked for change.
- * @param i5 Static value used for concatenation only.
- * @param v6 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵpropertyInterpolate7(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, sanitizer) {
- const lView = getLView();
- const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
- if (interpolatedValue !== NO_CHANGE) {
- const tView = getTView();
- const tNode = getSelectedTNode();
- elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
- ngDevMode &&
- storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 7, prefix, i0, i1, i2, i3, i4, i5, suffix);
- }
- return ɵɵpropertyInterpolate7;
- }
- /**
- *
- * Update an interpolated property on an element with 8 bound values surrounded by text.
- *
- * Used when the value passed to a property has 8 interpolated values in it:
- *
- * ```html
- * <div title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵpropertyInterpolate8(
- * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');
- * ```
- *
- * If the property name also exists as an input property on one of the element's directives,
- * the component property will be set instead of the element property. This check must
- * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
- *
- * @param propName The name of the property to update
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param i4 Static value used for concatenation only.
- * @param v5 Value checked for change.
- * @param i5 Static value used for concatenation only.
- * @param v6 Value checked for change.
- * @param i6 Static value used for concatenation only.
- * @param v7 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵpropertyInterpolate8(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, sanitizer) {
- const lView = getLView();
- const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
- if (interpolatedValue !== NO_CHANGE) {
- const tView = getTView();
- const tNode = getSelectedTNode();
- elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
- ngDevMode &&
- storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 8, prefix, i0, i1, i2, i3, i4, i5, i6, suffix);
- }
- return ɵɵpropertyInterpolate8;
- }
- /**
- * Update an interpolated property on an element with 9 or more bound values surrounded by text.
- *
- * Used when the number of interpolated values exceeds 8.
- *
- * ```html
- * <div
- * title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix"></div>
- * ```
- *
- * Its compiled representation is::
- *
- * ```ts
- * ɵɵpropertyInterpolateV(
- * 'title', ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,
- * 'suffix']);
- * ```
- *
- * If the property name also exists as an input property on one of the element's directives,
- * the component property will be set instead of the element property. This check must
- * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
- *
- * @param propName The name of the property to update.
- * @param values The collection of values and the strings inbetween those values, beginning with a
- * string prefix and ending with a string suffix.
- * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)
- * @param sanitizer An optional sanitizer function
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵpropertyInterpolateV(propName, values, sanitizer) {
- const lView = getLView();
- const interpolatedValue = interpolationV(lView, values);
- if (interpolatedValue !== NO_CHANGE) {
- const tView = getTView();
- const tNode = getSelectedTNode();
- elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
- if (ngDevMode) {
- const interpolationInBetween = [values[0]]; // prefix
- for (let i = 2; i < values.length; i += 2) {
- interpolationInBetween.push(values[i]);
- }
- storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - interpolationInBetween.length + 1, ...interpolationInBetween);
- }
- }
- return ɵɵpropertyInterpolateV;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * This file contains reuseable "empty" symbols that can be used as default return values
- * in different parts of the rendering code. Because the same symbols are returned, this
- * allows for identity checks against these values to be consistently used by the framework
- * code.
- */
- const EMPTY_OBJ$1 = {};
- const EMPTY_ARRAY$3 = [];
- // freezing the values prevents any code from accidentally inserting new values in
- if ((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode()) {
- // These property accesses can be ignored because ngDevMode will be set to false
- // when optimizing code and the whole if statement will be dropped.
- // tslint:disable-next-line:no-toplevel-property-access
- Object.freeze(EMPTY_OBJ$1);
- // tslint:disable-next-line:no-toplevel-property-access
- Object.freeze(EMPTY_ARRAY$3);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * NOTE: The word `styling` is used interchangeably as style or class styling.
- *
- * This file contains code to link styling instructions together so that they can be replayed in
- * priority order. The file exists because Ivy styling instruction execution order does not match
- * that of the priority order. The purpose of this code is to create a linked list so that the
- * instructions can be traversed in priority order when computing the styles.
- *
- * Assume we are dealing with the following code:
- * ```
- * @Component({
- * template: `
- * <my-cmp [style]=" {color: '#001'} "
- * [style.color]=" #002 "
- * dir-style-color-1
- * dir-style-color-2> `
- * })
- * class ExampleComponent {
- * static ngComp = ... {
- * ...
- * // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
- * ɵɵstyleMap({color: '#001'});
- * ɵɵstyleProp('color', '#002');
- * ...
- * }
- * }
- *
- * @Directive({
- * selector: `[dir-style-color-1]',
- * })
- * class Style1Directive {
- * @HostBinding('style') style = {color: '#005'};
- * @HostBinding('style.color') color = '#006';
- *
- * static ngDir = ... {
- * ...
- * // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
- * ɵɵstyleMap({color: '#005'});
- * ɵɵstyleProp('color', '#006');
- * ...
- * }
- * }
- *
- * @Directive({
- * selector: `[dir-style-color-2]',
- * })
- * class Style2Directive {
- * @HostBinding('style') style = {color: '#007'};
- * @HostBinding('style.color') color = '#008';
- *
- * static ngDir = ... {
- * ...
- * // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
- * ɵɵstyleMap({color: '#007'});
- * ɵɵstyleProp('color', '#008');
- * ...
- * }
- * }
- *
- * @Directive({
- * selector: `my-cmp',
- * })
- * class MyComponent {
- * @HostBinding('style') style = {color: '#003'};
- * @HostBinding('style.color') color = '#004';
- *
- * static ngComp = ... {
- * ...
- * // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
- * ɵɵstyleMap({color: '#003'});
- * ɵɵstyleProp('color', '#004');
- * ...
- * }
- * }
- * ```
- *
- * The Order of instruction execution is:
- *
- * NOTE: the comment binding location is for illustrative purposes only.
- *
- * ```
- * // Template: (ExampleComponent)
- * ɵɵstyleMap({color: '#001'}); // Binding index: 10
- * ɵɵstyleProp('color', '#002'); // Binding index: 12
- * // MyComponent
- * ɵɵstyleMap({color: '#003'}); // Binding index: 20
- * ɵɵstyleProp('color', '#004'); // Binding index: 22
- * // Style1Directive
- * ɵɵstyleMap({color: '#005'}); // Binding index: 24
- * ɵɵstyleProp('color', '#006'); // Binding index: 26
- * // Style2Directive
- * ɵɵstyleMap({color: '#007'}); // Binding index: 28
- * ɵɵstyleProp('color', '#008'); // Binding index: 30
- * ```
- *
- * The correct priority order of concatenation is:
- *
- * ```
- * // MyComponent
- * ɵɵstyleMap({color: '#003'}); // Binding index: 20
- * ɵɵstyleProp('color', '#004'); // Binding index: 22
- * // Style1Directive
- * ɵɵstyleMap({color: '#005'}); // Binding index: 24
- * ɵɵstyleProp('color', '#006'); // Binding index: 26
- * // Style2Directive
- * ɵɵstyleMap({color: '#007'}); // Binding index: 28
- * ɵɵstyleProp('color', '#008'); // Binding index: 30
- * // Template: (ExampleComponent)
- * ɵɵstyleMap({color: '#001'}); // Binding index: 10
- * ɵɵstyleProp('color', '#002'); // Binding index: 12
- * ```
- *
- * What color should be rendered?
- *
- * Once the items are correctly sorted in the list, the answer is simply the last item in the
- * concatenation list which is `#002`.
- *
- * To do so we keep a linked list of all of the bindings which pertain to this element.
- * Notice that the bindings are inserted in the order of execution, but the `TView.data` allows
- * us to traverse them in the order of priority.
- *
- * |Idx|`TView.data`|`LView` | Notes
- * |---|------------|-----------------|--------------
- * |...| | |
- * |10 |`null` |`{color: '#001'}`| `ɵɵstyleMap('color', {color: '#001'})`
- * |11 |`30 | 12` | ... |
- * |12 |`color` |`'#002'` | `ɵɵstyleProp('color', '#002')`
- * |13 |`10 | 0` | ... |
- * |...| | |
- * |20 |`null` |`{color: '#003'}`| `ɵɵstyleMap('color', {color: '#003'})`
- * |21 |`0 | 22` | ... |
- * |22 |`color` |`'#004'` | `ɵɵstyleProp('color', '#004')`
- * |23 |`20 | 24` | ... |
- * |24 |`null` |`{color: '#005'}`| `ɵɵstyleMap('color', {color: '#005'})`
- * |25 |`22 | 26` | ... |
- * |26 |`color` |`'#006'` | `ɵɵstyleProp('color', '#006')`
- * |27 |`24 | 28` | ... |
- * |28 |`null` |`{color: '#007'}`| `ɵɵstyleMap('color', {color: '#007'})`
- * |29 |`26 | 30` | ... |
- * |30 |`color` |`'#008'` | `ɵɵstyleProp('color', '#008')`
- * |31 |`28 | 10` | ... |
- *
- * The above data structure allows us to re-concatenate the styling no matter which data binding
- * changes.
- *
- * NOTE: in addition to keeping track of next/previous index the `TView.data` also stores prev/next
- * duplicate bit. The duplicate bit if true says there either is a binding with the same name or
- * there is a map (which may contain the name). This information is useful in knowing if other
- * styles with higher priority need to be searched for overwrites.
- *
- * NOTE: See `should support example in 'tnode_linked_list.ts' documentation` in
- * `tnode_linked_list_spec.ts` for working example.
- */
- let __unused_const_as_closure_does_not_like_standalone_comment_blocks__;
- /**
- * Insert new `tStyleValue` at `TData` and link existing style bindings such that we maintain linked
- * list of styles and compute the duplicate flag.
- *
- * Note: this function is executed during `firstUpdatePass` only to populate the `TView.data`.
- *
- * The function works by keeping track of `tStylingRange` which contains two pointers pointing to
- * the head/tail of the template portion of the styles.
- * - if `isHost === false` (we are template) then insertion is at tail of `TStylingRange`
- * - if `isHost === true` (we are host binding) then insertion is at head of `TStylingRange`
- *
- * @param tData The `TData` to insert into.
- * @param tNode `TNode` associated with the styling element.
- * @param tStylingKey See `TStylingKey`.
- * @param index location of where `tStyleValue` should be stored (and linked into list.)
- * @param isHostBinding `true` if the insertion is for a `hostBinding`. (insertion is in front of
- * template.)
- * @param isClassBinding True if the associated `tStylingKey` as a `class` styling.
- * `tNode.classBindings` should be used (or `tNode.styleBindings` otherwise.)
- */
- function insertTStylingBinding(tData, tNode, tStylingKeyWithStatic, index, isHostBinding, isClassBinding) {
- ngDevMode && assertFirstUpdatePass(getTView());
- let tBindings = isClassBinding ? tNode.classBindings : tNode.styleBindings;
- let tmplHead = getTStylingRangePrev(tBindings);
- let tmplTail = getTStylingRangeNext(tBindings);
- tData[index] = tStylingKeyWithStatic;
- let isKeyDuplicateOfStatic = false;
- let tStylingKey;
- if (Array.isArray(tStylingKeyWithStatic)) {
- // We are case when the `TStylingKey` contains static fields as well.
- const staticKeyValueArray = tStylingKeyWithStatic;
- tStylingKey = staticKeyValueArray[1]; // unwrap.
- // We need to check if our key is present in the static so that we can mark it as duplicate.
- if (tStylingKey === null ||
- keyValueArrayIndexOf(staticKeyValueArray, tStylingKey) > 0) {
- // tStylingKey is present in the statics, need to mark it as duplicate.
- isKeyDuplicateOfStatic = true;
- }
- }
- else {
- tStylingKey = tStylingKeyWithStatic;
- }
- if (isHostBinding) {
- // We are inserting host bindings
- // If we don't have template bindings then `tail` is 0.
- const hasTemplateBindings = tmplTail !== 0;
- // This is important to know because that means that the `head` can't point to the first
- // template bindings (there are none.) Instead the head points to the tail of the template.
- if (hasTemplateBindings) {
- // template head's "prev" will point to last host binding or to 0 if no host bindings yet
- const previousNode = getTStylingRangePrev(tData[tmplHead + 1]);
- tData[index + 1] = toTStylingRange(previousNode, tmplHead);
- // if a host binding has already been registered, we need to update the next of that host
- // binding to point to this one
- if (previousNode !== 0) {
- // We need to update the template-tail value to point to us.
- tData[previousNode + 1] =
- setTStylingRangeNext(tData[previousNode + 1], index);
- }
- // The "previous" of the template binding head should point to this host binding
- tData[tmplHead + 1] = setTStylingRangePrev(tData[tmplHead + 1], index);
- }
- else {
- tData[index + 1] = toTStylingRange(tmplHead, 0);
- // if a host binding has already been registered, we need to update the next of that host
- // binding to point to this one
- if (tmplHead !== 0) {
- // We need to update the template-tail value to point to us.
- tData[tmplHead + 1] = setTStylingRangeNext(tData[tmplHead + 1], index);
- }
- // if we don't have template, the head points to template-tail, and needs to be advanced.
- tmplHead = index;
- }
- }
- else {
- // We are inserting in template section.
- // We need to set this binding's "previous" to the current template tail
- tData[index + 1] = toTStylingRange(tmplTail, 0);
- ngDevMode &&
- assertEqual(tmplHead !== 0 && tmplTail === 0, false, 'Adding template bindings after hostBindings is not allowed.');
- if (tmplHead === 0) {
- tmplHead = index;
- }
- else {
- // We need to update the previous value "next" to point to this binding
- tData[tmplTail + 1] = setTStylingRangeNext(tData[tmplTail + 1], index);
- }
- tmplTail = index;
- }
- // Now we need to update / compute the duplicates.
- // Starting with our location search towards head (least priority)
- if (isKeyDuplicateOfStatic) {
- tData[index + 1] = setTStylingRangePrevDuplicate(tData[index + 1]);
- }
- markDuplicates(tData, tStylingKey, index, true, isClassBinding);
- markDuplicates(tData, tStylingKey, index, false, isClassBinding);
- markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding);
- tBindings = toTStylingRange(tmplHead, tmplTail);
- if (isClassBinding) {
- tNode.classBindings = tBindings;
- }
- else {
- tNode.styleBindings = tBindings;
- }
- }
- /**
- * Look into the residual styling to see if the current `tStylingKey` is duplicate of residual.
- *
- * @param tNode `TNode` where the residual is stored.
- * @param tStylingKey `TStylingKey` to store.
- * @param tData `TData` associated with the current `LView`.
- * @param index location of where `tStyleValue` should be stored (and linked into list.)
- * @param isClassBinding True if the associated `tStylingKey` as a `class` styling.
- * `tNode.classBindings` should be used (or `tNode.styleBindings` otherwise.)
- */
- function markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding) {
- const residual = isClassBinding ? tNode.residualClasses : tNode.residualStyles;
- if (residual != null /* or undefined */ && typeof tStylingKey == 'string' &&
- keyValueArrayIndexOf(residual, tStylingKey) >= 0) {
- // We have duplicate in the residual so mark ourselves as duplicate.
- tData[index + 1] = setTStylingRangeNextDuplicate(tData[index + 1]);
- }
- }
- /**
- * Marks `TStyleValue`s as duplicates if another style binding in the list has the same
- * `TStyleValue`.
- *
- * NOTE: this function is intended to be called twice once with `isPrevDir` set to `true` and once
- * with it set to `false` to search both the previous as well as next items in the list.
- *
- * No duplicate case
- * ```
- * [style.color]
- * [style.width.px] <<- index
- * [style.height.px]
- * ```
- *
- * In the above case adding `[style.width.px]` to the existing `[style.color]` produces no
- * duplicates because `width` is not found in any other part of the linked list.
- *
- * Duplicate case
- * ```
- * [style.color]
- * [style.width.em]
- * [style.width.px] <<- index
- * ```
- * In the above case adding `[style.width.px]` will produce a duplicate with `[style.width.em]`
- * because `width` is found in the chain.
- *
- * Map case 1
- * ```
- * [style.width.px]
- * [style.color]
- * [style] <<- index
- * ```
- * In the above case adding `[style]` will produce a duplicate with any other bindings because
- * `[style]` is a Map and as such is fully dynamic and could produce `color` or `width`.
- *
- * Map case 2
- * ```
- * [style]
- * [style.width.px]
- * [style.color] <<- index
- * ```
- * In the above case adding `[style.color]` will produce a duplicate because there is already a
- * `[style]` binding which is a Map and as such is fully dynamic and could produce `color` or
- * `width`.
- *
- * NOTE: Once `[style]` (Map) is added into the system all things are mapped as duplicates.
- * NOTE: We use `style` as example, but same logic is applied to `class`es as well.
- *
- * @param tData `TData` where the linked list is stored.
- * @param tStylingKey `TStylingKeyPrimitive` which contains the value to compare to other keys in
- * the linked list.
- * @param index Starting location in the linked list to search from
- * @param isPrevDir Direction.
- * - `true` for previous (lower priority);
- * - `false` for next (higher priority).
- */
- function markDuplicates(tData, tStylingKey, index, isPrevDir, isClassBinding) {
- const tStylingAtIndex = tData[index + 1];
- const isMap = tStylingKey === null;
- let cursor = isPrevDir ? getTStylingRangePrev(tStylingAtIndex) : getTStylingRangeNext(tStylingAtIndex);
- let foundDuplicate = false;
- // We keep iterating as long as we have a cursor
- // AND either:
- // - we found what we are looking for, OR
- // - we are a map in which case we have to continue searching even after we find what we were
- // looking for since we are a wild card and everything needs to be flipped to duplicate.
- while (cursor !== 0 && (foundDuplicate === false || isMap)) {
- ngDevMode && assertIndexInRange(tData, cursor);
- const tStylingValueAtCursor = tData[cursor];
- const tStyleRangeAtCursor = tData[cursor + 1];
- if (isStylingMatch(tStylingValueAtCursor, tStylingKey)) {
- foundDuplicate = true;
- tData[cursor + 1] = isPrevDir ? setTStylingRangeNextDuplicate(tStyleRangeAtCursor) :
- setTStylingRangePrevDuplicate(tStyleRangeAtCursor);
- }
- cursor = isPrevDir ? getTStylingRangePrev(tStyleRangeAtCursor) :
- getTStylingRangeNext(tStyleRangeAtCursor);
- }
- if (foundDuplicate) {
- // if we found a duplicate, than mark ourselves.
- tData[index + 1] = isPrevDir ? setTStylingRangePrevDuplicate(tStylingAtIndex) :
- setTStylingRangeNextDuplicate(tStylingAtIndex);
- }
- }
- /**
- * Determines if two `TStylingKey`s are a match.
- *
- * When computing whether a binding contains a duplicate, we need to compare if the instruction
- * `TStylingKey` has a match.
- *
- * Here are examples of `TStylingKey`s which match given `tStylingKeyCursor` is:
- * - `color`
- * - `color` // Match another color
- * - `null` // That means that `tStylingKey` is a `classMap`/`styleMap` instruction
- * - `['', 'color', 'other', true]` // wrapped `color` so match
- * - `['', null, 'other', true]` // wrapped `null` so match
- * - `['', 'width', 'color', 'value']` // wrapped static value contains a match on `'color'`
- * - `null` // `tStylingKeyCursor` always match as it is `classMap`/`styleMap` instruction
- *
- * @param tStylingKeyCursor
- * @param tStylingKey
- */
- function isStylingMatch(tStylingKeyCursor, tStylingKey) {
- ngDevMode &&
- assertNotEqual(Array.isArray(tStylingKey), true, 'Expected that \'tStylingKey\' has been unwrapped');
- if (tStylingKeyCursor === null || // If the cursor is `null` it means that we have map at that
- // location so we must assume that we have a match.
- tStylingKey == null || // If `tStylingKey` is `null` then it is a map therefor assume that it
- // contains a match.
- (Array.isArray(tStylingKeyCursor) ? tStylingKeyCursor[1] : tStylingKeyCursor) ===
- tStylingKey // If the keys match explicitly than we are a match.
- ) {
- return true;
- }
- else if (Array.isArray(tStylingKeyCursor) && typeof tStylingKey === 'string') {
- // if we did not find a match, but `tStylingKeyCursor` is `KeyValueArray` that means cursor has
- // statics and we need to check those as well.
- return keyValueArrayIndexOf(tStylingKeyCursor, tStylingKey) >=
- 0; // see if we are matching the key
- }
- return false;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // Global state of the parser. (This makes parser non-reentrant, but that is not an issue)
- const parserState = {
- textEnd: 0,
- key: 0,
- keyEnd: 0,
- value: 0,
- valueEnd: 0,
- };
- /**
- * Retrieves the last parsed `key` of style.
- * @param text the text to substring the key from.
- */
- function getLastParsedKey(text) {
- return text.substring(parserState.key, parserState.keyEnd);
- }
- /**
- * Retrieves the last parsed `value` of style.
- * @param text the text to substring the key from.
- */
- function getLastParsedValue(text) {
- return text.substring(parserState.value, parserState.valueEnd);
- }
- /**
- * Initializes `className` string for parsing and parses the first token.
- *
- * This function is intended to be used in this format:
- * ```
- * for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {
- * const key = getLastParsedKey();
- * ...
- * }
- * ```
- * @param text `className` to parse
- * @returns index where the next invocation of `parseClassNameNext` should resume.
- */
- function parseClassName(text) {
- resetParserState(text);
- return parseClassNameNext(text, consumeWhitespace(text, 0, parserState.textEnd));
- }
- /**
- * Parses next `className` token.
- *
- * This function is intended to be used in this format:
- * ```
- * for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {
- * const key = getLastParsedKey();
- * ...
- * }
- * ```
- *
- * @param text `className` to parse
- * @param index where the parsing should resume.
- * @returns index where the next invocation of `parseClassNameNext` should resume.
- */
- function parseClassNameNext(text, index) {
- const end = parserState.textEnd;
- if (end === index) {
- return -1;
- }
- index = parserState.keyEnd = consumeClassToken(text, parserState.key = index, end);
- return consumeWhitespace(text, index, end);
- }
- /**
- * Initializes `cssText` string for parsing and parses the first key/values.
- *
- * This function is intended to be used in this format:
- * ```
- * for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i))) {
- * const key = getLastParsedKey();
- * const value = getLastParsedValue();
- * ...
- * }
- * ```
- * @param text `cssText` to parse
- * @returns index where the next invocation of `parseStyleNext` should resume.
- */
- function parseStyle(text) {
- resetParserState(text);
- return parseStyleNext(text, consumeWhitespace(text, 0, parserState.textEnd));
- }
- /**
- * Parses the next `cssText` key/values.
- *
- * This function is intended to be used in this format:
- * ```
- * for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i))) {
- * const key = getLastParsedKey();
- * const value = getLastParsedValue();
- * ...
- * }
- *
- * @param text `cssText` to parse
- * @param index where the parsing should resume.
- * @returns index where the next invocation of `parseStyleNext` should resume.
- */
- function parseStyleNext(text, startIndex) {
- const end = parserState.textEnd;
- let index = parserState.key = consumeWhitespace(text, startIndex, end);
- if (end === index) {
- // we reached an end so just quit
- return -1;
- }
- index = parserState.keyEnd = consumeStyleKey(text, index, end);
- index = consumeSeparator(text, index, end, 58 /* COLON */);
- index = parserState.value = consumeWhitespace(text, index, end);
- index = parserState.valueEnd = consumeStyleValue(text, index, end);
- return consumeSeparator(text, index, end, 59 /* SEMI_COLON */);
- }
- /**
- * Reset the global state of the styling parser.
- * @param text The styling text to parse.
- */
- function resetParserState(text) {
- parserState.key = 0;
- parserState.keyEnd = 0;
- parserState.value = 0;
- parserState.valueEnd = 0;
- parserState.textEnd = text.length;
- }
- /**
- * Returns index of next non-whitespace character.
- *
- * @param text Text to scan
- * @param startIndex Starting index of character where the scan should start.
- * @param endIndex Ending index of character where the scan should end.
- * @returns Index of next non-whitespace character (May be the same as `start` if no whitespace at
- * that location.)
- */
- function consumeWhitespace(text, startIndex, endIndex) {
- while (startIndex < endIndex && text.charCodeAt(startIndex) <= 32 /* SPACE */) {
- startIndex++;
- }
- return startIndex;
- }
- /**
- * Returns index of last char in class token.
- *
- * @param text Text to scan
- * @param startIndex Starting index of character where the scan should start.
- * @param endIndex Ending index of character where the scan should end.
- * @returns Index after last char in class token.
- */
- function consumeClassToken(text, startIndex, endIndex) {
- while (startIndex < endIndex && text.charCodeAt(startIndex) > 32 /* SPACE */) {
- startIndex++;
- }
- return startIndex;
- }
- /**
- * Consumes all of the characters belonging to style key and token.
- *
- * @param text Text to scan
- * @param startIndex Starting index of character where the scan should start.
- * @param endIndex Ending index of character where the scan should end.
- * @returns Index after last style key character.
- */
- function consumeStyleKey(text, startIndex, endIndex) {
- let ch;
- while (startIndex < endIndex &&
- ((ch = text.charCodeAt(startIndex)) === 45 /* DASH */ || ch === 95 /* UNDERSCORE */ ||
- ((ch & -33 /* UPPER_CASE */) >= 65 /* A */ && (ch & -33 /* UPPER_CASE */) <= 90 /* Z */) ||
- (ch >= 48 /* ZERO */ && ch <= 57 /* NINE */))) {
- startIndex++;
- }
- return startIndex;
- }
- /**
- * Consumes all whitespace and the separator `:` after the style key.
- *
- * @param text Text to scan
- * @param startIndex Starting index of character where the scan should start.
- * @param endIndex Ending index of character where the scan should end.
- * @returns Index after separator and surrounding whitespace.
- */
- function consumeSeparator(text, startIndex, endIndex, separator) {
- startIndex = consumeWhitespace(text, startIndex, endIndex);
- if (startIndex < endIndex) {
- if (ngDevMode && text.charCodeAt(startIndex) !== separator) {
- malformedStyleError(text, String.fromCharCode(separator), startIndex);
- }
- startIndex++;
- }
- return startIndex;
- }
- /**
- * Consumes style value honoring `url()` and `""` text.
- *
- * @param text Text to scan
- * @param startIndex Starting index of character where the scan should start.
- * @param endIndex Ending index of character where the scan should end.
- * @returns Index after last style value character.
- */
- function consumeStyleValue(text, startIndex, endIndex) {
- let ch1 = -1; // 1st previous character
- let ch2 = -1; // 2nd previous character
- let ch3 = -1; // 3rd previous character
- let i = startIndex;
- let lastChIndex = i;
- while (i < endIndex) {
- const ch = text.charCodeAt(i++);
- if (ch === 59 /* SEMI_COLON */) {
- return lastChIndex;
- }
- else if (ch === 34 /* DOUBLE_QUOTE */ || ch === 39 /* SINGLE_QUOTE */) {
- lastChIndex = i = consumeQuotedText(text, ch, i, endIndex);
- }
- else if (startIndex ===
- i - 4 && // We have seen only 4 characters so far "URL(" (Ignore "foo_URL()")
- ch3 === 85 /* U */ &&
- ch2 === 82 /* R */ && ch1 === 76 /* L */ && ch === 40 /* OPEN_PAREN */) {
- lastChIndex = i = consumeQuotedText(text, 41 /* CLOSE_PAREN */, i, endIndex);
- }
- else if (ch > 32 /* SPACE */) {
- // if we have a non-whitespace character then capture its location
- lastChIndex = i;
- }
- ch3 = ch2;
- ch2 = ch1;
- ch1 = ch & -33 /* UPPER_CASE */;
- }
- return lastChIndex;
- }
- /**
- * Consumes all of the quoted characters.
- *
- * @param text Text to scan
- * @param quoteCharCode CharCode of either `"` or `'` quote or `)` for `url(...)`.
- * @param startIndex Starting index of character where the scan should start.
- * @param endIndex Ending index of character where the scan should end.
- * @returns Index after quoted characters.
- */
- function consumeQuotedText(text, quoteCharCode, startIndex, endIndex) {
- let ch1 = -1; // 1st previous character
- let index = startIndex;
- while (index < endIndex) {
- const ch = text.charCodeAt(index++);
- if (ch == quoteCharCode && ch1 !== 92 /* BACK_SLASH */) {
- return index;
- }
- if (ch == 92 /* BACK_SLASH */ && ch1 === 92 /* BACK_SLASH */) {
- // two back slashes cancel each other out. For example `"\\"` should properly end the
- // quotation. (It should not assume that the last `"` is escaped.)
- ch1 = 0;
- }
- else {
- ch1 = ch;
- }
- }
- throw ngDevMode ? malformedStyleError(text, String.fromCharCode(quoteCharCode), endIndex) :
- new Error();
- }
- function malformedStyleError(text, expecting, index) {
- ngDevMode && assertEqual(typeof text === 'string', true, 'String expected here');
- throw throwError(`Malformed style at location ${index} in string '` + text.substring(0, index) + '[>>' +
- text.substring(index, index + 1) + '<<]' + text.substr(index + 1) +
- `'. Expecting '${expecting}'.`);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Update a style binding on an element with the provided value.
- *
- * If the style value is falsy then it will be removed from the element
- * (or assigned a different value depending if there are any styles placed
- * on the element with `styleMap` or any static styles that are
- * present from when the element was created with `styling`).
- *
- * Note that the styling element is updated as part of `stylingApply`.
- *
- * @param prop A valid CSS property.
- * @param value New value to write (`null` or an empty string to remove).
- * @param suffix Optional suffix. Used with scalar values to add unit such as `px`.
- *
- * Note that this will apply the provided style value to the host element if this function is called
- * within a host binding function.
- *
- * @codeGenApi
- */
- function ɵɵstyleProp(prop, value, suffix) {
- checkStylingProperty(prop, value, suffix, false);
- return ɵɵstyleProp;
- }
- /**
- * Update a class binding on an element with the provided value.
- *
- * This instruction is meant to handle the `[class.foo]="exp"` case and,
- * therefore, the class binding itself must already be allocated using
- * `styling` within the creation block.
- *
- * @param prop A valid CSS class (only one).
- * @param value A true/false value which will turn the class on or off.
- *
- * Note that this will apply the provided class value to the host element if this function
- * is called within a host binding function.
- *
- * @codeGenApi
- */
- function ɵɵclassProp(className, value) {
- checkStylingProperty(className, value, null, true);
- return ɵɵclassProp;
- }
- /**
- * Update style bindings using an object literal on an element.
- *
- * This instruction is meant to apply styling via the `[style]="exp"` template bindings.
- * When styles are applied to the element they will then be updated with respect to
- * any styles/classes set via `styleProp`. If any styles are set to falsy
- * then they will be removed from the element.
- *
- * Note that the styling instruction will not be applied until `stylingApply` is called.
- *
- * @param styles A key/value style map of the styles that will be applied to the given element.
- * Any missing styles (that have already been applied to the element beforehand) will be
- * removed (unset) from the element's styling.
- *
- * Note that this will apply the provided styleMap value to the host element if this function
- * is called within a host binding.
- *
- * @codeGenApi
- */
- function ɵɵstyleMap(styles) {
- checkStylingMap(styleKeyValueArraySet, styleStringParser, styles, false);
- }
- /**
- * Parse text as style and add values to KeyValueArray.
- *
- * This code is pulled out to a separate function so that it can be tree shaken away if it is not
- * needed. It is only referenced from `ɵɵstyleMap`.
- *
- * @param keyValueArray KeyValueArray to add parsed values to.
- * @param text text to parse.
- */
- function styleStringParser(keyValueArray, text) {
- for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i)) {
- styleKeyValueArraySet(keyValueArray, getLastParsedKey(text), getLastParsedValue(text));
- }
- }
- /**
- * Update class bindings using an object literal or class-string on an element.
- *
- * This instruction is meant to apply styling via the `[class]="exp"` template bindings.
- * When classes are applied to the element they will then be updated with
- * respect to any styles/classes set via `classProp`. If any
- * classes are set to falsy then they will be removed from the element.
- *
- * Note that the styling instruction will not be applied until `stylingApply` is called.
- * Note that this will the provided classMap value to the host element if this function is called
- * within a host binding.
- *
- * @param classes A key/value map or string of CSS classes that will be added to the
- * given element. Any missing classes (that have already been applied to the element
- * beforehand) will be removed (unset) from the element's list of CSS classes.
- *
- * @codeGenApi
- */
- function ɵɵclassMap(classes) {
- checkStylingMap(keyValueArraySet, classStringParser, classes, true);
- }
- /**
- * Parse text as class and add values to KeyValueArray.
- *
- * This code is pulled out to a separate function so that it can be tree shaken away if it is not
- * needed. It is only referenced from `ɵɵclassMap`.
- *
- * @param keyValueArray KeyValueArray to add parsed values to.
- * @param text text to parse.
- */
- function classStringParser(keyValueArray, text) {
- for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {
- keyValueArraySet(keyValueArray, getLastParsedKey(text), true);
- }
- }
- /**
- * Common code between `ɵɵclassProp` and `ɵɵstyleProp`.
- *
- * @param prop property name.
- * @param value binding value.
- * @param suffix suffix for the property (e.g. `em` or `px`)
- * @param isClassBased `true` if `class` change (`false` if `style`)
- */
- function checkStylingProperty(prop, value, suffix, isClassBased) {
- const lView = getLView();
- const tView = getTView();
- // Styling instructions use 2 slots per binding.
- // 1. one for the value / TStylingKey
- // 2. one for the intermittent-value / TStylingRange
- const bindingIndex = incrementBindingIndex(2);
- if (tView.firstUpdatePass) {
- stylingFirstUpdatePass(tView, prop, bindingIndex, isClassBased);
- }
- if (value !== NO_CHANGE && bindingUpdated(lView, bindingIndex, value)) {
- const tNode = tView.data[getSelectedIndex()];
- updateStyling(tView, tNode, lView, lView[RENDERER], prop, lView[bindingIndex + 1] = normalizeSuffix(value, suffix), isClassBased, bindingIndex);
- }
- }
- /**
- * Common code between `ɵɵclassMap` and `ɵɵstyleMap`.
- *
- * @param keyValueArraySet (See `keyValueArraySet` in "util/array_utils") Gets passed in as a
- * function so that `style` can be processed. This is done for tree shaking purposes.
- * @param stringParser Parser used to parse `value` if `string`. (Passed in as `style` and `class`
- * have different parsers.)
- * @param value bound value from application
- * @param isClassBased `true` if `class` change (`false` if `style`)
- */
- function checkStylingMap(keyValueArraySet, stringParser, value, isClassBased) {
- const tView = getTView();
- const bindingIndex = incrementBindingIndex(2);
- if (tView.firstUpdatePass) {
- stylingFirstUpdatePass(tView, null, bindingIndex, isClassBased);
- }
- const lView = getLView();
- if (value !== NO_CHANGE && bindingUpdated(lView, bindingIndex, value)) {
- // `getSelectedIndex()` should be here (rather than in instruction) so that it is guarded by the
- // if so as not to read unnecessarily.
- const tNode = tView.data[getSelectedIndex()];
- if (hasStylingInputShadow(tNode, isClassBased) && !isInHostBindings(tView, bindingIndex)) {
- if (ngDevMode) {
- // verify that if we are shadowing then `TData` is appropriately marked so that we skip
- // processing this binding in styling resolution.
- const tStylingKey = tView.data[bindingIndex];
- assertEqual(Array.isArray(tStylingKey) ? tStylingKey[1] : tStylingKey, false, 'Styling linked list shadow input should be marked as \'false\'');
- }
- // VE does not concatenate the static portion like we are doing here.
- // Instead VE just ignores the static completely if dynamic binding is present.
- // Because of locality we have already set the static portion because we don't know if there
- // is a dynamic portion until later. If we would ignore the static portion it would look like
- // the binding has removed it. This would confuse `[ngStyle]`/`[ngClass]` to do the wrong
- // thing as it would think that the static portion was removed. For this reason we
- // concatenate it so that `[ngStyle]`/`[ngClass]` can continue to work on changed.
- let staticPrefix = isClassBased ? tNode.classesWithoutHost : tNode.stylesWithoutHost;
- ngDevMode && isClassBased === false && staticPrefix !== null &&
- assertEqual(staticPrefix.endsWith(';'), true, 'Expecting static portion to end with \';\'');
- if (staticPrefix !== null) {
- // We want to make sure that falsy values of `value` become empty strings.
- value = concatStringsWithSpace(staticPrefix, value ? value : '');
- }
- // Given `<div [style] my-dir>` such that `my-dir` has `@Input('style')`.
- // This takes over the `[style]` binding. (Same for `[class]`)
- setDirectiveInputsWhichShadowsStyling(tView, tNode, lView, value, isClassBased);
- }
- else {
- updateStylingMap(tView, tNode, lView, lView[RENDERER], lView[bindingIndex + 1], lView[bindingIndex + 1] = toStylingKeyValueArray(keyValueArraySet, stringParser, value), isClassBased, bindingIndex);
- }
- }
- }
- /**
- * Determines when the binding is in `hostBindings` section
- *
- * @param tView Current `TView`
- * @param bindingIndex index of binding which we would like if it is in `hostBindings`
- */
- function isInHostBindings(tView, bindingIndex) {
- // All host bindings are placed after the expando section.
- return bindingIndex >= tView.expandoStartIndex;
- }
- /**
- * Collects the necessary information to insert the binding into a linked list of style bindings
- * using `insertTStylingBinding`.
- *
- * @param tView `TView` where the binding linked list will be stored.
- * @param tStylingKey Property/key of the binding.
- * @param bindingIndex Index of binding associated with the `prop`
- * @param isClassBased `true` if `class` change (`false` if `style`)
- */
- function stylingFirstUpdatePass(tView, tStylingKey, bindingIndex, isClassBased) {
- ngDevMode && assertFirstUpdatePass(tView);
- const tData = tView.data;
- if (tData[bindingIndex + 1] === null) {
- // The above check is necessary because we don't clear first update pass until first successful
- // (no exception) template execution. This prevents the styling instruction from double adding
- // itself to the list.
- // `getSelectedIndex()` should be here (rather than in instruction) so that it is guarded by the
- // if so as not to read unnecessarily.
- const tNode = tData[getSelectedIndex()];
- ngDevMode && assertDefined(tNode, 'TNode expected');
- const isHostBindings = isInHostBindings(tView, bindingIndex);
- if (hasStylingInputShadow(tNode, isClassBased) && tStylingKey === null && !isHostBindings) {
- // `tStylingKey === null` implies that we are either `[style]` or `[class]` binding.
- // If there is a directive which uses `@Input('style')` or `@Input('class')` than
- // we need to neutralize this binding since that directive is shadowing it.
- // We turn this into a noop by setting the key to `false`
- tStylingKey = false;
- }
- tStylingKey = wrapInStaticStylingKey(tData, tNode, tStylingKey, isClassBased);
- insertTStylingBinding(tData, tNode, tStylingKey, bindingIndex, isHostBindings, isClassBased);
- }
- }
- /**
- * Adds static styling information to the binding if applicable.
- *
- * The linked list of styles not only stores the list and keys, but also stores static styling
- * information on some of the keys. This function determines if the key should contain the styling
- * information and computes it.
- *
- * See `TStylingStatic` for more details.
- *
- * @param tData `TData` where the linked list is stored.
- * @param tNode `TNode` for which the styling is being computed.
- * @param stylingKey `TStylingKeyPrimitive` which may need to be wrapped into `TStylingKey`
- * @param isClassBased `true` if `class` (`false` if `style`)
- */
- function wrapInStaticStylingKey(tData, tNode, stylingKey, isClassBased) {
- const hostDirectiveDef = getCurrentDirectiveDef(tData);
- let residual = isClassBased ? tNode.residualClasses : tNode.residualStyles;
- if (hostDirectiveDef === null) {
- // We are in template node.
- // If template node already had styling instruction then it has already collected the static
- // styling and there is no need to collect them again. We know that we are the first styling
- // instruction because the `TNode.*Bindings` points to 0 (nothing has been inserted yet).
- const isFirstStylingInstructionInTemplate = (isClassBased ? tNode.classBindings : tNode.styleBindings) === 0;
- if (isFirstStylingInstructionInTemplate) {
- // It would be nice to be able to get the statics from `mergeAttrs`, however, at this point
- // they are already merged and it would not be possible to figure which property belongs where
- // in the priority.
- stylingKey = collectStylingFromDirectives(null, tData, tNode, stylingKey, isClassBased);
- stylingKey = collectStylingFromTAttrs(stylingKey, tNode.attrs, isClassBased);
- // We know that if we have styling binding in template we can't have residual.
- residual = null;
- }
- }
- else {
- // We are in host binding node and there was no binding instruction in template node.
- // This means that we need to compute the residual.
- const directiveStylingLast = tNode.directiveStylingLast;
- const isFirstStylingInstructionInHostBinding = directiveStylingLast === -1 || tData[directiveStylingLast] !== hostDirectiveDef;
- if (isFirstStylingInstructionInHostBinding) {
- stylingKey =
- collectStylingFromDirectives(hostDirectiveDef, tData, tNode, stylingKey, isClassBased);
- if (residual === null) {
- // - If `null` than either:
- // - Template styling instruction already ran and it has consumed the static
- // styling into its `TStylingKey` and so there is no need to update residual. Instead
- // we need to update the `TStylingKey` associated with the first template node
- // instruction. OR
- // - Some other styling instruction ran and determined that there are no residuals
- let templateStylingKey = getTemplateHeadTStylingKey(tData, tNode, isClassBased);
- if (templateStylingKey !== undefined && Array.isArray(templateStylingKey)) {
- // Only recompute if `templateStylingKey` had static values. (If no static value found
- // then there is nothing to do since this operation can only produce less static keys, not
- // more.)
- templateStylingKey = collectStylingFromDirectives(null, tData, tNode, templateStylingKey[1] /* unwrap previous statics */, isClassBased);
- templateStylingKey =
- collectStylingFromTAttrs(templateStylingKey, tNode.attrs, isClassBased);
- setTemplateHeadTStylingKey(tData, tNode, isClassBased, templateStylingKey);
- }
- }
- else {
- // We only need to recompute residual if it is not `null`.
- // - If existing residual (implies there was no template styling). This means that some of
- // the statics may have moved from the residual to the `stylingKey` and so we have to
- // recompute.
- // - If `undefined` this is the first time we are running.
- residual = collectResidual(tData, tNode, isClassBased);
- }
- }
- }
- if (residual !== undefined) {
- isClassBased ? (tNode.residualClasses = residual) : (tNode.residualStyles = residual);
- }
- return stylingKey;
- }
- /**
- * Retrieve the `TStylingKey` for the template styling instruction.
- *
- * This is needed since `hostBinding` styling instructions are inserted after the template
- * instruction. While the template instruction needs to update the residual in `TNode` the
- * `hostBinding` instructions need to update the `TStylingKey` of the template instruction because
- * the template instruction is downstream from the `hostBindings` instructions.
- *
- * @param tData `TData` where the linked list is stored.
- * @param tNode `TNode` for which the styling is being computed.
- * @param isClassBased `true` if `class` (`false` if `style`)
- * @return `TStylingKey` if found or `undefined` if not found.
- */
- function getTemplateHeadTStylingKey(tData, tNode, isClassBased) {
- const bindings = isClassBased ? tNode.classBindings : tNode.styleBindings;
- if (getTStylingRangeNext(bindings) === 0) {
- // There does not seem to be a styling instruction in the `template`.
- return undefined;
- }
- return tData[getTStylingRangePrev(bindings)];
- }
- /**
- * Update the `TStylingKey` of the first template instruction in `TNode`.
- *
- * Logically `hostBindings` styling instructions are of lower priority than that of the template.
- * However, they execute after the template styling instructions. This means that they get inserted
- * in front of the template styling instructions.
- *
- * If we have a template styling instruction and a new `hostBindings` styling instruction is
- * executed it means that it may need to steal static fields from the template instruction. This
- * method allows us to update the first template instruction `TStylingKey` with a new value.
- *
- * Assume:
- * ```
- * <div my-dir style="color: red" [style.color]="tmplExp"></div>
- *
- * @Directive({
- * host: {
- * 'style': 'width: 100px',
- * '[style.color]': 'dirExp',
- * }
- * })
- * class MyDir {}
- * ```
- *
- * when `[style.color]="tmplExp"` executes it creates this data structure.
- * ```
- * ['', 'color', 'color', 'red', 'width', '100px'],
- * ```
- *
- * The reason for this is that the template instruction does not know if there are styling
- * instructions and must assume that there are none and must collect all of the static styling.
- * (both
- * `color' and 'width`)
- *
- * When `'[style.color]': 'dirExp',` executes we need to insert a new data into the linked list.
- * ```
- * ['', 'color', 'width', '100px'], // newly inserted
- * ['', 'color', 'color', 'red', 'width', '100px'], // this is wrong
- * ```
- *
- * Notice that the template statics is now wrong as it incorrectly contains `width` so we need to
- * update it like so:
- * ```
- * ['', 'color', 'width', '100px'],
- * ['', 'color', 'color', 'red'], // UPDATE
- * ```
- *
- * @param tData `TData` where the linked list is stored.
- * @param tNode `TNode` for which the styling is being computed.
- * @param isClassBased `true` if `class` (`false` if `style`)
- * @param tStylingKey New `TStylingKey` which is replacing the old one.
- */
- function setTemplateHeadTStylingKey(tData, tNode, isClassBased, tStylingKey) {
- const bindings = isClassBased ? tNode.classBindings : tNode.styleBindings;
- ngDevMode &&
- assertNotEqual(getTStylingRangeNext(bindings), 0, 'Expecting to have at least one template styling binding.');
- tData[getTStylingRangePrev(bindings)] = tStylingKey;
- }
- /**
- * Collect all static values after the current `TNode.directiveStylingLast` index.
- *
- * Collect the remaining styling information which has not yet been collected by an existing
- * styling instruction.
- *
- * @param tData `TData` where the `DirectiveDefs` are stored.
- * @param tNode `TNode` which contains the directive range.
- * @param isClassBased `true` if `class` (`false` if `style`)
- */
- function collectResidual(tData, tNode, isClassBased) {
- let residual = undefined;
- const directiveEnd = tNode.directiveEnd;
- ngDevMode &&
- assertNotEqual(tNode.directiveStylingLast, -1, 'By the time this function gets called at least one hostBindings-node styling instruction must have executed.');
- // We add `1 + tNode.directiveStart` because we need to skip the current directive (as we are
- // collecting things after the last `hostBindings` directive which had a styling instruction.)
- for (let i = 1 + tNode.directiveStylingLast; i < directiveEnd; i++) {
- const attrs = tData[i].hostAttrs;
- residual = collectStylingFromTAttrs(residual, attrs, isClassBased);
- }
- return collectStylingFromTAttrs(residual, tNode.attrs, isClassBased);
- }
- /**
- * Collect the static styling information with lower priority than `hostDirectiveDef`.
- *
- * (This is opposite of residual styling.)
- *
- * @param hostDirectiveDef `DirectiveDef` for which we want to collect lower priority static
- * styling. (Or `null` if template styling)
- * @param tData `TData` where the linked list is stored.
- * @param tNode `TNode` for which the styling is being computed.
- * @param stylingKey Existing `TStylingKey` to update or wrap.
- * @param isClassBased `true` if `class` (`false` if `style`)
- */
- function collectStylingFromDirectives(hostDirectiveDef, tData, tNode, stylingKey, isClassBased) {
- // We need to loop because there can be directives which have `hostAttrs` but don't have
- // `hostBindings` so this loop catches up to the current directive..
- let currentDirective = null;
- const directiveEnd = tNode.directiveEnd;
- let directiveStylingLast = tNode.directiveStylingLast;
- if (directiveStylingLast === -1) {
- directiveStylingLast = tNode.directiveStart;
- }
- else {
- directiveStylingLast++;
- }
- while (directiveStylingLast < directiveEnd) {
- currentDirective = tData[directiveStylingLast];
- ngDevMode && assertDefined(currentDirective, 'expected to be defined');
- stylingKey = collectStylingFromTAttrs(stylingKey, currentDirective.hostAttrs, isClassBased);
- if (currentDirective === hostDirectiveDef)
- break;
- directiveStylingLast++;
- }
- if (hostDirectiveDef !== null) {
- // we only advance the styling cursor if we are collecting data from host bindings.
- // Template executes before host bindings and so if we would update the index,
- // host bindings would not get their statics.
- tNode.directiveStylingLast = directiveStylingLast;
- }
- return stylingKey;
- }
- /**
- * Convert `TAttrs` into `TStylingStatic`.
- *
- * @param stylingKey existing `TStylingKey` to update or wrap.
- * @param attrs `TAttributes` to process.
- * @param isClassBased `true` if `class` (`false` if `style`)
- */
- function collectStylingFromTAttrs(stylingKey, attrs, isClassBased) {
- const desiredMarker = isClassBased ? 1 /* Classes */ : 2 /* Styles */;
- let currentMarker = -1 /* ImplicitAttributes */;
- if (attrs !== null) {
- for (let i = 0; i < attrs.length; i++) {
- const item = attrs[i];
- if (typeof item === 'number') {
- currentMarker = item;
- }
- else {
- if (currentMarker === desiredMarker) {
- if (!Array.isArray(stylingKey)) {
- stylingKey = stylingKey === undefined ? [] : ['', stylingKey];
- }
- keyValueArraySet(stylingKey, item, isClassBased ? true : attrs[++i]);
- }
- }
- }
- }
- return stylingKey === undefined ? null : stylingKey;
- }
- /**
- * Convert user input to `KeyValueArray`.
- *
- * This function takes user input which could be `string`, Object literal, or iterable and converts
- * it into a consistent representation. The output of this is `KeyValueArray` (which is an array
- * where
- * even indexes contain keys and odd indexes contain values for those keys).
- *
- * The advantage of converting to `KeyValueArray` is that we can perform diff in an input
- * independent
- * way.
- * (ie we can compare `foo bar` to `['bar', 'baz'] and determine a set of changes which need to be
- * applied)
- *
- * The fact that `KeyValueArray` is sorted is very important because it allows us to compute the
- * difference in linear fashion without the need to allocate any additional data.
- *
- * For example if we kept this as a `Map` we would have to iterate over previous `Map` to determine
- * which values need to be deleted, over the new `Map` to determine additions, and we would have to
- * keep additional `Map` to keep track of duplicates or items which have not yet been visited.
- *
- * @param keyValueArraySet (See `keyValueArraySet` in "util/array_utils") Gets passed in as a
- * function so that `style` can be processed. This is done
- * for tree shaking purposes.
- * @param stringParser The parser is passed in so that it will be tree shakable. See
- * `styleStringParser` and `classStringParser`
- * @param value The value to parse/convert to `KeyValueArray`
- */
- function toStylingKeyValueArray(keyValueArraySet, stringParser, value) {
- if (value == null /*|| value === undefined */ || value === '')
- return EMPTY_ARRAY$3;
- const styleKeyValueArray = [];
- const unwrappedValue = unwrapSafeValue(value);
- if (Array.isArray(unwrappedValue)) {
- for (let i = 0; i < unwrappedValue.length; i++) {
- keyValueArraySet(styleKeyValueArray, unwrappedValue[i], true);
- }
- }
- else if (typeof unwrappedValue === 'object') {
- for (const key in unwrappedValue) {
- if (unwrappedValue.hasOwnProperty(key)) {
- keyValueArraySet(styleKeyValueArray, key, unwrappedValue[key]);
- }
- }
- }
- else if (typeof unwrappedValue === 'string') {
- stringParser(styleKeyValueArray, unwrappedValue);
- }
- else {
- ngDevMode &&
- throwError('Unsupported styling type ' + typeof unwrappedValue + ': ' + unwrappedValue);
- }
- return styleKeyValueArray;
- }
- /**
- * Set a `value` for a `key`.
- *
- * See: `keyValueArraySet` for details
- *
- * @param keyValueArray KeyValueArray to add to.
- * @param key Style key to add.
- * @param value The value to set.
- */
- function styleKeyValueArraySet(keyValueArray, key, value) {
- keyValueArraySet(keyValueArray, key, unwrapSafeValue(value));
- }
- /**
- * Update map based styling.
- *
- * Map based styling could be anything which contains more than one binding. For example `string`,
- * or object literal. Dealing with all of these types would complicate the logic so
- * instead this function expects that the complex input is first converted into normalized
- * `KeyValueArray`. The advantage of normalization is that we get the values sorted, which makes it
- * very cheap to compute deltas between the previous and current value.
- *
- * @param tView Associated `TView.data` contains the linked list of binding priorities.
- * @param tNode `TNode` where the binding is located.
- * @param lView `LView` contains the values associated with other styling binding at this `TNode`.
- * @param renderer Renderer to use if any updates.
- * @param oldKeyValueArray Previous value represented as `KeyValueArray`
- * @param newKeyValueArray Current value represented as `KeyValueArray`
- * @param isClassBased `true` if `class` (`false` if `style`)
- * @param bindingIndex Binding index of the binding.
- */
- function updateStylingMap(tView, tNode, lView, renderer, oldKeyValueArray, newKeyValueArray, isClassBased, bindingIndex) {
- if (oldKeyValueArray === NO_CHANGE) {
- // On first execution the oldKeyValueArray is NO_CHANGE => treat it as empty KeyValueArray.
- oldKeyValueArray = EMPTY_ARRAY$3;
- }
- let oldIndex = 0;
- let newIndex = 0;
- let oldKey = 0 < oldKeyValueArray.length ? oldKeyValueArray[0] : null;
- let newKey = 0 < newKeyValueArray.length ? newKeyValueArray[0] : null;
- while (oldKey !== null || newKey !== null) {
- ngDevMode && assertLessThan(oldIndex, 999, 'Are we stuck in infinite loop?');
- ngDevMode && assertLessThan(newIndex, 999, 'Are we stuck in infinite loop?');
- const oldValue = oldIndex < oldKeyValueArray.length ? oldKeyValueArray[oldIndex + 1] : undefined;
- const newValue = newIndex < newKeyValueArray.length ? newKeyValueArray[newIndex + 1] : undefined;
- let setKey = null;
- let setValue = undefined;
- if (oldKey === newKey) {
- // UPDATE: Keys are equal => new value is overwriting old value.
- oldIndex += 2;
- newIndex += 2;
- if (oldValue !== newValue) {
- setKey = newKey;
- setValue = newValue;
- }
- }
- else if (newKey === null || oldKey !== null && oldKey < newKey) {
- // DELETE: oldKey key is missing or we did not find the oldKey in the newValue
- // (because the keyValueArray is sorted and `newKey` is found later alphabetically).
- // `"background" < "color"` so we need to delete `"background"` because it is not found in the
- // new array.
- oldIndex += 2;
- setKey = oldKey;
- }
- else {
- // CREATE: newKey's is earlier alphabetically than oldKey's (or no oldKey) => we have new key.
- // `"color" > "background"` so we need to add `color` because it is in new array but not in
- // old array.
- ngDevMode && assertDefined(newKey, 'Expecting to have a valid key');
- newIndex += 2;
- setKey = newKey;
- setValue = newValue;
- }
- if (setKey !== null) {
- updateStyling(tView, tNode, lView, renderer, setKey, setValue, isClassBased, bindingIndex);
- }
- oldKey = oldIndex < oldKeyValueArray.length ? oldKeyValueArray[oldIndex] : null;
- newKey = newIndex < newKeyValueArray.length ? newKeyValueArray[newIndex] : null;
- }
- }
- /**
- * Update a simple (property name) styling.
- *
- * This function takes `prop` and updates the DOM to that value. The function takes the binding
- * value as well as binding priority into consideration to determine which value should be written
- * to DOM. (For example it may be determined that there is a higher priority overwrite which blocks
- * the DOM write, or if the value goes to `undefined` a lower priority overwrite may be consulted.)
- *
- * @param tView Associated `TView.data` contains the linked list of binding priorities.
- * @param tNode `TNode` where the binding is located.
- * @param lView `LView` contains the values associated with other styling binding at this `TNode`.
- * @param renderer Renderer to use if any updates.
- * @param prop Either style property name or a class name.
- * @param value Either style value for `prop` or `true`/`false` if `prop` is class.
- * @param isClassBased `true` if `class` (`false` if `style`)
- * @param bindingIndex Binding index of the binding.
- */
- function updateStyling(tView, tNode, lView, renderer, prop, value, isClassBased, bindingIndex) {
- if (!(tNode.type & 3 /* AnyRNode */)) {
- // It is possible to have styling on non-elements (such as ng-container).
- // This is rare, but it does happen. In such a case, just ignore the binding.
- return;
- }
- const tData = tView.data;
- const tRange = tData[bindingIndex + 1];
- const higherPriorityValue = getTStylingRangeNextDuplicate(tRange) ?
- findStylingValue(tData, tNode, lView, prop, getTStylingRangeNext(tRange), isClassBased) :
- undefined;
- if (!isStylingValuePresent(higherPriorityValue)) {
- // We don't have a next duplicate, or we did not find a duplicate value.
- if (!isStylingValuePresent(value)) {
- // We should delete current value or restore to lower priority value.
- if (getTStylingRangePrevDuplicate(tRange)) {
- // We have a possible prev duplicate, let's retrieve it.
- value = findStylingValue(tData, null, lView, prop, bindingIndex, isClassBased);
- }
- }
- const rNode = getNativeByIndex(getSelectedIndex(), lView);
- applyStyling(renderer, isClassBased, rNode, prop, value);
- }
- }
- /**
- * Search for styling value with higher priority which is overwriting current value, or a
- * value of lower priority to which we should fall back if the value is `undefined`.
- *
- * When value is being applied at a location, related values need to be consulted.
- * - If there is a higher priority binding, we should be using that one instead.
- * For example `<div [style]="{color:exp1}" [style.color]="exp2">` change to `exp1`
- * requires that we check `exp2` to see if it is set to value other than `undefined`.
- * - If there is a lower priority binding and we are changing to `undefined`
- * For example `<div [style]="{color:exp1}" [style.color]="exp2">` change to `exp2` to
- * `undefined` requires that we check `exp1` (and static values) and use that as new value.
- *
- * NOTE: The styling stores two values.
- * 1. The raw value which came from the application is stored at `index + 0` location. (This value
- * is used for dirty checking).
- * 2. The normalized value is stored at `index + 1`.
- *
- * @param tData `TData` used for traversing the priority.
- * @param tNode `TNode` to use for resolving static styling. Also controls search direction.
- * - `TNode` search next and quit as soon as `isStylingValuePresent(value)` is true.
- * If no value found consult `tNode.residualStyle`/`tNode.residualClass` for default value.
- * - `null` search prev and go all the way to end. Return last value where
- * `isStylingValuePresent(value)` is true.
- * @param lView `LView` used for retrieving the actual values.
- * @param prop Property which we are interested in.
- * @param index Starting index in the linked list of styling bindings where the search should start.
- * @param isClassBased `true` if `class` (`false` if `style`)
- */
- function findStylingValue(tData, tNode, lView, prop, index, isClassBased) {
- // `TNode` to use for resolving static styling. Also controls search direction.
- // - `TNode` search next and quit as soon as `isStylingValuePresent(value)` is true.
- // If no value found consult `tNode.residualStyle`/`tNode.residualClass` for default value.
- // - `null` search prev and go all the way to end. Return last value where
- // `isStylingValuePresent(value)` is true.
- const isPrevDirection = tNode === null;
- let value = undefined;
- while (index > 0) {
- const rawKey = tData[index];
- const containsStatics = Array.isArray(rawKey);
- // Unwrap the key if we contain static values.
- const key = containsStatics ? rawKey[1] : rawKey;
- const isStylingMap = key === null;
- let valueAtLViewIndex = lView[index + 1];
- if (valueAtLViewIndex === NO_CHANGE) {
- // In firstUpdatePass the styling instructions create a linked list of styling.
- // On subsequent passes it is possible for a styling instruction to try to read a binding
- // which
- // has not yet executed. In that case we will find `NO_CHANGE` and we should assume that
- // we have `undefined` (or empty array in case of styling-map instruction) instead. This
- // allows the resolution to apply the value (which may later be overwritten when the
- // binding actually executes.)
- valueAtLViewIndex = isStylingMap ? EMPTY_ARRAY$3 : undefined;
- }
- let currentValue = isStylingMap ? keyValueArrayGet(valueAtLViewIndex, prop) :
- key === prop ? valueAtLViewIndex : undefined;
- if (containsStatics && !isStylingValuePresent(currentValue)) {
- currentValue = keyValueArrayGet(rawKey, prop);
- }
- if (isStylingValuePresent(currentValue)) {
- value = currentValue;
- if (isPrevDirection) {
- return value;
- }
- }
- const tRange = tData[index + 1];
- index = isPrevDirection ? getTStylingRangePrev(tRange) : getTStylingRangeNext(tRange);
- }
- if (tNode !== null) {
- // in case where we are going in next direction AND we did not find anything, we need to
- // consult residual styling
- let residual = isClassBased ? tNode.residualClasses : tNode.residualStyles;
- if (residual != null /** OR residual !=== undefined */) {
- value = keyValueArrayGet(residual, prop);
- }
- }
- return value;
- }
- /**
- * Determines if the binding value should be used (or if the value is 'undefined' and hence priority
- * resolution should be used.)
- *
- * @param value Binding style value.
- */
- function isStylingValuePresent(value) {
- // Currently only `undefined` value is considered non-binding. That is `undefined` says I don't
- // have an opinion as to what this binding should be and you should consult other bindings by
- // priority to determine the valid value.
- // This is extracted into a single function so that we have a single place to control this.
- return value !== undefined;
- }
- /**
- * Normalizes and/or adds a suffix to the value.
- *
- * If value is `null`/`undefined` no suffix is added
- * @param value
- * @param suffix
- */
- function normalizeSuffix(value, suffix) {
- if (value == null /** || value === undefined */) {
- // do nothing
- }
- else if (typeof suffix === 'string') {
- value = value + suffix;
- }
- else if (typeof value === 'object') {
- value = stringify(unwrapSafeValue(value));
- }
- return value;
- }
- /**
- * Tests if the `TNode` has input shadow.
- *
- * An input shadow is when a directive steals (shadows) the input by using `@Input('style')` or
- * `@Input('class')` as input.
- *
- * @param tNode `TNode` which we would like to see if it has shadow.
- * @param isClassBased `true` if `class` (`false` if `style`)
- */
- function hasStylingInputShadow(tNode, isClassBased) {
- return (tNode.flags & (isClassBased ? 16 /* hasClassInput */ : 32 /* hasStyleInput */)) !== 0;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Create static text node
- *
- * @param index Index of the node in the data array
- * @param value Static string value to write.
- *
- * @codeGenApi
- */
- function ɵɵtext(index, value = '') {
- const lView = getLView();
- const tView = getTView();
- const adjustedIndex = index + HEADER_OFFSET;
- ngDevMode &&
- assertEqual(getBindingIndex(), tView.bindingStartIndex, 'text nodes should be created before any bindings');
- ngDevMode && assertIndexInRange(lView, adjustedIndex);
- const tNode = tView.firstCreatePass ?
- getOrCreateTNode(tView, adjustedIndex, 1 /* Text */, value, null) :
- tView.data[adjustedIndex];
- const textNative = lView[adjustedIndex] = createTextNode(lView[RENDERER], value);
- appendChild(tView, lView, textNative, tNode);
- // Text nodes are self closing.
- setCurrentTNode(tNode, false);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- *
- * Update text content with a lone bound value
- *
- * Used when a text node has 1 interpolated value in it, an no additional text
- * surrounds that interpolated value:
- *
- * ```html
- * <div>{{v0}}</div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵtextInterpolate(v0);
- * ```
- * @returns itself, so that it may be chained.
- * @see textInterpolateV
- * @codeGenApi
- */
- function ɵɵtextInterpolate(v0) {
- ɵɵtextInterpolate1('', v0, '');
- return ɵɵtextInterpolate;
- }
- /**
- *
- * Update text content with single bound value surrounded by other text.
- *
- * Used when a text node has 1 interpolated value in it:
- *
- * ```html
- * <div>prefix{{v0}}suffix</div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵtextInterpolate1('prefix', v0, 'suffix');
- * ```
- * @returns itself, so that it may be chained.
- * @see textInterpolateV
- * @codeGenApi
- */
- function ɵɵtextInterpolate1(prefix, v0, suffix) {
- const lView = getLView();
- const interpolated = interpolation1(lView, prefix, v0, suffix);
- if (interpolated !== NO_CHANGE) {
- textBindingInternal(lView, getSelectedIndex(), interpolated);
- }
- return ɵɵtextInterpolate1;
- }
- /**
- *
- * Update text content with 2 bound values surrounded by other text.
- *
- * Used when a text node has 2 interpolated values in it:
- *
- * ```html
- * <div>prefix{{v0}}-{{v1}}suffix</div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵtextInterpolate2('prefix', v0, '-', v1, 'suffix');
- * ```
- * @returns itself, so that it may be chained.
- * @see textInterpolateV
- * @codeGenApi
- */
- function ɵɵtextInterpolate2(prefix, v0, i0, v1, suffix) {
- const lView = getLView();
- const interpolated = interpolation2(lView, prefix, v0, i0, v1, suffix);
- if (interpolated !== NO_CHANGE) {
- textBindingInternal(lView, getSelectedIndex(), interpolated);
- }
- return ɵɵtextInterpolate2;
- }
- /**
- *
- * Update text content with 3 bound values surrounded by other text.
- *
- * Used when a text node has 3 interpolated values in it:
- *
- * ```html
- * <div>prefix{{v0}}-{{v1}}-{{v2}}suffix</div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵtextInterpolate3(
- * 'prefix', v0, '-', v1, '-', v2, 'suffix');
- * ```
- * @returns itself, so that it may be chained.
- * @see textInterpolateV
- * @codeGenApi
- */
- function ɵɵtextInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {
- const lView = getLView();
- const interpolated = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
- if (interpolated !== NO_CHANGE) {
- textBindingInternal(lView, getSelectedIndex(), interpolated);
- }
- return ɵɵtextInterpolate3;
- }
- /**
- *
- * Update text content with 4 bound values surrounded by other text.
- *
- * Used when a text node has 4 interpolated values in it:
- *
- * ```html
- * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix</div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵtextInterpolate4(
- * 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');
- * ```
- * @returns itself, so that it may be chained.
- * @see ɵɵtextInterpolateV
- * @codeGenApi
- */
- function ɵɵtextInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
- const lView = getLView();
- const interpolated = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
- if (interpolated !== NO_CHANGE) {
- textBindingInternal(lView, getSelectedIndex(), interpolated);
- }
- return ɵɵtextInterpolate4;
- }
- /**
- *
- * Update text content with 5 bound values surrounded by other text.
- *
- * Used when a text node has 5 interpolated values in it:
- *
- * ```html
- * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix</div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵtextInterpolate5(
- * 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');
- * ```
- * @returns itself, so that it may be chained.
- * @see textInterpolateV
- * @codeGenApi
- */
- function ɵɵtextInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
- const lView = getLView();
- const interpolated = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
- if (interpolated !== NO_CHANGE) {
- textBindingInternal(lView, getSelectedIndex(), interpolated);
- }
- return ɵɵtextInterpolate5;
- }
- /**
- *
- * Update text content with 6 bound values surrounded by other text.
- *
- * Used when a text node has 6 interpolated values in it:
- *
- * ```html
- * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix</div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵtextInterpolate6(
- * 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');
- * ```
- *
- * @param i4 Static value used for concatenation only.
- * @param v5 Value checked for change. @returns itself, so that it may be chained.
- * @see textInterpolateV
- * @codeGenApi
- */
- function ɵɵtextInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
- const lView = getLView();
- const interpolated = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
- if (interpolated !== NO_CHANGE) {
- textBindingInternal(lView, getSelectedIndex(), interpolated);
- }
- return ɵɵtextInterpolate6;
- }
- /**
- *
- * Update text content with 7 bound values surrounded by other text.
- *
- * Used when a text node has 7 interpolated values in it:
- *
- * ```html
- * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix</div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵtextInterpolate7(
- * 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');
- * ```
- * @returns itself, so that it may be chained.
- * @see textInterpolateV
- * @codeGenApi
- */
- function ɵɵtextInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
- const lView = getLView();
- const interpolated = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
- if (interpolated !== NO_CHANGE) {
- textBindingInternal(lView, getSelectedIndex(), interpolated);
- }
- return ɵɵtextInterpolate7;
- }
- /**
- *
- * Update text content with 8 bound values surrounded by other text.
- *
- * Used when a text node has 8 interpolated values in it:
- *
- * ```html
- * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix</div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵtextInterpolate8(
- * 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');
- * ```
- * @returns itself, so that it may be chained.
- * @see textInterpolateV
- * @codeGenApi
- */
- function ɵɵtextInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
- const lView = getLView();
- const interpolated = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
- if (interpolated !== NO_CHANGE) {
- textBindingInternal(lView, getSelectedIndex(), interpolated);
- }
- return ɵɵtextInterpolate8;
- }
- /**
- * Update text content with 9 or more bound values other surrounded by text.
- *
- * Used when the number of interpolated values exceeds 8.
- *
- * ```html
- * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix</div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵtextInterpolateV(
- * ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,
- * 'suffix']);
- * ```
- *.
- * @param values The collection of values and the strings in between those values, beginning with
- * a string prefix and ending with a string suffix.
- * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)
- *
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵtextInterpolateV(values) {
- const lView = getLView();
- const interpolated = interpolationV(lView, values);
- if (interpolated !== NO_CHANGE) {
- textBindingInternal(lView, getSelectedIndex(), interpolated);
- }
- return ɵɵtextInterpolateV;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- *
- * Update an interpolated class on an element with single bound value surrounded by text.
- *
- * Used when the value passed to a property has 1 interpolated value in it:
- *
- * ```html
- * <div class="prefix{{v0}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵclassMapInterpolate1('prefix', v0, 'suffix');
- * ```
- *
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @codeGenApi
- */
- function ɵɵclassMapInterpolate1(prefix, v0, suffix) {
- const lView = getLView();
- const interpolatedValue = interpolation1(lView, prefix, v0, suffix);
- checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
- }
- /**
- *
- * Update an interpolated class on an element with 2 bound values surrounded by text.
- *
- * Used when the value passed to a property has 2 interpolated values in it:
- *
- * ```html
- * <div class="prefix{{v0}}-{{v1}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵclassMapInterpolate2('prefix', v0, '-', v1, 'suffix');
- * ```
- *
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @codeGenApi
- */
- function ɵɵclassMapInterpolate2(prefix, v0, i0, v1, suffix) {
- const lView = getLView();
- const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
- checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
- }
- /**
- *
- * Update an interpolated class on an element with 3 bound values surrounded by text.
- *
- * Used when the value passed to a property has 3 interpolated values in it:
- *
- * ```html
- * <div class="prefix{{v0}}-{{v1}}-{{v2}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵclassMapInterpolate3(
- * 'prefix', v0, '-', v1, '-', v2, 'suffix');
- * ```
- *
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @codeGenApi
- */
- function ɵɵclassMapInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {
- const lView = getLView();
- const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
- checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
- }
- /**
- *
- * Update an interpolated class on an element with 4 bound values surrounded by text.
- *
- * Used when the value passed to a property has 4 interpolated values in it:
- *
- * ```html
- * <div class="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵclassMapInterpolate4(
- * 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');
- * ```
- *
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @codeGenApi
- */
- function ɵɵclassMapInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
- const lView = getLView();
- const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
- checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
- }
- /**
- *
- * Update an interpolated class on an element with 5 bound values surrounded by text.
- *
- * Used when the value passed to a property has 5 interpolated values in it:
- *
- * ```html
- * <div class="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵclassMapInterpolate5(
- * 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');
- * ```
- *
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @codeGenApi
- */
- function ɵɵclassMapInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
- const lView = getLView();
- const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
- checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
- }
- /**
- *
- * Update an interpolated class on an element with 6 bound values surrounded by text.
- *
- * Used when the value passed to a property has 6 interpolated values in it:
- *
- * ```html
- * <div class="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵclassMapInterpolate6(
- * 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');
- * ```
- *
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param i4 Static value used for concatenation only.
- * @param v5 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @codeGenApi
- */
- function ɵɵclassMapInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
- const lView = getLView();
- const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
- checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
- }
- /**
- *
- * Update an interpolated class on an element with 7 bound values surrounded by text.
- *
- * Used when the value passed to a property has 7 interpolated values in it:
- *
- * ```html
- * <div class="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵclassMapInterpolate7(
- * 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');
- * ```
- *
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param i4 Static value used for concatenation only.
- * @param v5 Value checked for change.
- * @param i5 Static value used for concatenation only.
- * @param v6 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @codeGenApi
- */
- function ɵɵclassMapInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
- const lView = getLView();
- const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
- checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
- }
- /**
- *
- * Update an interpolated class on an element with 8 bound values surrounded by text.
- *
- * Used when the value passed to a property has 8 interpolated values in it:
- *
- * ```html
- * <div class="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵclassMapInterpolate8(
- * 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');
- * ```
- *
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param i4 Static value used for concatenation only.
- * @param v5 Value checked for change.
- * @param i5 Static value used for concatenation only.
- * @param v6 Value checked for change.
- * @param i6 Static value used for concatenation only.
- * @param v7 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @codeGenApi
- */
- function ɵɵclassMapInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
- const lView = getLView();
- const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
- checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
- }
- /**
- * Update an interpolated class on an element with 9 or more bound values surrounded by text.
- *
- * Used when the number of interpolated values exceeds 8.
- *
- * ```html
- * <div
- * class="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵclassMapInterpolateV(
- * ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,
- * 'suffix']);
- * ```
- *.
- * @param values The collection of values and the strings in-between those values, beginning with
- * a string prefix and ending with a string suffix.
- * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)
- * @codeGenApi
- */
- function ɵɵclassMapInterpolateV(values) {
- const lView = getLView();
- const interpolatedValue = interpolationV(lView, values);
- checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- *
- * Update an interpolated style on an element with single bound value surrounded by text.
- *
- * Used when the value passed to a property has 1 interpolated value in it:
- *
- * ```html
- * <div style="key: {{v0}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstyleMapInterpolate1('key: ', v0, 'suffix');
- * ```
- *
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @codeGenApi
- */
- function ɵɵstyleMapInterpolate1(prefix, v0, suffix) {
- const lView = getLView();
- const interpolatedValue = interpolation1(lView, prefix, v0, suffix);
- ɵɵstyleMap(interpolatedValue);
- }
- /**
- *
- * Update an interpolated style on an element with 2 bound values surrounded by text.
- *
- * Used when the value passed to a property has 2 interpolated values in it:
- *
- * ```html
- * <div style="key: {{v0}}; key1: {{v1}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstyleMapInterpolate2('key: ', v0, '; key1: ', v1, 'suffix');
- * ```
- *
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @codeGenApi
- */
- function ɵɵstyleMapInterpolate2(prefix, v0, i0, v1, suffix) {
- const lView = getLView();
- const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
- ɵɵstyleMap(interpolatedValue);
- }
- /**
- *
- * Update an interpolated style on an element with 3 bound values surrounded by text.
- *
- * Used when the value passed to a property has 3 interpolated values in it:
- *
- * ```html
- * <div style="key: {{v0}}; key2: {{v1}}; key2: {{v2}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstyleMapInterpolate3(
- * 'key: ', v0, '; key1: ', v1, '; key2: ', v2, 'suffix');
- * ```
- *
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @codeGenApi
- */
- function ɵɵstyleMapInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {
- const lView = getLView();
- const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
- ɵɵstyleMap(interpolatedValue);
- }
- /**
- *
- * Update an interpolated style on an element with 4 bound values surrounded by text.
- *
- * Used when the value passed to a property has 4 interpolated values in it:
- *
- * ```html
- * <div style="key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstyleMapInterpolate4(
- * 'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, 'suffix');
- * ```
- *
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @codeGenApi
- */
- function ɵɵstyleMapInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
- const lView = getLView();
- const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
- ɵɵstyleMap(interpolatedValue);
- }
- /**
- *
- * Update an interpolated style on an element with 5 bound values surrounded by text.
- *
- * Used when the value passed to a property has 5 interpolated values in it:
- *
- * ```html
- * <div style="key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstyleMapInterpolate5(
- * 'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, 'suffix');
- * ```
- *
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @codeGenApi
- */
- function ɵɵstyleMapInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
- const lView = getLView();
- const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
- ɵɵstyleMap(interpolatedValue);
- }
- /**
- *
- * Update an interpolated style on an element with 6 bound values surrounded by text.
- *
- * Used when the value passed to a property has 6 interpolated values in it:
- *
- * ```html
- * <div style="key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}};
- * key5: {{v5}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstyleMapInterpolate6(
- * 'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, '; key5: ', v5,
- * 'suffix');
- * ```
- *
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param i4 Static value used for concatenation only.
- * @param v5 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @codeGenApi
- */
- function ɵɵstyleMapInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
- const lView = getLView();
- const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
- ɵɵstyleMap(interpolatedValue);
- }
- /**
- *
- * Update an interpolated style on an element with 7 bound values surrounded by text.
- *
- * Used when the value passed to a property has 7 interpolated values in it:
- *
- * ```html
- * <div style="key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}}; key5: {{v5}};
- * key6: {{v6}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstyleMapInterpolate7(
- * 'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, '; key5: ', v5,
- * '; key6: ', v6, 'suffix');
- * ```
- *
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param i4 Static value used for concatenation only.
- * @param v5 Value checked for change.
- * @param i5 Static value used for concatenation only.
- * @param v6 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @codeGenApi
- */
- function ɵɵstyleMapInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
- const lView = getLView();
- const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
- ɵɵstyleMap(interpolatedValue);
- }
- /**
- *
- * Update an interpolated style on an element with 8 bound values surrounded by text.
- *
- * Used when the value passed to a property has 8 interpolated values in it:
- *
- * ```html
- * <div style="key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}}; key5: {{v5}};
- * key6: {{v6}}; key7: {{v7}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstyleMapInterpolate8(
- * 'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, '; key5: ', v5,
- * '; key6: ', v6, '; key7: ', v7, 'suffix');
- * ```
- *
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param i4 Static value used for concatenation only.
- * @param v5 Value checked for change.
- * @param i5 Static value used for concatenation only.
- * @param v6 Value checked for change.
- * @param i6 Static value used for concatenation only.
- * @param v7 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @codeGenApi
- */
- function ɵɵstyleMapInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
- const lView = getLView();
- const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
- ɵɵstyleMap(interpolatedValue);
- }
- /**
- * Update an interpolated style on an element with 9 or more bound values surrounded by text.
- *
- * Used when the number of interpolated values exceeds 8.
- *
- * ```html
- * <div
- * class="key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}}; key5: {{v5}};
- * key6: {{v6}}; key7: {{v7}}; key8: {{v8}}; key9: {{v9}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstyleMapInterpolateV(
- * ['key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, '; key5: ', v5,
- * '; key6: ', v6, '; key7: ', v7, '; key8: ', v8, '; key9: ', v9, 'suffix']);
- * ```
- *.
- * @param values The collection of values and the strings in-between those values, beginning with
- * a string prefix and ending with a string suffix.
- * (e.g. `['prefix', value0, '; key2: ', value1, '; key2: ', value2, ..., value99, 'suffix']`)
- * @codeGenApi
- */
- function ɵɵstyleMapInterpolateV(values) {
- const lView = getLView();
- const interpolatedValue = interpolationV(lView, values);
- ɵɵstyleMap(interpolatedValue);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- *
- * Update an interpolated style property on an element with single bound value surrounded by text.
- *
- * Used when the value passed to a property has 1 interpolated value in it:
- *
- * ```html
- * <div style.color="prefix{{v0}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstylePropInterpolate1(0, 'prefix', v0, 'suffix');
- * ```
- *
- * @param styleIndex Index of style to update. This index value refers to the
- * index of the style in the style bindings array that was passed into
- * `styling`.
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵstylePropInterpolate1(prop, prefix, v0, suffix, valueSuffix) {
- const lView = getLView();
- const interpolatedValue = interpolation1(lView, prefix, v0, suffix);
- checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
- return ɵɵstylePropInterpolate1;
- }
- /**
- *
- * Update an interpolated style property on an element with 2 bound values surrounded by text.
- *
- * Used when the value passed to a property has 2 interpolated values in it:
- *
- * ```html
- * <div style.color="prefix{{v0}}-{{v1}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstylePropInterpolate2(0, 'prefix', v0, '-', v1, 'suffix');
- * ```
- *
- * @param styleIndex Index of style to update. This index value refers to the
- * index of the style in the style bindings array that was passed into
- * `styling`.
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵstylePropInterpolate2(prop, prefix, v0, i0, v1, suffix, valueSuffix) {
- const lView = getLView();
- const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
- checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
- return ɵɵstylePropInterpolate2;
- }
- /**
- *
- * Update an interpolated style property on an element with 3 bound values surrounded by text.
- *
- * Used when the value passed to a property has 3 interpolated values in it:
- *
- * ```html
- * <div style.color="prefix{{v0}}-{{v1}}-{{v2}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstylePropInterpolate3(0, 'prefix', v0, '-', v1, '-', v2, 'suffix');
- * ```
- *
- * @param styleIndex Index of style to update. This index value refers to the
- * index of the style in the style bindings array that was passed into
- * `styling`.
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵstylePropInterpolate3(prop, prefix, v0, i0, v1, i1, v2, suffix, valueSuffix) {
- const lView = getLView();
- const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
- checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
- return ɵɵstylePropInterpolate3;
- }
- /**
- *
- * Update an interpolated style property on an element with 4 bound values surrounded by text.
- *
- * Used when the value passed to a property has 4 interpolated values in it:
- *
- * ```html
- * <div style.color="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstylePropInterpolate4(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');
- * ```
- *
- * @param styleIndex Index of style to update. This index value refers to the
- * index of the style in the style bindings array that was passed into
- * `styling`.
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵstylePropInterpolate4(prop, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, valueSuffix) {
- const lView = getLView();
- const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
- checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
- return ɵɵstylePropInterpolate4;
- }
- /**
- *
- * Update an interpolated style property on an element with 5 bound values surrounded by text.
- *
- * Used when the value passed to a property has 5 interpolated values in it:
- *
- * ```html
- * <div style.color="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstylePropInterpolate5(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');
- * ```
- *
- * @param styleIndex Index of style to update. This index value refers to the
- * index of the style in the style bindings array that was passed into
- * `styling`.
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵstylePropInterpolate5(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, valueSuffix) {
- const lView = getLView();
- const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
- checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
- return ɵɵstylePropInterpolate5;
- }
- /**
- *
- * Update an interpolated style property on an element with 6 bound values surrounded by text.
- *
- * Used when the value passed to a property has 6 interpolated values in it:
- *
- * ```html
- * <div style.color="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstylePropInterpolate6(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');
- * ```
- *
- * @param styleIndex Index of style to update. This index value refers to the
- * index of the style in the style bindings array that was passed into
- * `styling`.
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param i4 Static value used for concatenation only.
- * @param v5 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵstylePropInterpolate6(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, valueSuffix) {
- const lView = getLView();
- const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
- checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
- return ɵɵstylePropInterpolate6;
- }
- /**
- *
- * Update an interpolated style property on an element with 7 bound values surrounded by text.
- *
- * Used when the value passed to a property has 7 interpolated values in it:
- *
- * ```html
- * <div style.color="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstylePropInterpolate7(
- * 0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');
- * ```
- *
- * @param styleIndex Index of style to update. This index value refers to the
- * index of the style in the style bindings array that was passed into
- * `styling`.
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param i4 Static value used for concatenation only.
- * @param v5 Value checked for change.
- * @param i5 Static value used for concatenation only.
- * @param v6 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵstylePropInterpolate7(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, valueSuffix) {
- const lView = getLView();
- const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
- checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
- return ɵɵstylePropInterpolate7;
- }
- /**
- *
- * Update an interpolated style property on an element with 8 bound values surrounded by text.
- *
- * Used when the value passed to a property has 8 interpolated values in it:
- *
- * ```html
- * <div style.color="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix"></div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstylePropInterpolate8(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6,
- * '-', v7, 'suffix');
- * ```
- *
- * @param styleIndex Index of style to update. This index value refers to the
- * index of the style in the style bindings array that was passed into
- * `styling`.
- * @param prefix Static value used for concatenation only.
- * @param v0 Value checked for change.
- * @param i0 Static value used for concatenation only.
- * @param v1 Value checked for change.
- * @param i1 Static value used for concatenation only.
- * @param v2 Value checked for change.
- * @param i2 Static value used for concatenation only.
- * @param v3 Value checked for change.
- * @param i3 Static value used for concatenation only.
- * @param v4 Value checked for change.
- * @param i4 Static value used for concatenation only.
- * @param v5 Value checked for change.
- * @param i5 Static value used for concatenation only.
- * @param v6 Value checked for change.
- * @param i6 Static value used for concatenation only.
- * @param v7 Value checked for change.
- * @param suffix Static value used for concatenation only.
- * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵstylePropInterpolate8(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, valueSuffix) {
- const lView = getLView();
- const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
- checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
- return ɵɵstylePropInterpolate8;
- }
- /**
- * Update an interpolated style property on an element with 9 or more bound values surrounded by
- * text.
- *
- * Used when the number of interpolated values exceeds 8.
- *
- * ```html
- * <div
- * style.color="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix">
- * </div>
- * ```
- *
- * Its compiled representation is:
- *
- * ```ts
- * ɵɵstylePropInterpolateV(
- * 0, ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,
- * 'suffix']);
- * ```
- *
- * @param styleIndex Index of style to update. This index value refers to the
- * index of the style in the style bindings array that was passed into
- * `styling`..
- * @param values The collection of values and the strings in-between those values, beginning with
- * a string prefix and ending with a string suffix.
- * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)
- * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
- * @returns itself, so that it may be chained.
- * @codeGenApi
- */
- function ɵɵstylePropInterpolateV(prop, values, valueSuffix) {
- const lView = getLView();
- const interpolatedValue = interpolationV(lView, values);
- checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
- return ɵɵstylePropInterpolateV;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Update a property on a host element. Only applies to native node properties, not inputs.
- *
- * Operates on the element selected by index via the {@link select} instruction.
- *
- * @param propName Name of property. Because it is going to DOM, this is not subject to
- * renaming as part of minification.
- * @param value New value to write.
- * @param sanitizer An optional function used to sanitize the value.
- * @returns This function returns itself so that it may be chained
- * (e.g. `property('name', ctx.name)('title', ctx.title)`)
- *
- * @codeGenApi
- */
- function ɵɵhostProperty(propName, value, sanitizer) {
- const lView = getLView();
- const bindingIndex = nextBindingIndex();
- if (bindingUpdated(lView, bindingIndex, value)) {
- const tView = getTView();
- const tNode = getSelectedTNode();
- elementPropertyInternal(tView, tNode, lView, propName, value, lView[RENDERER], sanitizer, true);
- ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);
- }
- return ɵɵhostProperty;
- }
- /**
- * Updates a synthetic host binding (e.g. `[@foo]`) on a component or directive.
- *
- * This instruction is for compatibility purposes and is designed to ensure that a
- * synthetic host binding (e.g. `@HostBinding('@foo')`) properly gets rendered in
- * the component's renderer. Normally all host bindings are evaluated with the parent
- * component's renderer, but, in the case of animation @triggers, they need to be
- * evaluated with the sub component's renderer (because that's where the animation
- * triggers are defined).
- *
- * Do not use this instruction as a replacement for `elementProperty`. This instruction
- * only exists to ensure compatibility with the ViewEngine's host binding behavior.
- *
- * @param index The index of the element to update in the data array
- * @param propName Name of property. Because it is going to DOM, this is not subject to
- * renaming as part of minification.
- * @param value New value to write.
- * @param sanitizer An optional function used to sanitize the value.
- *
- * @codeGenApi
- */
- function ɵɵsyntheticHostProperty(propName, value, sanitizer) {
- const lView = getLView();
- const bindingIndex = nextBindingIndex();
- if (bindingUpdated(lView, bindingIndex, value)) {
- const tView = getTView();
- const tNode = getSelectedTNode();
- const currentDef = getCurrentDirectiveDef(tView.data);
- const renderer = loadComponentRenderer(currentDef, tNode, lView);
- elementPropertyInternal(tView, tNode, lView, propName, value, renderer, sanitizer, true);
- ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);
- }
- return ɵɵsyntheticHostProperty;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * NOTE: changes to the `ngI18nClosureMode` name must be synced with `compiler-cli/src/tooling.ts`.
- */
- if (typeof ngI18nClosureMode === 'undefined') {
- // These property accesses can be ignored because ngI18nClosureMode will be set to false
- // when optimizing code and the whole if statement will be dropped.
- // Make sure to refer to ngI18nClosureMode as ['ngI18nClosureMode'] for closure.
- // NOTE: we need to have it in IIFE so that the tree-shaker is happy.
- (function () {
- // tslint:disable-next-line:no-toplevel-property-access
- _global['ngI18nClosureMode'] =
- // TODO(FW-1250): validate that this actually, you know, works.
- // tslint:disable-next-line:no-toplevel-property-access
- typeof goog !== 'undefined' && typeof goog.getMsg === 'function';
- })();
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // THIS CODE IS GENERATED - DO NOT MODIFY
- // See angular/tools/gulp-tasks/cldr/extract.js
- const u = undefined;
- function plural(n) {
- let i = Math.floor(Math.abs(n)), v = n.toString().replace(/^[^.]*\.?/, '').length;
- if (i === 1 && v === 0)
- return 1;
- return 5;
- }
- var localeEn = [
- 'en',
- [['a', 'p'], ['AM', 'PM'], u],
- [['AM', 'PM'], u, u],
- [
- ['S', 'M', 'T', 'W', 'T', 'F', 'S'], ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
- ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
- ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']
- ],
- u,
- [
- ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
- ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
- [
- 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',
- 'October', 'November', 'December'
- ]
- ],
- u,
- [['B', 'A'], ['BC', 'AD'], ['Before Christ', 'Anno Domini']],
- 0,
- [6, 0],
- ['M/d/yy', 'MMM d, y', 'MMMM d, y', 'EEEE, MMMM d, y'],
- ['h:mm a', 'h:mm:ss a', 'h:mm:ss a z', 'h:mm:ss a zzzz'],
- ['{1}, {0}', u, '{1} \'at\' {0}', u],
- ['.', ',', ';', '%', '+', '-', 'E', '×', '‰', '∞', 'NaN', ':'],
- ['#,##0.###', '#,##0%', '¤#,##0.00', '#E0'],
- 'USD',
- '$',
- 'US Dollar',
- {},
- 'ltr',
- plural
- ];
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * This const is used to store the locale data registered with `registerLocaleData`
- */
- let LOCALE_DATA = {};
- /**
- * Register locale data to be used internally by Angular. See the
- * ["I18n guide"](guide/i18n#i18n-pipes) to know how to import additional locale data.
- *
- * The signature `registerLocaleData(data: any, extraData?: any)` is deprecated since v5.1
- */
- function registerLocaleData(data, localeId, extraData) {
- if (typeof localeId !== 'string') {
- extraData = localeId;
- localeId = data[LocaleDataIndex.LocaleId];
- }
- localeId = localeId.toLowerCase().replace(/_/g, '-');
- LOCALE_DATA[localeId] = data;
- if (extraData) {
- LOCALE_DATA[localeId][LocaleDataIndex.ExtraData] = extraData;
- }
- }
- /**
- * Finds the locale data for a given locale.
- *
- * @param locale The locale code.
- * @returns The locale data.
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- */
- function findLocaleData(locale) {
- const normalizedLocale = normalizeLocale(locale);
- let match = getLocaleData(normalizedLocale);
- if (match) {
- return match;
- }
- // let's try to find a parent locale
- const parentLocale = normalizedLocale.split('-')[0];
- match = getLocaleData(parentLocale);
- if (match) {
- return match;
- }
- if (parentLocale === 'en') {
- return localeEn;
- }
- throw new Error(`Missing locale data for the locale "${locale}".`);
- }
- /**
- * Retrieves the default currency code for the given locale.
- *
- * The default is defined as the first currency which is still in use.
- *
- * @param locale The code of the locale whose currency code we want.
- * @returns The code of the default currency for the given locale.
- *
- */
- function getLocaleCurrencyCode(locale) {
- const data = findLocaleData(locale);
- return data[LocaleDataIndex.CurrencyCode] || null;
- }
- /**
- * Retrieves the plural function used by ICU expressions to determine the plural case to use
- * for a given locale.
- * @param locale A locale code for the locale format rules to use.
- * @returns The plural function for the locale.
- * @see `NgPlural`
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- */
- function getLocalePluralCase(locale) {
- const data = findLocaleData(locale);
- return data[LocaleDataIndex.PluralCase];
- }
- /**
- * Helper function to get the given `normalizedLocale` from `LOCALE_DATA`
- * or from the global `ng.common.locale`.
- */
- function getLocaleData(normalizedLocale) {
- if (!(normalizedLocale in LOCALE_DATA)) {
- LOCALE_DATA[normalizedLocale] = _global.ng && _global.ng.common && _global.ng.common.locales &&
- _global.ng.common.locales[normalizedLocale];
- }
- return LOCALE_DATA[normalizedLocale];
- }
- /**
- * Helper function to remove all the locale data from `LOCALE_DATA`.
- */
- function unregisterAllLocaleData() {
- LOCALE_DATA = {};
- }
- /**
- * Index of each type of locale data from the locale data array
- */
- var LocaleDataIndex;
- (function (LocaleDataIndex) {
- LocaleDataIndex[LocaleDataIndex["LocaleId"] = 0] = "LocaleId";
- LocaleDataIndex[LocaleDataIndex["DayPeriodsFormat"] = 1] = "DayPeriodsFormat";
- LocaleDataIndex[LocaleDataIndex["DayPeriodsStandalone"] = 2] = "DayPeriodsStandalone";
- LocaleDataIndex[LocaleDataIndex["DaysFormat"] = 3] = "DaysFormat";
- LocaleDataIndex[LocaleDataIndex["DaysStandalone"] = 4] = "DaysStandalone";
- LocaleDataIndex[LocaleDataIndex["MonthsFormat"] = 5] = "MonthsFormat";
- LocaleDataIndex[LocaleDataIndex["MonthsStandalone"] = 6] = "MonthsStandalone";
- LocaleDataIndex[LocaleDataIndex["Eras"] = 7] = "Eras";
- LocaleDataIndex[LocaleDataIndex["FirstDayOfWeek"] = 8] = "FirstDayOfWeek";
- LocaleDataIndex[LocaleDataIndex["WeekendRange"] = 9] = "WeekendRange";
- LocaleDataIndex[LocaleDataIndex["DateFormat"] = 10] = "DateFormat";
- LocaleDataIndex[LocaleDataIndex["TimeFormat"] = 11] = "TimeFormat";
- LocaleDataIndex[LocaleDataIndex["DateTimeFormat"] = 12] = "DateTimeFormat";
- LocaleDataIndex[LocaleDataIndex["NumberSymbols"] = 13] = "NumberSymbols";
- LocaleDataIndex[LocaleDataIndex["NumberFormats"] = 14] = "NumberFormats";
- LocaleDataIndex[LocaleDataIndex["CurrencyCode"] = 15] = "CurrencyCode";
- LocaleDataIndex[LocaleDataIndex["CurrencySymbol"] = 16] = "CurrencySymbol";
- LocaleDataIndex[LocaleDataIndex["CurrencyName"] = 17] = "CurrencyName";
- LocaleDataIndex[LocaleDataIndex["Currencies"] = 18] = "Currencies";
- LocaleDataIndex[LocaleDataIndex["Directionality"] = 19] = "Directionality";
- LocaleDataIndex[LocaleDataIndex["PluralCase"] = 20] = "PluralCase";
- LocaleDataIndex[LocaleDataIndex["ExtraData"] = 21] = "ExtraData";
- })(LocaleDataIndex || (LocaleDataIndex = {}));
- /**
- * Returns the canonical form of a locale name - lowercase with `_` replaced with `-`.
- */
- function normalizeLocale(locale) {
- return locale.toLowerCase().replace(/_/g, '-');
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const pluralMapping = ['zero', 'one', 'two', 'few', 'many'];
- /**
- * Returns the plural case based on the locale
- */
- function getPluralCase(value, locale) {
- const plural = getLocalePluralCase(locale)(parseInt(value, 10));
- const result = pluralMapping[plural];
- return (result !== undefined) ? result : 'other';
- }
- /**
- * The locale id that the application is using by default (for translations and ICU expressions).
- */
- const DEFAULT_LOCALE_ID = 'en-US';
- /**
- * USD currency code that the application uses by default for CurrencyPipe when no
- * DEFAULT_CURRENCY_CODE is provided.
- */
- const USD_CURRENCY_CODE = 'USD';
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Marks that the next string is an element name.
- *
- * See `I18nMutateOpCodes` documentation.
- */
- const ELEMENT_MARKER = {
- marker: 'element'
- };
- /**
- * Marks that the next string is comment text need for ICU.
- *
- * See `I18nMutateOpCodes` documentation.
- */
- const ICU_MARKER = {
- marker: 'ICU'
- };
- /**
- * See `I18nCreateOpCodes`
- */
- var I18nCreateOpCode;
- (function (I18nCreateOpCode) {
- /**
- * Number of bits to shift index so that it can be combined with the `APPEND_EAGERLY` and
- * `COMMENT`.
- */
- I18nCreateOpCode[I18nCreateOpCode["SHIFT"] = 2] = "SHIFT";
- /**
- * Should the node be appended to parent imedditatly after creation.
- */
- I18nCreateOpCode[I18nCreateOpCode["APPEND_EAGERLY"] = 1] = "APPEND_EAGERLY";
- /**
- * If set the node should be comment (rather than a text) node.
- */
- I18nCreateOpCode[I18nCreateOpCode["COMMENT"] = 2] = "COMMENT";
- })(I18nCreateOpCode || (I18nCreateOpCode = {}));
- // Note: This hack is necessary so we don't erroneously get a circular dependency
- // failure based on types.
- const unusedValueExportToPlacateAjd$6 = 1;
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * The locale id that the application is currently using (for translations and ICU expressions).
- * This is the ivy version of `LOCALE_ID` that was defined as an injection token for the view engine
- * but is now defined as a global value.
- */
- let LOCALE_ID = DEFAULT_LOCALE_ID;
- /**
- * Sets the locale id that will be used for translations and ICU expressions.
- * This is the ivy version of `LOCALE_ID` that was defined as an injection token for the view engine
- * but is now defined as a global value.
- *
- * @param localeId
- */
- function setLocaleId(localeId) {
- assertDefined(localeId, `Expected localeId to be defined`);
- if (typeof localeId === 'string') {
- LOCALE_ID = localeId.toLowerCase().replace(/_/g, '-');
- }
- }
- /**
- * Gets the locale id that will be used for translations and ICU expressions.
- * This is the ivy version of `LOCALE_ID` that was defined as an injection token for the view engine
- * but is now defined as a global value.
- */
- function getLocaleId() {
- return LOCALE_ID;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Find a node in front of which `currentTNode` should be inserted (takes i18n into account).
- *
- * This method determines the `RNode` in front of which we should insert the `currentRNode`. This
- * takes `TNode.insertBeforeIndex` into account.
- *
- * @param parentTNode parent `TNode`
- * @param currentTNode current `TNode` (The node which we would like to insert into the DOM)
- * @param lView current `LView`
- */
- function getInsertInFrontOfRNodeWithI18n(parentTNode, currentTNode, lView) {
- const tNodeInsertBeforeIndex = currentTNode.insertBeforeIndex;
- const insertBeforeIndex = Array.isArray(tNodeInsertBeforeIndex) ? tNodeInsertBeforeIndex[0] : tNodeInsertBeforeIndex;
- if (insertBeforeIndex === null) {
- return getInsertInFrontOfRNodeWithNoI18n(parentTNode, currentTNode, lView);
- }
- else {
- ngDevMode && assertIndexInRange(lView, insertBeforeIndex);
- return unwrapRNode(lView[insertBeforeIndex]);
- }
- }
- /**
- * Process `TNode.insertBeforeIndex` by adding i18n text nodes.
- *
- * See `TNode.insertBeforeIndex`
- */
- function processI18nInsertBefore(renderer, childTNode, lView, childRNode, parentRElement) {
- const tNodeInsertBeforeIndex = childTNode.insertBeforeIndex;
- if (Array.isArray(tNodeInsertBeforeIndex)) {
- // An array indicates that there are i18n nodes that need to be added as children of this
- // `childRNode`. These i18n nodes were created before this `childRNode` was available and so
- // only now can be added. The first element of the array is the normal index where we should
- // insert the `childRNode`. Additional elements are the extra nodes to be added as children of
- // `childRNode`.
- ngDevMode && assertDomNode(childRNode);
- let i18nParent = childRNode;
- let anchorRNode = null;
- if (!(childTNode.type & 3 /* AnyRNode */)) {
- anchorRNode = i18nParent;
- i18nParent = parentRElement;
- }
- if (i18nParent !== null && (childTNode.flags & 2 /* isComponentHost */) === 0) {
- for (let i = 1; i < tNodeInsertBeforeIndex.length; i++) {
- // No need to `unwrapRNode` because all of the indexes point to i18n text nodes.
- // see `assertDomNode` below.
- const i18nChild = lView[tNodeInsertBeforeIndex[i]];
- nativeInsertBefore(renderer, i18nParent, i18nChild, anchorRNode, false);
- }
- }
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Add `tNode` to `previousTNodes` list and update relevant `TNode`s in `previousTNodes` list
- * `tNode.insertBeforeIndex`.
- *
- * Things to keep in mind:
- * 1. All i18n text nodes are encoded as `TNodeType.Element` and are created eagerly by the
- * `ɵɵi18nStart` instruction.
- * 2. All `TNodeType.Placeholder` `TNodes` are elements which will be created later by
- * `ɵɵelementStart` instruction.
- * 3. `ɵɵelementStart` instruction will create `TNode`s in the ascending `TNode.index` order. (So a
- * smaller index `TNode` is guaranteed to be created before a larger one)
- *
- * We use the above three invariants to determine `TNode.insertBeforeIndex`.
- *
- * In an ideal world `TNode.insertBeforeIndex` would always be `TNode.next.index`. However,
- * this will not work because `TNode.next.index` may be larger than `TNode.index` which means that
- * the next node is not yet created and therefore we can't insert in front of it.
- *
- * Rule1: `TNode.insertBeforeIndex = null` if `TNode.next === null` (Initial condition, as we don't
- * know if there will be further `TNode`s inserted after.)
- * Rule2: If `previousTNode` is created after the `tNode` being inserted, then
- * `previousTNode.insertBeforeNode = tNode.index` (So when a new `tNode` is added we check
- * previous to see if we can update its `insertBeforeTNode`)
- *
- * See `TNode.insertBeforeIndex` for more context.
- *
- * @param previousTNodes A list of previous TNodes so that we can easily traverse `TNode`s in
- * reverse order. (If `TNode` would have `previous` this would not be necessary.)
- * @param newTNode A TNode to add to the `previousTNodes` list.
- */
- function addTNodeAndUpdateInsertBeforeIndex(previousTNodes, newTNode) {
- // Start with Rule1
- ngDevMode &&
- assertEqual(newTNode.insertBeforeIndex, null, 'We expect that insertBeforeIndex is not set');
- previousTNodes.push(newTNode);
- if (previousTNodes.length > 1) {
- for (let i = previousTNodes.length - 2; i >= 0; i--) {
- const existingTNode = previousTNodes[i];
- // Text nodes are created eagerly and so they don't need their `indexBeforeIndex` updated.
- // It is safe to ignore them.
- if (!isI18nText(existingTNode)) {
- if (isNewTNodeCreatedBefore(existingTNode, newTNode) &&
- getInsertBeforeIndex(existingTNode) === null) {
- // If it was created before us in time, (and it does not yet have `insertBeforeIndex`)
- // then add the `insertBeforeIndex`.
- setInsertBeforeIndex(existingTNode, newTNode.index);
- }
- }
- }
- }
- }
- function isI18nText(tNode) {
- return !(tNode.type & 64 /* Placeholder */);
- }
- function isNewTNodeCreatedBefore(existingTNode, newTNode) {
- return isI18nText(newTNode) || existingTNode.index > newTNode.index;
- }
- function getInsertBeforeIndex(tNode) {
- const index = tNode.insertBeforeIndex;
- return Array.isArray(index) ? index[0] : index;
- }
- function setInsertBeforeIndex(tNode, value) {
- const index = tNode.insertBeforeIndex;
- if (Array.isArray(index)) {
- // Array is stored if we have to insert child nodes. See `TNode.insertBeforeIndex`
- index[0] = value;
- }
- else {
- setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore);
- tNode.insertBeforeIndex = value;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Retrieve `TIcu` at a given `index`.
- *
- * The `TIcu` can be stored either directly (if it is nested ICU) OR
- * it is stored inside tho `TIcuContainer` if it is top level ICU.
- *
- * The reason for this is that the top level ICU need a `TNode` so that they are part of the render
- * tree, but nested ICU's have no TNode, because we don't know ahead of time if the nested ICU is
- * expressed (parent ICU may have selected a case which does not contain it.)
- *
- * @param tView Current `TView`.
- * @param index Index where the value should be read from.
- */
- function getTIcu(tView, index) {
- const value = tView.data[index];
- if (value === null || typeof value === 'string')
- return null;
- if (ngDevMode &&
- !(value.hasOwnProperty('tViews') || value.hasOwnProperty('currentCaseLViewIndex'))) {
- throwError('We expect to get \'null\'|\'TIcu\'|\'TIcuContainer\', but got: ' + value);
- }
- // Here the `value.hasOwnProperty('currentCaseLViewIndex')` is a polymorphic read as it can be
- // either TIcu or TIcuContainerNode. This is not ideal, but we still think it is OK because it
- // will be just two cases which fits into the browser inline cache (inline cache can take up to
- // 4)
- const tIcu = value.hasOwnProperty('currentCaseLViewIndex') ? value :
- value.value;
- ngDevMode && assertTIcu(tIcu);
- return tIcu;
- }
- /**
- * Store `TIcu` at a give `index`.
- *
- * The `TIcu` can be stored either directly (if it is nested ICU) OR
- * it is stored inside tho `TIcuContainer` if it is top level ICU.
- *
- * The reason for this is that the top level ICU need a `TNode` so that they are part of the render
- * tree, but nested ICU's have no TNode, because we don't know ahead of time if the nested ICU is
- * expressed (parent ICU may have selected a case which does not contain it.)
- *
- * @param tView Current `TView`.
- * @param index Index where the value should be stored at in `Tview.data`
- * @param tIcu The TIcu to store.
- */
- function setTIcu(tView, index, tIcu) {
- const tNode = tView.data[index];
- ngDevMode &&
- assertEqual(tNode === null || tNode.hasOwnProperty('tViews'), true, 'We expect to get \'null\'|\'TIcuContainer\'');
- if (tNode === null) {
- tView.data[index] = tIcu;
- }
- else {
- ngDevMode && assertTNodeType(tNode, 32 /* Icu */);
- tNode.value = tIcu;
- }
- }
- /**
- * Set `TNode.insertBeforeIndex` taking the `Array` into account.
- *
- * See `TNode.insertBeforeIndex`
- */
- function setTNodeInsertBeforeIndex(tNode, index) {
- ngDevMode && assertTNode(tNode);
- let insertBeforeIndex = tNode.insertBeforeIndex;
- if (insertBeforeIndex === null) {
- setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore);
- insertBeforeIndex = tNode.insertBeforeIndex =
- [null /* may be updated to number later */, index];
- }
- else {
- assertEqual(Array.isArray(insertBeforeIndex), true, 'Expecting array here');
- insertBeforeIndex.push(index);
- }
- }
- /**
- * Create `TNode.type=TNodeType.Placeholder` node.
- *
- * See `TNodeType.Placeholder` for more information.
- */
- function createTNodePlaceholder(tView, previousTNodes, index) {
- const tNode = createTNodeAtIndex(tView, index, 64 /* Placeholder */, null, null);
- addTNodeAndUpdateInsertBeforeIndex(previousTNodes, tNode);
- return tNode;
- }
- /**
- * Returns current ICU case.
- *
- * ICU cases are stored as index into the `TIcu.cases`.
- * At times it is necessary to communicate that the ICU case just switched and that next ICU update
- * should update all bindings regardless of the mask. In such a case the we store negative numbers
- * for cases which have just been switched. This function removes the negative flag.
- */
- function getCurrentICUCaseIndex(tIcu, lView) {
- const currentCase = lView[tIcu.currentCaseLViewIndex];
- return currentCase === null ? currentCase : (currentCase < 0 ? ~currentCase : currentCase);
- }
- function getParentFromIcuCreateOpCode(mergedCode) {
- return mergedCode >>> 17 /* SHIFT_PARENT */;
- }
- function getRefFromIcuCreateOpCode(mergedCode) {
- return (mergedCode & 131070 /* MASK_REF */) >>> 1 /* SHIFT_REF */;
- }
- function getInstructionFromIcuCreateOpCode(mergedCode) {
- return mergedCode & 1 /* MASK_INSTRUCTION */;
- }
- function icuCreateOpCode(opCode, parentIdx, refIdx) {
- ngDevMode && assertGreaterThanOrEqual(parentIdx, 0, 'Missing parent index');
- ngDevMode && assertGreaterThan(refIdx, 0, 'Missing ref index');
- return opCode | parentIdx << 17 /* SHIFT_PARENT */ | refIdx << 1 /* SHIFT_REF */;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Keep track of which input bindings in `ɵɵi18nExp` have changed.
- *
- * This is used to efficiently update expressions in i18n only when the corresponding input has
- * changed.
- *
- * 1) Each bit represents which of the `ɵɵi18nExp` has changed.
- * 2) There are 32 bits allowed in JS.
- * 3) Bit 32 is special as it is shared for all changes past 32. (In other words if you have more
- * than 32 `ɵɵi18nExp` then all changes past 32nd `ɵɵi18nExp` will be mapped to same bit. This means
- * that we may end up changing more than we need to. But i18n expressions with 32 bindings is rare
- * so in practice it should not be an issue.)
- */
- let changeMask = 0b0;
- /**
- * Keeps track of which bit needs to be updated in `changeMask`
- *
- * This value gets incremented on every call to `ɵɵi18nExp`
- */
- let changeMaskCounter = 0;
- /**
- * Keep track of which input bindings in `ɵɵi18nExp` have changed.
- *
- * `setMaskBit` gets invoked by each call to `ɵɵi18nExp`.
- *
- * @param hasChange did `ɵɵi18nExp` detect a change.
- */
- function setMaskBit(hasChange) {
- if (hasChange) {
- changeMask = changeMask | (1 << Math.min(changeMaskCounter, 31));
- }
- changeMaskCounter++;
- }
- function applyI18n(tView, lView, index) {
- if (changeMaskCounter > 0) {
- ngDevMode && assertDefined(tView, `tView should be defined`);
- const tI18n = tView.data[index];
- // When `index` points to an `ɵɵi18nAttributes` then we have an array otherwise `TI18n`
- const updateOpCodes = Array.isArray(tI18n) ? tI18n : tI18n.update;
- const bindingsStartIndex = getBindingIndex() - changeMaskCounter - 1;
- applyUpdateOpCodes(tView, lView, updateOpCodes, bindingsStartIndex, changeMask);
- }
- // Reset changeMask & maskBit to default for the next update cycle
- changeMask = 0b0;
- changeMaskCounter = 0;
- }
- /**
- * Apply `I18nCreateOpCodes` op-codes as stored in `TI18n.create`.
- *
- * Creates text (and comment) nodes which are internationalized.
- *
- * @param lView Current lView
- * @param createOpCodes Set of op-codes to apply
- * @param parentRNode Parent node (so that direct children can be added eagerly) or `null` if it is
- * a root node.
- * @param insertInFrontOf DOM node that should be used as an anchor.
- */
- function applyCreateOpCodes(lView, createOpCodes, parentRNode, insertInFrontOf) {
- const renderer = lView[RENDERER];
- for (let i = 0; i < createOpCodes.length; i++) {
- const opCode = createOpCodes[i++];
- const text = createOpCodes[i];
- const isComment = (opCode & I18nCreateOpCode.COMMENT) === I18nCreateOpCode.COMMENT;
- const appendNow = (opCode & I18nCreateOpCode.APPEND_EAGERLY) === I18nCreateOpCode.APPEND_EAGERLY;
- const index = opCode >>> I18nCreateOpCode.SHIFT;
- let rNode = lView[index];
- if (rNode === null) {
- // We only create new DOM nodes if they don't already exist: If ICU switches case back to a
- // case which was already instantiated, no need to create new DOM nodes.
- rNode = lView[index] =
- isComment ? renderer.createComment(text) : createTextNode(renderer, text);
- }
- if (appendNow && parentRNode !== null) {
- nativeInsertBefore(renderer, parentRNode, rNode, insertInFrontOf, false);
- }
- }
- }
- /**
- * Apply `I18nMutateOpCodes` OpCodes.
- *
- * @param tView Current `TView`
- * @param mutableOpCodes Mutable OpCodes to process
- * @param lView Current `LView`
- * @param anchorRNode place where the i18n node should be inserted.
- */
- function applyMutableOpCodes(tView, mutableOpCodes, lView, anchorRNode) {
- ngDevMode && assertDomNode(anchorRNode);
- const renderer = lView[RENDERER];
- // `rootIdx` represents the node into which all inserts happen.
- let rootIdx = null;
- // `rootRNode` represents the real node into which we insert. This can be different from
- // `lView[rootIdx]` if we have projection.
- // - null we don't have a parent (as can be the case in when we are inserting into a root of
- // LView which has no parent.)
- // - `RElement` The element representing the root after taking projection into account.
- let rootRNode;
- for (let i = 0; i < mutableOpCodes.length; i++) {
- const opCode = mutableOpCodes[i];
- if (typeof opCode == 'string') {
- const textNodeIndex = mutableOpCodes[++i];
- if (lView[textNodeIndex] === null) {
- ngDevMode && ngDevMode.rendererCreateTextNode++;
- ngDevMode && assertIndexInRange(lView, textNodeIndex);
- lView[textNodeIndex] = createTextNode(renderer, opCode);
- }
- }
- else if (typeof opCode == 'number') {
- switch (opCode & 1 /* MASK_INSTRUCTION */) {
- case 0 /* AppendChild */:
- const parentIdx = getParentFromIcuCreateOpCode(opCode);
- if (rootIdx === null) {
- // The first operation should save the `rootIdx` because the first operation
- // must insert into the root. (Only subsequent operations can insert into a dynamic
- // parent)
- rootIdx = parentIdx;
- rootRNode = nativeParentNode(renderer, anchorRNode);
- }
- let insertInFrontOf;
- let parentRNode;
- if (parentIdx === rootIdx) {
- insertInFrontOf = anchorRNode;
- parentRNode = rootRNode;
- }
- else {
- insertInFrontOf = null;
- parentRNode = unwrapRNode(lView[parentIdx]);
- }
- // FIXME(misko): Refactor with `processI18nText`
- if (parentRNode !== null) {
- // This can happen if the `LView` we are adding to is not attached to a parent `LView`.
- // In such a case there is no "root" we can attach to. This is fine, as we still need to
- // create the elements. When the `LView` gets later added to a parent these "root" nodes
- // get picked up and added.
- ngDevMode && assertDomNode(parentRNode);
- const refIdx = getRefFromIcuCreateOpCode(opCode);
- ngDevMode && assertGreaterThan(refIdx, HEADER_OFFSET, 'Missing ref');
- // `unwrapRNode` is not needed here as all of these point to RNodes as part of the i18n
- // which can't have components.
- const child = lView[refIdx];
- ngDevMode && assertDomNode(child);
- nativeInsertBefore(renderer, parentRNode, child, insertInFrontOf, false);
- const tIcu = getTIcu(tView, refIdx);
- if (tIcu !== null && typeof tIcu === 'object') {
- // If we just added a comment node which has ICU then that ICU may have already been
- // rendered and therefore we need to re-add it here.
- ngDevMode && assertTIcu(tIcu);
- const caseIndex = getCurrentICUCaseIndex(tIcu, lView);
- if (caseIndex !== null) {
- applyMutableOpCodes(tView, tIcu.create[caseIndex], lView, lView[tIcu.anchorIdx]);
- }
- }
- }
- break;
- case 1 /* Attr */:
- const elementNodeIndex = opCode >>> 1 /* SHIFT_REF */;
- const attrName = mutableOpCodes[++i];
- const attrValue = mutableOpCodes[++i];
- // This code is used for ICU expressions only, since we don't support
- // directives/components in ICUs, we don't need to worry about inputs here
- setElementAttribute(renderer, getNativeByIndex(elementNodeIndex, lView), null, null, attrName, attrValue, null);
- break;
- default:
- throw new Error(`Unable to determine the type of mutate operation for "${opCode}"`);
- }
- }
- else {
- switch (opCode) {
- case ICU_MARKER:
- const commentValue = mutableOpCodes[++i];
- const commentNodeIndex = mutableOpCodes[++i];
- if (lView[commentNodeIndex] === null) {
- ngDevMode &&
- assertEqual(typeof commentValue, 'string', `Expected "${commentValue}" to be a comment node value`);
- ngDevMode && ngDevMode.rendererCreateComment++;
- ngDevMode && assertIndexInExpandoRange(lView, commentNodeIndex);
- const commentRNode = lView[commentNodeIndex] =
- createCommentNode(renderer, commentValue);
- // FIXME(misko): Attaching patch data is only needed for the root (Also add tests)
- attachPatchData(commentRNode, lView);
- }
- break;
- case ELEMENT_MARKER:
- const tagName = mutableOpCodes[++i];
- const elementNodeIndex = mutableOpCodes[++i];
- if (lView[elementNodeIndex] === null) {
- ngDevMode &&
- assertEqual(typeof tagName, 'string', `Expected "${tagName}" to be an element node tag name`);
- ngDevMode && ngDevMode.rendererCreateElement++;
- ngDevMode && assertIndexInExpandoRange(lView, elementNodeIndex);
- const elementRNode = lView[elementNodeIndex] =
- createElementNode(renderer, tagName, null);
- // FIXME(misko): Attaching patch data is only needed for the root (Also add tests)
- attachPatchData(elementRNode, lView);
- }
- break;
- default:
- ngDevMode &&
- throwError(`Unable to determine the type of mutate operation for "${opCode}"`);
- }
- }
- }
- }
- /**
- * Apply `I18nUpdateOpCodes` OpCodes
- *
- * @param tView Current `TView`
- * @param lView Current `LView`
- * @param updateOpCodes OpCodes to process
- * @param bindingsStartIndex Location of the first `ɵɵi18nApply`
- * @param changeMask Each bit corresponds to a `ɵɵi18nExp` (Counting backwards from
- * `bindingsStartIndex`)
- */
- function applyUpdateOpCodes(tView, lView, updateOpCodes, bindingsStartIndex, changeMask) {
- for (let i = 0; i < updateOpCodes.length; i++) {
- // bit code to check if we should apply the next update
- const checkBit = updateOpCodes[i];
- // Number of opCodes to skip until next set of update codes
- const skipCodes = updateOpCodes[++i];
- if (checkBit & changeMask) {
- // The value has been updated since last checked
- let value = '';
- for (let j = i + 1; j <= (i + skipCodes); j++) {
- const opCode = updateOpCodes[j];
- if (typeof opCode == 'string') {
- value += opCode;
- }
- else if (typeof opCode == 'number') {
- if (opCode < 0) {
- // Negative opCode represent `i18nExp` values offset.
- value += renderStringify(lView[bindingsStartIndex - opCode]);
- }
- else {
- const nodeIndex = (opCode >>> 2 /* SHIFT_REF */);
- switch (opCode & 3 /* MASK_OPCODE */) {
- case 1 /* Attr */:
- const propName = updateOpCodes[++j];
- const sanitizeFn = updateOpCodes[++j];
- const tNodeOrTagName = tView.data[nodeIndex];
- ngDevMode && assertDefined(tNodeOrTagName, 'Experting TNode or string');
- if (typeof tNodeOrTagName === 'string') {
- // IF we don't have a `TNode`, then we are an element in ICU (as ICU content does
- // not have TNode), in which case we know that there are no directives, and hence
- // we use attribute setting.
- setElementAttribute(lView[RENDERER], lView[nodeIndex], null, tNodeOrTagName, propName, value, sanitizeFn);
- }
- else {
- elementPropertyInternal(tView, tNodeOrTagName, lView, propName, value, lView[RENDERER], sanitizeFn, false);
- }
- break;
- case 0 /* Text */:
- const rText = lView[nodeIndex];
- rText !== null && updateTextNode(lView[RENDERER], rText, value);
- break;
- case 2 /* IcuSwitch */:
- applyIcuSwitchCase(tView, getTIcu(tView, nodeIndex), lView, value);
- break;
- case 3 /* IcuUpdate */:
- applyIcuUpdateCase(tView, getTIcu(tView, nodeIndex), bindingsStartIndex, lView);
- break;
- }
- }
- }
- }
- }
- else {
- const opCode = updateOpCodes[i + 1];
- if (opCode > 0 && (opCode & 3 /* MASK_OPCODE */) === 3 /* IcuUpdate */) {
- // Special case for the `icuUpdateCase`. It could be that the mask did not match, but
- // we still need to execute `icuUpdateCase` because the case has changed recently due to
- // previous `icuSwitchCase` instruction. (`icuSwitchCase` and `icuUpdateCase` always come in
- // pairs.)
- const nodeIndex = (opCode >>> 2 /* SHIFT_REF */);
- const tIcu = getTIcu(tView, nodeIndex);
- const currentIndex = lView[tIcu.currentCaseLViewIndex];
- if (currentIndex < 0) {
- applyIcuUpdateCase(tView, tIcu, bindingsStartIndex, lView);
- }
- }
- }
- i += skipCodes;
- }
- }
- /**
- * Apply OpCodes associated with updating an existing ICU.
- *
- * @param tView Current `TView`
- * @param tIcu Current `TIcu`
- * @param bindingsStartIndex Location of the first `ɵɵi18nApply`
- * @param lView Current `LView`
- */
- function applyIcuUpdateCase(tView, tIcu, bindingsStartIndex, lView) {
- ngDevMode && assertIndexInRange(lView, tIcu.currentCaseLViewIndex);
- let activeCaseIndex = lView[tIcu.currentCaseLViewIndex];
- if (activeCaseIndex !== null) {
- let mask = changeMask;
- if (activeCaseIndex < 0) {
- // Clear the flag.
- // Negative number means that the ICU was freshly created and we need to force the update.
- activeCaseIndex = lView[tIcu.currentCaseLViewIndex] = ~activeCaseIndex;
- // -1 is same as all bits on, which simulates creation since it marks all bits dirty
- mask = -1;
- }
- applyUpdateOpCodes(tView, lView, tIcu.update[activeCaseIndex], bindingsStartIndex, mask);
- }
- }
- /**
- * Apply OpCodes associated with switching a case on ICU.
- *
- * This involves tearing down existing case and than building up a new case.
- *
- * @param tView Current `TView`
- * @param tIcu Current `TIcu`
- * @param lView Current `LView`
- * @param value Value of the case to update to.
- */
- function applyIcuSwitchCase(tView, tIcu, lView, value) {
- // Rebuild a new case for this ICU
- const caseIndex = getCaseIndex(tIcu, value);
- let activeCaseIndex = getCurrentICUCaseIndex(tIcu, lView);
- if (activeCaseIndex !== caseIndex) {
- applyIcuSwitchCaseRemove(tView, tIcu, lView);
- lView[tIcu.currentCaseLViewIndex] = caseIndex === null ? null : ~caseIndex;
- if (caseIndex !== null) {
- // Add the nodes for the new case
- const anchorRNode = lView[tIcu.anchorIdx];
- if (anchorRNode) {
- ngDevMode && assertDomNode(anchorRNode);
- applyMutableOpCodes(tView, tIcu.create[caseIndex], lView, anchorRNode);
- }
- }
- }
- }
- /**
- * Apply OpCodes associated with tearing ICU case.
- *
- * This involves tearing down existing case and than building up a new case.
- *
- * @param tView Current `TView`
- * @param tIcu Current `TIcu`
- * @param lView Current `LView`
- */
- function applyIcuSwitchCaseRemove(tView, tIcu, lView) {
- let activeCaseIndex = getCurrentICUCaseIndex(tIcu, lView);
- if (activeCaseIndex !== null) {
- const removeCodes = tIcu.remove[activeCaseIndex];
- for (let i = 0; i < removeCodes.length; i++) {
- const nodeOrIcuIndex = removeCodes[i];
- if (nodeOrIcuIndex > 0) {
- // Positive numbers are `RNode`s.
- const rNode = getNativeByIndex(nodeOrIcuIndex, lView);
- rNode !== null && nativeRemoveNode(lView[RENDERER], rNode);
- }
- else {
- // Negative numbers are ICUs
- applyIcuSwitchCaseRemove(tView, getTIcu(tView, ~nodeOrIcuIndex), lView);
- }
- }
- }
- }
- /**
- * Returns the index of the current case of an ICU expression depending on the main binding value
- *
- * @param icuExpression
- * @param bindingValue The value of the main binding used by this ICU expression
- */
- function getCaseIndex(icuExpression, bindingValue) {
- let index = icuExpression.cases.indexOf(bindingValue);
- if (index === -1) {
- switch (icuExpression.type) {
- case 1 /* plural */: {
- const resolvedCase = getPluralCase(bindingValue, getLocaleId());
- index = icuExpression.cases.indexOf(resolvedCase);
- if (index === -1 && resolvedCase !== 'other') {
- index = icuExpression.cases.indexOf('other');
- }
- break;
- }
- case 0 /* select */: {
- index = icuExpression.cases.indexOf('other');
- break;
- }
- }
- }
- return index === -1 ? null : index;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function loadIcuContainerVisitor() {
- const _stack = [];
- let _index = -1;
- let _lView;
- let _removes;
- /**
- * Retrieves a set of root nodes from `TIcu.remove`. Used by `TNodeType.ICUContainer`
- * to determine which root belong to the ICU.
- *
- * Example of usage.
- * ```
- * const nextRNode = icuContainerIteratorStart(tIcuContainerNode, lView);
- * let rNode: RNode|null;
- * while(rNode = nextRNode()) {
- * console.log(rNode);
- * }
- * ```
- *
- * @param tIcuContainerNode Current `TIcuContainerNode`
- * @param lView `LView` where the `RNode`s should be looked up.
- */
- function icuContainerIteratorStart(tIcuContainerNode, lView) {
- _lView = lView;
- while (_stack.length)
- _stack.pop();
- ngDevMode && assertTNodeForLView(tIcuContainerNode, lView);
- enterIcu(tIcuContainerNode.value, lView);
- return icuContainerIteratorNext;
- }
- function enterIcu(tIcu, lView) {
- _index = 0;
- const currentCase = getCurrentICUCaseIndex(tIcu, lView);
- if (currentCase !== null) {
- ngDevMode && assertNumberInRange(currentCase, 0, tIcu.cases.length - 1);
- _removes = tIcu.remove[currentCase];
- }
- else {
- _removes = EMPTY_ARRAY;
- }
- }
- function icuContainerIteratorNext() {
- if (_index < _removes.length) {
- const removeOpCode = _removes[_index++];
- ngDevMode && assertNumber(removeOpCode, 'Expecting OpCode number');
- if (removeOpCode > 0) {
- const rNode = _lView[removeOpCode];
- ngDevMode && assertDomNode(rNode);
- return rNode;
- }
- else {
- _stack.push(_index, _removes);
- // ICUs are represented by negative indices
- const tIcuIndex = ~removeOpCode;
- const tIcu = _lView[TVIEW].data[tIcuIndex];
- ngDevMode && assertTIcu(tIcu);
- enterIcu(tIcu, _lView);
- return icuContainerIteratorNext();
- }
- }
- else {
- if (_stack.length === 0) {
- return null;
- }
- else {
- _removes = _stack.pop();
- _index = _stack.pop();
- return icuContainerIteratorNext();
- }
- }
- }
- return icuContainerIteratorStart;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Converts `I18nCreateOpCodes` array into a human readable format.
- *
- * This function is attached to the `I18nCreateOpCodes.debug` property if `ngDevMode` is enabled.
- * This function provides a human readable view of the opcodes. This is useful when debugging the
- * application as well as writing more readable tests.
- *
- * @param this `I18nCreateOpCodes` if attached as a method.
- * @param opcodes `I18nCreateOpCodes` if invoked as a function.
- */
- function i18nCreateOpCodesToString(opcodes) {
- const createOpCodes = opcodes || (Array.isArray(this) ? this : []);
- let lines = [];
- for (let i = 0; i < createOpCodes.length; i++) {
- const opCode = createOpCodes[i++];
- const text = createOpCodes[i];
- const isComment = (opCode & I18nCreateOpCode.COMMENT) === I18nCreateOpCode.COMMENT;
- const appendNow = (opCode & I18nCreateOpCode.APPEND_EAGERLY) === I18nCreateOpCode.APPEND_EAGERLY;
- const index = opCode >>> I18nCreateOpCode.SHIFT;
- lines.push(`lView[${index}] = document.${isComment ? 'createComment' : 'createText'}(${JSON.stringify(text)});`);
- if (appendNow) {
- lines.push(`parent.appendChild(lView[${index}]);`);
- }
- }
- return lines;
- }
- /**
- * Converts `I18nUpdateOpCodes` array into a human readable format.
- *
- * This function is attached to the `I18nUpdateOpCodes.debug` property if `ngDevMode` is enabled.
- * This function provides a human readable view of the opcodes. This is useful when debugging the
- * application as well as writing more readable tests.
- *
- * @param this `I18nUpdateOpCodes` if attached as a method.
- * @param opcodes `I18nUpdateOpCodes` if invoked as a function.
- */
- function i18nUpdateOpCodesToString(opcodes) {
- const parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));
- let lines = [];
- function consumeOpCode(value) {
- const ref = value >>> 2 /* SHIFT_REF */;
- const opCode = value & 3 /* MASK_OPCODE */;
- switch (opCode) {
- case 0 /* Text */:
- return `(lView[${ref}] as Text).textContent = $$$`;
- case 1 /* Attr */:
- const attrName = parser.consumeString();
- const sanitizationFn = parser.consumeFunction();
- const value = sanitizationFn ? `(${sanitizationFn})($$$)` : '$$$';
- return `(lView[${ref}] as Element).setAttribute('${attrName}', ${value})`;
- case 2 /* IcuSwitch */:
- return `icuSwitchCase(${ref}, $$$)`;
- case 3 /* IcuUpdate */:
- return `icuUpdateCase(${ref})`;
- }
- throw new Error('unexpected OpCode');
- }
- while (parser.hasMore()) {
- let mask = parser.consumeNumber();
- let size = parser.consumeNumber();
- const end = parser.i + size;
- const statements = [];
- let statement = '';
- while (parser.i < end) {
- let value = parser.consumeNumberOrString();
- if (typeof value === 'string') {
- statement += value;
- }
- else if (value < 0) {
- // Negative numbers are ref indexes
- // Here `i` refers to current binding index. It is to signify that the value is relative,
- // rather than absolute.
- statement += '${lView[i' + value + ']}';
- }
- else {
- // Positive numbers are operations.
- const opCodeText = consumeOpCode(value);
- statements.push(opCodeText.replace('$$$', '`' + statement + '`') + ';');
- statement = '';
- }
- }
- lines.push(`if (mask & 0b${mask.toString(2)}) { ${statements.join(' ')} }`);
- }
- return lines;
- }
- /**
- * Converts `I18nCreateOpCodes` array into a human readable format.
- *
- * This function is attached to the `I18nCreateOpCodes.debug` if `ngDevMode` is enabled. This
- * function provides a human readable view of the opcodes. This is useful when debugging the
- * application as well as writing more readable tests.
- *
- * @param this `I18nCreateOpCodes` if attached as a method.
- * @param opcodes `I18nCreateOpCodes` if invoked as a function.
- */
- function icuCreateOpCodesToString(opcodes) {
- const parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));
- let lines = [];
- function consumeOpCode(opCode) {
- const parent = getParentFromIcuCreateOpCode(opCode);
- const ref = getRefFromIcuCreateOpCode(opCode);
- switch (getInstructionFromIcuCreateOpCode(opCode)) {
- case 0 /* AppendChild */:
- return `(lView[${parent}] as Element).appendChild(lView[${lastRef}])`;
- case 1 /* Attr */:
- return `(lView[${ref}] as Element).setAttribute("${parser.consumeString()}", "${parser.consumeString()}")`;
- }
- throw new Error('Unexpected OpCode: ' + getInstructionFromIcuCreateOpCode(opCode));
- }
- let lastRef = -1;
- while (parser.hasMore()) {
- let value = parser.consumeNumberStringOrMarker();
- if (value === ICU_MARKER) {
- const text = parser.consumeString();
- lastRef = parser.consumeNumber();
- lines.push(`lView[${lastRef}] = document.createComment("${text}")`);
- }
- else if (value === ELEMENT_MARKER) {
- const text = parser.consumeString();
- lastRef = parser.consumeNumber();
- lines.push(`lView[${lastRef}] = document.createElement("${text}")`);
- }
- else if (typeof value === 'string') {
- lastRef = parser.consumeNumber();
- lines.push(`lView[${lastRef}] = document.createTextNode("${value}")`);
- }
- else if (typeof value === 'number') {
- const line = consumeOpCode(value);
- line && lines.push(line);
- }
- else {
- throw new Error('Unexpected value');
- }
- }
- return lines;
- }
- /**
- * Converts `I18nRemoveOpCodes` array into a human readable format.
- *
- * This function is attached to the `I18nRemoveOpCodes.debug` if `ngDevMode` is enabled. This
- * function provides a human readable view of the opcodes. This is useful when debugging the
- * application as well as writing more readable tests.
- *
- * @param this `I18nRemoveOpCodes` if attached as a method.
- * @param opcodes `I18nRemoveOpCodes` if invoked as a function.
- */
- function i18nRemoveOpCodesToString(opcodes) {
- const removeCodes = opcodes || (Array.isArray(this) ? this : []);
- let lines = [];
- for (let i = 0; i < removeCodes.length; i++) {
- const nodeOrIcuIndex = removeCodes[i];
- if (nodeOrIcuIndex > 0) {
- // Positive numbers are `RNode`s.
- lines.push(`remove(lView[${nodeOrIcuIndex}])`);
- }
- else {
- // Negative numbers are ICUs
- lines.push(`removeNestedICU(${~nodeOrIcuIndex})`);
- }
- }
- return lines;
- }
- class OpCodeParser {
- constructor(codes) {
- this.i = 0;
- this.codes = codes;
- }
- hasMore() {
- return this.i < this.codes.length;
- }
- consumeNumber() {
- let value = this.codes[this.i++];
- assertNumber(value, 'expecting number in OpCode');
- return value;
- }
- consumeString() {
- let value = this.codes[this.i++];
- assertString(value, 'expecting string in OpCode');
- return value;
- }
- consumeFunction() {
- let value = this.codes[this.i++];
- if (value === null || typeof value === 'function') {
- return value;
- }
- throw new Error('expecting function in OpCode');
- }
- consumeNumberOrString() {
- let value = this.codes[this.i++];
- if (typeof value === 'string') {
- return value;
- }
- assertNumber(value, 'expecting number or string in OpCode');
- return value;
- }
- consumeNumberStringOrMarker() {
- let value = this.codes[this.i++];
- if (typeof value === 'string' || typeof value === 'number' || value == ICU_MARKER ||
- value == ELEMENT_MARKER) {
- return value;
- }
- assertNumber(value, 'expecting number, string, ICU_MARKER or ELEMENT_MARKER in OpCode');
- return value;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const BINDING_REGEXP = /�(\d+):?\d*�/gi;
- const ICU_REGEXP = /({\s*�\d+:?\d*�\s*,\s*\S{6}\s*,[\s\S]*})/gi;
- const NESTED_ICU = /�(\d+)�/;
- const ICU_BLOCK_REGEXP = /^\s*(�\d+:?\d*�)\s*,\s*(select|plural)\s*,/;
- const MARKER = `�`;
- const SUBTEMPLATE_REGEXP = /�\/?\*(\d+:\d+)�/gi;
- const PH_REGEXP = /�(\/?[#*]\d+):?\d*�/gi;
- /**
- * Angular Dart introduced &ngsp; as a placeholder for non-removable space, see:
- * https://github.com/dart-lang/angular/blob/0bb611387d29d65b5af7f9d2515ab571fd3fbee4/_tests/test/compiler/preserve_whitespace_test.dart#L25-L32
- * In Angular Dart &ngsp; is converted to the 0xE500 PUA (Private Use Areas) unicode character
- * and later on replaced by a space. We are re-implementing the same idea here, since translations
- * might contain this special character.
- */
- const NGSP_UNICODE_REGEXP = /\uE500/g;
- function replaceNgsp(value) {
- return value.replace(NGSP_UNICODE_REGEXP, ' ');
- }
- /**
- * Create dynamic nodes from i18n translation block.
- *
- * - Text nodes are created synchronously
- * - TNodes are linked into tree lazily
- *
- * @param tView Current `TView`
- * @parentTNodeIndex index to the parent TNode of this i18n block
- * @param lView Current `LView`
- * @param index Index of `ɵɵi18nStart` instruction.
- * @param message Message to translate.
- * @param subTemplateIndex Index into the sub template of message translation. (ie in case of
- * `ngIf`) (-1 otherwise)
- */
- function i18nStartFirstCreatePass(tView, parentTNodeIndex, lView, index, message, subTemplateIndex) {
- const rootTNode = getCurrentParentTNode();
- const createOpCodes = [];
- const updateOpCodes = [];
- const existingTNodeStack = [[]];
- if (ngDevMode) {
- attachDebugGetter(createOpCodes, i18nCreateOpCodesToString);
- attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);
- }
- message = getTranslationForTemplate(message, subTemplateIndex);
- const msgParts = replaceNgsp(message).split(PH_REGEXP);
- for (let i = 0; i < msgParts.length; i++) {
- let value = msgParts[i];
- if ((i & 1) === 0) {
- // Even indexes are text (including bindings & ICU expressions)
- const parts = i18nParseTextIntoPartsAndICU(value);
- for (let j = 0; j < parts.length; j++) {
- let part = parts[j];
- if ((j & 1) === 0) {
- // `j` is odd therefore `part` is string
- const text = part;
- ngDevMode && assertString(text, 'Parsed ICU part should be string');
- if (text !== '') {
- i18nStartFirstCreatePassProcessTextNode(tView, rootTNode, existingTNodeStack[0], createOpCodes, updateOpCodes, lView, text);
- }
- }
- else {
- // `j` is Even therefor `part` is an `ICUExpression`
- const icuExpression = part;
- // Verify that ICU expression has the right shape. Translations might contain invalid
- // constructions (while original messages were correct), so ICU parsing at runtime may
- // not succeed (thus `icuExpression` remains a string).
- // Note: we intentionally retain the error here by not using `ngDevMode`, because
- // the value can change based on the locale and users aren't guaranteed to hit
- // an invalid string while they're developing.
- if (typeof icuExpression !== 'object') {
- throw new Error(`Unable to parse ICU expression in "${message}" message.`);
- }
- const icuContainerTNode = createTNodeAndAddOpCode(tView, rootTNode, existingTNodeStack[0], lView, createOpCodes, ngDevMode ? `ICU ${index}:${icuExpression.mainBinding}` : '', true);
- const icuNodeIndex = icuContainerTNode.index;
- ngDevMode &&
- assertGreaterThanOrEqual(icuNodeIndex, HEADER_OFFSET, 'Index must be in absolute LView offset');
- icuStart(tView, lView, updateOpCodes, parentTNodeIndex, icuExpression, icuNodeIndex);
- }
- }
- }
- else {
- // Odd indexes are placeholders (elements and sub-templates)
- // At this point value is something like: '/#1:2' (originally coming from '�/#1:2�')
- const isClosing = value.charCodeAt(0) === 47 /* SLASH */;
- const type = value.charCodeAt(isClosing ? 1 : 0);
- ngDevMode && assertOneOf(type, 42 /* STAR */, 35 /* HASH */);
- const index = HEADER_OFFSET + Number.parseInt(value.substring((isClosing ? 2 : 1)));
- if (isClosing) {
- existingTNodeStack.shift();
- setCurrentTNode(getCurrentParentTNode(), false);
- }
- else {
- const tNode = createTNodePlaceholder(tView, existingTNodeStack[0], index);
- existingTNodeStack.unshift([]);
- setCurrentTNode(tNode, true);
- }
- }
- }
- tView.data[index] = {
- create: createOpCodes,
- update: updateOpCodes,
- };
- }
- /**
- * Allocate space in i18n Range add create OpCode instruction to crete a text or comment node.
- *
- * @param tView Current `TView` needed to allocate space in i18n range.
- * @param rootTNode Root `TNode` of the i18n block. This node determines if the new TNode will be
- * added as part of the `i18nStart` instruction or as part of the `TNode.insertBeforeIndex`.
- * @param existingTNodes internal state for `addTNodeAndUpdateInsertBeforeIndex`.
- * @param lView Current `LView` needed to allocate space in i18n range.
- * @param createOpCodes Array storing `I18nCreateOpCodes` where new opCodes will be added.
- * @param text Text to be added when the `Text` or `Comment` node will be created.
- * @param isICU true if a `Comment` node for ICU (instead of `Text`) node should be created.
- */
- function createTNodeAndAddOpCode(tView, rootTNode, existingTNodes, lView, createOpCodes, text, isICU) {
- const i18nNodeIdx = allocExpando(tView, lView, 1, null);
- let opCode = i18nNodeIdx << I18nCreateOpCode.SHIFT;
- let parentTNode = getCurrentParentTNode();
- if (rootTNode === parentTNode) {
- // FIXME(misko): A null `parentTNode` should represent when we fall of the `LView` boundary.
- // (there is no parent), but in some circumstances (because we are inconsistent about how we set
- // `previousOrParentTNode`) it could point to `rootTNode` So this is a work around.
- parentTNode = null;
- }
- if (parentTNode === null) {
- // If we don't have a parent that means that we can eagerly add nodes.
- // If we have a parent than these nodes can't be added now (as the parent has not been created
- // yet) and instead the `parentTNode` is responsible for adding it. See
- // `TNode.insertBeforeIndex`
- opCode |= I18nCreateOpCode.APPEND_EAGERLY;
- }
- if (isICU) {
- opCode |= I18nCreateOpCode.COMMENT;
- ensureIcuContainerVisitorLoaded(loadIcuContainerVisitor);
- }
- createOpCodes.push(opCode, text === null ? '' : text);
- // We store `{{?}}` so that when looking at debug `TNodeType.template` we can see where the
- // bindings are.
- const tNode = createTNodeAtIndex(tView, i18nNodeIdx, isICU ? 32 /* Icu */ : 1 /* Text */, text === null ? (ngDevMode ? '{{?}}' : '') : text, null);
- addTNodeAndUpdateInsertBeforeIndex(existingTNodes, tNode);
- const tNodeIdx = tNode.index;
- setCurrentTNode(tNode, false /* Text nodes are self closing */);
- if (parentTNode !== null && rootTNode !== parentTNode) {
- // We are a child of deeper node (rather than a direct child of `i18nStart` instruction.)
- // We have to make sure to add ourselves to the parent.
- setTNodeInsertBeforeIndex(parentTNode, tNodeIdx);
- }
- return tNode;
- }
- /**
- * Processes text node in i18n block.
- *
- * Text nodes can have:
- * - Create instruction in `createOpCodes` for creating the text node.
- * - Allocate spec for text node in i18n range of `LView`
- * - If contains binding:
- * - bindings => allocate space in i18n range of `LView` to store the binding value.
- * - populate `updateOpCodes` with update instructions.
- *
- * @param tView Current `TView`
- * @param rootTNode Root `TNode` of the i18n block. This node determines if the new TNode will
- * be added as part of the `i18nStart` instruction or as part of the
- * `TNode.insertBeforeIndex`.
- * @param existingTNodes internal state for `addTNodeAndUpdateInsertBeforeIndex`.
- * @param createOpCodes Location where the creation OpCodes will be stored.
- * @param lView Current `LView`
- * @param text The translated text (which may contain binding)
- */
- function i18nStartFirstCreatePassProcessTextNode(tView, rootTNode, existingTNodes, createOpCodes, updateOpCodes, lView, text) {
- const hasBinding = text.match(BINDING_REGEXP);
- const tNode = createTNodeAndAddOpCode(tView, rootTNode, existingTNodes, lView, createOpCodes, hasBinding ? null : text, false);
- if (hasBinding) {
- generateBindingUpdateOpCodes(updateOpCodes, text, tNode.index);
- }
- }
- /**
- * See `i18nAttributes` above.
- */
- function i18nAttributesFirstPass(tView, index, values) {
- const previousElement = getCurrentTNode();
- const previousElementIndex = previousElement.index;
- const updateOpCodes = [];
- if (ngDevMode) {
- attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);
- }
- if (tView.firstCreatePass && tView.data[index] === null) {
- for (let i = 0; i < values.length; i += 2) {
- const attrName = values[i];
- const message = values[i + 1];
- if (message !== '') {
- // Check if attribute value contains an ICU and throw an error if that's the case.
- // ICUs in element attributes are not supported.
- // Note: we intentionally retain the error here by not using `ngDevMode`, because
- // the `value` can change based on the locale and users aren't guaranteed to hit
- // an invalid string while they're developing.
- if (ICU_REGEXP.test(message)) {
- throw new Error(`ICU expressions are not supported in attributes. Message: "${message}".`);
- }
- // i18n attributes that hit this code path are guaranteed to have bindings, because
- // the compiler treats static i18n attributes as regular attribute bindings.
- generateBindingUpdateOpCodes(updateOpCodes, message, previousElementIndex, attrName);
- }
- }
- tView.data[index] = updateOpCodes;
- }
- }
- /**
- * Generate the OpCodes to update the bindings of a string.
- *
- * @param updateOpCodes Place where the update opcodes will be stored.
- * @param str The string containing the bindings.
- * @param destinationNode Index of the destination node which will receive the binding.
- * @param attrName Name of the attribute, if the string belongs to an attribute.
- * @param sanitizeFn Sanitization function used to sanitize the string after update, if necessary.
- */
- function generateBindingUpdateOpCodes(updateOpCodes, str, destinationNode, attrName, sanitizeFn = null) {
- ngDevMode &&
- assertGreaterThanOrEqual(destinationNode, HEADER_OFFSET, 'Index must be in absolute LView offset');
- const maskIndex = updateOpCodes.length; // Location of mask
- const sizeIndex = maskIndex + 1; // location of size for skipping
- updateOpCodes.push(null, null); // Alloc space for mask and size
- const startIndex = maskIndex + 2; // location of first allocation.
- if (ngDevMode) {
- attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);
- }
- const textParts = str.split(BINDING_REGEXP);
- let mask = 0;
- for (let j = 0; j < textParts.length; j++) {
- const textValue = textParts[j];
- if (j & 1) {
- // Odd indexes are bindings
- const bindingIndex = parseInt(textValue, 10);
- updateOpCodes.push(-1 - bindingIndex);
- mask = mask | toMaskBit(bindingIndex);
- }
- else if (textValue !== '') {
- // Even indexes are text
- updateOpCodes.push(textValue);
- }
- }
- updateOpCodes.push(destinationNode << 2 /* SHIFT_REF */ |
- (attrName ? 1 /* Attr */ : 0 /* Text */));
- if (attrName) {
- updateOpCodes.push(attrName, sanitizeFn);
- }
- updateOpCodes[maskIndex] = mask;
- updateOpCodes[sizeIndex] = updateOpCodes.length - startIndex;
- return mask;
- }
- /**
- * Convert binding index to mask bit.
- *
- * Each index represents a single bit on the bit-mask. Because bit-mask only has 32 bits, we make
- * the 32nd bit share all masks for all bindings higher than 32. Since it is extremely rare to
- * have more than 32 bindings this will be hit very rarely. The downside of hitting this corner
- * case is that we will execute binding code more often than necessary. (penalty of performance)
- */
- function toMaskBit(bindingIndex) {
- return 1 << Math.min(bindingIndex, 31);
- }
- function isRootTemplateMessage(subTemplateIndex) {
- return subTemplateIndex === -1;
- }
- /**
- * Removes everything inside the sub-templates of a message.
- */
- function removeInnerTemplateTranslation(message) {
- let match;
- let res = '';
- let index = 0;
- let inTemplate = false;
- let tagMatched;
- while ((match = SUBTEMPLATE_REGEXP.exec(message)) !== null) {
- if (!inTemplate) {
- res += message.substring(index, match.index + match[0].length);
- tagMatched = match[1];
- inTemplate = true;
- }
- else {
- if (match[0] === `${MARKER}/*${tagMatched}${MARKER}`) {
- index = match.index;
- inTemplate = false;
- }
- }
- }
- ngDevMode &&
- assertEqual(inTemplate, false, `Tag mismatch: unable to find the end of the sub-template in the translation "${message}"`);
- res += message.substr(index);
- return res;
- }
- /**
- * Extracts a part of a message and removes the rest.
- *
- * This method is used for extracting a part of the message associated with a template. A
- * translated message can span multiple templates.
- *
- * Example:
- * ```
- * <div i18n>Translate <span *ngIf>me</span>!</div>
- * ```
- *
- * @param message The message to crop
- * @param subTemplateIndex Index of the sub-template to extract. If undefined it returns the
- * external template and removes all sub-templates.
- */
- function getTranslationForTemplate(message, subTemplateIndex) {
- if (isRootTemplateMessage(subTemplateIndex)) {
- // We want the root template message, ignore all sub-templates
- return removeInnerTemplateTranslation(message);
- }
- else {
- // We want a specific sub-template
- const start = message.indexOf(`:${subTemplateIndex}${MARKER}`) + 2 + subTemplateIndex.toString().length;
- const end = message.search(new RegExp(`${MARKER}\\/\\*\\d+:${subTemplateIndex}${MARKER}`));
- return removeInnerTemplateTranslation(message.substring(start, end));
- }
- }
- /**
- * Generate the OpCodes for ICU expressions.
- *
- * @param icuExpression
- * @param index Index where the anchor is stored and an optional `TIcuContainerNode`
- * - `lView[anchorIdx]` points to a `Comment` node representing the anchor for the ICU.
- * - `tView.data[anchorIdx]` points to the `TIcuContainerNode` if ICU is root (`null` otherwise)
- */
- function icuStart(tView, lView, updateOpCodes, parentIdx, icuExpression, anchorIdx) {
- ngDevMode && assertDefined(icuExpression, 'ICU expression must be defined');
- let bindingMask = 0;
- const tIcu = {
- type: icuExpression.type,
- currentCaseLViewIndex: allocExpando(tView, lView, 1, null),
- anchorIdx,
- cases: [],
- create: [],
- remove: [],
- update: []
- };
- addUpdateIcuSwitch(updateOpCodes, icuExpression, anchorIdx);
- setTIcu(tView, anchorIdx, tIcu);
- const values = icuExpression.values;
- for (let i = 0; i < values.length; i++) {
- // Each value is an array of strings & other ICU expressions
- const valueArr = values[i];
- const nestedIcus = [];
- for (let j = 0; j < valueArr.length; j++) {
- const value = valueArr[j];
- if (typeof value !== 'string') {
- // It is an nested ICU expression
- const icuIndex = nestedIcus.push(value) - 1;
- // Replace nested ICU expression by a comment node
- valueArr[j] = `<!--�${icuIndex}�-->`;
- }
- }
- bindingMask = parseIcuCase(tView, tIcu, lView, updateOpCodes, parentIdx, icuExpression.cases[i], valueArr.join(''), nestedIcus) |
- bindingMask;
- }
- if (bindingMask) {
- addUpdateIcuUpdate(updateOpCodes, bindingMask, anchorIdx);
- }
- }
- /**
- * Parses text containing an ICU expression and produces a JSON object for it.
- * Original code from closure library, modified for Angular.
- *
- * @param pattern Text containing an ICU expression that needs to be parsed.
- *
- */
- function parseICUBlock(pattern) {
- const cases = [];
- const values = [];
- let icuType = 1 /* plural */;
- let mainBinding = 0;
- pattern = pattern.replace(ICU_BLOCK_REGEXP, function (str, binding, type) {
- if (type === 'select') {
- icuType = 0 /* select */;
- }
- else {
- icuType = 1 /* plural */;
- }
- mainBinding = parseInt(binding.substr(1), 10);
- return '';
- });
- const parts = i18nParseTextIntoPartsAndICU(pattern);
- // Looking for (key block)+ sequence. One of the keys has to be "other".
- for (let pos = 0; pos < parts.length;) {
- let key = parts[pos++].trim();
- if (icuType === 1 /* plural */) {
- // Key can be "=x", we just want "x"
- key = key.replace(/\s*(?:=)?(\w+)\s*/, '$1');
- }
- if (key.length) {
- cases.push(key);
- }
- const blocks = i18nParseTextIntoPartsAndICU(parts[pos++]);
- if (cases.length > values.length) {
- values.push(blocks);
- }
- }
- // TODO(ocombe): support ICU expressions in attributes, see #21615
- return { type: icuType, mainBinding: mainBinding, cases, values };
- }
- /**
- * Breaks pattern into strings and top level {...} blocks.
- * Can be used to break a message into text and ICU expressions, or to break an ICU expression
- * into keys and cases. Original code from closure library, modified for Angular.
- *
- * @param pattern (sub)Pattern to be broken.
- * @returns An `Array<string|IcuExpression>` where:
- * - odd positions: `string` => text between ICU expressions
- * - even positions: `ICUExpression` => ICU expression parsed into `ICUExpression` record.
- */
- function i18nParseTextIntoPartsAndICU(pattern) {
- if (!pattern) {
- return [];
- }
- let prevPos = 0;
- const braceStack = [];
- const results = [];
- const braces = /[{}]/g;
- // lastIndex doesn't get set to 0 so we have to.
- braces.lastIndex = 0;
- let match;
- while (match = braces.exec(pattern)) {
- const pos = match.index;
- if (match[0] == '}') {
- braceStack.pop();
- if (braceStack.length == 0) {
- // End of the block.
- const block = pattern.substring(prevPos, pos);
- if (ICU_BLOCK_REGEXP.test(block)) {
- results.push(parseICUBlock(block));
- }
- else {
- results.push(block);
- }
- prevPos = pos + 1;
- }
- }
- else {
- if (braceStack.length == 0) {
- const substring = pattern.substring(prevPos, pos);
- results.push(substring);
- prevPos = pos + 1;
- }
- braceStack.push('{');
- }
- }
- const substring = pattern.substring(prevPos);
- results.push(substring);
- return results;
- }
- /**
- * Parses a node, its children and its siblings, and generates the mutate & update OpCodes.
- *
- */
- function parseIcuCase(tView, tIcu, lView, updateOpCodes, parentIdx, caseName, unsafeCaseHtml, nestedIcus) {
- const create = [];
- const remove = [];
- const update = [];
- if (ngDevMode) {
- attachDebugGetter(create, icuCreateOpCodesToString);
- attachDebugGetter(remove, i18nRemoveOpCodesToString);
- attachDebugGetter(update, i18nUpdateOpCodesToString);
- }
- tIcu.cases.push(caseName);
- tIcu.create.push(create);
- tIcu.remove.push(remove);
- tIcu.update.push(update);
- const inertBodyHelper = getInertBodyHelper(getDocument());
- const inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeCaseHtml);
- ngDevMode && assertDefined(inertBodyElement, 'Unable to generate inert body element');
- const inertRootNode = getTemplateContent(inertBodyElement) || inertBodyElement;
- if (inertRootNode) {
- return walkIcuTree(tView, tIcu, lView, updateOpCodes, create, remove, update, inertRootNode, parentIdx, nestedIcus, 0);
- }
- else {
- return 0;
- }
- }
- function walkIcuTree(tView, tIcu, lView, sharedUpdateOpCodes, create, remove, update, parentNode, parentIdx, nestedIcus, depth) {
- let bindingMask = 0;
- let currentNode = parentNode.firstChild;
- while (currentNode) {
- const newIndex = allocExpando(tView, lView, 1, null);
- switch (currentNode.nodeType) {
- case Node.ELEMENT_NODE:
- const element = currentNode;
- const tagName = element.tagName.toLowerCase();
- if (VALID_ELEMENTS.hasOwnProperty(tagName)) {
- addCreateNodeAndAppend(create, ELEMENT_MARKER, tagName, parentIdx, newIndex);
- tView.data[newIndex] = tagName;
- const elAttrs = element.attributes;
- for (let i = 0; i < elAttrs.length; i++) {
- const attr = elAttrs.item(i);
- const lowerAttrName = attr.name.toLowerCase();
- const hasBinding = !!attr.value.match(BINDING_REGEXP);
- // we assume the input string is safe, unless it's using a binding
- if (hasBinding) {
- if (VALID_ATTRS.hasOwnProperty(lowerAttrName)) {
- if (URI_ATTRS[lowerAttrName]) {
- generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name, _sanitizeUrl);
- }
- else if (SRCSET_ATTRS[lowerAttrName]) {
- generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name, sanitizeSrcset);
- }
- else {
- generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name);
- }
- }
- else {
- ngDevMode &&
- console.warn(`WARNING: ignoring unsafe attribute value ` +
- `${lowerAttrName} on element ${tagName} ` +
- `(see https://g.co/ng/security#xss)`);
- }
- }
- else {
- addCreateAttribute(create, newIndex, attr);
- }
- }
- // Parse the children of this node (if any)
- bindingMask = walkIcuTree(tView, tIcu, lView, sharedUpdateOpCodes, create, remove, update, currentNode, newIndex, nestedIcus, depth + 1) |
- bindingMask;
- addRemoveNode(remove, newIndex, depth);
- }
- break;
- case Node.TEXT_NODE:
- const value = currentNode.textContent || '';
- const hasBinding = value.match(BINDING_REGEXP);
- addCreateNodeAndAppend(create, null, hasBinding ? '' : value, parentIdx, newIndex);
- addRemoveNode(remove, newIndex, depth);
- if (hasBinding) {
- bindingMask = generateBindingUpdateOpCodes(update, value, newIndex) | bindingMask;
- }
- break;
- case Node.COMMENT_NODE:
- // Check if the comment node is a placeholder for a nested ICU
- const isNestedIcu = NESTED_ICU.exec(currentNode.textContent || '');
- if (isNestedIcu) {
- const nestedIcuIndex = parseInt(isNestedIcu[1], 10);
- const icuExpression = nestedIcus[nestedIcuIndex];
- // Create the comment node that will anchor the ICU expression
- addCreateNodeAndAppend(create, ICU_MARKER, ngDevMode ? `nested ICU ${nestedIcuIndex}` : '', parentIdx, newIndex);
- icuStart(tView, lView, sharedUpdateOpCodes, parentIdx, icuExpression, newIndex);
- addRemoveNestedIcu(remove, newIndex, depth);
- }
- break;
- }
- currentNode = currentNode.nextSibling;
- }
- return bindingMask;
- }
- function addRemoveNode(remove, index, depth) {
- if (depth === 0) {
- remove.push(index);
- }
- }
- function addRemoveNestedIcu(remove, index, depth) {
- if (depth === 0) {
- remove.push(~index); // remove ICU at `index`
- remove.push(index); // remove ICU comment at `index`
- }
- }
- function addUpdateIcuSwitch(update, icuExpression, index) {
- update.push(toMaskBit(icuExpression.mainBinding), 2, -1 - icuExpression.mainBinding, index << 2 /* SHIFT_REF */ | 2 /* IcuSwitch */);
- }
- function addUpdateIcuUpdate(update, bindingMask, index) {
- update.push(bindingMask, 1, index << 2 /* SHIFT_REF */ | 3 /* IcuUpdate */);
- }
- function addCreateNodeAndAppend(create, marker, text, appendToParentIdx, createAtIdx) {
- if (marker !== null) {
- create.push(marker);
- }
- create.push(text, createAtIdx, icuCreateOpCode(0 /* AppendChild */, appendToParentIdx, createAtIdx));
- }
- function addCreateAttribute(create, newIndex, attr) {
- create.push(newIndex << 1 /* SHIFT_REF */ | 1 /* Attr */, attr.name, attr.value);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // i18nPostprocess consts
- const ROOT_TEMPLATE_ID = 0;
- const PP_MULTI_VALUE_PLACEHOLDERS_REGEXP = /\[(�.+?�?)\]/;
- const PP_PLACEHOLDERS_REGEXP = /\[(�.+?�?)\]|(�\/?\*\d+:\d+�)/g;
- const PP_ICU_VARS_REGEXP = /({\s*)(VAR_(PLURAL|SELECT)(_\d+)?)(\s*,)/g;
- const PP_ICU_PLACEHOLDERS_REGEXP = /{([A-Z0-9_]+)}/g;
- const PP_ICUS_REGEXP = /�I18N_EXP_(ICU(_\d+)?)�/g;
- const PP_CLOSE_TEMPLATE_REGEXP = /\/\*/;
- const PP_TEMPLATE_ID_REGEXP = /\d+\:(\d+)/;
- /**
- * Handles message string post-processing for internationalization.
- *
- * Handles message string post-processing by transforming it from intermediate
- * format (that might contain some markers that we need to replace) to the final
- * form, consumable by i18nStart instruction. Post processing steps include:
- *
- * 1. Resolve all multi-value cases (like [�*1:1��#2:1�|�#4:1�|�5�])
- * 2. Replace all ICU vars (like "VAR_PLURAL")
- * 3. Replace all placeholders used inside ICUs in a form of {PLACEHOLDER}
- * 4. Replace all ICU references with corresponding values (like �ICU_EXP_ICU_1�)
- * in case multiple ICUs have the same placeholder name
- *
- * @param message Raw translation string for post processing
- * @param replacements Set of replacements that should be applied
- *
- * @returns Transformed string that can be consumed by i18nStart instruction
- *
- * @codeGenApi
- */
- function i18nPostprocess(message, replacements = {}) {
- /**
- * Step 1: resolve all multi-value placeholders like [�#5�|�*1:1��#2:1�|�#4:1�]
- *
- * Note: due to the way we process nested templates (BFS), multi-value placeholders are typically
- * grouped by templates, for example: [�#5�|�#6�|�#1:1�|�#3:2�] where �#5� and �#6� belong to root
- * template, �#1:1� belong to nested template with index 1 and �#1:2� - nested template with index
- * 3. However in real templates the order might be different: i.e. �#1:1� and/or �#3:2� may go in
- * front of �#6�. The post processing step restores the right order by keeping track of the
- * template id stack and looks for placeholders that belong to the currently active template.
- */
- let result = message;
- if (PP_MULTI_VALUE_PLACEHOLDERS_REGEXP.test(message)) {
- const matches = {};
- const templateIdsStack = [ROOT_TEMPLATE_ID];
- result = result.replace(PP_PLACEHOLDERS_REGEXP, (m, phs, tmpl) => {
- const content = phs || tmpl;
- const placeholders = matches[content] || [];
- if (!placeholders.length) {
- content.split('|').forEach((placeholder) => {
- const match = placeholder.match(PP_TEMPLATE_ID_REGEXP);
- const templateId = match ? parseInt(match[1], 10) : ROOT_TEMPLATE_ID;
- const isCloseTemplateTag = PP_CLOSE_TEMPLATE_REGEXP.test(placeholder);
- placeholders.push([templateId, isCloseTemplateTag, placeholder]);
- });
- matches[content] = placeholders;
- }
- if (!placeholders.length) {
- throw new Error(`i18n postprocess: unmatched placeholder - ${content}`);
- }
- const currentTemplateId = templateIdsStack[templateIdsStack.length - 1];
- let idx = 0;
- // find placeholder index that matches current template id
- for (let i = 0; i < placeholders.length; i++) {
- if (placeholders[i][0] === currentTemplateId) {
- idx = i;
- break;
- }
- }
- // update template id stack based on the current tag extracted
- const [templateId, isCloseTemplateTag, placeholder] = placeholders[idx];
- if (isCloseTemplateTag) {
- templateIdsStack.pop();
- }
- else if (currentTemplateId !== templateId) {
- templateIdsStack.push(templateId);
- }
- // remove processed tag from the list
- placeholders.splice(idx, 1);
- return placeholder;
- });
- }
- // return current result if no replacements specified
- if (!Object.keys(replacements).length) {
- return result;
- }
- /**
- * Step 2: replace all ICU vars (like "VAR_PLURAL")
- */
- result = result.replace(PP_ICU_VARS_REGEXP, (match, start, key, _type, _idx, end) => {
- return replacements.hasOwnProperty(key) ? `${start}${replacements[key]}${end}` : match;
- });
- /**
- * Step 3: replace all placeholders used inside ICUs in a form of {PLACEHOLDER}
- */
- result = result.replace(PP_ICU_PLACEHOLDERS_REGEXP, (match, key) => {
- return replacements.hasOwnProperty(key) ? replacements[key] : match;
- });
- /**
- * Step 4: replace all ICU references with corresponding values (like �ICU_EXP_ICU_1�) in case
- * multiple ICUs have the same placeholder name
- */
- result = result.replace(PP_ICUS_REGEXP, (match, key) => {
- if (replacements.hasOwnProperty(key)) {
- const list = replacements[key];
- if (!list.length) {
- throw new Error(`i18n postprocess: unmatched ICU - ${match} with key: ${key}`);
- }
- return list.shift();
- }
- return match;
- });
- return result;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Marks a block of text as translatable.
- *
- * The instructions `i18nStart` and `i18nEnd` mark the translation block in the template.
- * The translation `message` is the value which is locale specific. The translation string may
- * contain placeholders which associate inner elements and sub-templates within the translation.
- *
- * The translation `message` placeholders are:
- * - `�{index}(:{block})�`: *Binding Placeholder*: Marks a location where an expression will be
- * interpolated into. The placeholder `index` points to the expression binding index. An optional
- * `block` that matches the sub-template in which it was declared.
- * - `�#{index}(:{block})�`/`�/#{index}(:{block})�`: *Element Placeholder*: Marks the beginning
- * and end of DOM element that were embedded in the original translation block. The placeholder
- * `index` points to the element index in the template instructions set. An optional `block` that
- * matches the sub-template in which it was declared.
- * - `�*{index}:{block}�`/`�/*{index}:{block}�`: *Sub-template Placeholder*: Sub-templates must be
- * split up and translated separately in each angular template function. The `index` points to the
- * `template` instruction index. A `block` that matches the sub-template in which it was declared.
- *
- * @param index A unique index of the translation in the static block.
- * @param messageIndex An index of the translation message from the `def.consts` array.
- * @param subTemplateIndex Optional sub-template index in the `message`.
- *
- * @codeGenApi
- */
- function ɵɵi18nStart(index, messageIndex, subTemplateIndex = -1) {
- const tView = getTView();
- const lView = getLView();
- const adjustedIndex = HEADER_OFFSET + index;
- ngDevMode && assertDefined(tView, `tView should be defined`);
- const message = getConstant(tView.consts, messageIndex);
- const parentTNode = getCurrentParentTNode();
- if (tView.firstCreatePass) {
- i18nStartFirstCreatePass(tView, parentTNode === null ? 0 : parentTNode.index, lView, adjustedIndex, message, subTemplateIndex);
- }
- const tI18n = tView.data[adjustedIndex];
- const sameViewParentTNode = parentTNode === lView[T_HOST] ? null : parentTNode;
- const parentRNode = getClosestRElement(tView, sameViewParentTNode, lView);
- // If `parentTNode` is an `ElementContainer` than it has `<!--ng-container--->`.
- // When we do inserts we have to make sure to insert in front of `<!--ng-container--->`.
- const insertInFrontOf = parentTNode && (parentTNode.type & 8 /* ElementContainer */) ?
- lView[parentTNode.index] :
- null;
- applyCreateOpCodes(lView, tI18n.create, parentRNode, insertInFrontOf);
- setInI18nBlock(true);
- }
- /**
- * Translates a translation block marked by `i18nStart` and `i18nEnd`. It inserts the text/ICU nodes
- * into the render tree, moves the placeholder nodes and removes the deleted nodes.
- *
- * @codeGenApi
- */
- function ɵɵi18nEnd() {
- setInI18nBlock(false);
- }
- /**
- *
- * Use this instruction to create a translation block that doesn't contain any placeholder.
- * It calls both {@link i18nStart} and {@link i18nEnd} in one instruction.
- *
- * The translation `message` is the value which is locale specific. The translation string may
- * contain placeholders which associate inner elements and sub-templates within the translation.
- *
- * The translation `message` placeholders are:
- * - `�{index}(:{block})�`: *Binding Placeholder*: Marks a location where an expression will be
- * interpolated into. The placeholder `index` points to the expression binding index. An optional
- * `block` that matches the sub-template in which it was declared.
- * - `�#{index}(:{block})�`/`�/#{index}(:{block})�`: *Element Placeholder*: Marks the beginning
- * and end of DOM element that were embedded in the original translation block. The placeholder
- * `index` points to the element index in the template instructions set. An optional `block` that
- * matches the sub-template in which it was declared.
- * - `�*{index}:{block}�`/`�/*{index}:{block}�`: *Sub-template Placeholder*: Sub-templates must be
- * split up and translated separately in each angular template function. The `index` points to the
- * `template` instruction index. A `block` that matches the sub-template in which it was declared.
- *
- * @param index A unique index of the translation in the static block.
- * @param messageIndex An index of the translation message from the `def.consts` array.
- * @param subTemplateIndex Optional sub-template index in the `message`.
- *
- * @codeGenApi
- */
- function ɵɵi18n(index, messageIndex, subTemplateIndex) {
- ɵɵi18nStart(index, messageIndex, subTemplateIndex);
- ɵɵi18nEnd();
- }
- /**
- * Marks a list of attributes as translatable.
- *
- * @param index A unique index in the static block
- * @param values
- *
- * @codeGenApi
- */
- function ɵɵi18nAttributes(index, attrsIndex) {
- const tView = getTView();
- ngDevMode && assertDefined(tView, `tView should be defined`);
- const attrs = getConstant(tView.consts, attrsIndex);
- i18nAttributesFirstPass(tView, index + HEADER_OFFSET, attrs);
- }
- /**
- * Stores the values of the bindings during each update cycle in order to determine if we need to
- * update the translated nodes.
- *
- * @param value The binding's value
- * @returns This function returns itself so that it may be chained
- * (e.g. `i18nExp(ctx.name)(ctx.title)`)
- *
- * @codeGenApi
- */
- function ɵɵi18nExp(value) {
- const lView = getLView();
- setMaskBit(bindingUpdated(lView, nextBindingIndex(), value));
- return ɵɵi18nExp;
- }
- /**
- * Updates a translation block or an i18n attribute when the bindings have changed.
- *
- * @param index Index of either {@link i18nStart} (translation block) or {@link i18nAttributes}
- * (i18n attribute) on which it should update the content.
- *
- * @codeGenApi
- */
- function ɵɵi18nApply(index) {
- applyI18n(getTView(), getLView(), index + HEADER_OFFSET);
- }
- /**
- * Handles message string post-processing for internationalization.
- *
- * Handles message string post-processing by transforming it from intermediate
- * format (that might contain some markers that we need to replace) to the final
- * form, consumable by i18nStart instruction. Post processing steps include:
- *
- * 1. Resolve all multi-value cases (like [�*1:1��#2:1�|�#4:1�|�5�])
- * 2. Replace all ICU vars (like "VAR_PLURAL")
- * 3. Replace all placeholders used inside ICUs in a form of {PLACEHOLDER}
- * 4. Replace all ICU references with corresponding values (like �ICU_EXP_ICU_1�)
- * in case multiple ICUs have the same placeholder name
- *
- * @param message Raw translation string for post processing
- * @param replacements Set of replacements that should be applied
- *
- * @returns Transformed string that can be consumed by i18nStart instruction
- *
- * @codeGenApi
- */
- function ɵɵi18nPostprocess(message, replacements = {}) {
- return i18nPostprocess(message, replacements);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Resolves the providers which are defined in the DirectiveDef.
- *
- * When inserting the tokens and the factories in their respective arrays, we can assume that
- * this method is called first for the component (if any), and then for other directives on the same
- * node.
- * As a consequence,the providers are always processed in that order:
- * 1) The view providers of the component
- * 2) The providers of the component
- * 3) The providers of the other directives
- * This matches the structure of the injectables arrays of a view (for each node).
- * So the tokens and the factories can be pushed at the end of the arrays, except
- * in one case for multi providers.
- *
- * @param def the directive definition
- * @param providers: Array of `providers`.
- * @param viewProviders: Array of `viewProviders`.
- */
- function providersResolver(def, providers, viewProviders) {
- const tView = getTView();
- if (tView.firstCreatePass) {
- const isComponent = isComponentDef(def);
- // The list of view providers is processed first, and the flags are updated
- resolveProvider$1(viewProviders, tView.data, tView.blueprint, isComponent, true);
- // Then, the list of providers is processed, and the flags are updated
- resolveProvider$1(providers, tView.data, tView.blueprint, isComponent, false);
- }
- }
- /**
- * Resolves a provider and publishes it to the DI system.
- */
- function resolveProvider$1(provider, tInjectables, lInjectablesBlueprint, isComponent, isViewProvider) {
- provider = resolveForwardRef(provider);
- if (Array.isArray(provider)) {
- // Recursively call `resolveProvider`
- // Recursion is OK in this case because this code will not be in hot-path once we implement
- // cloning of the initial state.
- for (let i = 0; i < provider.length; i++) {
- resolveProvider$1(provider[i], tInjectables, lInjectablesBlueprint, isComponent, isViewProvider);
- }
- }
- else {
- const tView = getTView();
- const lView = getLView();
- let token = isTypeProvider(provider) ? provider : resolveForwardRef(provider.provide);
- let providerFactory = providerToFactory(provider);
- const tNode = getCurrentTNode();
- const beginIndex = tNode.providerIndexes & 1048575 /* ProvidersStartIndexMask */;
- const endIndex = tNode.directiveStart;
- const cptViewProvidersCount = tNode.providerIndexes >> 20 /* CptViewProvidersCountShift */;
- if (isTypeProvider(provider) || !provider.multi) {
- // Single provider case: the factory is created and pushed immediately
- const factory = new NodeInjectorFactory(providerFactory, isViewProvider, ɵɵdirectiveInject);
- const existingFactoryIndex = indexOf(token, tInjectables, isViewProvider ? beginIndex : beginIndex + cptViewProvidersCount, endIndex);
- if (existingFactoryIndex === -1) {
- diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, token);
- registerDestroyHooksIfSupported(tView, provider, tInjectables.length);
- tInjectables.push(token);
- tNode.directiveStart++;
- tNode.directiveEnd++;
- if (isViewProvider) {
- tNode.providerIndexes += 1048576 /* CptViewProvidersCountShifter */;
- }
- lInjectablesBlueprint.push(factory);
- lView.push(factory);
- }
- else {
- lInjectablesBlueprint[existingFactoryIndex] = factory;
- lView[existingFactoryIndex] = factory;
- }
- }
- else {
- // Multi provider case:
- // We create a multi factory which is going to aggregate all the values.
- // Since the output of such a factory depends on content or view injection,
- // we create two of them, which are linked together.
- //
- // The first one (for view providers) is always in the first block of the injectables array,
- // and the second one (for providers) is always in the second block.
- // This is important because view providers have higher priority. When a multi token
- // is being looked up, the view providers should be found first.
- // Note that it is not possible to have a multi factory in the third block (directive block).
- //
- // The algorithm to process multi providers is as follows:
- // 1) If the multi provider comes from the `viewProviders` of the component:
- // a) If the special view providers factory doesn't exist, it is created and pushed.
- // b) Else, the multi provider is added to the existing multi factory.
- // 2) If the multi provider comes from the `providers` of the component or of another
- // directive:
- // a) If the multi factory doesn't exist, it is created and provider pushed into it.
- // It is also linked to the multi factory for view providers, if it exists.
- // b) Else, the multi provider is added to the existing multi factory.
- const existingProvidersFactoryIndex = indexOf(token, tInjectables, beginIndex + cptViewProvidersCount, endIndex);
- const existingViewProvidersFactoryIndex = indexOf(token, tInjectables, beginIndex, beginIndex + cptViewProvidersCount);
- const doesProvidersFactoryExist = existingProvidersFactoryIndex >= 0 &&
- lInjectablesBlueprint[existingProvidersFactoryIndex];
- const doesViewProvidersFactoryExist = existingViewProvidersFactoryIndex >= 0 &&
- lInjectablesBlueprint[existingViewProvidersFactoryIndex];
- if (isViewProvider && !doesViewProvidersFactoryExist ||
- !isViewProvider && !doesProvidersFactoryExist) {
- // Cases 1.a and 2.a
- diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, token);
- const factory = multiFactory(isViewProvider ? multiViewProvidersFactoryResolver : multiProvidersFactoryResolver, lInjectablesBlueprint.length, isViewProvider, isComponent, providerFactory);
- if (!isViewProvider && doesViewProvidersFactoryExist) {
- lInjectablesBlueprint[existingViewProvidersFactoryIndex].providerFactory = factory;
- }
- registerDestroyHooksIfSupported(tView, provider, tInjectables.length, 0);
- tInjectables.push(token);
- tNode.directiveStart++;
- tNode.directiveEnd++;
- if (isViewProvider) {
- tNode.providerIndexes += 1048576 /* CptViewProvidersCountShifter */;
- }
- lInjectablesBlueprint.push(factory);
- lView.push(factory);
- }
- else {
- // Cases 1.b and 2.b
- const indexInFactory = multiFactoryAdd(lInjectablesBlueprint[isViewProvider ? existingViewProvidersFactoryIndex :
- existingProvidersFactoryIndex], providerFactory, !isViewProvider && isComponent);
- registerDestroyHooksIfSupported(tView, provider, existingProvidersFactoryIndex > -1 ? existingProvidersFactoryIndex :
- existingViewProvidersFactoryIndex, indexInFactory);
- }
- if (!isViewProvider && isComponent && doesViewProvidersFactoryExist) {
- lInjectablesBlueprint[existingViewProvidersFactoryIndex].componentProviders++;
- }
- }
- }
- }
- /**
- * Registers the `ngOnDestroy` hook of a provider, if the provider supports destroy hooks.
- * @param tView `TView` in which to register the hook.
- * @param provider Provider whose hook should be registered.
- * @param contextIndex Index under which to find the context for the hook when it's being invoked.
- * @param indexInFactory Only required for `multi` providers. Index of the provider in the multi
- * provider factory.
- */
- function registerDestroyHooksIfSupported(tView, provider, contextIndex, indexInFactory) {
- const providerIsTypeProvider = isTypeProvider(provider);
- if (providerIsTypeProvider || isClassProvider(provider)) {
- const prototype = (provider.useClass || provider).prototype;
- const ngOnDestroy = prototype.ngOnDestroy;
- if (ngOnDestroy) {
- const hooks = tView.destroyHooks || (tView.destroyHooks = []);
- if (!providerIsTypeProvider && provider.multi) {
- ngDevMode &&
- assertDefined(indexInFactory, 'indexInFactory when registering multi factory destroy hook');
- const existingCallbacksIndex = hooks.indexOf(contextIndex);
- if (existingCallbacksIndex === -1) {
- hooks.push(contextIndex, [indexInFactory, ngOnDestroy]);
- }
- else {
- hooks[existingCallbacksIndex + 1].push(indexInFactory, ngOnDestroy);
- }
- }
- else {
- hooks.push(contextIndex, ngOnDestroy);
- }
- }
- }
- }
- /**
- * Add a factory in a multi factory.
- * @returns Index at which the factory was inserted.
- */
- function multiFactoryAdd(multiFactory, factory, isComponentProvider) {
- if (isComponentProvider) {
- multiFactory.componentProviders++;
- }
- return multiFactory.multi.push(factory) - 1;
- }
- /**
- * Returns the index of item in the array, but only in the begin to end range.
- */
- function indexOf(item, arr, begin, end) {
- for (let i = begin; i < end; i++) {
- if (arr[i] === item)
- return i;
- }
- return -1;
- }
- /**
- * Use this with `multi` `providers`.
- */
- function multiProvidersFactoryResolver(_, tData, lData, tNode) {
- return multiResolve(this.multi, []);
- }
- /**
- * Use this with `multi` `viewProviders`.
- *
- * This factory knows how to concatenate itself with the existing `multi` `providers`.
- */
- function multiViewProvidersFactoryResolver(_, tData, lView, tNode) {
- const factories = this.multi;
- let result;
- if (this.providerFactory) {
- const componentCount = this.providerFactory.componentProviders;
- const multiProviders = getNodeInjectable(lView, lView[TVIEW], this.providerFactory.index, tNode);
- // Copy the section of the array which contains `multi` `providers` from the component
- result = multiProviders.slice(0, componentCount);
- // Insert the `viewProvider` instances.
- multiResolve(factories, result);
- // Copy the section of the array which contains `multi` `providers` from other directives
- for (let i = componentCount; i < multiProviders.length; i++) {
- result.push(multiProviders[i]);
- }
- }
- else {
- result = [];
- // Insert the `viewProvider` instances.
- multiResolve(factories, result);
- }
- return result;
- }
- /**
- * Maps an array of factories into an array of values.
- */
- function multiResolve(factories, result) {
- for (let i = 0; i < factories.length; i++) {
- const factory = factories[i];
- result.push(factory());
- }
- return result;
- }
- /**
- * Creates a multi factory.
- */
- function multiFactory(factoryFn, index, isViewProvider, isComponent, f) {
- const factory = new NodeInjectorFactory(factoryFn, isViewProvider, ɵɵdirectiveInject);
- factory.multi = [];
- factory.index = index;
- factory.componentProviders = 0;
- multiFactoryAdd(factory, f, isComponent && !isViewProvider);
- return factory;
- }
- /**
- * This feature resolves the providers of a directive (or component),
- * and publish them into the DI system, making it visible to others for injection.
- *
- * For example:
- * ```ts
- * class ComponentWithProviders {
- * constructor(private greeter: GreeterDE) {}
- *
- * static ɵcmp = defineComponent({
- * type: ComponentWithProviders,
- * selectors: [['component-with-providers']],
- * factory: () => new ComponentWithProviders(directiveInject(GreeterDE as any)),
- * decls: 1,
- * vars: 1,
- * template: function(fs: RenderFlags, ctx: ComponentWithProviders) {
- * if (fs & RenderFlags.Create) {
- * ɵɵtext(0);
- * }
- * if (fs & RenderFlags.Update) {
- * ɵɵtextInterpolate(ctx.greeter.greet());
- * }
- * },
- * features: [ɵɵProvidersFeature([GreeterDE])]
- * });
- * }
- * ```
- *
- * @param definition
- *
- * @codeGenApi
- */
- function ɵɵProvidersFeature(providers, viewProviders = []) {
- return (definition) => {
- definition.providersResolver =
- (def, processProvidersFn) => {
- return providersResolver(def, //
- processProvidersFn ? processProvidersFn(providers) : providers, //
- viewProviders);
- };
- };
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Represents a component created by a `ComponentFactory`.
- * Provides access to the component instance and related objects,
- * and provides the means of destroying the instance.
- *
- * @publicApi
- */
- class ComponentRef {
- }
- /**
- * Base class for a factory that can create a component dynamically.
- * Instantiate a factory for a given type of component with `resolveComponentFactory()`.
- * Use the resulting `ComponentFactory.create()` method to create a component of that type.
- *
- * @see [Dynamic Components](guide/dynamic-component-loader)
- *
- * @publicApi
- */
- class ComponentFactory {
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function noComponentFactoryError(component) {
- const error = Error(`No component factory found for ${stringify(component)}. Did you add it to @NgModule.entryComponents?`);
- error[ERROR_COMPONENT] = component;
- return error;
- }
- const ERROR_COMPONENT = 'ngComponent';
- function getComponent$1(error) {
- return error[ERROR_COMPONENT];
- }
- class _NullComponentFactoryResolver {
- resolveComponentFactory(component) {
- throw noComponentFactoryError(component);
- }
- }
- /**
- * A simple registry that maps `Components` to generated `ComponentFactory` classes
- * that can be used to create instances of components.
- * Use to obtain the factory for a given component type,
- * then use the factory's `create()` method to create a component of that type.
- *
- * @see [Dynamic Components](guide/dynamic-component-loader)
- * @publicApi
- */
- class ComponentFactoryResolver {
- }
- ComponentFactoryResolver.NULL = new _NullComponentFactoryResolver();
- class CodegenComponentFactoryResolver {
- constructor(factories, _parent, _ngModule) {
- this._parent = _parent;
- this._ngModule = _ngModule;
- this._factories = new Map();
- for (let i = 0; i < factories.length; i++) {
- const factory = factories[i];
- this._factories.set(factory.componentType, factory);
- }
- }
- resolveComponentFactory(component) {
- let factory = this._factories.get(component);
- if (!factory && this._parent) {
- factory = this._parent.resolveComponentFactory(component);
- }
- if (!factory) {
- throw noComponentFactoryError(component);
- }
- return new ComponentFactoryBoundToModule(factory, this._ngModule);
- }
- }
- class ComponentFactoryBoundToModule extends ComponentFactory {
- constructor(factory, ngModule) {
- super();
- this.factory = factory;
- this.ngModule = ngModule;
- this.selector = factory.selector;
- this.componentType = factory.componentType;
- this.ngContentSelectors = factory.ngContentSelectors;
- this.inputs = factory.inputs;
- this.outputs = factory.outputs;
- }
- create(injector, projectableNodes, rootSelectorOrNode, ngModule) {
- return this.factory.create(injector, projectableNodes, rootSelectorOrNode, ngModule || this.ngModule);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function noop(...args) {
- // Do nothing.
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Creates an ElementRef from the most recent node.
- *
- * @returns The ElementRef instance to use
- */
- function injectElementRef() {
- return createElementRef(getCurrentTNode(), getLView());
- }
- /**
- * Creates an ElementRef given a node.
- *
- * @param tNode The node for which you'd like an ElementRef
- * @param lView The view to which the node belongs
- * @returns The ElementRef instance to use
- */
- function createElementRef(tNode, lView) {
- return new ElementRef(getNativeByTNode(tNode, lView));
- }
- const SWITCH_ELEMENT_REF_FACTORY__POST_R3__ = injectElementRef;
- const SWITCH_ELEMENT_REF_FACTORY__PRE_R3__ = noop;
- const SWITCH_ELEMENT_REF_FACTORY = SWITCH_ELEMENT_REF_FACTORY__POST_R3__;
- /**
- * A wrapper around a native element inside of a View.
- *
- * An `ElementRef` is backed by a render-specific element. In the browser, this is usually a DOM
- * element.
- *
- * @security Permitting direct access to the DOM can make your application more vulnerable to
- * XSS attacks. Carefully review any use of `ElementRef` in your code. For more detail, see the
- * [Security Guide](https://g.co/ng/security).
- *
- * @publicApi
- */
- // Note: We don't expose things like `Injector`, `ViewContainer`, ... here,
- // i.e. users have to ask for what they need. With that, we can build better analysis tools
- // and could do better codegen in the future.
- class ElementRef {
- constructor(nativeElement) {
- this.nativeElement = nativeElement;
- }
- }
- /**
- * @internal
- * @nocollapse
- */
- ElementRef.__NG_ELEMENT_ID__ = SWITCH_ELEMENT_REF_FACTORY;
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const Renderer2Interceptor = new InjectionToken('Renderer2Interceptor');
- /**
- * Creates and initializes a custom renderer that implements the `Renderer2` base class.
- *
- * @publicApi
- */
- class RendererFactory2 {
- }
- /**
- * Extend this base class to implement custom rendering. By default, Angular
- * renders a template into DOM. You can use custom rendering to intercept
- * rendering calls, or to render to something other than DOM.
- *
- * Create your custom renderer using `RendererFactory2`.
- *
- * Use a custom renderer to bypass Angular's templating and
- * make custom UI changes that can't be expressed declaratively.
- * For example if you need to set a property or an attribute whose name is
- * not statically known, use the `setProperty()` or
- * `setAttribute()` method.
- *
- * @publicApi
- */
- class Renderer2 {
- }
- /**
- * @internal
- * @nocollapse
- */
- Renderer2.__NG_ELEMENT_ID__ = () => SWITCH_RENDERER2_FACTORY();
- const SWITCH_RENDERER2_FACTORY__POST_R3__ = injectRenderer2;
- const SWITCH_RENDERER2_FACTORY__PRE_R3__ = noop;
- const SWITCH_RENDERER2_FACTORY = SWITCH_RENDERER2_FACTORY__POST_R3__;
- /** Returns a Renderer2 (or throws when application was bootstrapped with Renderer3) */
- function getOrCreateRenderer2(lView) {
- const renderer = lView[RENDERER];
- if (ngDevMode && !isProceduralRenderer(renderer)) {
- throw new Error('Cannot inject Renderer2 when the application uses Renderer3!');
- }
- return renderer;
- }
- /** Injects a Renderer2 for the current component. */
- function injectRenderer2() {
- // We need the Renderer to be based on the component that it's being injected into, however since
- // DI happens before we've entered its view, `getLView` will return the parent view instead.
- const lView = getLView();
- const tNode = getCurrentTNode();
- const nodeAtIndex = getComponentLViewByIndex(tNode.index, lView);
- return getOrCreateRenderer2(isLView(nodeAtIndex) ? nodeAtIndex : lView);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Sanitizer is used by the views to sanitize potentially dangerous values.
- *
- * @publicApi
- */
- class Sanitizer {
- }
- /** @nocollapse */
- Sanitizer.ɵprov = ɵɵdefineInjectable({
- token: Sanitizer,
- providedIn: 'root',
- factory: () => null,
- });
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @description Represents the version of Angular
- *
- * @publicApi
- */
- class Version {
- constructor(full) {
- this.full = full;
- this.major = full.split('.')[0];
- this.minor = full.split('.')[1];
- this.patch = full.split('.').slice(2).join('.');
- }
- }
- /**
- * @publicApi
- */
- const VERSION = new Version('11.0.4');
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class DefaultIterableDifferFactory {
- constructor() { }
- supports(obj) {
- return isListLikeIterable(obj);
- }
- create(trackByFn) {
- return new DefaultIterableDiffer(trackByFn);
- }
- }
- const trackByIdentity = (index, item) => item;
- const ɵ0$b = trackByIdentity;
- /**
- * @deprecated v4.0.0 - Should not be part of public API.
- * @publicApi
- */
- class DefaultIterableDiffer {
- constructor(trackByFn) {
- this.length = 0;
- // Keeps track of the used records at any point in time (during & across `_check()` calls)
- this._linkedRecords = null;
- // Keeps track of the removed records at any point in time during `_check()` calls.
- this._unlinkedRecords = null;
- this._previousItHead = null;
- this._itHead = null;
- this._itTail = null;
- this._additionsHead = null;
- this._additionsTail = null;
- this._movesHead = null;
- this._movesTail = null;
- this._removalsHead = null;
- this._removalsTail = null;
- // Keeps track of records where custom track by is the same, but item identity has changed
- this._identityChangesHead = null;
- this._identityChangesTail = null;
- this._trackByFn = trackByFn || trackByIdentity;
- }
- forEachItem(fn) {
- let record;
- for (record = this._itHead; record !== null; record = record._next) {
- fn(record);
- }
- }
- forEachOperation(fn) {
- let nextIt = this._itHead;
- let nextRemove = this._removalsHead;
- let addRemoveOffset = 0;
- let moveOffsets = null;
- while (nextIt || nextRemove) {
- // Figure out which is the next record to process
- // Order: remove, add, move
- const record = !nextRemove ||
- nextIt &&
- nextIt.currentIndex <
- getPreviousIndex(nextRemove, addRemoveOffset, moveOffsets) ?
- nextIt :
- nextRemove;
- const adjPreviousIndex = getPreviousIndex(record, addRemoveOffset, moveOffsets);
- const currentIndex = record.currentIndex;
- // consume the item, and adjust the addRemoveOffset and update moveDistance if necessary
- if (record === nextRemove) {
- addRemoveOffset--;
- nextRemove = nextRemove._nextRemoved;
- }
- else {
- nextIt = nextIt._next;
- if (record.previousIndex == null) {
- addRemoveOffset++;
- }
- else {
- // INVARIANT: currentIndex < previousIndex
- if (!moveOffsets)
- moveOffsets = [];
- const localMovePreviousIndex = adjPreviousIndex - addRemoveOffset;
- const localCurrentIndex = currentIndex - addRemoveOffset;
- if (localMovePreviousIndex != localCurrentIndex) {
- for (let i = 0; i < localMovePreviousIndex; i++) {
- const offset = i < moveOffsets.length ? moveOffsets[i] : (moveOffsets[i] = 0);
- const index = offset + i;
- if (localCurrentIndex <= index && index < localMovePreviousIndex) {
- moveOffsets[i] = offset + 1;
- }
- }
- const previousIndex = record.previousIndex;
- moveOffsets[previousIndex] = localCurrentIndex - localMovePreviousIndex;
- }
- }
- }
- if (adjPreviousIndex !== currentIndex) {
- fn(record, adjPreviousIndex, currentIndex);
- }
- }
- }
- forEachPreviousItem(fn) {
- let record;
- for (record = this._previousItHead; record !== null; record = record._nextPrevious) {
- fn(record);
- }
- }
- forEachAddedItem(fn) {
- let record;
- for (record = this._additionsHead; record !== null; record = record._nextAdded) {
- fn(record);
- }
- }
- forEachMovedItem(fn) {
- let record;
- for (record = this._movesHead; record !== null; record = record._nextMoved) {
- fn(record);
- }
- }
- forEachRemovedItem(fn) {
- let record;
- for (record = this._removalsHead; record !== null; record = record._nextRemoved) {
- fn(record);
- }
- }
- forEachIdentityChange(fn) {
- let record;
- for (record = this._identityChangesHead; record !== null; record = record._nextIdentityChange) {
- fn(record);
- }
- }
- diff(collection) {
- if (collection == null)
- collection = [];
- if (!isListLikeIterable(collection)) {
- throw new Error(`Error trying to diff '${stringify(collection)}'. Only arrays and iterables are allowed`);
- }
- if (this.check(collection)) {
- return this;
- }
- else {
- return null;
- }
- }
- onDestroy() { }
- check(collection) {
- this._reset();
- let record = this._itHead;
- let mayBeDirty = false;
- let index;
- let item;
- let itemTrackBy;
- if (Array.isArray(collection)) {
- this.length = collection.length;
- for (let index = 0; index < this.length; index++) {
- item = collection[index];
- itemTrackBy = this._trackByFn(index, item);
- if (record === null || !Object.is(record.trackById, itemTrackBy)) {
- record = this._mismatch(record, item, itemTrackBy, index);
- mayBeDirty = true;
- }
- else {
- if (mayBeDirty) {
- // TODO(misko): can we limit this to duplicates only?
- record = this._verifyReinsertion(record, item, itemTrackBy, index);
- }
- if (!Object.is(record.item, item))
- this._addIdentityChange(record, item);
- }
- record = record._next;
- }
- }
- else {
- index = 0;
- iterateListLike(collection, (item) => {
- itemTrackBy = this._trackByFn(index, item);
- if (record === null || !Object.is(record.trackById, itemTrackBy)) {
- record = this._mismatch(record, item, itemTrackBy, index);
- mayBeDirty = true;
- }
- else {
- if (mayBeDirty) {
- // TODO(misko): can we limit this to duplicates only?
- record = this._verifyReinsertion(record, item, itemTrackBy, index);
- }
- if (!Object.is(record.item, item))
- this._addIdentityChange(record, item);
- }
- record = record._next;
- index++;
- });
- this.length = index;
- }
- this._truncate(record);
- this.collection = collection;
- return this.isDirty;
- }
- /* CollectionChanges is considered dirty if it has any additions, moves, removals, or identity
- * changes.
- */
- get isDirty() {
- return this._additionsHead !== null || this._movesHead !== null ||
- this._removalsHead !== null || this._identityChangesHead !== null;
- }
- /**
- * Reset the state of the change objects to show no changes. This means set previousKey to
- * currentKey, and clear all of the queues (additions, moves, removals).
- * Set the previousIndexes of moved and added items to their currentIndexes
- * Reset the list of additions, moves and removals
- *
- * @internal
- */
- _reset() {
- if (this.isDirty) {
- let record;
- for (record = this._previousItHead = this._itHead; record !== null; record = record._next) {
- record._nextPrevious = record._next;
- }
- for (record = this._additionsHead; record !== null; record = record._nextAdded) {
- record.previousIndex = record.currentIndex;
- }
- this._additionsHead = this._additionsTail = null;
- for (record = this._movesHead; record !== null; record = record._nextMoved) {
- record.previousIndex = record.currentIndex;
- }
- this._movesHead = this._movesTail = null;
- this._removalsHead = this._removalsTail = null;
- this._identityChangesHead = this._identityChangesTail = null;
- // TODO(vicb): when assert gets supported
- // assert(!this.isDirty);
- }
- }
- /**
- * This is the core function which handles differences between collections.
- *
- * - `record` is the record which we saw at this position last time. If null then it is a new
- * item.
- * - `item` is the current item in the collection
- * - `index` is the position of the item in the collection
- *
- * @internal
- */
- _mismatch(record, item, itemTrackBy, index) {
- // The previous record after which we will append the current one.
- let previousRecord;
- if (record === null) {
- previousRecord = this._itTail;
- }
- else {
- previousRecord = record._prev;
- // Remove the record from the collection since we know it does not match the item.
- this._remove(record);
- }
- // Attempt to see if we have seen the item before.
- record = this._linkedRecords === null ? null : this._linkedRecords.get(itemTrackBy, index);
- if (record !== null) {
- // We have seen this before, we need to move it forward in the collection.
- // But first we need to check if identity changed, so we can update in view if necessary
- if (!Object.is(record.item, item))
- this._addIdentityChange(record, item);
- this._moveAfter(record, previousRecord, index);
- }
- else {
- // Never seen it, check evicted list.
- record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);
- if (record !== null) {
- // It is an item which we have evicted earlier: reinsert it back into the list.
- // But first we need to check if identity changed, so we can update in view if necessary
- if (!Object.is(record.item, item))
- this._addIdentityChange(record, item);
- this._reinsertAfter(record, previousRecord, index);
- }
- else {
- // It is a new item: add it.
- record =
- this._addAfter(new IterableChangeRecord_(item, itemTrackBy), previousRecord, index);
- }
- }
- return record;
- }
- /**
- * This check is only needed if an array contains duplicates. (Short circuit of nothing dirty)
- *
- * Use case: `[a, a]` => `[b, a, a]`
- *
- * If we did not have this check then the insertion of `b` would:
- * 1) evict first `a`
- * 2) insert `b` at `0` index.
- * 3) leave `a` at index `1` as is. <-- this is wrong!
- * 3) reinsert `a` at index 2. <-- this is wrong!
- *
- * The correct behavior is:
- * 1) evict first `a`
- * 2) insert `b` at `0` index.
- * 3) reinsert `a` at index 1.
- * 3) move `a` at from `1` to `2`.
- *
- *
- * Double check that we have not evicted a duplicate item. We need to check if the item type may
- * have already been removed:
- * The insertion of b will evict the first 'a'. If we don't reinsert it now it will be reinserted
- * at the end. Which will show up as the two 'a's switching position. This is incorrect, since a
- * better way to think of it is as insert of 'b' rather then switch 'a' with 'b' and then add 'a'
- * at the end.
- *
- * @internal
- */
- _verifyReinsertion(record, item, itemTrackBy, index) {
- let reinsertRecord = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);
- if (reinsertRecord !== null) {
- record = this._reinsertAfter(reinsertRecord, record._prev, index);
- }
- else if (record.currentIndex != index) {
- record.currentIndex = index;
- this._addToMoves(record, index);
- }
- return record;
- }
- /**
- * Get rid of any excess {@link IterableChangeRecord_}s from the previous collection
- *
- * - `record` The first excess {@link IterableChangeRecord_}.
- *
- * @internal
- */
- _truncate(record) {
- // Anything after that needs to be removed;
- while (record !== null) {
- const nextRecord = record._next;
- this._addToRemovals(this._unlink(record));
- record = nextRecord;
- }
- if (this._unlinkedRecords !== null) {
- this._unlinkedRecords.clear();
- }
- if (this._additionsTail !== null) {
- this._additionsTail._nextAdded = null;
- }
- if (this._movesTail !== null) {
- this._movesTail._nextMoved = null;
- }
- if (this._itTail !== null) {
- this._itTail._next = null;
- }
- if (this._removalsTail !== null) {
- this._removalsTail._nextRemoved = null;
- }
- if (this._identityChangesTail !== null) {
- this._identityChangesTail._nextIdentityChange = null;
- }
- }
- /** @internal */
- _reinsertAfter(record, prevRecord, index) {
- if (this._unlinkedRecords !== null) {
- this._unlinkedRecords.remove(record);
- }
- const prev = record._prevRemoved;
- const next = record._nextRemoved;
- if (prev === null) {
- this._removalsHead = next;
- }
- else {
- prev._nextRemoved = next;
- }
- if (next === null) {
- this._removalsTail = prev;
- }
- else {
- next._prevRemoved = prev;
- }
- this._insertAfter(record, prevRecord, index);
- this._addToMoves(record, index);
- return record;
- }
- /** @internal */
- _moveAfter(record, prevRecord, index) {
- this._unlink(record);
- this._insertAfter(record, prevRecord, index);
- this._addToMoves(record, index);
- return record;
- }
- /** @internal */
- _addAfter(record, prevRecord, index) {
- this._insertAfter(record, prevRecord, index);
- if (this._additionsTail === null) {
- // TODO(vicb):
- // assert(this._additionsHead === null);
- this._additionsTail = this._additionsHead = record;
- }
- else {
- // TODO(vicb):
- // assert(_additionsTail._nextAdded === null);
- // assert(record._nextAdded === null);
- this._additionsTail = this._additionsTail._nextAdded = record;
- }
- return record;
- }
- /** @internal */
- _insertAfter(record, prevRecord, index) {
- // TODO(vicb):
- // assert(record != prevRecord);
- // assert(record._next === null);
- // assert(record._prev === null);
- const next = prevRecord === null ? this._itHead : prevRecord._next;
- // TODO(vicb):
- // assert(next != record);
- // assert(prevRecord != record);
- record._next = next;
- record._prev = prevRecord;
- if (next === null) {
- this._itTail = record;
- }
- else {
- next._prev = record;
- }
- if (prevRecord === null) {
- this._itHead = record;
- }
- else {
- prevRecord._next = record;
- }
- if (this._linkedRecords === null) {
- this._linkedRecords = new _DuplicateMap();
- }
- this._linkedRecords.put(record);
- record.currentIndex = index;
- return record;
- }
- /** @internal */
- _remove(record) {
- return this._addToRemovals(this._unlink(record));
- }
- /** @internal */
- _unlink(record) {
- if (this._linkedRecords !== null) {
- this._linkedRecords.remove(record);
- }
- const prev = record._prev;
- const next = record._next;
- // TODO(vicb):
- // assert((record._prev = null) === null);
- // assert((record._next = null) === null);
- if (prev === null) {
- this._itHead = next;
- }
- else {
- prev._next = next;
- }
- if (next === null) {
- this._itTail = prev;
- }
- else {
- next._prev = prev;
- }
- return record;
- }
- /** @internal */
- _addToMoves(record, toIndex) {
- // TODO(vicb):
- // assert(record._nextMoved === null);
- if (record.previousIndex === toIndex) {
- return record;
- }
- if (this._movesTail === null) {
- // TODO(vicb):
- // assert(_movesHead === null);
- this._movesTail = this._movesHead = record;
- }
- else {
- // TODO(vicb):
- // assert(_movesTail._nextMoved === null);
- this._movesTail = this._movesTail._nextMoved = record;
- }
- return record;
- }
- _addToRemovals(record) {
- if (this._unlinkedRecords === null) {
- this._unlinkedRecords = new _DuplicateMap();
- }
- this._unlinkedRecords.put(record);
- record.currentIndex = null;
- record._nextRemoved = null;
- if (this._removalsTail === null) {
- // TODO(vicb):
- // assert(_removalsHead === null);
- this._removalsTail = this._removalsHead = record;
- record._prevRemoved = null;
- }
- else {
- // TODO(vicb):
- // assert(_removalsTail._nextRemoved === null);
- // assert(record._nextRemoved === null);
- record._prevRemoved = this._removalsTail;
- this._removalsTail = this._removalsTail._nextRemoved = record;
- }
- return record;
- }
- /** @internal */
- _addIdentityChange(record, item) {
- record.item = item;
- if (this._identityChangesTail === null) {
- this._identityChangesTail = this._identityChangesHead = record;
- }
- else {
- this._identityChangesTail = this._identityChangesTail._nextIdentityChange = record;
- }
- return record;
- }
- }
- class IterableChangeRecord_ {
- constructor(item, trackById) {
- this.item = item;
- this.trackById = trackById;
- this.currentIndex = null;
- this.previousIndex = null;
- /** @internal */
- this._nextPrevious = null;
- /** @internal */
- this._prev = null;
- /** @internal */
- this._next = null;
- /** @internal */
- this._prevDup = null;
- /** @internal */
- this._nextDup = null;
- /** @internal */
- this._prevRemoved = null;
- /** @internal */
- this._nextRemoved = null;
- /** @internal */
- this._nextAdded = null;
- /** @internal */
- this._nextMoved = null;
- /** @internal */
- this._nextIdentityChange = null;
- }
- }
- // A linked list of IterableChangeRecords with the same IterableChangeRecord_.item
- class _DuplicateItemRecordList {
- constructor() {
- /** @internal */
- this._head = null;
- /** @internal */
- this._tail = null;
- }
- /**
- * Append the record to the list of duplicates.
- *
- * Note: by design all records in the list of duplicates hold the same value in record.item.
- */
- add(record) {
- if (this._head === null) {
- this._head = this._tail = record;
- record._nextDup = null;
- record._prevDup = null;
- }
- else {
- // TODO(vicb):
- // assert(record.item == _head.item ||
- // record.item is num && record.item.isNaN && _head.item is num && _head.item.isNaN);
- this._tail._nextDup = record;
- record._prevDup = this._tail;
- record._nextDup = null;
- this._tail = record;
- }
- }
- // Returns a IterableChangeRecord_ having IterableChangeRecord_.trackById == trackById and
- // IterableChangeRecord_.currentIndex >= atOrAfterIndex
- get(trackById, atOrAfterIndex) {
- let record;
- for (record = this._head; record !== null; record = record._nextDup) {
- if ((atOrAfterIndex === null || atOrAfterIndex <= record.currentIndex) &&
- Object.is(record.trackById, trackById)) {
- return record;
- }
- }
- return null;
- }
- /**
- * Remove one {@link IterableChangeRecord_} from the list of duplicates.
- *
- * Returns whether the list of duplicates is empty.
- */
- remove(record) {
- // TODO(vicb):
- // assert(() {
- // // verify that the record being removed is in the list.
- // for (IterableChangeRecord_ cursor = _head; cursor != null; cursor = cursor._nextDup) {
- // if (identical(cursor, record)) return true;
- // }
- // return false;
- //});
- const prev = record._prevDup;
- const next = record._nextDup;
- if (prev === null) {
- this._head = next;
- }
- else {
- prev._nextDup = next;
- }
- if (next === null) {
- this._tail = prev;
- }
- else {
- next._prevDup = prev;
- }
- return this._head === null;
- }
- }
- class _DuplicateMap {
- constructor() {
- this.map = new Map();
- }
- put(record) {
- const key = record.trackById;
- let duplicates = this.map.get(key);
- if (!duplicates) {
- duplicates = new _DuplicateItemRecordList();
- this.map.set(key, duplicates);
- }
- duplicates.add(record);
- }
- /**
- * Retrieve the `value` using key. Because the IterableChangeRecord_ value may be one which we
- * have already iterated over, we use the `atOrAfterIndex` to pretend it is not there.
- *
- * Use case: `[a, b, c, a, a]` if we are at index `3` which is the second `a` then asking if we
- * have any more `a`s needs to return the second `a`.
- */
- get(trackById, atOrAfterIndex) {
- const key = trackById;
- const recordList = this.map.get(key);
- return recordList ? recordList.get(trackById, atOrAfterIndex) : null;
- }
- /**
- * Removes a {@link IterableChangeRecord_} from the list of duplicates.
- *
- * The list of duplicates also is removed from the map if it gets empty.
- */
- remove(record) {
- const key = record.trackById;
- const recordList = this.map.get(key);
- // Remove the list of duplicates when it gets empty
- if (recordList.remove(record)) {
- this.map.delete(key);
- }
- return record;
- }
- get isEmpty() {
- return this.map.size === 0;
- }
- clear() {
- this.map.clear();
- }
- }
- function getPreviousIndex(item, addRemoveOffset, moveOffsets) {
- const previousIndex = item.previousIndex;
- if (previousIndex === null)
- return previousIndex;
- let moveOffset = 0;
- if (moveOffsets && previousIndex < moveOffsets.length) {
- moveOffset = moveOffsets[previousIndex];
- }
- return previousIndex + addRemoveOffset + moveOffset;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class DefaultKeyValueDifferFactory {
- constructor() { }
- supports(obj) {
- return obj instanceof Map || isJsObject(obj);
- }
- create() {
- return new DefaultKeyValueDiffer();
- }
- }
- class DefaultKeyValueDiffer {
- constructor() {
- this._records = new Map();
- this._mapHead = null;
- // _appendAfter is used in the check loop
- this._appendAfter = null;
- this._previousMapHead = null;
- this._changesHead = null;
- this._changesTail = null;
- this._additionsHead = null;
- this._additionsTail = null;
- this._removalsHead = null;
- this._removalsTail = null;
- }
- get isDirty() {
- return this._additionsHead !== null || this._changesHead !== null ||
- this._removalsHead !== null;
- }
- forEachItem(fn) {
- let record;
- for (record = this._mapHead; record !== null; record = record._next) {
- fn(record);
- }
- }
- forEachPreviousItem(fn) {
- let record;
- for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {
- fn(record);
- }
- }
- forEachChangedItem(fn) {
- let record;
- for (record = this._changesHead; record !== null; record = record._nextChanged) {
- fn(record);
- }
- }
- forEachAddedItem(fn) {
- let record;
- for (record = this._additionsHead; record !== null; record = record._nextAdded) {
- fn(record);
- }
- }
- forEachRemovedItem(fn) {
- let record;
- for (record = this._removalsHead; record !== null; record = record._nextRemoved) {
- fn(record);
- }
- }
- diff(map) {
- if (!map) {
- map = new Map();
- }
- else if (!(map instanceof Map || isJsObject(map))) {
- throw new Error(`Error trying to diff '${stringify(map)}'. Only maps and objects are allowed`);
- }
- return this.check(map) ? this : null;
- }
- onDestroy() { }
- /**
- * Check the current state of the map vs the previous.
- * The algorithm is optimised for when the keys do no change.
- */
- check(map) {
- this._reset();
- let insertBefore = this._mapHead;
- this._appendAfter = null;
- this._forEach(map, (value, key) => {
- if (insertBefore && insertBefore.key === key) {
- this._maybeAddToChanges(insertBefore, value);
- this._appendAfter = insertBefore;
- insertBefore = insertBefore._next;
- }
- else {
- const record = this._getOrCreateRecordForKey(key, value);
- insertBefore = this._insertBeforeOrAppend(insertBefore, record);
- }
- });
- // Items remaining at the end of the list have been deleted
- if (insertBefore) {
- if (insertBefore._prev) {
- insertBefore._prev._next = null;
- }
- this._removalsHead = insertBefore;
- for (let record = insertBefore; record !== null; record = record._nextRemoved) {
- if (record === this._mapHead) {
- this._mapHead = null;
- }
- this._records.delete(record.key);
- record._nextRemoved = record._next;
- record.previousValue = record.currentValue;
- record.currentValue = null;
- record._prev = null;
- record._next = null;
- }
- }
- // Make sure tails have no next records from previous runs
- if (this._changesTail)
- this._changesTail._nextChanged = null;
- if (this._additionsTail)
- this._additionsTail._nextAdded = null;
- return this.isDirty;
- }
- /**
- * Inserts a record before `before` or append at the end of the list when `before` is null.
- *
- * Notes:
- * - This method appends at `this._appendAfter`,
- * - This method updates `this._appendAfter`,
- * - The return value is the new value for the insertion pointer.
- */
- _insertBeforeOrAppend(before, record) {
- if (before) {
- const prev = before._prev;
- record._next = before;
- record._prev = prev;
- before._prev = record;
- if (prev) {
- prev._next = record;
- }
- if (before === this._mapHead) {
- this._mapHead = record;
- }
- this._appendAfter = before;
- return before;
- }
- if (this._appendAfter) {
- this._appendAfter._next = record;
- record._prev = this._appendAfter;
- }
- else {
- this._mapHead = record;
- }
- this._appendAfter = record;
- return null;
- }
- _getOrCreateRecordForKey(key, value) {
- if (this._records.has(key)) {
- const record = this._records.get(key);
- this._maybeAddToChanges(record, value);
- const prev = record._prev;
- const next = record._next;
- if (prev) {
- prev._next = next;
- }
- if (next) {
- next._prev = prev;
- }
- record._next = null;
- record._prev = null;
- return record;
- }
- const record = new KeyValueChangeRecord_(key);
- this._records.set(key, record);
- record.currentValue = value;
- this._addToAdditions(record);
- return record;
- }
- /** @internal */
- _reset() {
- if (this.isDirty) {
- let record;
- // let `_previousMapHead` contain the state of the map before the changes
- this._previousMapHead = this._mapHead;
- for (record = this._previousMapHead; record !== null; record = record._next) {
- record._nextPrevious = record._next;
- }
- // Update `record.previousValue` with the value of the item before the changes
- // We need to update all changed items (that's those which have been added and changed)
- for (record = this._changesHead; record !== null; record = record._nextChanged) {
- record.previousValue = record.currentValue;
- }
- for (record = this._additionsHead; record != null; record = record._nextAdded) {
- record.previousValue = record.currentValue;
- }
- this._changesHead = this._changesTail = null;
- this._additionsHead = this._additionsTail = null;
- this._removalsHead = null;
- }
- }
- // Add the record or a given key to the list of changes only when the value has actually changed
- _maybeAddToChanges(record, newValue) {
- if (!Object.is(newValue, record.currentValue)) {
- record.previousValue = record.currentValue;
- record.currentValue = newValue;
- this._addToChanges(record);
- }
- }
- _addToAdditions(record) {
- if (this._additionsHead === null) {
- this._additionsHead = this._additionsTail = record;
- }
- else {
- this._additionsTail._nextAdded = record;
- this._additionsTail = record;
- }
- }
- _addToChanges(record) {
- if (this._changesHead === null) {
- this._changesHead = this._changesTail = record;
- }
- else {
- this._changesTail._nextChanged = record;
- this._changesTail = record;
- }
- }
- /** @internal */
- _forEach(obj, fn) {
- if (obj instanceof Map) {
- obj.forEach(fn);
- }
- else {
- Object.keys(obj).forEach(k => fn(obj[k], k));
- }
- }
- }
- class KeyValueChangeRecord_ {
- constructor(key) {
- this.key = key;
- this.previousValue = null;
- this.currentValue = null;
- /** @internal */
- this._nextPrevious = null;
- /** @internal */
- this._next = null;
- /** @internal */
- this._prev = null;
- /** @internal */
- this._nextAdded = null;
- /** @internal */
- this._nextRemoved = null;
- /** @internal */
- this._nextChanged = null;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * A repository of different iterable diffing strategies used by NgFor, NgClass, and others.
- *
- * @publicApi
- */
- class IterableDiffers {
- constructor(factories) {
- this.factories = factories;
- }
- static create(factories, parent) {
- if (parent != null) {
- const copied = parent.factories.slice();
- factories = factories.concat(copied);
- }
- return new IterableDiffers(factories);
- }
- /**
- * Takes an array of {@link IterableDifferFactory} and returns a provider used to extend the
- * inherited {@link IterableDiffers} instance with the provided factories and return a new
- * {@link IterableDiffers} instance.
- *
- * @usageNotes
- * ### Example
- *
- * The following example shows how to extend an existing list of factories,
- * which will only be applied to the injector for this component and its children.
- * This step is all that's required to make a new {@link IterableDiffer} available.
- *
- * ```
- * @Component({
- * viewProviders: [
- * IterableDiffers.extend([new ImmutableListDiffer()])
- * ]
- * })
- * ```
- */
- static extend(factories) {
- return {
- provide: IterableDiffers,
- useFactory: (parent) => {
- if (!parent) {
- // Typically would occur when calling IterableDiffers.extend inside of dependencies passed
- // to
- // bootstrap(), which would override default pipes instead of extending them.
- throw new Error('Cannot extend IterableDiffers without a parent injector');
- }
- return IterableDiffers.create(factories, parent);
- },
- // Dependency technically isn't optional, but we can provide a better error message this way.
- deps: [[IterableDiffers, new SkipSelf(), new Optional()]]
- };
- }
- find(iterable) {
- const factory = this.factories.find(f => f.supports(iterable));
- if (factory != null) {
- return factory;
- }
- else {
- throw new Error(`Cannot find a differ supporting object '${iterable}' of type '${getTypeNameForDebugging(iterable)}'`);
- }
- }
- }
- /** @nocollapse */
- IterableDiffers.ɵprov = ɵɵdefineInjectable({
- token: IterableDiffers,
- providedIn: 'root',
- factory: () => new IterableDiffers([new DefaultIterableDifferFactory()])
- });
- function getTypeNameForDebugging(type) {
- return type['name'] || typeof type;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * A repository of different Map diffing strategies used by NgClass, NgStyle, and others.
- *
- * @publicApi
- */
- class KeyValueDiffers {
- constructor(factories) {
- this.factories = factories;
- }
- static create(factories, parent) {
- if (parent) {
- const copied = parent.factories.slice();
- factories = factories.concat(copied);
- }
- return new KeyValueDiffers(factories);
- }
- /**
- * Takes an array of {@link KeyValueDifferFactory} and returns a provider used to extend the
- * inherited {@link KeyValueDiffers} instance with the provided factories and return a new
- * {@link KeyValueDiffers} instance.
- *
- * @usageNotes
- * ### Example
- *
- * The following example shows how to extend an existing list of factories,
- * which will only be applied to the injector for this component and its children.
- * This step is all that's required to make a new {@link KeyValueDiffer} available.
- *
- * ```
- * @Component({
- * viewProviders: [
- * KeyValueDiffers.extend([new ImmutableMapDiffer()])
- * ]
- * })
- * ```
- */
- static extend(factories) {
- return {
- provide: KeyValueDiffers,
- useFactory: (parent) => {
- if (!parent) {
- // Typically would occur when calling KeyValueDiffers.extend inside of dependencies passed
- // to bootstrap(), which would override default pipes instead of extending them.
- throw new Error('Cannot extend KeyValueDiffers without a parent injector');
- }
- return KeyValueDiffers.create(factories, parent);
- },
- // Dependency technically isn't optional, but we can provide a better error message this way.
- deps: [[KeyValueDiffers, new SkipSelf(), new Optional()]]
- };
- }
- find(kv) {
- const factory = this.factories.find(f => f.supports(kv));
- if (factory) {
- return factory;
- }
- throw new Error(`Cannot find a differ supporting object '${kv}'`);
- }
- }
- /** @nocollapse */
- KeyValueDiffers.ɵprov = ɵɵdefineInjectable({
- token: KeyValueDiffers,
- providedIn: 'root',
- factory: () => new KeyValueDiffers([new DefaultKeyValueDifferFactory()])
- });
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function collectNativeNodes(tView, lView, tNode, result, isProjection = false) {
- while (tNode !== null) {
- ngDevMode &&
- assertTNodeType(tNode, 3 /* AnyRNode */ | 12 /* AnyContainer */ | 16 /* Projection */ | 32 /* Icu */);
- const lNode = lView[tNode.index];
- if (lNode !== null) {
- result.push(unwrapRNode(lNode));
- }
- // A given lNode can represent either a native node or a LContainer (when it is a host of a
- // ViewContainerRef). When we find a LContainer we need to descend into it to collect root nodes
- // from the views in this container.
- if (isLContainer(lNode)) {
- for (let i = CONTAINER_HEADER_OFFSET; i < lNode.length; i++) {
- const lViewInAContainer = lNode[i];
- const lViewFirstChildTNode = lViewInAContainer[TVIEW].firstChild;
- if (lViewFirstChildTNode !== null) {
- collectNativeNodes(lViewInAContainer[TVIEW], lViewInAContainer, lViewFirstChildTNode, result);
- }
- }
- }
- const tNodeType = tNode.type;
- if (tNodeType & 8 /* ElementContainer */) {
- collectNativeNodes(tView, lView, tNode.child, result);
- }
- else if (tNodeType & 32 /* Icu */) {
- const nextRNode = icuContainerIterate(tNode, lView);
- let rNode;
- while (rNode = nextRNode()) {
- result.push(rNode);
- }
- }
- else if (tNodeType & 16 /* Projection */) {
- const componentView = lView[DECLARATION_COMPONENT_VIEW];
- const componentHost = componentView[T_HOST];
- const slotIdx = tNode.projection;
- ngDevMode &&
- assertDefined(componentHost.projection, 'Components with projection nodes (<ng-content>) must have projection slots defined.');
- const nodesInSlot = componentHost.projection[slotIdx];
- if (Array.isArray(nodesInSlot)) {
- result.push(...nodesInSlot);
- }
- else {
- const parentView = getLViewParent(componentView);
- ngDevMode &&
- assertDefined(parentView, 'Component views should always have a parent view (component\'s host view)');
- collectNativeNodes(parentView[TVIEW], parentView, nodesInSlot, result, true);
- }
- }
- tNode = isProjection ? tNode.projectionNext : tNode.next;
- }
- return result;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class ViewRef {
- constructor(
- /**
- * This represents `LView` associated with the component when ViewRef is a ChangeDetectorRef.
- *
- * When ViewRef is created for a dynamic component, this also represents the `LView` for the
- * component.
- *
- * For a "regular" ViewRef created for an embedded view, this is the `LView` for the embedded
- * view.
- *
- * @internal
- */
- _lView,
- /**
- * This represents the `LView` associated with the point where `ChangeDetectorRef` was
- * requested.
- *
- * This may be different from `_lView` if the `_cdRefInjectingView` is an embedded view.
- */
- _cdRefInjectingView) {
- this._lView = _lView;
- this._cdRefInjectingView = _cdRefInjectingView;
- this._appRef = null;
- this._viewContainerRef = null;
- }
- get rootNodes() {
- const lView = this._lView;
- const tView = lView[TVIEW];
- return collectNativeNodes(tView, lView, tView.firstChild, []);
- }
- get context() {
- return this._lView[CONTEXT];
- }
- get destroyed() {
- return (this._lView[FLAGS] & 256 /* Destroyed */) === 256 /* Destroyed */;
- }
- destroy() {
- if (this._appRef) {
- this._appRef.detachView(this);
- }
- else if (this._viewContainerRef) {
- const index = this._viewContainerRef.indexOf(this);
- if (index > -1) {
- this._viewContainerRef.detach(index);
- }
- this._viewContainerRef = null;
- }
- destroyLView(this._lView[TVIEW], this._lView);
- }
- onDestroy(callback) {
- storeCleanupWithContext(this._lView[TVIEW], this._lView, null, callback);
- }
- /**
- * Marks a view and all of its ancestors dirty.
- *
- * It also triggers change detection by calling `scheduleTick` internally, which coalesces
- * multiple `markForCheck` calls to into one change detection run.
- *
- * This can be used to ensure an {@link ChangeDetectionStrategy#OnPush OnPush} component is
- * checked when it needs to be re-rendered but the two normal triggers haven't marked it
- * dirty (i.e. inputs haven't changed and events haven't fired in the view).
- *
- * <!-- TODO: Add a link to a chapter on OnPush components -->
- *
- * @usageNotes
- * ### Example
- *
- * ```typescript
- * @Component({
- * selector: 'my-app',
- * template: `Number of ticks: {{numberOfTicks}}`
- * changeDetection: ChangeDetectionStrategy.OnPush,
- * })
- * class AppComponent {
- * numberOfTicks = 0;
- *
- * constructor(private ref: ChangeDetectorRef) {
- * setInterval(() => {
- * this.numberOfTicks++;
- * // the following is required, otherwise the view will not be updated
- * this.ref.markForCheck();
- * }, 1000);
- * }
- * }
- * ```
- */
- markForCheck() {
- markViewDirty(this._cdRefInjectingView || this._lView);
- }
- /**
- * Detaches the view from the change detection tree.
- *
- * Detached views will not be checked during change detection runs until they are
- * re-attached, even if they are dirty. `detach` can be used in combination with
- * {@link ChangeDetectorRef#detectChanges detectChanges} to implement local change
- * detection checks.
- *
- * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
- * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->
- *
- * @usageNotes
- * ### Example
- *
- * The following example defines a component with a large list of readonly data.
- * Imagine the data changes constantly, many times per second. For performance reasons,
- * we want to check and update the list every five seconds. We can do that by detaching
- * the component's change detector and doing a local check every five seconds.
- *
- * ```typescript
- * class DataProvider {
- * // in a real application the returned data will be different every time
- * get data() {
- * return [1,2,3,4,5];
- * }
- * }
- *
- * @Component({
- * selector: 'giant-list',
- * template: `
- * <li *ngFor="let d of dataProvider.data">Data {{d}}</li>
- * `,
- * })
- * class GiantList {
- * constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {
- * ref.detach();
- * setInterval(() => {
- * this.ref.detectChanges();
- * }, 5000);
- * }
- * }
- *
- * @Component({
- * selector: 'app',
- * providers: [DataProvider],
- * template: `
- * <giant-list><giant-list>
- * `,
- * })
- * class App {
- * }
- * ```
- */
- detach() {
- this._lView[FLAGS] &= ~128 /* Attached */;
- }
- /**
- * Re-attaches a view to the change detection tree.
- *
- * This can be used to re-attach views that were previously detached from the tree
- * using {@link ChangeDetectorRef#detach detach}. Views are attached to the tree by default.
- *
- * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
- *
- * @usageNotes
- * ### Example
- *
- * The following example creates a component displaying `live` data. The component will detach
- * its change detector from the main change detector tree when the component's live property
- * is set to false.
- *
- * ```typescript
- * class DataProvider {
- * data = 1;
- *
- * constructor() {
- * setInterval(() => {
- * this.data = this.data * 2;
- * }, 500);
- * }
- * }
- *
- * @Component({
- * selector: 'live-data',
- * inputs: ['live'],
- * template: 'Data: {{dataProvider.data}}'
- * })
- * class LiveData {
- * constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {}
- *
- * set live(value) {
- * if (value) {
- * this.ref.reattach();
- * } else {
- * this.ref.detach();
- * }
- * }
- * }
- *
- * @Component({
- * selector: 'my-app',
- * providers: [DataProvider],
- * template: `
- * Live Update: <input type="checkbox" [(ngModel)]="live">
- * <live-data [live]="live"><live-data>
- * `,
- * })
- * class AppComponent {
- * live = true;
- * }
- * ```
- */
- reattach() {
- this._lView[FLAGS] |= 128 /* Attached */;
- }
- /**
- * Checks the view and its children.
- *
- * This can also be used in combination with {@link ChangeDetectorRef#detach detach} to implement
- * local change detection checks.
- *
- * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
- * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->
- *
- * @usageNotes
- * ### Example
- *
- * The following example defines a component with a large list of readonly data.
- * Imagine, the data changes constantly, many times per second. For performance reasons,
- * we want to check and update the list every five seconds.
- *
- * We can do that by detaching the component's change detector and doing a local change detection
- * check every five seconds.
- *
- * See {@link ChangeDetectorRef#detach detach} for more information.
- */
- detectChanges() {
- detectChangesInternal(this._lView[TVIEW], this._lView, this.context);
- }
- /**
- * Checks the change detector and its children, and throws if any changes are detected.
- *
- * This is used in development mode to verify that running change detection doesn't
- * introduce other changes.
- */
- checkNoChanges() {
- checkNoChangesInternal(this._lView[TVIEW], this._lView, this.context);
- }
- attachToViewContainerRef(vcRef) {
- if (this._appRef) {
- throw new Error('This view is already attached directly to the ApplicationRef!');
- }
- this._viewContainerRef = vcRef;
- }
- detachFromAppRef() {
- this._appRef = null;
- renderDetachView(this._lView[TVIEW], this._lView);
- }
- attachToAppRef(appRef) {
- if (this._viewContainerRef) {
- throw new Error('This view is already attached to a ViewContainer!');
- }
- this._appRef = appRef;
- }
- }
- /** @internal */
- class RootViewRef extends ViewRef {
- constructor(_view) {
- super(_view);
- this._view = _view;
- }
- detectChanges() {
- detectChangesInRootView(this._view);
- }
- checkNoChanges() {
- checkNoChangesInRootView(this._view);
- }
- get context() {
- return null;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const SWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__ = injectChangeDetectorRef;
- const SWITCH_CHANGE_DETECTOR_REF_FACTORY__PRE_R3__ = noop;
- const SWITCH_CHANGE_DETECTOR_REF_FACTORY = SWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__;
- /**
- * Base class that provides change detection functionality.
- * A change-detection tree collects all views that are to be checked for changes.
- * Use the methods to add and remove views from the tree, initiate change-detection,
- * and explicitly mark views as _dirty_, meaning that they have changed and need to be re-rendered.
- *
- * @see [Using change detection hooks](guide/lifecycle-hooks#using-change-detection-hooks)
- * @see [Defining custom change detection](guide/lifecycle-hooks#defining-custom-change-detection)
- *
- * @usageNotes
- *
- * The following examples demonstrate how to modify default change-detection behavior
- * to perform explicit detection when needed.
- *
- * ### Use `markForCheck()` with `CheckOnce` strategy
- *
- * The following example sets the `OnPush` change-detection strategy for a component
- * (`CheckOnce`, rather than the default `CheckAlways`), then forces a second check
- * after an interval. See [live demo](https://plnkr.co/edit/GC512b?p=preview).
- *
- * <code-example path="core/ts/change_detect/change-detection.ts"
- * region="mark-for-check"></code-example>
- *
- * ### Detach change detector to limit how often check occurs
- *
- * The following example defines a component with a large list of read-only data
- * that is expected to change constantly, many times per second.
- * To improve performance, we want to check and update the list
- * less often than the changes actually occur. To do that, we detach
- * the component's change detector and perform an explicit local check every five seconds.
- *
- * <code-example path="core/ts/change_detect/change-detection.ts" region="detach"></code-example>
- *
- *
- * ### Reattaching a detached component
- *
- * The following example creates a component displaying live data.
- * The component detaches its change detector from the main change detector tree
- * when the `live` property is set to false, and reattaches it when the property
- * becomes true.
- *
- * <code-example path="core/ts/change_detect/change-detection.ts" region="reattach"></code-example>
- *
- * @publicApi
- */
- class ChangeDetectorRef {
- }
- /**
- * @internal
- * @nocollapse
- */
- ChangeDetectorRef.__NG_ELEMENT_ID__ = SWITCH_CHANGE_DETECTOR_REF_FACTORY;
- /**
- * This marker is need so that the JIT compiler can correctly identify this class as special.
- *
- * @internal
- * @nocollapse
- */
- ChangeDetectorRef.__ChangeDetectorRef__ = true;
- /** Returns a ChangeDetectorRef (a.k.a. a ViewRef) */
- function injectChangeDetectorRef(isPipe = false) {
- return createViewRef(getCurrentTNode(), getLView(), isPipe);
- }
- /**
- * Creates a ViewRef and stores it on the injector as ChangeDetectorRef (public alias).
- *
- * @param tNode The node that is requesting a ChangeDetectorRef
- * @param lView The view to which the node belongs
- * @param isPipe Whether the view is being injected into a pipe.
- * @returns The ChangeDetectorRef to use
- */
- function createViewRef(tNode, lView, isPipe) {
- // `isComponentView` will be true for Component and Directives (but not for Pipes).
- // See https://github.com/angular/angular/pull/33072 for proper fix
- const isComponentView = !isPipe && isComponentHost(tNode);
- if (isComponentView) {
- // The LView represents the location where the component is declared.
- // Instead we want the LView for the component View and so we need to look it up.
- const componentView = getComponentLViewByIndex(tNode.index, lView); // look down
- return new ViewRef(componentView, componentView);
- }
- else if (tNode.type & (3 /* AnyRNode */ | 12 /* AnyContainer */ | 32 /* Icu */)) {
- // The LView represents the location where the injection is requested from.
- // We need to locate the containing LView (in case where the `lView` is an embedded view)
- const hostComponentView = lView[DECLARATION_COMPONENT_VIEW]; // look up
- return new ViewRef(hostComponentView, lView);
- }
- return null;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Structural diffing for `Object`s and `Map`s.
- */
- const keyValDiff = [new DefaultKeyValueDifferFactory()];
- /**
- * Structural diffing for `Iterable` types such as `Array`s.
- */
- const iterableDiff = [new DefaultIterableDifferFactory()];
- const defaultIterableDiffers = new IterableDiffers(iterableDiff);
- const defaultKeyValueDiffers = new KeyValueDiffers(keyValDiff);
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const SWITCH_TEMPLATE_REF_FACTORY__POST_R3__ = injectTemplateRef;
- const SWITCH_TEMPLATE_REF_FACTORY__PRE_R3__ = noop;
- const SWITCH_TEMPLATE_REF_FACTORY = SWITCH_TEMPLATE_REF_FACTORY__POST_R3__;
- /**
- * Represents an embedded template that can be used to instantiate embedded views.
- * To instantiate embedded views based on a template, use the `ViewContainerRef`
- * method `createEmbeddedView()`.
- *
- * Access a `TemplateRef` instance by placing a directive on an `<ng-template>`
- * element (or directive prefixed with `*`). The `TemplateRef` for the embedded view
- * is injected into the constructor of the directive,
- * using the `TemplateRef` token.
- *
- * You can also use a `Query` to find a `TemplateRef` associated with
- * a component or a directive.
- *
- * @see `ViewContainerRef`
- * @see [Navigate the Component Tree with DI](guide/dependency-injection-navtree)
- *
- * @publicApi
- */
- class TemplateRef {
- }
- /**
- * @internal
- * @nocollapse
- */
- TemplateRef.__NG_ELEMENT_ID__ = SWITCH_TEMPLATE_REF_FACTORY;
- const ViewEngineTemplateRef = TemplateRef;
- const R3TemplateRef = class TemplateRef extends ViewEngineTemplateRef {
- constructor(_declarationLView, _declarationTContainer, elementRef) {
- super();
- this._declarationLView = _declarationLView;
- this._declarationTContainer = _declarationTContainer;
- this.elementRef = elementRef;
- }
- createEmbeddedView(context) {
- const embeddedTView = this._declarationTContainer.tViews;
- const embeddedLView = createLView(this._declarationLView, embeddedTView, context, 16 /* CheckAlways */, null, embeddedTView.declTNode, null, null, null, null);
- const declarationLContainer = this._declarationLView[this._declarationTContainer.index];
- ngDevMode && assertLContainer(declarationLContainer);
- embeddedLView[DECLARATION_LCONTAINER] = declarationLContainer;
- const declarationViewLQueries = this._declarationLView[QUERIES];
- if (declarationViewLQueries !== null) {
- embeddedLView[QUERIES] = declarationViewLQueries.createEmbeddedView(embeddedTView);
- }
- renderView(embeddedTView, embeddedLView, context);
- return new ViewRef(embeddedLView);
- }
- };
- /**
- * Creates a TemplateRef given a node.
- *
- * @returns The TemplateRef instance to use
- */
- function injectTemplateRef() {
- return createTemplateRef(getCurrentTNode(), getLView());
- }
- /**
- * Creates a TemplateRef and stores it on the injector.
- *
- * @param hostTNode The node on which a TemplateRef is requested
- * @param hostLView The `LView` to which the node belongs
- * @returns The TemplateRef instance or null if we can't create a TemplateRef on a given node type
- */
- function createTemplateRef(hostTNode, hostLView) {
- if (hostTNode.type & 4 /* Container */) {
- ngDevMode && assertDefined(hostTNode.tViews, 'TView must be allocated');
- return new R3TemplateRef(hostLView, hostTNode, createElementRef(hostTNode, hostLView));
- }
- return null;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Represents an instance of an `NgModule` created by an `NgModuleFactory`.
- * Provides access to the `NgModule` instance and related objects.
- *
- * @publicApi
- */
- class NgModuleRef {
- }
- /**
- * @publicApi
- */
- class NgModuleFactory {
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const SWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__ = injectViewContainerRef;
- const SWITCH_VIEW_CONTAINER_REF_FACTORY__PRE_R3__ = noop;
- const SWITCH_VIEW_CONTAINER_REF_FACTORY = SWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__;
- /**
- * Represents a container where one or more views can be attached to a component.
- *
- * Can contain *host views* (created by instantiating a
- * component with the `createComponent()` method), and *embedded views*
- * (created by instantiating a `TemplateRef` with the `createEmbeddedView()` method).
- *
- * A view container instance can contain other view containers,
- * creating a [view hierarchy](guide/glossary#view-tree).
- *
- * @see `ComponentRef`
- * @see `EmbeddedViewRef`
- *
- * @publicApi
- */
- class ViewContainerRef {
- }
- /**
- * @internal
- * @nocollapse
- */
- ViewContainerRef.__NG_ELEMENT_ID__ = SWITCH_VIEW_CONTAINER_REF_FACTORY;
- /**
- * Creates a ViewContainerRef and stores it on the injector. Or, if the ViewContainerRef
- * already exists, retrieves the existing ViewContainerRef.
- *
- * @returns The ViewContainerRef instance to use
- */
- function injectViewContainerRef() {
- const previousTNode = getCurrentTNode();
- return createContainerRef(previousTNode, getLView());
- }
- const VE_ViewContainerRef = ViewContainerRef;
- const R3ViewContainerRef = class ViewContainerRef extends VE_ViewContainerRef {
- constructor(_lContainer, _hostTNode, _hostLView) {
- super();
- this._lContainer = _lContainer;
- this._hostTNode = _hostTNode;
- this._hostLView = _hostLView;
- }
- get element() {
- return createElementRef(this._hostTNode, this._hostLView);
- }
- get injector() {
- return new NodeInjector(this._hostTNode, this._hostLView);
- }
- /** @deprecated No replacement */
- get parentInjector() {
- const parentLocation = getParentInjectorLocation(this._hostTNode, this._hostLView);
- if (hasParentInjector(parentLocation)) {
- const parentView = getParentInjectorView(parentLocation, this._hostLView);
- const injectorIndex = getParentInjectorIndex(parentLocation);
- ngDevMode && assertNodeInjector(parentView, injectorIndex);
- const parentTNode = parentView[TVIEW].data[injectorIndex + 8 /* TNODE */];
- return new NodeInjector(parentTNode, parentView);
- }
- else {
- return new NodeInjector(null, this._hostLView);
- }
- }
- clear() {
- while (this.length > 0) {
- this.remove(this.length - 1);
- }
- }
- get(index) {
- const viewRefs = getViewRefs(this._lContainer);
- return viewRefs !== null && viewRefs[index] || null;
- }
- get length() {
- return this._lContainer.length - CONTAINER_HEADER_OFFSET;
- }
- createEmbeddedView(templateRef, context, index) {
- const viewRef = templateRef.createEmbeddedView(context || {});
- this.insert(viewRef, index);
- return viewRef;
- }
- createComponent(componentFactory, index, injector, projectableNodes, ngModuleRef) {
- const contextInjector = injector || this.parentInjector;
- if (!ngModuleRef && componentFactory.ngModule == null && contextInjector) {
- // DO NOT REFACTOR. The code here used to have a `value || undefined` expression
- // which seems to cause internal google apps to fail. This is documented in the
- // following internal bug issue: go/b/142967802
- const result = contextInjector.get(NgModuleRef, null);
- if (result) {
- ngModuleRef = result;
- }
- }
- const componentRef = componentFactory.create(contextInjector, projectableNodes, undefined, ngModuleRef);
- this.insert(componentRef.hostView, index);
- return componentRef;
- }
- insert(viewRef, index) {
- const lView = viewRef._lView;
- const tView = lView[TVIEW];
- if (ngDevMode && viewRef.destroyed) {
- throw new Error('Cannot insert a destroyed View in a ViewContainer!');
- }
- if (viewAttachedToContainer(lView)) {
- // If view is already attached, detach it first so we clean up references appropriately.
- const prevIdx = this.indexOf(viewRef);
- // A view might be attached either to this or a different container. The `prevIdx` for
- // those cases will be:
- // equal to -1 for views attached to this ViewContainerRef
- // >= 0 for views attached to a different ViewContainerRef
- if (prevIdx !== -1) {
- this.detach(prevIdx);
- }
- else {
- const prevLContainer = lView[PARENT];
- ngDevMode &&
- assertEqual(isLContainer(prevLContainer), true, 'An attached view should have its PARENT point to a container.');
- // We need to re-create a R3ViewContainerRef instance since those are not stored on
- // LView (nor anywhere else).
- const prevVCRef = new R3ViewContainerRef(prevLContainer, prevLContainer[T_HOST], prevLContainer[PARENT]);
- prevVCRef.detach(prevVCRef.indexOf(viewRef));
- }
- }
- // Logical operation of adding `LView` to `LContainer`
- const adjustedIdx = this._adjustIndex(index);
- const lContainer = this._lContainer;
- insertView(tView, lView, lContainer, adjustedIdx);
- // Physical operation of adding the DOM nodes.
- const beforeNode = getBeforeNodeForView(adjustedIdx, lContainer);
- const renderer = lView[RENDERER];
- const parentRNode = nativeParentNode(renderer, lContainer[NATIVE]);
- if (parentRNode !== null) {
- addViewToContainer(tView, lContainer[T_HOST], renderer, lView, parentRNode, beforeNode);
- }
- viewRef.attachToViewContainerRef(this);
- addToArray(getOrCreateViewRefs(lContainer), adjustedIdx, viewRef);
- return viewRef;
- }
- move(viewRef, newIndex) {
- if (ngDevMode && viewRef.destroyed) {
- throw new Error('Cannot move a destroyed View in a ViewContainer!');
- }
- return this.insert(viewRef, newIndex);
- }
- indexOf(viewRef) {
- const viewRefsArr = getViewRefs(this._lContainer);
- return viewRefsArr !== null ? viewRefsArr.indexOf(viewRef) : -1;
- }
- remove(index) {
- const adjustedIdx = this._adjustIndex(index, -1);
- const detachedView = detachView(this._lContainer, adjustedIdx);
- if (detachedView) {
- // Before destroying the view, remove it from the container's array of `ViewRef`s.
- // This ensures the view container length is updated before calling
- // `destroyLView`, which could recursively call view container methods that
- // rely on an accurate container length.
- // (e.g. a method on this view container being called by a child directive's OnDestroy
- // lifecycle hook)
- removeFromArray(getOrCreateViewRefs(this._lContainer), adjustedIdx);
- destroyLView(detachedView[TVIEW], detachedView);
- }
- }
- detach(index) {
- const adjustedIdx = this._adjustIndex(index, -1);
- const view = detachView(this._lContainer, adjustedIdx);
- const wasDetached = view && removeFromArray(getOrCreateViewRefs(this._lContainer), adjustedIdx) != null;
- return wasDetached ? new ViewRef(view) : null;
- }
- _adjustIndex(index, shift = 0) {
- if (index == null) {
- return this.length + shift;
- }
- if (ngDevMode) {
- assertGreaterThan(index, -1, `ViewRef index must be positive, got ${index}`);
- // +1 because it's legal to insert at the end.
- assertLessThan(index, this.length + 1 + shift, 'index');
- }
- return index;
- }
- };
- function getViewRefs(lContainer) {
- return lContainer[VIEW_REFS];
- }
- function getOrCreateViewRefs(lContainer) {
- return (lContainer[VIEW_REFS] || (lContainer[VIEW_REFS] = []));
- }
- /**
- * Creates a ViewContainerRef and stores it on the injector.
- *
- * @param ViewContainerRefToken The ViewContainerRef type
- * @param ElementRefToken The ElementRef type
- * @param hostTNode The node that is requesting a ViewContainerRef
- * @param hostLView The view to which the node belongs
- * @returns The ViewContainerRef instance to use
- */
- function createContainerRef(hostTNode, hostLView) {
- ngDevMode && assertTNodeType(hostTNode, 12 /* AnyContainer */ | 3 /* AnyRNode */);
- let lContainer;
- const slotValue = hostLView[hostTNode.index];
- if (isLContainer(slotValue)) {
- // If the host is a container, we don't need to create a new LContainer
- lContainer = slotValue;
- }
- else {
- let commentNode;
- // If the host is an element container, the native host element is guaranteed to be a
- // comment and we can reuse that comment as anchor element for the new LContainer.
- // The comment node in question is already part of the DOM structure so we don't need to append
- // it again.
- if (hostTNode.type & 8 /* ElementContainer */) {
- commentNode = unwrapRNode(slotValue);
- }
- else {
- // If the host is a regular element, we have to insert a comment node manually which will
- // be used as an anchor when inserting elements. In this specific case we use low-level DOM
- // manipulation to insert it.
- const renderer = hostLView[RENDERER];
- ngDevMode && ngDevMode.rendererCreateComment++;
- commentNode = renderer.createComment(ngDevMode ? 'container' : '');
- const hostNative = getNativeByTNode(hostTNode, hostLView);
- const parentOfHostNative = nativeParentNode(renderer, hostNative);
- nativeInsertBefore(renderer, parentOfHostNative, commentNode, nativeNextSibling(renderer, hostNative), false);
- }
- hostLView[hostTNode.index] = lContainer =
- createLContainer(slotValue, hostLView, commentNode, hostTNode);
- addToViewTree(hostLView, lContainer);
- }
- return new R3ViewContainerRef(lContainer, hostTNode, hostLView);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function expressionChangedAfterItHasBeenCheckedError(context, oldValue, currValue, isFirstCheck) {
- let msg = `ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '${oldValue}'. Current value: '${currValue}'.`;
- if (isFirstCheck) {
- msg +=
- ` It seems like the view has been created after its parent and its children have been dirty checked.` +
- ` Has it been created in a change detection hook ?`;
- }
- return viewDebugError(msg, context);
- }
- function viewWrappedDebugError(err, context) {
- if (!(err instanceof Error)) {
- // errors that are not Error instances don't have a stack,
- // so it is ok to wrap them into a new Error object...
- err = new Error(err.toString());
- }
- _addDebugContext(err, context);
- return err;
- }
- function viewDebugError(msg, context) {
- const err = new Error(msg);
- _addDebugContext(err, context);
- return err;
- }
- function _addDebugContext(err, context) {
- err[ERROR_DEBUG_CONTEXT] = context;
- err[ERROR_LOGGER] = context.logError.bind(context);
- }
- function isViewDebugError(err) {
- return !!getDebugContext(err);
- }
- function viewDestroyedError(action) {
- return new Error(`ViewDestroyedError: Attempt to use a destroyed view: ${action}`);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // Called before each cycle of a view's check to detect whether this is in the
- // initState for which we need to call ngOnInit, ngAfterContentInit or ngAfterViewInit
- // lifecycle methods. Returns true if this check cycle should call lifecycle
- // methods.
- function shiftInitState(view, priorInitState, newInitState) {
- // Only update the InitState if we are currently in the prior state.
- // For example, only move into CallingInit if we are in BeforeInit. Only
- // move into CallingContentInit if we are in CallingInit. Normally this will
- // always be true because of how checkCycle is called in checkAndUpdateView.
- // However, if checkAndUpdateView is called recursively or if an exception is
- // thrown while checkAndUpdateView is running, checkAndUpdateView starts over
- // from the beginning. This ensures the state is monotonically increasing,
- // terminating in the AfterInit state, which ensures the Init methods are called
- // at least once and only once.
- const state = view.state;
- const initState = state & 1792 /* InitState_Mask */;
- if (initState === priorInitState) {
- view.state = (state & ~1792 /* InitState_Mask */) | newInitState;
- view.initIndex = -1;
- return true;
- }
- return initState === newInitState;
- }
- // Returns true if the lifecycle init method should be called for the node with
- // the given init index.
- function shouldCallLifecycleInitHook(view, initState, index) {
- if ((view.state & 1792 /* InitState_Mask */) === initState && view.initIndex <= index) {
- view.initIndex = index + 1;
- return true;
- }
- return false;
- }
- /**
- * Node instance data.
- *
- * We have a separate type per NodeType to save memory
- * (TextData | ElementData | ProviderData | PureExpressionData | QueryList<any>)
- *
- * To keep our code monomorphic,
- * we prohibit using `NodeData` directly but enforce the use of accessors (`asElementData`, ...).
- * This way, no usage site can get a `NodeData` from view.nodes and then use it for different
- * purposes.
- */
- class NodeData {
- }
- /**
- * Accessor for view.nodes, enforcing that every usage site stays monomorphic.
- */
- function asTextData(view, index) {
- return view.nodes[index];
- }
- /**
- * Accessor for view.nodes, enforcing that every usage site stays monomorphic.
- */
- function asElementData(view, index) {
- return view.nodes[index];
- }
- /**
- * Accessor for view.nodes, enforcing that every usage site stays monomorphic.
- */
- function asProviderData(view, index) {
- return view.nodes[index];
- }
- /**
- * Accessor for view.nodes, enforcing that every usage site stays monomorphic.
- */
- function asPureExpressionData(view, index) {
- return view.nodes[index];
- }
- /**
- * Accessor for view.nodes, enforcing that every usage site stays monomorphic.
- */
- function asQueryList(view, index) {
- return view.nodes[index];
- }
- class DebugContext {
- }
- /**
- * This object is used to prevent cycles in the source files and to have a place where
- * debug mode can hook it. It is lazily filled when `isDevMode` is known.
- */
- const Services = {
- setCurrentNode: undefined,
- createRootView: undefined,
- createEmbeddedView: undefined,
- createComponentView: undefined,
- createNgModuleRef: undefined,
- overrideProvider: undefined,
- overrideComponentView: undefined,
- clearOverrides: undefined,
- checkAndUpdateView: undefined,
- checkNoChangesView: undefined,
- destroyView: undefined,
- resolveDep: undefined,
- createDebugContext: undefined,
- handleEvent: undefined,
- updateDirectives: undefined,
- updateRenderer: undefined,
- dirtyParentQueries: undefined,
- };
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const NOOP = () => { };
- const _tokenKeyCache = new Map();
- function tokenKey(token) {
- let key = _tokenKeyCache.get(token);
- if (!key) {
- key = stringify(token) + '_' + _tokenKeyCache.size;
- _tokenKeyCache.set(token, key);
- }
- return key;
- }
- function unwrapValue(view, nodeIdx, bindingIdx, value) {
- if (WrappedValue.isWrapped(value)) {
- value = WrappedValue.unwrap(value);
- const globalBindingIdx = view.def.nodes[nodeIdx].bindingIndex + bindingIdx;
- const oldValue = WrappedValue.unwrap(view.oldValues[globalBindingIdx]);
- view.oldValues[globalBindingIdx] = new WrappedValue(oldValue);
- }
- return value;
- }
- const UNDEFINED_RENDERER_TYPE_ID = '$$undefined';
- const EMPTY_RENDERER_TYPE_ID = '$$empty';
- // Attention: this function is called as top level function.
- // Putting any logic in here will destroy closure tree shaking!
- function createRendererType2(values) {
- return {
- id: UNDEFINED_RENDERER_TYPE_ID,
- styles: values.styles,
- encapsulation: values.encapsulation,
- data: values.data
- };
- }
- let _renderCompCount$1 = 0;
- function resolveRendererType2(type) {
- if (type && type.id === UNDEFINED_RENDERER_TYPE_ID) {
- // first time we see this RendererType2. Initialize it...
- const isFilled = ((type.encapsulation != null && type.encapsulation !== ViewEncapsulation.None) ||
- type.styles.length || Object.keys(type.data).length);
- if (isFilled) {
- type.id = `c${_renderCompCount$1++}`;
- }
- else {
- type.id = EMPTY_RENDERER_TYPE_ID;
- }
- }
- if (type && type.id === EMPTY_RENDERER_TYPE_ID) {
- type = null;
- }
- return type || null;
- }
- function checkBinding(view, def, bindingIdx, value) {
- const oldValues = view.oldValues;
- if ((view.state & 2 /* FirstCheck */) ||
- !Object.is(oldValues[def.bindingIndex + bindingIdx], value)) {
- return true;
- }
- return false;
- }
- function checkAndUpdateBinding(view, def, bindingIdx, value) {
- if (checkBinding(view, def, bindingIdx, value)) {
- view.oldValues[def.bindingIndex + bindingIdx] = value;
- return true;
- }
- return false;
- }
- function checkBindingNoChanges(view, def, bindingIdx, value) {
- const oldValue = view.oldValues[def.bindingIndex + bindingIdx];
- if ((view.state & 1 /* BeforeFirstCheck */) || !devModeEqual(oldValue, value)) {
- const bindingName = def.bindings[bindingIdx].name;
- throw expressionChangedAfterItHasBeenCheckedError(Services.createDebugContext(view, def.nodeIndex), `${bindingName}: ${oldValue}`, `${bindingName}: ${value}`, (view.state & 1 /* BeforeFirstCheck */) !== 0);
- }
- }
- function markParentViewsForCheck(view) {
- let currView = view;
- while (currView) {
- if (currView.def.flags & 2 /* OnPush */) {
- currView.state |= 8 /* ChecksEnabled */;
- }
- currView = currView.viewContainerParent || currView.parent;
- }
- }
- function markParentViewsForCheckProjectedViews(view, endView) {
- let currView = view;
- while (currView && currView !== endView) {
- currView.state |= 64 /* CheckProjectedViews */;
- currView = currView.viewContainerParent || currView.parent;
- }
- }
- function dispatchEvent(view, nodeIndex, eventName, event) {
- try {
- const nodeDef = view.def.nodes[nodeIndex];
- const startView = nodeDef.flags & 33554432 /* ComponentView */ ?
- asElementData(view, nodeIndex).componentView :
- view;
- markParentViewsForCheck(startView);
- return Services.handleEvent(view, nodeIndex, eventName, event);
- }
- catch (e) {
- // Attention: Don't rethrow, as it would cancel Observable subscriptions!
- view.root.errorHandler.handleError(e);
- }
- }
- function declaredViewContainer(view) {
- if (view.parent) {
- const parentView = view.parent;
- return asElementData(parentView, view.parentNodeDef.nodeIndex);
- }
- return null;
- }
- /**
- * for component views, this is the host element.
- * for embedded views, this is the index of the parent node
- * that contains the view container.
- */
- function viewParentEl(view) {
- const parentView = view.parent;
- if (parentView) {
- return view.parentNodeDef.parent;
- }
- else {
- return null;
- }
- }
- function renderNode(view, def) {
- switch (def.flags & 201347067 /* Types */) {
- case 1 /* TypeElement */:
- return asElementData(view, def.nodeIndex).renderElement;
- case 2 /* TypeText */:
- return asTextData(view, def.nodeIndex).renderText;
- }
- }
- function elementEventFullName(target, name) {
- return target ? `${target}:${name}` : name;
- }
- function isComponentView(view) {
- return !!view.parent && !!(view.parentNodeDef.flags & 32768 /* Component */);
- }
- function isEmbeddedView(view) {
- return !!view.parent && !(view.parentNodeDef.flags & 32768 /* Component */);
- }
- function filterQueryId(queryId) {
- return 1 << (queryId % 32);
- }
- function splitMatchedQueriesDsl(matchedQueriesDsl) {
- const matchedQueries = {};
- let matchedQueryIds = 0;
- const references = {};
- if (matchedQueriesDsl) {
- matchedQueriesDsl.forEach(([queryId, valueType]) => {
- if (typeof queryId === 'number') {
- matchedQueries[queryId] = valueType;
- matchedQueryIds |= filterQueryId(queryId);
- }
- else {
- references[queryId] = valueType;
- }
- });
- }
- return { matchedQueries, references, matchedQueryIds };
- }
- function splitDepsDsl(deps, sourceName) {
- return deps.map(value => {
- let token;
- let flags;
- if (Array.isArray(value)) {
- [flags, token] = value;
- }
- else {
- flags = 0 /* None */;
- token = value;
- }
- if (token && (typeof token === 'function' || typeof token === 'object') && sourceName) {
- Object.defineProperty(token, SOURCE, { value: sourceName, configurable: true });
- }
- return { flags, token, tokenKey: tokenKey(token) };
- });
- }
- function getParentRenderElement(view, renderHost, def) {
- let renderParent = def.renderParent;
- if (renderParent) {
- if ((renderParent.flags & 1 /* TypeElement */) === 0 ||
- (renderParent.flags & 33554432 /* ComponentView */) === 0 ||
- (renderParent.element.componentRendererType &&
- (renderParent.element.componentRendererType.encapsulation ===
- ViewEncapsulation.ShadowDom ||
- // TODO(FW-2290): remove the `encapsulation === 1` fallback logic in v12.
- renderParent.element.componentRendererType.encapsulation === 1))) {
- // only children of non components, or children of components with native encapsulation should
- // be attached.
- return asElementData(view, def.renderParent.nodeIndex).renderElement;
- }
- }
- else {
- return renderHost;
- }
- }
- const DEFINITION_CACHE = new WeakMap();
- function resolveDefinition(factory) {
- let value = DEFINITION_CACHE.get(factory);
- if (!value) {
- value = factory(() => NOOP);
- value.factory = factory;
- DEFINITION_CACHE.set(factory, value);
- }
- return value;
- }
- function rootRenderNodes(view) {
- const renderNodes = [];
- visitRootRenderNodes(view, 0 /* Collect */, undefined, undefined, renderNodes);
- return renderNodes;
- }
- function visitRootRenderNodes(view, action, parentNode, nextSibling, target) {
- // We need to re-compute the parent node in case the nodes have been moved around manually
- if (action === 3 /* RemoveChild */) {
- parentNode = view.renderer.parentNode(renderNode(view, view.def.lastRenderRootNode));
- }
- visitSiblingRenderNodes(view, action, 0, view.def.nodes.length - 1, parentNode, nextSibling, target);
- }
- function visitSiblingRenderNodes(view, action, startIndex, endIndex, parentNode, nextSibling, target) {
- for (let i = startIndex; i <= endIndex; i++) {
- const nodeDef = view.def.nodes[i];
- if (nodeDef.flags & (1 /* TypeElement */ | 2 /* TypeText */ | 8 /* TypeNgContent */)) {
- visitRenderNode(view, nodeDef, action, parentNode, nextSibling, target);
- }
- // jump to next sibling
- i += nodeDef.childCount;
- }
- }
- function visitProjectedRenderNodes(view, ngContentIndex, action, parentNode, nextSibling, target) {
- let compView = view;
- while (compView && !isComponentView(compView)) {
- compView = compView.parent;
- }
- const hostView = compView.parent;
- const hostElDef = viewParentEl(compView);
- const startIndex = hostElDef.nodeIndex + 1;
- const endIndex = hostElDef.nodeIndex + hostElDef.childCount;
- for (let i = startIndex; i <= endIndex; i++) {
- const nodeDef = hostView.def.nodes[i];
- if (nodeDef.ngContentIndex === ngContentIndex) {
- visitRenderNode(hostView, nodeDef, action, parentNode, nextSibling, target);
- }
- // jump to next sibling
- i += nodeDef.childCount;
- }
- if (!hostView.parent) {
- // a root view
- const projectedNodes = view.root.projectableNodes[ngContentIndex];
- if (projectedNodes) {
- for (let i = 0; i < projectedNodes.length; i++) {
- execRenderNodeAction(view, projectedNodes[i], action, parentNode, nextSibling, target);
- }
- }
- }
- }
- function visitRenderNode(view, nodeDef, action, parentNode, nextSibling, target) {
- if (nodeDef.flags & 8 /* TypeNgContent */) {
- visitProjectedRenderNodes(view, nodeDef.ngContent.index, action, parentNode, nextSibling, target);
- }
- else {
- const rn = renderNode(view, nodeDef);
- if (action === 3 /* RemoveChild */ && (nodeDef.flags & 33554432 /* ComponentView */) &&
- (nodeDef.bindingFlags & 48 /* CatSyntheticProperty */)) {
- // Note: we might need to do both actions.
- if (nodeDef.bindingFlags & (16 /* SyntheticProperty */)) {
- execRenderNodeAction(view, rn, action, parentNode, nextSibling, target);
- }
- if (nodeDef.bindingFlags & (32 /* SyntheticHostProperty */)) {
- const compView = asElementData(view, nodeDef.nodeIndex).componentView;
- execRenderNodeAction(compView, rn, action, parentNode, nextSibling, target);
- }
- }
- else {
- execRenderNodeAction(view, rn, action, parentNode, nextSibling, target);
- }
- if (nodeDef.flags & 16777216 /* EmbeddedViews */) {
- const embeddedViews = asElementData(view, nodeDef.nodeIndex).viewContainer._embeddedViews;
- for (let k = 0; k < embeddedViews.length; k++) {
- visitRootRenderNodes(embeddedViews[k], action, parentNode, nextSibling, target);
- }
- }
- if (nodeDef.flags & 1 /* TypeElement */ && !nodeDef.element.name) {
- visitSiblingRenderNodes(view, action, nodeDef.nodeIndex + 1, nodeDef.nodeIndex + nodeDef.childCount, parentNode, nextSibling, target);
- }
- }
- }
- function execRenderNodeAction(view, renderNode, action, parentNode, nextSibling, target) {
- const renderer = view.renderer;
- switch (action) {
- case 1 /* AppendChild */:
- renderer.appendChild(parentNode, renderNode);
- break;
- case 2 /* InsertBefore */:
- renderer.insertBefore(parentNode, renderNode, nextSibling);
- break;
- case 3 /* RemoveChild */:
- renderer.removeChild(parentNode, renderNode);
- break;
- case 0 /* Collect */:
- target.push(renderNode);
- break;
- }
- }
- const NS_PREFIX_RE = /^:([^:]+):(.+)$/;
- function splitNamespace(name) {
- if (name[0] === ':') {
- const match = name.match(NS_PREFIX_RE);
- return [match[1], match[2]];
- }
- return ['', name];
- }
- function calcBindingFlags(bindings) {
- let flags = 0;
- for (let i = 0; i < bindings.length; i++) {
- flags |= bindings[i].flags;
- }
- return flags;
- }
- function interpolate(valueCount, constAndInterp) {
- let result = '';
- for (let i = 0; i < valueCount * 2; i = i + 2) {
- result = result + constAndInterp[i] + _toStringWithNull(constAndInterp[i + 1]);
- }
- return result + constAndInterp[valueCount * 2];
- }
- function inlineInterpolate(valueCount, c0, a1, c1, a2, c2, a3, c3, a4, c4, a5, c5, a6, c6, a7, c7, a8, c8, a9, c9) {
- switch (valueCount) {
- case 1:
- return c0 + _toStringWithNull(a1) + c1;
- case 2:
- return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2;
- case 3:
- return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +
- c3;
- case 4:
- return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +
- c3 + _toStringWithNull(a4) + c4;
- case 5:
- return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +
- c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5;
- case 6:
- return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +
- c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5 + _toStringWithNull(a6) + c6;
- case 7:
- return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +
- c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5 + _toStringWithNull(a6) +
- c6 + _toStringWithNull(a7) + c7;
- case 8:
- return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +
- c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5 + _toStringWithNull(a6) +
- c6 + _toStringWithNull(a7) + c7 + _toStringWithNull(a8) + c8;
- case 9:
- return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +
- c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5 + _toStringWithNull(a6) +
- c6 + _toStringWithNull(a7) + c7 + _toStringWithNull(a8) + c8 + _toStringWithNull(a9) + c9;
- default:
- throw new Error(`Does not support more than 9 expressions`);
- }
- }
- function _toStringWithNull(v) {
- return v != null ? v.toString() : '';
- }
- const EMPTY_ARRAY$4 = [];
- const EMPTY_MAP = {};
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const UNDEFINED_VALUE = {};
- const InjectorRefTokenKey = tokenKey(Injector);
- const INJECTORRefTokenKey = tokenKey(INJECTOR$1);
- const NgModuleRefTokenKey = tokenKey(NgModuleRef);
- function moduleProvideDef(flags, token, value, deps) {
- // Need to resolve forwardRefs as e.g. for `useValue` we
- // lowered the expression and then stopped evaluating it,
- // i.e. also didn't unwrap it.
- value = resolveForwardRef(value);
- const depDefs = splitDepsDsl(deps, stringify(token));
- return {
- // will bet set by the module definition
- index: -1,
- deps: depDefs,
- flags,
- token,
- value
- };
- }
- function moduleDef(providers) {
- const providersByKey = {};
- const modules = [];
- let scope = null;
- for (let i = 0; i < providers.length; i++) {
- const provider = providers[i];
- if (provider.token === INJECTOR_SCOPE) {
- scope = provider.value;
- }
- if (provider.flags & 1073741824 /* TypeNgModule */) {
- modules.push(provider.token);
- }
- provider.index = i;
- providersByKey[tokenKey(provider.token)] = provider;
- }
- return {
- // Will be filled later...
- factory: null,
- providersByKey,
- providers,
- modules,
- scope: scope,
- };
- }
- function initNgModule(data) {
- const def = data._def;
- const providers = data._providers = newArray(def.providers.length);
- for (let i = 0; i < def.providers.length; i++) {
- const provDef = def.providers[i];
- if (!(provDef.flags & 4096 /* LazyProvider */)) {
- // Make sure the provider has not been already initialized outside this loop.
- if (providers[i] === undefined) {
- providers[i] = _createProviderInstance(data, provDef);
- }
- }
- }
- }
- function resolveNgModuleDep(data, depDef, notFoundValue = Injector.THROW_IF_NOT_FOUND) {
- const former = setCurrentInjector(data);
- try {
- if (depDef.flags & 8 /* Value */) {
- return depDef.token;
- }
- if (depDef.flags & 2 /* Optional */) {
- notFoundValue = null;
- }
- if (depDef.flags & 1 /* SkipSelf */) {
- return data._parent.get(depDef.token, notFoundValue);
- }
- const tokenKey = depDef.tokenKey;
- switch (tokenKey) {
- case InjectorRefTokenKey:
- case INJECTORRefTokenKey:
- case NgModuleRefTokenKey:
- return data;
- }
- const providerDef = data._def.providersByKey[tokenKey];
- let injectableDef;
- if (providerDef) {
- let providerInstance = data._providers[providerDef.index];
- if (providerInstance === undefined) {
- providerInstance = data._providers[providerDef.index] =
- _createProviderInstance(data, providerDef);
- }
- return providerInstance === UNDEFINED_VALUE ? undefined : providerInstance;
- }
- else if ((injectableDef = getInjectableDef(depDef.token)) && targetsModule(data, injectableDef)) {
- const index = data._providers.length;
- data._def.providers[index] = data._def.providersByKey[depDef.tokenKey] = {
- flags: 1024 /* TypeFactoryProvider */ | 4096 /* LazyProvider */,
- value: injectableDef.factory,
- deps: [],
- index,
- token: depDef.token,
- };
- data._providers[index] = UNDEFINED_VALUE;
- return (data._providers[index] =
- _createProviderInstance(data, data._def.providersByKey[depDef.tokenKey]));
- }
- else if (depDef.flags & 4 /* Self */) {
- return notFoundValue;
- }
- return data._parent.get(depDef.token, notFoundValue);
- }
- finally {
- setCurrentInjector(former);
- }
- }
- function moduleTransitivelyPresent(ngModule, scope) {
- return ngModule._def.modules.indexOf(scope) > -1;
- }
- function targetsModule(ngModule, def) {
- const providedIn = def.providedIn;
- return providedIn != null &&
- (providedIn === 'any' || providedIn === ngModule._def.scope ||
- moduleTransitivelyPresent(ngModule, providedIn));
- }
- function _createProviderInstance(ngModule, providerDef) {
- let injectable;
- switch (providerDef.flags & 201347067 /* Types */) {
- case 512 /* TypeClassProvider */:
- injectable = _createClass(ngModule, providerDef.value, providerDef.deps);
- break;
- case 1024 /* TypeFactoryProvider */:
- injectable = _callFactory(ngModule, providerDef.value, providerDef.deps);
- break;
- case 2048 /* TypeUseExistingProvider */:
- injectable = resolveNgModuleDep(ngModule, providerDef.deps[0]);
- break;
- case 256 /* TypeValueProvider */:
- injectable = providerDef.value;
- break;
- }
- // The read of `ngOnDestroy` here is slightly expensive as it's megamorphic, so it should be
- // avoided if possible. The sequence of checks here determines whether ngOnDestroy needs to be
- // checked. It might not if the `injectable` isn't an object or if NodeFlags.OnDestroy is already
- // set (ngOnDestroy was detected statically).
- if (injectable !== UNDEFINED_VALUE && injectable !== null && typeof injectable === 'object' &&
- !(providerDef.flags & 131072 /* OnDestroy */) && typeof injectable.ngOnDestroy === 'function') {
- providerDef.flags |= 131072 /* OnDestroy */;
- }
- return injectable === undefined ? UNDEFINED_VALUE : injectable;
- }
- function _createClass(ngModule, ctor, deps) {
- const len = deps.length;
- switch (len) {
- case 0:
- return new ctor();
- case 1:
- return new ctor(resolveNgModuleDep(ngModule, deps[0]));
- case 2:
- return new ctor(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]));
- case 3:
- return new ctor(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]), resolveNgModuleDep(ngModule, deps[2]));
- default:
- const depValues = [];
- for (let i = 0; i < len; i++) {
- depValues[i] = resolveNgModuleDep(ngModule, deps[i]);
- }
- return new ctor(...depValues);
- }
- }
- function _callFactory(ngModule, factory, deps) {
- const len = deps.length;
- switch (len) {
- case 0:
- return factory();
- case 1:
- return factory(resolveNgModuleDep(ngModule, deps[0]));
- case 2:
- return factory(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]));
- case 3:
- return factory(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]), resolveNgModuleDep(ngModule, deps[2]));
- default:
- const depValues = [];
- for (let i = 0; i < len; i++) {
- depValues[i] = resolveNgModuleDep(ngModule, deps[i]);
- }
- return factory(...depValues);
- }
- }
- function callNgModuleLifecycle(ngModule, lifecycles) {
- const def = ngModule._def;
- const destroyed = new Set();
- for (let i = 0; i < def.providers.length; i++) {
- const provDef = def.providers[i];
- if (provDef.flags & 131072 /* OnDestroy */) {
- const instance = ngModule._providers[i];
- if (instance && instance !== UNDEFINED_VALUE) {
- const onDestroy = instance.ngOnDestroy;
- if (typeof onDestroy === 'function' && !destroyed.has(instance)) {
- onDestroy.apply(instance);
- destroyed.add(instance);
- }
- }
- }
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function attachEmbeddedView(parentView, elementData, viewIndex, view) {
- let embeddedViews = elementData.viewContainer._embeddedViews;
- if (viewIndex === null || viewIndex === undefined) {
- viewIndex = embeddedViews.length;
- }
- view.viewContainerParent = parentView;
- addToArray(embeddedViews, viewIndex, view);
- attachProjectedView(elementData, view);
- Services.dirtyParentQueries(view);
- const prevView = viewIndex > 0 ? embeddedViews[viewIndex - 1] : null;
- renderAttachEmbeddedView(elementData, prevView, view);
- }
- function attachProjectedView(vcElementData, view) {
- const dvcElementData = declaredViewContainer(view);
- if (!dvcElementData || dvcElementData === vcElementData ||
- view.state & 16 /* IsProjectedView */) {
- return;
- }
- // Note: For performance reasons, we
- // - add a view to template._projectedViews only 1x throughout its lifetime,
- // and remove it not until the view is destroyed.
- // (hard, as when a parent view is attached/detached we would need to attach/detach all
- // nested projected views as well, even across component boundaries).
- // - don't track the insertion order of views in the projected views array
- // (hard, as when the views of the same template are inserted different view containers)
- view.state |= 16 /* IsProjectedView */;
- let projectedViews = dvcElementData.template._projectedViews;
- if (!projectedViews) {
- projectedViews = dvcElementData.template._projectedViews = [];
- }
- projectedViews.push(view);
- // Note: we are changing the NodeDef here as we cannot calculate
- // the fact whether a template is used for projection during compilation.
- markNodeAsProjectedTemplate(view.parent.def, view.parentNodeDef);
- }
- function markNodeAsProjectedTemplate(viewDef, nodeDef) {
- if (nodeDef.flags & 4 /* ProjectedTemplate */) {
- return;
- }
- viewDef.nodeFlags |= 4 /* ProjectedTemplate */;
- nodeDef.flags |= 4 /* ProjectedTemplate */;
- let parentNodeDef = nodeDef.parent;
- while (parentNodeDef) {
- parentNodeDef.childFlags |= 4 /* ProjectedTemplate */;
- parentNodeDef = parentNodeDef.parent;
- }
- }
- function detachEmbeddedView(elementData, viewIndex) {
- const embeddedViews = elementData.viewContainer._embeddedViews;
- if (viewIndex == null || viewIndex >= embeddedViews.length) {
- viewIndex = embeddedViews.length - 1;
- }
- if (viewIndex < 0) {
- return null;
- }
- const view = embeddedViews[viewIndex];
- view.viewContainerParent = null;
- removeFromArray(embeddedViews, viewIndex);
- // See attachProjectedView for why we don't update projectedViews here.
- Services.dirtyParentQueries(view);
- renderDetachView$1(view);
- return view;
- }
- function detachProjectedView(view) {
- if (!(view.state & 16 /* IsProjectedView */)) {
- return;
- }
- const dvcElementData = declaredViewContainer(view);
- if (dvcElementData) {
- const projectedViews = dvcElementData.template._projectedViews;
- if (projectedViews) {
- removeFromArray(projectedViews, projectedViews.indexOf(view));
- Services.dirtyParentQueries(view);
- }
- }
- }
- function moveEmbeddedView(elementData, oldViewIndex, newViewIndex) {
- const embeddedViews = elementData.viewContainer._embeddedViews;
- const view = embeddedViews[oldViewIndex];
- removeFromArray(embeddedViews, oldViewIndex);
- if (newViewIndex == null) {
- newViewIndex = embeddedViews.length;
- }
- addToArray(embeddedViews, newViewIndex, view);
- // Note: Don't need to change projectedViews as the order in there
- // as always invalid...
- Services.dirtyParentQueries(view);
- renderDetachView$1(view);
- const prevView = newViewIndex > 0 ? embeddedViews[newViewIndex - 1] : null;
- renderAttachEmbeddedView(elementData, prevView, view);
- return view;
- }
- function renderAttachEmbeddedView(elementData, prevView, view) {
- const prevRenderNode = prevView ? renderNode(prevView, prevView.def.lastRenderRootNode) : elementData.renderElement;
- const parentNode = view.renderer.parentNode(prevRenderNode);
- const nextSibling = view.renderer.nextSibling(prevRenderNode);
- // Note: We can't check if `nextSibling` is present, as on WebWorkers it will always be!
- // However, browsers automatically do `appendChild` when there is no `nextSibling`.
- visitRootRenderNodes(view, 2 /* InsertBefore */, parentNode, nextSibling, undefined);
- }
- function renderDetachView$1(view) {
- visitRootRenderNodes(view, 3 /* RemoveChild */, null, null, undefined);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const EMPTY_CONTEXT = {};
- // Attention: this function is called as top level function.
- // Putting any logic in here will destroy closure tree shaking!
- function createComponentFactory(selector, componentType, viewDefFactory, inputs, outputs, ngContentSelectors) {
- return new ComponentFactory_(selector, componentType, viewDefFactory, inputs, outputs, ngContentSelectors);
- }
- function getComponentViewDefinitionFactory(componentFactory) {
- return componentFactory.viewDefFactory;
- }
- class ComponentFactory_ extends ComponentFactory {
- constructor(selector, componentType, viewDefFactory, _inputs, _outputs, ngContentSelectors) {
- // Attention: this ctor is called as top level function.
- // Putting any logic in here will destroy closure tree shaking!
- super();
- this.selector = selector;
- this.componentType = componentType;
- this._inputs = _inputs;
- this._outputs = _outputs;
- this.ngContentSelectors = ngContentSelectors;
- this.viewDefFactory = viewDefFactory;
- }
- get inputs() {
- const inputsArr = [];
- const inputs = this._inputs;
- for (let propName in inputs) {
- const templateName = inputs[propName];
- inputsArr.push({ propName, templateName });
- }
- return inputsArr;
- }
- get outputs() {
- const outputsArr = [];
- for (let propName in this._outputs) {
- const templateName = this._outputs[propName];
- outputsArr.push({ propName, templateName });
- }
- return outputsArr;
- }
- /**
- * Creates a new component.
- */
- create(injector, projectableNodes, rootSelectorOrNode, ngModule) {
- if (!ngModule) {
- throw new Error('ngModule should be provided');
- }
- const viewDef = resolveDefinition(this.viewDefFactory);
- const componentNodeIndex = viewDef.nodes[0].element.componentProvider.nodeIndex;
- const view = Services.createRootView(injector, projectableNodes || [], rootSelectorOrNode, viewDef, ngModule, EMPTY_CONTEXT);
- const component = asProviderData(view, componentNodeIndex).instance;
- if (rootSelectorOrNode) {
- view.renderer.setAttribute(asElementData(view, 0).renderElement, 'ng-version', VERSION.full);
- }
- return new ComponentRef_(view, new ViewRef_(view), component);
- }
- }
- class ComponentRef_ extends ComponentRef {
- constructor(_view, _viewRef, _component) {
- super();
- this._view = _view;
- this._viewRef = _viewRef;
- this._component = _component;
- this._elDef = this._view.def.nodes[0];
- this.hostView = _viewRef;
- this.changeDetectorRef = _viewRef;
- this.instance = _component;
- }
- get location() {
- return new ElementRef(asElementData(this._view, this._elDef.nodeIndex).renderElement);
- }
- get injector() {
- return new Injector_(this._view, this._elDef);
- }
- get componentType() {
- return this._component.constructor;
- }
- destroy() {
- this._viewRef.destroy();
- }
- onDestroy(callback) {
- this._viewRef.onDestroy(callback);
- }
- }
- function createViewContainerData(view, elDef, elData) {
- return new ViewContainerRef_(view, elDef, elData);
- }
- class ViewContainerRef_ {
- constructor(_view, _elDef, _data) {
- this._view = _view;
- this._elDef = _elDef;
- this._data = _data;
- /**
- * @internal
- */
- this._embeddedViews = [];
- }
- get element() {
- return new ElementRef(this._data.renderElement);
- }
- get injector() {
- return new Injector_(this._view, this._elDef);
- }
- /** @deprecated No replacement */
- get parentInjector() {
- let view = this._view;
- let elDef = this._elDef.parent;
- while (!elDef && view) {
- elDef = viewParentEl(view);
- view = view.parent;
- }
- return view ? new Injector_(view, elDef) : new Injector_(this._view, null);
- }
- clear() {
- const len = this._embeddedViews.length;
- for (let i = len - 1; i >= 0; i--) {
- const view = detachEmbeddedView(this._data, i);
- Services.destroyView(view);
- }
- }
- get(index) {
- const view = this._embeddedViews[index];
- if (view) {
- const ref = new ViewRef_(view);
- ref.attachToViewContainerRef(this);
- return ref;
- }
- return null;
- }
- get length() {
- return this._embeddedViews.length;
- }
- createEmbeddedView(templateRef, context, index) {
- const viewRef = templateRef.createEmbeddedView(context || {});
- this.insert(viewRef, index);
- return viewRef;
- }
- createComponent(componentFactory, index, injector, projectableNodes, ngModuleRef) {
- const contextInjector = injector || this.parentInjector;
- if (!ngModuleRef && !(componentFactory instanceof ComponentFactoryBoundToModule)) {
- ngModuleRef = contextInjector.get(NgModuleRef);
- }
- const componentRef = componentFactory.create(contextInjector, projectableNodes, undefined, ngModuleRef);
- this.insert(componentRef.hostView, index);
- return componentRef;
- }
- insert(viewRef, index) {
- if (viewRef.destroyed) {
- throw new Error('Cannot insert a destroyed View in a ViewContainer!');
- }
- const viewRef_ = viewRef;
- const viewData = viewRef_._view;
- attachEmbeddedView(this._view, this._data, index, viewData);
- viewRef_.attachToViewContainerRef(this);
- return viewRef;
- }
- move(viewRef, currentIndex) {
- if (viewRef.destroyed) {
- throw new Error('Cannot move a destroyed View in a ViewContainer!');
- }
- const previousIndex = this._embeddedViews.indexOf(viewRef._view);
- moveEmbeddedView(this._data, previousIndex, currentIndex);
- return viewRef;
- }
- indexOf(viewRef) {
- return this._embeddedViews.indexOf(viewRef._view);
- }
- remove(index) {
- const viewData = detachEmbeddedView(this._data, index);
- if (viewData) {
- Services.destroyView(viewData);
- }
- }
- detach(index) {
- const view = detachEmbeddedView(this._data, index);
- return view ? new ViewRef_(view) : null;
- }
- }
- function createChangeDetectorRef(view) {
- return new ViewRef_(view);
- }
- class ViewRef_ {
- constructor(_view) {
- this._view = _view;
- this._viewContainerRef = null;
- this._appRef = null;
- }
- get rootNodes() {
- return rootRenderNodes(this._view);
- }
- get context() {
- return this._view.context;
- }
- get destroyed() {
- return (this._view.state & 128 /* Destroyed */) !== 0;
- }
- markForCheck() {
- markParentViewsForCheck(this._view);
- }
- detach() {
- this._view.state &= ~4 /* Attached */;
- }
- detectChanges() {
- const fs = this._view.root.rendererFactory;
- if (fs.begin) {
- fs.begin();
- }
- try {
- Services.checkAndUpdateView(this._view);
- }
- finally {
- if (fs.end) {
- fs.end();
- }
- }
- }
- checkNoChanges() {
- Services.checkNoChangesView(this._view);
- }
- reattach() {
- this._view.state |= 4 /* Attached */;
- }
- onDestroy(callback) {
- if (!this._view.disposables) {
- this._view.disposables = [];
- }
- this._view.disposables.push(callback);
- }
- destroy() {
- if (this._appRef) {
- this._appRef.detachView(this);
- }
- else if (this._viewContainerRef) {
- this._viewContainerRef.detach(this._viewContainerRef.indexOf(this));
- }
- Services.destroyView(this._view);
- }
- detachFromAppRef() {
- this._appRef = null;
- renderDetachView$1(this._view);
- Services.dirtyParentQueries(this._view);
- }
- attachToAppRef(appRef) {
- if (this._viewContainerRef) {
- throw new Error('This view is already attached to a ViewContainer!');
- }
- this._appRef = appRef;
- }
- attachToViewContainerRef(vcRef) {
- if (this._appRef) {
- throw new Error('This view is already attached directly to the ApplicationRef!');
- }
- this._viewContainerRef = vcRef;
- }
- }
- function createTemplateData(view, def) {
- return new TemplateRef_(view, def);
- }
- class TemplateRef_ extends TemplateRef {
- constructor(_parentView, _def) {
- super();
- this._parentView = _parentView;
- this._def = _def;
- }
- createEmbeddedView(context) {
- return new ViewRef_(Services.createEmbeddedView(this._parentView, this._def, this._def.element.template, context));
- }
- get elementRef() {
- return new ElementRef(asElementData(this._parentView, this._def.nodeIndex).renderElement);
- }
- }
- function createInjector$1(view, elDef) {
- return new Injector_(view, elDef);
- }
- class Injector_ {
- constructor(view, elDef) {
- this.view = view;
- this.elDef = elDef;
- }
- get(token, notFoundValue = Injector.THROW_IF_NOT_FOUND) {
- const allowPrivateServices = this.elDef ? (this.elDef.flags & 33554432 /* ComponentView */) !== 0 : false;
- return Services.resolveDep(this.view, this.elDef, allowPrivateServices, { flags: 0 /* None */, token, tokenKey: tokenKey(token) }, notFoundValue);
- }
- }
- function nodeValue(view, index) {
- const def = view.def.nodes[index];
- if (def.flags & 1 /* TypeElement */) {
- const elData = asElementData(view, def.nodeIndex);
- return def.element.template ? elData.template : elData.renderElement;
- }
- else if (def.flags & 2 /* TypeText */) {
- return asTextData(view, def.nodeIndex).renderText;
- }
- else if (def.flags & (20224 /* CatProvider */ | 16 /* TypePipe */)) {
- return asProviderData(view, def.nodeIndex).instance;
- }
- throw new Error(`Illegal state: read nodeValue for node index ${index}`);
- }
- function createNgModuleRef(moduleType, parent, bootstrapComponents, def) {
- return new NgModuleRef_(moduleType, parent, bootstrapComponents, def);
- }
- class NgModuleRef_ {
- constructor(_moduleType, _parent, _bootstrapComponents, _def) {
- this._moduleType = _moduleType;
- this._parent = _parent;
- this._bootstrapComponents = _bootstrapComponents;
- this._def = _def;
- this._destroyListeners = [];
- this._destroyed = false;
- this.injector = this;
- initNgModule(this);
- }
- get(token, notFoundValue = Injector.THROW_IF_NOT_FOUND, injectFlags = InjectFlags.Default) {
- let flags = 0 /* None */;
- if (injectFlags & InjectFlags.SkipSelf) {
- flags |= 1 /* SkipSelf */;
- }
- else if (injectFlags & InjectFlags.Self) {
- flags |= 4 /* Self */;
- }
- return resolveNgModuleDep(this, { token: token, tokenKey: tokenKey(token), flags: flags }, notFoundValue);
- }
- get instance() {
- return this.get(this._moduleType);
- }
- get componentFactoryResolver() {
- return this.get(ComponentFactoryResolver);
- }
- destroy() {
- if (this._destroyed) {
- throw new Error(`The ng module ${stringify(this.instance.constructor)} has already been destroyed.`);
- }
- this._destroyed = true;
- callNgModuleLifecycle(this, 131072 /* OnDestroy */);
- this._destroyListeners.forEach((listener) => listener());
- }
- onDestroy(callback) {
- this._destroyListeners.push(callback);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const Renderer2TokenKey = tokenKey(Renderer2);
- const ElementRefTokenKey = tokenKey(ElementRef);
- const ViewContainerRefTokenKey = tokenKey(ViewContainerRef);
- const TemplateRefTokenKey = tokenKey(TemplateRef);
- const ChangeDetectorRefTokenKey = tokenKey(ChangeDetectorRef);
- const InjectorRefTokenKey$1 = tokenKey(Injector);
- const INJECTORRefTokenKey$1 = tokenKey(INJECTOR$1);
- function directiveDef(checkIndex, flags, matchedQueries, childCount, ctor, deps, props, outputs) {
- const bindings = [];
- if (props) {
- for (let prop in props) {
- const [bindingIndex, nonMinifiedName] = props[prop];
- bindings[bindingIndex] = {
- flags: 8 /* TypeProperty */,
- name: prop,
- nonMinifiedName,
- ns: null,
- securityContext: null,
- suffix: null
- };
- }
- }
- const outputDefs = [];
- if (outputs) {
- for (let propName in outputs) {
- outputDefs.push({ type: 1 /* DirectiveOutput */, propName, target: null, eventName: outputs[propName] });
- }
- }
- flags |= 16384 /* TypeDirective */;
- return _def(checkIndex, flags, matchedQueries, childCount, ctor, ctor, deps, bindings, outputDefs);
- }
- function pipeDef(flags, ctor, deps) {
- flags |= 16 /* TypePipe */;
- return _def(-1, flags, null, 0, ctor, ctor, deps);
- }
- function providerDef(flags, matchedQueries, token, value, deps) {
- return _def(-1, flags, matchedQueries, 0, token, value, deps);
- }
- function _def(checkIndex, flags, matchedQueriesDsl, childCount, token, value, deps, bindings, outputs) {
- const { matchedQueries, references, matchedQueryIds } = splitMatchedQueriesDsl(matchedQueriesDsl);
- if (!outputs) {
- outputs = [];
- }
- if (!bindings) {
- bindings = [];
- }
- // Need to resolve forwardRefs as e.g. for `useValue` we
- // lowered the expression and then stopped evaluating it,
- // i.e. also didn't unwrap it.
- value = resolveForwardRef(value);
- const depDefs = splitDepsDsl(deps, stringify(token));
- return {
- // will bet set by the view definition
- nodeIndex: -1,
- parent: null,
- renderParent: null,
- bindingIndex: -1,
- outputIndex: -1,
- // regular values
- checkIndex,
- flags,
- childFlags: 0,
- directChildFlags: 0,
- childMatchedQueries: 0,
- matchedQueries,
- matchedQueryIds,
- references,
- ngContentIndex: -1,
- childCount,
- bindings,
- bindingFlags: calcBindingFlags(bindings),
- outputs,
- element: null,
- provider: { token, value, deps: depDefs },
- text: null,
- query: null,
- ngContent: null
- };
- }
- function createProviderInstance(view, def) {
- return _createProviderInstance$1(view, def);
- }
- function createPipeInstance(view, def) {
- // deps are looked up from component.
- let compView = view;
- while (compView.parent && !isComponentView(compView)) {
- compView = compView.parent;
- }
- // pipes can see the private services of the component
- const allowPrivateServices = true;
- // pipes are always eager and classes!
- return createClass(compView.parent, viewParentEl(compView), allowPrivateServices, def.provider.value, def.provider.deps);
- }
- function createDirectiveInstance(view, def) {
- // components can see other private services, other directives can't.
- const allowPrivateServices = (def.flags & 32768 /* Component */) > 0;
- // directives are always eager and classes!
- const instance = createClass(view, def.parent, allowPrivateServices, def.provider.value, def.provider.deps);
- if (def.outputs.length) {
- for (let i = 0; i < def.outputs.length; i++) {
- const output = def.outputs[i];
- const outputObservable = instance[output.propName];
- if (isObservable(outputObservable)) {
- const subscription = outputObservable.subscribe(eventHandlerClosure(view, def.parent.nodeIndex, output.eventName));
- view.disposables[def.outputIndex + i] = subscription.unsubscribe.bind(subscription);
- }
- else {
- throw new Error(`@Output ${output.propName} not initialized in '${instance.constructor.name}'.`);
- }
- }
- }
- return instance;
- }
- function eventHandlerClosure(view, index, eventName) {
- return (event) => dispatchEvent(view, index, eventName, event);
- }
- function checkAndUpdateDirectiveInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
- const providerData = asProviderData(view, def.nodeIndex);
- const directive = providerData.instance;
- let changed = false;
- let changes = undefined;
- const bindLen = def.bindings.length;
- if (bindLen > 0 && checkBinding(view, def, 0, v0)) {
- changed = true;
- changes = updateProp(view, providerData, def, 0, v0, changes);
- }
- if (bindLen > 1 && checkBinding(view, def, 1, v1)) {
- changed = true;
- changes = updateProp(view, providerData, def, 1, v1, changes);
- }
- if (bindLen > 2 && checkBinding(view, def, 2, v2)) {
- changed = true;
- changes = updateProp(view, providerData, def, 2, v2, changes);
- }
- if (bindLen > 3 && checkBinding(view, def, 3, v3)) {
- changed = true;
- changes = updateProp(view, providerData, def, 3, v3, changes);
- }
- if (bindLen > 4 && checkBinding(view, def, 4, v4)) {
- changed = true;
- changes = updateProp(view, providerData, def, 4, v4, changes);
- }
- if (bindLen > 5 && checkBinding(view, def, 5, v5)) {
- changed = true;
- changes = updateProp(view, providerData, def, 5, v5, changes);
- }
- if (bindLen > 6 && checkBinding(view, def, 6, v6)) {
- changed = true;
- changes = updateProp(view, providerData, def, 6, v6, changes);
- }
- if (bindLen > 7 && checkBinding(view, def, 7, v7)) {
- changed = true;
- changes = updateProp(view, providerData, def, 7, v7, changes);
- }
- if (bindLen > 8 && checkBinding(view, def, 8, v8)) {
- changed = true;
- changes = updateProp(view, providerData, def, 8, v8, changes);
- }
- if (bindLen > 9 && checkBinding(view, def, 9, v9)) {
- changed = true;
- changes = updateProp(view, providerData, def, 9, v9, changes);
- }
- if (changes) {
- directive.ngOnChanges(changes);
- }
- if ((def.flags & 65536 /* OnInit */) &&
- shouldCallLifecycleInitHook(view, 256 /* InitState_CallingOnInit */, def.nodeIndex)) {
- directive.ngOnInit();
- }
- if (def.flags & 262144 /* DoCheck */) {
- directive.ngDoCheck();
- }
- return changed;
- }
- function checkAndUpdateDirectiveDynamic(view, def, values) {
- const providerData = asProviderData(view, def.nodeIndex);
- const directive = providerData.instance;
- let changed = false;
- let changes = undefined;
- for (let i = 0; i < values.length; i++) {
- if (checkBinding(view, def, i, values[i])) {
- changed = true;
- changes = updateProp(view, providerData, def, i, values[i], changes);
- }
- }
- if (changes) {
- directive.ngOnChanges(changes);
- }
- if ((def.flags & 65536 /* OnInit */) &&
- shouldCallLifecycleInitHook(view, 256 /* InitState_CallingOnInit */, def.nodeIndex)) {
- directive.ngOnInit();
- }
- if (def.flags & 262144 /* DoCheck */) {
- directive.ngDoCheck();
- }
- return changed;
- }
- function _createProviderInstance$1(view, def) {
- // private services can see other private services
- const allowPrivateServices = (def.flags & 8192 /* PrivateProvider */) > 0;
- const providerDef = def.provider;
- switch (def.flags & 201347067 /* Types */) {
- case 512 /* TypeClassProvider */:
- return createClass(view, def.parent, allowPrivateServices, providerDef.value, providerDef.deps);
- case 1024 /* TypeFactoryProvider */:
- return callFactory(view, def.parent, allowPrivateServices, providerDef.value, providerDef.deps);
- case 2048 /* TypeUseExistingProvider */:
- return resolveDep(view, def.parent, allowPrivateServices, providerDef.deps[0]);
- case 256 /* TypeValueProvider */:
- return providerDef.value;
- }
- }
- function createClass(view, elDef, allowPrivateServices, ctor, deps) {
- const len = deps.length;
- switch (len) {
- case 0:
- return new ctor();
- case 1:
- return new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]));
- case 2:
- return new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]));
- case 3:
- return new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]), resolveDep(view, elDef, allowPrivateServices, deps[2]));
- default:
- const depValues = [];
- for (let i = 0; i < len; i++) {
- depValues.push(resolveDep(view, elDef, allowPrivateServices, deps[i]));
- }
- return new ctor(...depValues);
- }
- }
- function callFactory(view, elDef, allowPrivateServices, factory, deps) {
- const len = deps.length;
- switch (len) {
- case 0:
- return factory();
- case 1:
- return factory(resolveDep(view, elDef, allowPrivateServices, deps[0]));
- case 2:
- return factory(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]));
- case 3:
- return factory(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]), resolveDep(view, elDef, allowPrivateServices, deps[2]));
- default:
- const depValues = [];
- for (let i = 0; i < len; i++) {
- depValues.push(resolveDep(view, elDef, allowPrivateServices, deps[i]));
- }
- return factory(...depValues);
- }
- }
- // This default value is when checking the hierarchy for a token.
- //
- // It means both:
- // - the token is not provided by the current injector,
- // - only the element injectors should be checked (ie do not check module injectors
- //
- // mod1
- // /
- // el1 mod2
- // \ /
- // el2
- //
- // When requesting el2.injector.get(token), we should check in the following order and return the
- // first found value:
- // - el2.injector.get(token, default)
- // - el1.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) -> do not check the module
- // - mod2.injector.get(token, default)
- const NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR = {};
- function resolveDep(view, elDef, allowPrivateServices, depDef, notFoundValue = Injector.THROW_IF_NOT_FOUND) {
- if (depDef.flags & 8 /* Value */) {
- return depDef.token;
- }
- const startView = view;
- if (depDef.flags & 2 /* Optional */) {
- notFoundValue = null;
- }
- const tokenKey = depDef.tokenKey;
- if (tokenKey === ChangeDetectorRefTokenKey) {
- // directives on the same element as a component should be able to control the change detector
- // of that component as well.
- allowPrivateServices = !!(elDef && elDef.element.componentView);
- }
- if (elDef && (depDef.flags & 1 /* SkipSelf */)) {
- allowPrivateServices = false;
- elDef = elDef.parent;
- }
- let searchView = view;
- while (searchView) {
- if (elDef) {
- switch (tokenKey) {
- case Renderer2TokenKey: {
- const compView = findCompView(searchView, elDef, allowPrivateServices);
- return compView.renderer;
- }
- case ElementRefTokenKey:
- return new ElementRef(asElementData(searchView, elDef.nodeIndex).renderElement);
- case ViewContainerRefTokenKey:
- return asElementData(searchView, elDef.nodeIndex).viewContainer;
- case TemplateRefTokenKey: {
- if (elDef.element.template) {
- return asElementData(searchView, elDef.nodeIndex).template;
- }
- break;
- }
- case ChangeDetectorRefTokenKey: {
- let cdView = findCompView(searchView, elDef, allowPrivateServices);
- return createChangeDetectorRef(cdView);
- }
- case InjectorRefTokenKey$1:
- case INJECTORRefTokenKey$1:
- return createInjector$1(searchView, elDef);
- default:
- const providerDef = (allowPrivateServices ? elDef.element.allProviders :
- elDef.element.publicProviders)[tokenKey];
- if (providerDef) {
- let providerData = asProviderData(searchView, providerDef.nodeIndex);
- if (!providerData) {
- providerData = { instance: _createProviderInstance$1(searchView, providerDef) };
- searchView.nodes[providerDef.nodeIndex] = providerData;
- }
- return providerData.instance;
- }
- }
- }
- allowPrivateServices = isComponentView(searchView);
- elDef = viewParentEl(searchView);
- searchView = searchView.parent;
- if (depDef.flags & 4 /* Self */) {
- searchView = null;
- }
- }
- const value = startView.root.injector.get(depDef.token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR);
- if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR ||
- notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
- // Return the value from the root element injector when
- // - it provides it
- // (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
- // - the module injector should not be checked
- // (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
- return value;
- }
- return startView.root.ngModule.injector.get(depDef.token, notFoundValue);
- }
- function findCompView(view, elDef, allowPrivateServices) {
- let compView;
- if (allowPrivateServices) {
- compView = asElementData(view, elDef.nodeIndex).componentView;
- }
- else {
- compView = view;
- while (compView.parent && !isComponentView(compView)) {
- compView = compView.parent;
- }
- }
- return compView;
- }
- function updateProp(view, providerData, def, bindingIdx, value, changes) {
- if (def.flags & 32768 /* Component */) {
- const compView = asElementData(view, def.parent.nodeIndex).componentView;
- if (compView.def.flags & 2 /* OnPush */) {
- compView.state |= 8 /* ChecksEnabled */;
- }
- }
- const binding = def.bindings[bindingIdx];
- const propName = binding.name;
- // Note: This is still safe with Closure Compiler as
- // the user passed in the property name as an object has to `providerDef`,
- // so Closure Compiler will have renamed the property correctly already.
- providerData.instance[propName] = value;
- if (def.flags & 524288 /* OnChanges */) {
- changes = changes || {};
- const oldValue = WrappedValue.unwrap(view.oldValues[def.bindingIndex + bindingIdx]);
- const binding = def.bindings[bindingIdx];
- changes[binding.nonMinifiedName] =
- new SimpleChange(oldValue, value, (view.state & 2 /* FirstCheck */) !== 0);
- }
- view.oldValues[def.bindingIndex + bindingIdx] = value;
- return changes;
- }
- // This function calls the ngAfterContentCheck, ngAfterContentInit,
- // ngAfterViewCheck, and ngAfterViewInit lifecycle hooks (depending on the node
- // flags in lifecycle). Unlike ngDoCheck, ngOnChanges and ngOnInit, which are
- // called during a pre-order traversal of the view tree (that is calling the
- // parent hooks before the child hooks) these events are sent in using a
- // post-order traversal of the tree (children before parents). This changes the
- // meaning of initIndex in the view state. For ngOnInit, initIndex tracks the
- // expected nodeIndex which a ngOnInit should be called. When sending
- // ngAfterContentInit and ngAfterViewInit it is the expected count of
- // ngAfterContentInit or ngAfterViewInit methods that have been called. This
- // ensure that despite being called recursively or after picking up after an
- // exception, the ngAfterContentInit or ngAfterViewInit will be called on the
- // correct nodes. Consider for example, the following (where E is an element
- // and D is a directive)
- // Tree: pre-order index post-order index
- // E1 0 6
- // E2 1 1
- // D3 2 0
- // E4 3 5
- // E5 4 4
- // E6 5 2
- // E7 6 3
- // As can be seen, the post-order index has an unclear relationship to the
- // pre-order index (postOrderIndex === preOrderIndex - parentCount +
- // childCount). Since number of calls to ngAfterContentInit and ngAfterViewInit
- // are stable (will be the same for the same view regardless of exceptions or
- // recursion) we just need to count them which will roughly correspond to the
- // post-order index (it skips elements and directives that do not have
- // lifecycle hooks).
- //
- // For example, if an exception is raised in the E6.onAfterViewInit() the
- // initIndex is left at 3 (by shouldCallLifecycleInitHook() which set it to
- // initIndex + 1). When checkAndUpdateView() is called again D3, E2 and E6 will
- // not have their ngAfterViewInit() called but, starting with E7, the rest of
- // the view will begin getting ngAfterViewInit() called until a check and
- // pass is complete.
- //
- // This algorthim also handles recursion. Consider if E4's ngAfterViewInit()
- // indirectly calls E1's ChangeDetectorRef.detectChanges(). The expected
- // initIndex is set to 6, the recusive checkAndUpdateView() starts walk again.
- // D3, E2, E6, E7, E5 and E4 are skipped, ngAfterViewInit() is called on E1.
- // When the recursion returns the initIndex will be 7 so E1 is skipped as it
- // has already been called in the recursively called checkAnUpdateView().
- function callLifecycleHooksChildrenFirst(view, lifecycles) {
- if (!(view.def.nodeFlags & lifecycles)) {
- return;
- }
- const nodes = view.def.nodes;
- let initIndex = 0;
- for (let i = 0; i < nodes.length; i++) {
- const nodeDef = nodes[i];
- let parent = nodeDef.parent;
- if (!parent && nodeDef.flags & lifecycles) {
- // matching root node (e.g. a pipe)
- callProviderLifecycles(view, i, nodeDef.flags & lifecycles, initIndex++);
- }
- if ((nodeDef.childFlags & lifecycles) === 0) {
- // no child matches one of the lifecycles
- i += nodeDef.childCount;
- }
- while (parent && (parent.flags & 1 /* TypeElement */) &&
- i === parent.nodeIndex + parent.childCount) {
- // last child of an element
- if (parent.directChildFlags & lifecycles) {
- initIndex = callElementProvidersLifecycles(view, parent, lifecycles, initIndex);
- }
- parent = parent.parent;
- }
- }
- }
- function callElementProvidersLifecycles(view, elDef, lifecycles, initIndex) {
- for (let i = elDef.nodeIndex + 1; i <= elDef.nodeIndex + elDef.childCount; i++) {
- const nodeDef = view.def.nodes[i];
- if (nodeDef.flags & lifecycles) {
- callProviderLifecycles(view, i, nodeDef.flags & lifecycles, initIndex++);
- }
- // only visit direct children
- i += nodeDef.childCount;
- }
- return initIndex;
- }
- function callProviderLifecycles(view, index, lifecycles, initIndex) {
- const providerData = asProviderData(view, index);
- if (!providerData) {
- return;
- }
- const provider = providerData.instance;
- if (!provider) {
- return;
- }
- Services.setCurrentNode(view, index);
- if (lifecycles & 1048576 /* AfterContentInit */ &&
- shouldCallLifecycleInitHook(view, 512 /* InitState_CallingAfterContentInit */, initIndex)) {
- provider.ngAfterContentInit();
- }
- if (lifecycles & 2097152 /* AfterContentChecked */) {
- provider.ngAfterContentChecked();
- }
- if (lifecycles & 4194304 /* AfterViewInit */ &&
- shouldCallLifecycleInitHook(view, 768 /* InitState_CallingAfterViewInit */, initIndex)) {
- provider.ngAfterViewInit();
- }
- if (lifecycles & 8388608 /* AfterViewChecked */) {
- provider.ngAfterViewChecked();
- }
- if (lifecycles & 131072 /* OnDestroy */) {
- provider.ngOnDestroy();
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class ComponentFactoryResolver$1 extends ComponentFactoryResolver {
- /**
- * @param ngModule The NgModuleRef to which all resolved factories are bound.
- */
- constructor(ngModule) {
- super();
- this.ngModule = ngModule;
- }
- resolveComponentFactory(component) {
- ngDevMode && assertComponentType(component);
- const componentDef = getComponentDef(component);
- return new ComponentFactory$1(componentDef, this.ngModule);
- }
- }
- function toRefArray(map) {
- const array = [];
- for (let nonMinified in map) {
- if (map.hasOwnProperty(nonMinified)) {
- const minified = map[nonMinified];
- array.push({ propName: minified, templateName: nonMinified });
- }
- }
- return array;
- }
- function getNamespace$1(elementName) {
- const name = elementName.toLowerCase();
- return name === 'svg' ? SVG_NAMESPACE : (name === 'math' ? MATH_ML_NAMESPACE : null);
- }
- /**
- * A change detection scheduler token for {@link RootContext}. This token is the default value used
- * for the default `RootContext` found in the {@link ROOT_CONTEXT} token.
- */
- const SCHEDULER = new InjectionToken('SCHEDULER_TOKEN', {
- providedIn: 'root',
- factory: () => defaultScheduler,
- });
- function createChainedInjector(rootViewInjector, moduleInjector) {
- return {
- get: (token, notFoundValue, flags) => {
- const value = rootViewInjector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, flags);
- if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR ||
- notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
- // Return the value from the root element injector when
- // - it provides it
- // (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
- // - the module injector should not be checked
- // (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
- return value;
- }
- return moduleInjector.get(token, notFoundValue, flags);
- }
- };
- }
- /**
- * Render3 implementation of {@link viewEngine_ComponentFactory}.
- */
- class ComponentFactory$1 extends ComponentFactory {
- /**
- * @param componentDef The component definition.
- * @param ngModule The NgModuleRef to which the factory is bound.
- */
- constructor(componentDef, ngModule) {
- super();
- this.componentDef = componentDef;
- this.ngModule = ngModule;
- this.componentType = componentDef.type;
- this.selector = stringifyCSSSelectorList(componentDef.selectors);
- this.ngContentSelectors =
- componentDef.ngContentSelectors ? componentDef.ngContentSelectors : [];
- this.isBoundToModule = !!ngModule;
- }
- get inputs() {
- return toRefArray(this.componentDef.inputs);
- }
- get outputs() {
- return toRefArray(this.componentDef.outputs);
- }
- create(injector, projectableNodes, rootSelectorOrNode, ngModule) {
- ngModule = ngModule || this.ngModule;
- const rootViewInjector = ngModule ? createChainedInjector(injector, ngModule.injector) : injector;
- const rendererFactory = rootViewInjector.get(RendererFactory2, domRendererFactory3);
- const sanitizer = rootViewInjector.get(Sanitizer, null);
- const hostRenderer = rendererFactory.createRenderer(null, this.componentDef);
- // Determine a tag name used for creating host elements when this component is created
- // dynamically. Default to 'div' if this component did not specify any tag name in its selector.
- const elementName = this.componentDef.selectors[0][0] || 'div';
- const hostRNode = rootSelectorOrNode ?
- locateHostElement(hostRenderer, rootSelectorOrNode, this.componentDef.encapsulation) :
- createElementNode(rendererFactory.createRenderer(null, this.componentDef), elementName, getNamespace$1(elementName));
- const rootFlags = this.componentDef.onPush ? 64 /* Dirty */ | 512 /* IsRoot */ :
- 16 /* CheckAlways */ | 512 /* IsRoot */;
- const rootContext = createRootContext();
- // Create the root view. Uses empty TView and ContentTemplate.
- const rootTView = createTView(0 /* Root */, null, null, 1, 0, null, null, null, null, null);
- const rootLView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, hostRenderer, sanitizer, rootViewInjector);
- // rootView is the parent when bootstrapping
- // TODO(misko): it looks like we are entering view here but we don't really need to as
- // `renderView` does that. However as the code is written it is needed because
- // `createRootComponentView` and `createRootComponent` both read global state. Fixing those
- // issues would allow us to drop this.
- enterView(rootLView);
- let component;
- let tElementNode;
- try {
- const componentView = createRootComponentView(hostRNode, this.componentDef, rootLView, rendererFactory, hostRenderer);
- if (hostRNode) {
- if (rootSelectorOrNode) {
- setUpAttributes(hostRenderer, hostRNode, ['ng-version', VERSION.full]);
- }
- else {
- // If host element is created as a part of this function call (i.e. `rootSelectorOrNode`
- // is not defined), also apply attributes and classes extracted from component selector.
- // Extract attributes and classes from the first selector only to match VE behavior.
- const { attrs, classes } = extractAttrsAndClassesFromSelector(this.componentDef.selectors[0]);
- if (attrs) {
- setUpAttributes(hostRenderer, hostRNode, attrs);
- }
- if (classes && classes.length > 0) {
- writeDirectClass(hostRenderer, hostRNode, classes.join(' '));
- }
- }
- }
- tElementNode = getTNode(rootTView, HEADER_OFFSET);
- if (projectableNodes !== undefined) {
- const projection = tElementNode.projection = [];
- for (let i = 0; i < this.ngContentSelectors.length; i++) {
- const nodesforSlot = projectableNodes[i];
- // Projectable nodes can be passed as array of arrays or an array of iterables (ngUpgrade
- // case). Here we do normalize passed data structure to be an array of arrays to avoid
- // complex checks down the line.
- // We also normalize the length of the passed in projectable nodes (to match the number of
- // <ng-container> slots defined by a component).
- projection.push(nodesforSlot != null ? Array.from(nodesforSlot) : null);
- }
- }
- // TODO: should LifecycleHooksFeature and other host features be generated by the compiler and
- // executed here?
- // Angular 5 reference: https://stackblitz.com/edit/lifecycle-hooks-vcref
- component = createRootComponent(componentView, this.componentDef, rootLView, rootContext, [LifecycleHooksFeature]);
- renderView(rootTView, rootLView, null);
- }
- finally {
- leaveView();
- }
- return new ComponentRef$1(this.componentType, component, createElementRef(tElementNode, rootLView), rootLView, tElementNode);
- }
- }
- const componentFactoryResolver = new ComponentFactoryResolver$1();
- /**
- * Creates a ComponentFactoryResolver and stores it on the injector. Or, if the
- * ComponentFactoryResolver
- * already exists, retrieves the existing ComponentFactoryResolver.
- *
- * @returns The ComponentFactoryResolver instance to use
- */
- function injectComponentFactoryResolver() {
- return componentFactoryResolver;
- }
- /**
- * Represents an instance of a Component created via a {@link ComponentFactory}.
- *
- * `ComponentRef` provides access to the Component Instance as well other objects related to this
- * Component Instance and allows you to destroy the Component Instance via the {@link #destroy}
- * method.
- *
- */
- class ComponentRef$1 extends ComponentRef {
- constructor(componentType, instance, location, _rootLView, _tNode) {
- super();
- this.location = location;
- this._rootLView = _rootLView;
- this._tNode = _tNode;
- this.instance = instance;
- this.hostView = this.changeDetectorRef = new RootViewRef(_rootLView);
- this.componentType = componentType;
- }
- get injector() {
- return new NodeInjector(this._tNode, this._rootLView);
- }
- destroy() {
- this.hostView.destroy();
- }
- onDestroy(callback) {
- this.hostView.onDestroy(callback);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Adds decorator, constructor, and property metadata to a given type via static metadata fields
- * on the type.
- *
- * These metadata fields can later be read with Angular's `ReflectionCapabilities` API.
- *
- * Calls to `setClassMetadata` can be marked as pure, resulting in the metadata assignments being
- * tree-shaken away during production builds.
- */
- function setClassMetadata(type, decorators, ctorParameters, propDecorators) {
- return noSideEffects(() => {
- const clazz = type;
- if (decorators !== null) {
- if (clazz.hasOwnProperty('decorators') && clazz.decorators !== undefined) {
- clazz.decorators.push(...decorators);
- }
- else {
- clazz.decorators = decorators;
- }
- }
- if (ctorParameters !== null) {
- // Rather than merging, clobber the existing parameters. If other projects exist which
- // use tsickle-style annotations and reflect over them in the same way, this could
- // cause issues, but that is vanishingly unlikely.
- clazz.ctorParameters = ctorParameters;
- }
- if (propDecorators !== null) {
- // The property decorator objects are merged as it is possible different fields have
- // different decorator types. Decorators on individual fields are not merged, as it's
- // also incredibly unlikely that a field will be decorated both with an Angular
- // decorator and a non-Angular decorator that's also been downleveled.
- if (clazz.hasOwnProperty('propDecorators') && clazz.propDecorators !== undefined) {
- clazz.propDecorators = Object.assign(Object.assign({}, clazz.propDecorators), propDecorators);
- }
- else {
- clazz.propDecorators = propDecorators;
- }
- }
- });
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Map of module-id to the corresponding NgModule.
- * - In pre Ivy we track NgModuleFactory,
- * - In post Ivy we track the NgModuleType
- */
- const modules = new Map();
- /**
- * Registers a loaded module. Should only be called from generated NgModuleFactory code.
- * @publicApi
- */
- function registerModuleFactory(id, factory) {
- const existing = modules.get(id);
- assertSameOrNotExisting(id, existing && existing.moduleType, factory.moduleType);
- modules.set(id, factory);
- }
- function assertSameOrNotExisting(id, type, incoming) {
- if (type && type !== incoming) {
- throw new Error(`Duplicate module registered for ${id} - ${stringify(type)} vs ${stringify(type.name)}`);
- }
- }
- function registerNgModuleType(ngModuleType) {
- const visited = new Set();
- recurse(ngModuleType);
- function recurse(ngModuleType) {
- // The imports array of an NgModule must refer to other NgModules,
- // so an error is thrown if no module definition is available.
- const def = getNgModuleDef(ngModuleType, /* throwNotFound */ true);
- const id = def.id;
- if (id !== null) {
- const existing = modules.get(id);
- assertSameOrNotExisting(id, existing, ngModuleType);
- modules.set(id, ngModuleType);
- }
- const imports = maybeUnwrapFn(def.imports);
- for (const i of imports) {
- if (!visited.has(i)) {
- visited.add(i);
- recurse(i);
- }
- }
- }
- }
- function clearModulesForTest() {
- modules.clear();
- }
- function getRegisteredNgModuleType(id) {
- return modules.get(id) || autoRegisterModuleById[id];
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class NgModuleRef$1 extends NgModuleRef {
- constructor(ngModuleType, _parent) {
- super();
- this._parent = _parent;
- // tslint:disable-next-line:require-internal-with-underscore
- this._bootstrapComponents = [];
- this.injector = this;
- this.destroyCbs = [];
- // When bootstrapping a module we have a dependency graph that looks like this:
- // ApplicationRef -> ComponentFactoryResolver -> NgModuleRef. The problem is that if the
- // module being resolved tries to inject the ComponentFactoryResolver, it'll create a
- // circular dependency which will result in a runtime error, because the injector doesn't
- // exist yet. We work around the issue by creating the ComponentFactoryResolver ourselves
- // and providing it, rather than letting the injector resolve it.
- this.componentFactoryResolver = new ComponentFactoryResolver$1(this);
- const ngModuleDef = getNgModuleDef(ngModuleType);
- ngDevMode &&
- assertDefined(ngModuleDef, `NgModule '${stringify(ngModuleType)}' is not a subtype of 'NgModuleType'.`);
- const ngLocaleIdDef = getNgLocaleIdDef(ngModuleType);
- ngLocaleIdDef && setLocaleId(ngLocaleIdDef);
- this._bootstrapComponents = maybeUnwrapFn(ngModuleDef.bootstrap);
- this._r3Injector = createInjectorWithoutInjectorInstances(ngModuleType, _parent, [
- { provide: NgModuleRef, useValue: this }, {
- provide: ComponentFactoryResolver,
- useValue: this.componentFactoryResolver
- }
- ], stringify(ngModuleType));
- // We need to resolve the injector types separately from the injector creation, because
- // the module might be trying to use this ref in its contructor for DI which will cause a
- // circular error that will eventually error out, because the injector isn't created yet.
- this._r3Injector._resolveInjectorDefTypes();
- this.instance = this.get(ngModuleType);
- }
- get(token, notFoundValue = Injector.THROW_IF_NOT_FOUND, injectFlags = InjectFlags.Default) {
- if (token === Injector || token === NgModuleRef || token === INJECTOR$1) {
- return this;
- }
- return this._r3Injector.get(token, notFoundValue, injectFlags);
- }
- destroy() {
- ngDevMode && assertDefined(this.destroyCbs, 'NgModule already destroyed');
- const injector = this._r3Injector;
- !injector.destroyed && injector.destroy();
- this.destroyCbs.forEach(fn => fn());
- this.destroyCbs = null;
- }
- onDestroy(callback) {
- ngDevMode && assertDefined(this.destroyCbs, 'NgModule already destroyed');
- this.destroyCbs.push(callback);
- }
- }
- class NgModuleFactory$1 extends NgModuleFactory {
- constructor(moduleType) {
- super();
- this.moduleType = moduleType;
- const ngModuleDef = getNgModuleDef(moduleType);
- if (ngModuleDef !== null) {
- // Register the NgModule with Angular's module registry. The location (and hence timing) of
- // this call is critical to ensure this works correctly (modules get registered when expected)
- // without bloating bundles (modules are registered when otherwise not referenced).
- //
- // In View Engine, registration occurs in the .ngfactory.js file as a side effect. This has
- // several practical consequences:
- //
- // - If an .ngfactory file is not imported from, the module won't be registered (and can be
- // tree shaken).
- // - If an .ngfactory file is imported from, the module will be registered even if an instance
- // is not actually created (via `create` below).
- // - Since an .ngfactory file in View Engine references the .ngfactory files of the NgModule's
- // imports,
- //
- // In Ivy, things are a bit different. .ngfactory files still exist for compatibility, but are
- // not a required API to use - there are other ways to obtain an NgModuleFactory for a given
- // NgModule. Thus, relying on a side effect in the .ngfactory file is not sufficient. Instead,
- // the side effect of registration is added here, in the constructor of NgModuleFactory,
- // ensuring no matter how a factory is created, the module is registered correctly.
- //
- // An alternative would be to include the registration side effect inline following the actual
- // NgModule definition. This also has the correct timing, but breaks tree-shaking - modules
- // will be registered and retained even if they're otherwise never referenced.
- registerNgModuleType(moduleType);
- }
- }
- create(parentInjector) {
- return new NgModuleRef$1(this.moduleType, parentInjector);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Bindings for pure functions are stored after regular bindings.
- *
- * |-------decls------|---------vars---------| |----- hostVars (dir1) ------|
- * ------------------------------------------------------------------------------------------
- * | nodes/refs/pipes | bindings | fn slots | injector | dir1 | host bindings | host slots |
- * ------------------------------------------------------------------------------------------
- * ^ ^
- * TView.bindingStartIndex TView.expandoStartIndex
- *
- * Pure function instructions are given an offset from the binding root. Adding the offset to the
- * binding root gives the first index where the bindings are stored. In component views, the binding
- * root is the bindingStartIndex. In host bindings, the binding root is the expandoStartIndex +
- * any directive instances + any hostVars in directives evaluated before it.
- *
- * See VIEW_DATA.md for more information about host binding resolution.
- */
- /**
- * If the value hasn't been saved, calls the pure function to store and return the
- * value. If it has been saved, returns the saved value.
- *
- * @param slotOffset the offset from binding root to the reserved slot
- * @param pureFn Function that returns a value
- * @param thisArg Optional calling context of pureFn
- * @returns value
- *
- * @codeGenApi
- */
- function ɵɵpureFunction0(slotOffset, pureFn, thisArg) {
- const bindingIndex = getBindingRoot() + slotOffset;
- const lView = getLView();
- return lView[bindingIndex] === NO_CHANGE ?
- updateBinding(lView, bindingIndex, thisArg ? pureFn.call(thisArg) : pureFn()) :
- getBinding(lView, bindingIndex);
- }
- /**
- * If the value of the provided exp has changed, calls the pure function to return
- * an updated value. Or if the value has not changed, returns cached value.
- *
- * @param slotOffset the offset from binding root to the reserved slot
- * @param pureFn Function that returns an updated value
- * @param exp Updated expression value
- * @param thisArg Optional calling context of pureFn
- * @returns Updated or cached value
- *
- * @codeGenApi
- */
- function ɵɵpureFunction1(slotOffset, pureFn, exp, thisArg) {
- return pureFunction1Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp, thisArg);
- }
- /**
- * If the value of any provided exp has changed, calls the pure function to return
- * an updated value. Or if no values have changed, returns cached value.
- *
- * @param slotOffset the offset from binding root to the reserved slot
- * @param pureFn
- * @param exp1
- * @param exp2
- * @param thisArg Optional calling context of pureFn
- * @returns Updated or cached value
- *
- * @codeGenApi
- */
- function ɵɵpureFunction2(slotOffset, pureFn, exp1, exp2, thisArg) {
- return pureFunction2Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, thisArg);
- }
- /**
- * If the value of any provided exp has changed, calls the pure function to return
- * an updated value. Or if no values have changed, returns cached value.
- *
- * @param slotOffset the offset from binding root to the reserved slot
- * @param pureFn
- * @param exp1
- * @param exp2
- * @param exp3
- * @param thisArg Optional calling context of pureFn
- * @returns Updated or cached value
- *
- * @codeGenApi
- */
- function ɵɵpureFunction3(slotOffset, pureFn, exp1, exp2, exp3, thisArg) {
- return pureFunction3Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, exp3, thisArg);
- }
- /**
- * If the value of any provided exp has changed, calls the pure function to return
- * an updated value. Or if no values have changed, returns cached value.
- *
- * @param slotOffset the offset from binding root to the reserved slot
- * @param pureFn
- * @param exp1
- * @param exp2
- * @param exp3
- * @param exp4
- * @param thisArg Optional calling context of pureFn
- * @returns Updated or cached value
- *
- * @codeGenApi
- */
- function ɵɵpureFunction4(slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg) {
- return pureFunction4Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg);
- }
- /**
- * If the value of any provided exp has changed, calls the pure function to return
- * an updated value. Or if no values have changed, returns cached value.
- *
- * @param slotOffset the offset from binding root to the reserved slot
- * @param pureFn
- * @param exp1
- * @param exp2
- * @param exp3
- * @param exp4
- * @param exp5
- * @param thisArg Optional calling context of pureFn
- * @returns Updated or cached value
- *
- * @codeGenApi
- */
- function ɵɵpureFunction5(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, thisArg) {
- const bindingIndex = getBindingRoot() + slotOffset;
- const lView = getLView();
- const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);
- return bindingUpdated(lView, bindingIndex + 4, exp5) || different ?
- updateBinding(lView, bindingIndex + 5, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5) :
- pureFn(exp1, exp2, exp3, exp4, exp5)) :
- getBinding(lView, bindingIndex + 5);
- }
- /**
- * If the value of any provided exp has changed, calls the pure function to return
- * an updated value. Or if no values have changed, returns cached value.
- *
- * @param slotOffset the offset from binding root to the reserved slot
- * @param pureFn
- * @param exp1
- * @param exp2
- * @param exp3
- * @param exp4
- * @param exp5
- * @param exp6
- * @param thisArg Optional calling context of pureFn
- * @returns Updated or cached value
- *
- * @codeGenApi
- */
- function ɵɵpureFunction6(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, thisArg) {
- const bindingIndex = getBindingRoot() + slotOffset;
- const lView = getLView();
- const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);
- return bindingUpdated2(lView, bindingIndex + 4, exp5, exp6) || different ?
- updateBinding(lView, bindingIndex + 6, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6) :
- pureFn(exp1, exp2, exp3, exp4, exp5, exp6)) :
- getBinding(lView, bindingIndex + 6);
- }
- /**
- * If the value of any provided exp has changed, calls the pure function to return
- * an updated value. Or if no values have changed, returns cached value.
- *
- * @param slotOffset the offset from binding root to the reserved slot
- * @param pureFn
- * @param exp1
- * @param exp2
- * @param exp3
- * @param exp4
- * @param exp5
- * @param exp6
- * @param exp7
- * @param thisArg Optional calling context of pureFn
- * @returns Updated or cached value
- *
- * @codeGenApi
- */
- function ɵɵpureFunction7(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, exp7, thisArg) {
- const bindingIndex = getBindingRoot() + slotOffset;
- const lView = getLView();
- let different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);
- return bindingUpdated3(lView, bindingIndex + 4, exp5, exp6, exp7) || different ?
- updateBinding(lView, bindingIndex + 7, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6, exp7) :
- pureFn(exp1, exp2, exp3, exp4, exp5, exp6, exp7)) :
- getBinding(lView, bindingIndex + 7);
- }
- /**
- * If the value of any provided exp has changed, calls the pure function to return
- * an updated value. Or if no values have changed, returns cached value.
- *
- * @param slotOffset the offset from binding root to the reserved slot
- * @param pureFn
- * @param exp1
- * @param exp2
- * @param exp3
- * @param exp4
- * @param exp5
- * @param exp6
- * @param exp7
- * @param exp8
- * @param thisArg Optional calling context of pureFn
- * @returns Updated or cached value
- *
- * @codeGenApi
- */
- function ɵɵpureFunction8(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8, thisArg) {
- const bindingIndex = getBindingRoot() + slotOffset;
- const lView = getLView();
- const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);
- return bindingUpdated4(lView, bindingIndex + 4, exp5, exp6, exp7, exp8) || different ?
- updateBinding(lView, bindingIndex + 8, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8) :
- pureFn(exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8)) :
- getBinding(lView, bindingIndex + 8);
- }
- /**
- * pureFunction instruction that can support any number of bindings.
- *
- * If the value of any provided exp has changed, calls the pure function to return
- * an updated value. Or if no values have changed, returns cached value.
- *
- * @param slotOffset the offset from binding root to the reserved slot
- * @param pureFn A pure function that takes binding values and builds an object or array
- * containing those values.
- * @param exps An array of binding values
- * @param thisArg Optional calling context of pureFn
- * @returns Updated or cached value
- *
- * @codeGenApi
- */
- function ɵɵpureFunctionV(slotOffset, pureFn, exps, thisArg) {
- return pureFunctionVInternal(getLView(), getBindingRoot(), slotOffset, pureFn, exps, thisArg);
- }
- /**
- * Results of a pure function invocation are stored in LView in a dedicated slot that is initialized
- * to NO_CHANGE. In rare situations a pure pipe might throw an exception on the very first
- * invocation and not produce any valid results. In this case LView would keep holding the NO_CHANGE
- * value. The NO_CHANGE is not something that we can use in expressions / bindings thus we convert
- * it to `undefined`.
- */
- function getPureFunctionReturnValue(lView, returnValueIndex) {
- ngDevMode && assertIndexInRange(lView, returnValueIndex);
- const lastReturnValue = lView[returnValueIndex];
- return lastReturnValue === NO_CHANGE ? undefined : lastReturnValue;
- }
- /**
- * If the value of the provided exp has changed, calls the pure function to return
- * an updated value. Or if the value has not changed, returns cached value.
- *
- * @param lView LView in which the function is being executed.
- * @param bindingRoot Binding root index.
- * @param slotOffset the offset from binding root to the reserved slot
- * @param pureFn Function that returns an updated value
- * @param exp Updated expression value
- * @param thisArg Optional calling context of pureFn
- * @returns Updated or cached value
- */
- function pureFunction1Internal(lView, bindingRoot, slotOffset, pureFn, exp, thisArg) {
- const bindingIndex = bindingRoot + slotOffset;
- return bindingUpdated(lView, bindingIndex, exp) ?
- updateBinding(lView, bindingIndex + 1, thisArg ? pureFn.call(thisArg, exp) : pureFn(exp)) :
- getPureFunctionReturnValue(lView, bindingIndex + 1);
- }
- /**
- * If the value of any provided exp has changed, calls the pure function to return
- * an updated value. Or if no values have changed, returns cached value.
- *
- * @param lView LView in which the function is being executed.
- * @param bindingRoot Binding root index.
- * @param slotOffset the offset from binding root to the reserved slot
- * @param pureFn
- * @param exp1
- * @param exp2
- * @param thisArg Optional calling context of pureFn
- * @returns Updated or cached value
- */
- function pureFunction2Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, thisArg) {
- const bindingIndex = bindingRoot + slotOffset;
- return bindingUpdated2(lView, bindingIndex, exp1, exp2) ?
- updateBinding(lView, bindingIndex + 2, thisArg ? pureFn.call(thisArg, exp1, exp2) : pureFn(exp1, exp2)) :
- getPureFunctionReturnValue(lView, bindingIndex + 2);
- }
- /**
- * If the value of any provided exp has changed, calls the pure function to return
- * an updated value. Or if no values have changed, returns cached value.
- *
- * @param lView LView in which the function is being executed.
- * @param bindingRoot Binding root index.
- * @param slotOffset the offset from binding root to the reserved slot
- * @param pureFn
- * @param exp1
- * @param exp2
- * @param exp3
- * @param thisArg Optional calling context of pureFn
- * @returns Updated or cached value
- */
- function pureFunction3Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, exp3, thisArg) {
- const bindingIndex = bindingRoot + slotOffset;
- return bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) ?
- updateBinding(lView, bindingIndex + 3, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3) : pureFn(exp1, exp2, exp3)) :
- getPureFunctionReturnValue(lView, bindingIndex + 3);
- }
- /**
- * If the value of any provided exp has changed, calls the pure function to return
- * an updated value. Or if no values have changed, returns cached value.
- *
- * @param lView LView in which the function is being executed.
- * @param bindingRoot Binding root index.
- * @param slotOffset the offset from binding root to the reserved slot
- * @param pureFn
- * @param exp1
- * @param exp2
- * @param exp3
- * @param exp4
- * @param thisArg Optional calling context of pureFn
- * @returns Updated or cached value
- *
- */
- function pureFunction4Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg) {
- const bindingIndex = bindingRoot + slotOffset;
- return bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) ?
- updateBinding(lView, bindingIndex + 4, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4) : pureFn(exp1, exp2, exp3, exp4)) :
- getPureFunctionReturnValue(lView, bindingIndex + 4);
- }
- /**
- * pureFunction instruction that can support any number of bindings.
- *
- * If the value of any provided exp has changed, calls the pure function to return
- * an updated value. Or if no values have changed, returns cached value.
- *
- * @param lView LView in which the function is being executed.
- * @param bindingRoot Binding root index.
- * @param slotOffset the offset from binding root to the reserved slot
- * @param pureFn A pure function that takes binding values and builds an object or array
- * containing those values.
- * @param exps An array of binding values
- * @param thisArg Optional calling context of pureFn
- * @returns Updated or cached value
- */
- function pureFunctionVInternal(lView, bindingRoot, slotOffset, pureFn, exps, thisArg) {
- let bindingIndex = bindingRoot + slotOffset;
- let different = false;
- for (let i = 0; i < exps.length; i++) {
- bindingUpdated(lView, bindingIndex++, exps[i]) && (different = true);
- }
- return different ? updateBinding(lView, bindingIndex, pureFn.apply(thisArg, exps)) :
- getPureFunctionReturnValue(lView, bindingIndex);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Create a pipe.
- *
- * @param index Pipe index where the pipe will be stored.
- * @param pipeName The name of the pipe
- * @returns T the instance of the pipe.
- *
- * @codeGenApi
- */
- function ɵɵpipe(index, pipeName) {
- const tView = getTView();
- let pipeDef;
- const adjustedIndex = index + HEADER_OFFSET;
- if (tView.firstCreatePass) {
- pipeDef = getPipeDef$1(pipeName, tView.pipeRegistry);
- tView.data[adjustedIndex] = pipeDef;
- if (pipeDef.onDestroy) {
- (tView.destroyHooks || (tView.destroyHooks = [])).push(adjustedIndex, pipeDef.onDestroy);
- }
- }
- else {
- pipeDef = tView.data[adjustedIndex];
- }
- const pipeFactory = pipeDef.factory || (pipeDef.factory = getFactoryDef(pipeDef.type, true));
- const previousInjectImplementation = setInjectImplementation(ɵɵdirectiveInject);
- try {
- // DI for pipes is supposed to behave like directives when placed on a component
- // host node, which means that we have to disable access to `viewProviders`.
- const previousIncludeViewProviders = setIncludeViewProviders(false);
- const pipeInstance = pipeFactory();
- setIncludeViewProviders(previousIncludeViewProviders);
- store(tView, getLView(), adjustedIndex, pipeInstance);
- return pipeInstance;
- }
- finally {
- // we have to restore the injector implementation in finally, just in case the creation of the
- // pipe throws an error.
- setInjectImplementation(previousInjectImplementation);
- }
- }
- /**
- * Searches the pipe registry for a pipe with the given name. If one is found,
- * returns the pipe. Otherwise, an error is thrown because the pipe cannot be resolved.
- *
- * @param name Name of pipe to resolve
- * @param registry Full list of available pipes
- * @returns Matching PipeDef
- */
- function getPipeDef$1(name, registry) {
- if (registry) {
- for (let i = registry.length - 1; i >= 0; i--) {
- const pipeDef = registry[i];
- if (name === pipeDef.name) {
- return pipeDef;
- }
- }
- }
- throw new RuntimeError("302" /* PIPE_NOT_FOUND */, `The pipe '${name}' could not be found!`);
- }
- /**
- * Invokes a pipe with 1 arguments.
- *
- * This instruction acts as a guard to {@link PipeTransform#transform} invoking
- * the pipe only when an input to the pipe changes.
- *
- * @param index Pipe index where the pipe was stored on creation.
- * @param slotOffset the offset in the reserved slot space
- * @param v1 1st argument to {@link PipeTransform#transform}.
- *
- * @codeGenApi
- */
- function ɵɵpipeBind1(index, slotOffset, v1) {
- const adjustedIndex = index + HEADER_OFFSET;
- const lView = getLView();
- const pipeInstance = load(lView, adjustedIndex);
- return unwrapValue$1(lView, isPure(lView, adjustedIndex) ?
- pureFunction1Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, pipeInstance) :
- pipeInstance.transform(v1));
- }
- /**
- * Invokes a pipe with 2 arguments.
- *
- * This instruction acts as a guard to {@link PipeTransform#transform} invoking
- * the pipe only when an input to the pipe changes.
- *
- * @param index Pipe index where the pipe was stored on creation.
- * @param slotOffset the offset in the reserved slot space
- * @param v1 1st argument to {@link PipeTransform#transform}.
- * @param v2 2nd argument to {@link PipeTransform#transform}.
- *
- * @codeGenApi
- */
- function ɵɵpipeBind2(index, slotOffset, v1, v2) {
- const adjustedIndex = index + HEADER_OFFSET;
- const lView = getLView();
- const pipeInstance = load(lView, adjustedIndex);
- return unwrapValue$1(lView, isPure(lView, adjustedIndex) ?
- pureFunction2Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, pipeInstance) :
- pipeInstance.transform(v1, v2));
- }
- /**
- * Invokes a pipe with 3 arguments.
- *
- * This instruction acts as a guard to {@link PipeTransform#transform} invoking
- * the pipe only when an input to the pipe changes.
- *
- * @param index Pipe index where the pipe was stored on creation.
- * @param slotOffset the offset in the reserved slot space
- * @param v1 1st argument to {@link PipeTransform#transform}.
- * @param v2 2nd argument to {@link PipeTransform#transform}.
- * @param v3 4rd argument to {@link PipeTransform#transform}.
- *
- * @codeGenApi
- */
- function ɵɵpipeBind3(index, slotOffset, v1, v2, v3) {
- const adjustedIndex = index + HEADER_OFFSET;
- const lView = getLView();
- const pipeInstance = load(lView, adjustedIndex);
- return unwrapValue$1(lView, isPure(lView, adjustedIndex) ? pureFunction3Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, v3, pipeInstance) :
- pipeInstance.transform(v1, v2, v3));
- }
- /**
- * Invokes a pipe with 4 arguments.
- *
- * This instruction acts as a guard to {@link PipeTransform#transform} invoking
- * the pipe only when an input to the pipe changes.
- *
- * @param index Pipe index where the pipe was stored on creation.
- * @param slotOffset the offset in the reserved slot space
- * @param v1 1st argument to {@link PipeTransform#transform}.
- * @param v2 2nd argument to {@link PipeTransform#transform}.
- * @param v3 3rd argument to {@link PipeTransform#transform}.
- * @param v4 4th argument to {@link PipeTransform#transform}.
- *
- * @codeGenApi
- */
- function ɵɵpipeBind4(index, slotOffset, v1, v2, v3, v4) {
- const adjustedIndex = index + HEADER_OFFSET;
- const lView = getLView();
- const pipeInstance = load(lView, adjustedIndex);
- return unwrapValue$1(lView, isPure(lView, adjustedIndex) ? pureFunction4Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, v3, v4, pipeInstance) :
- pipeInstance.transform(v1, v2, v3, v4));
- }
- /**
- * Invokes a pipe with variable number of arguments.
- *
- * This instruction acts as a guard to {@link PipeTransform#transform} invoking
- * the pipe only when an input to the pipe changes.
- *
- * @param index Pipe index where the pipe was stored on creation.
- * @param slotOffset the offset in the reserved slot space
- * @param values Array of arguments to pass to {@link PipeTransform#transform} method.
- *
- * @codeGenApi
- */
- function ɵɵpipeBindV(index, slotOffset, values) {
- const adjustedIndex = index + HEADER_OFFSET;
- const lView = getLView();
- const pipeInstance = load(lView, adjustedIndex);
- return unwrapValue$1(lView, isPure(lView, adjustedIndex) ?
- pureFunctionVInternal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, values, pipeInstance) :
- pipeInstance.transform.apply(pipeInstance, values));
- }
- function isPure(lView, index) {
- return lView[TVIEW].data[index].pure;
- }
- /**
- * Unwrap the output of a pipe transformation.
- * In order to trick change detection into considering that the new value is always different from
- * the old one, the old value is overwritten by NO_CHANGE.
- *
- * @param newValue the pipe transformation output.
- */
- function unwrapValue$1(lView, newValue) {
- if (WrappedValue.isWrapped(newValue)) {
- newValue = WrappedValue.unwrap(newValue);
- // The NO_CHANGE value needs to be written at the index where the impacted binding value is
- // stored
- const bindingToInvalidateIdx = getBindingIndex();
- lView[bindingToInvalidateIdx] = NO_CHANGE;
- }
- return newValue;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class EventEmitter_ extends rxjs__WEBPACK_IMPORTED_MODULE_0__["Subject"] {
- constructor(isAsync = false) {
- super();
- this.__isAsync = isAsync;
- }
- emit(value) {
- super.next(value);
- }
- subscribe(generatorOrNext, error, complete) {
- let schedulerFn;
- let errorFn = (err) => null;
- let completeFn = () => null;
- if (generatorOrNext && typeof generatorOrNext === 'object') {
- schedulerFn = this.__isAsync ? (value) => {
- setTimeout(() => generatorOrNext.next(value));
- } : (value) => {
- generatorOrNext.next(value);
- };
- if (generatorOrNext.error) {
- errorFn = this.__isAsync ? (err) => {
- setTimeout(() => generatorOrNext.error(err));
- } : (err) => {
- generatorOrNext.error(err);
- };
- }
- if (generatorOrNext.complete) {
- completeFn = this.__isAsync ? () => {
- setTimeout(() => generatorOrNext.complete());
- } : () => {
- generatorOrNext.complete();
- };
- }
- }
- else {
- schedulerFn = this.__isAsync ? (value) => {
- setTimeout(() => generatorOrNext(value));
- } : (value) => {
- generatorOrNext(value);
- };
- if (error) {
- errorFn = this.__isAsync ? (err) => {
- setTimeout(() => error(err));
- } : (err) => {
- error(err);
- };
- }
- if (complete) {
- completeFn = this.__isAsync ? () => {
- setTimeout(() => complete());
- } : () => {
- complete();
- };
- }
- }
- const sink = super.subscribe(schedulerFn, errorFn, completeFn);
- if (generatorOrNext instanceof rxjs__WEBPACK_IMPORTED_MODULE_0__["Subscription"]) {
- generatorOrNext.add(sink);
- }
- return sink;
- }
- }
- /**
- * @publicApi
- */
- const EventEmitter = EventEmitter_;
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function symbolIterator() {
- return this._results[getSymbolIterator()]();
- }
- /**
- * An unmodifiable list of items that Angular keeps up to date when the state
- * of the application changes.
- *
- * The type of object that {@link ViewChildren}, {@link ContentChildren}, and {@link QueryList}
- * provide.
- *
- * Implements an iterable interface, therefore it can be used in both ES6
- * javascript `for (var i of items)` loops as well as in Angular templates with
- * `*ngFor="let i of myList"`.
- *
- * Changes can be observed by subscribing to the changes `Observable`.
- *
- * NOTE: In the future this class will implement an `Observable` interface.
- *
- * @usageNotes
- * ### Example
- * ```typescript
- * @Component({...})
- * class Container {
- * @ViewChildren(Item) items:QueryList<Item>;
- * }
- * ```
- *
- * @publicApi
- */
- class QueryList {
- constructor() {
- this.dirty = true;
- this._results = [];
- this.changes = new EventEmitter();
- this.length = 0;
- // This function should be declared on the prototype, but doing so there will cause the class
- // declaration to have side-effects and become not tree-shakable. For this reason we do it in
- // the constructor.
- // [getSymbolIterator()](): Iterator<T> { ... }
- const symbol = getSymbolIterator();
- const proto = QueryList.prototype;
- if (!proto[symbol])
- proto[symbol] = symbolIterator;
- }
- /**
- * See
- * [Array.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)
- */
- map(fn) {
- return this._results.map(fn);
- }
- /**
- * See
- * [Array.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)
- */
- filter(fn) {
- return this._results.filter(fn);
- }
- /**
- * See
- * [Array.find](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)
- */
- find(fn) {
- return this._results.find(fn);
- }
- /**
- * See
- * [Array.reduce](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)
- */
- reduce(fn, init) {
- return this._results.reduce(fn, init);
- }
- /**
- * See
- * [Array.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)
- */
- forEach(fn) {
- this._results.forEach(fn);
- }
- /**
- * See
- * [Array.some](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some)
- */
- some(fn) {
- return this._results.some(fn);
- }
- /**
- * Returns a copy of the internal results list as an Array.
- */
- toArray() {
- return this._results.slice();
- }
- toString() {
- return this._results.toString();
- }
- /**
- * Updates the stored data of the query list, and resets the `dirty` flag to `false`, so that
- * on change detection, it will not notify of changes to the queries, unless a new change
- * occurs.
- *
- * @param resultsTree The query results to store
- */
- reset(resultsTree) {
- this._results = flatten(resultsTree);
- this.dirty = false;
- this.length = this._results.length;
- this.last = this._results[this.length - 1];
- this.first = this._results[0];
- }
- /**
- * Triggers a change event by emitting on the `changes` {@link EventEmitter}.
- */
- notifyOnChanges() {
- this.changes.emit(this);
- }
- /** internal */
- setDirty() {
- this.dirty = true;
- }
- /** internal */
- destroy() {
- this.changes.complete();
- this.changes.unsubscribe();
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // Note: This hack is necessary so we don't erroneously get a circular dependency
- // failure based on types.
- const unusedValueExportToPlacateAjd$7 = 1;
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // Note: This hack is necessary so we don't erroneously get a circular dependency
- // failure based on types.
- const unusedValueExportToPlacateAjd$8 = 1;
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const unusedValueToPlacateAjd$2 = unusedValueExportToPlacateAjd$7 + unusedValueExportToPlacateAjd$3 + unusedValueExportToPlacateAjd$4 + unusedValueExportToPlacateAjd$8;
- class LQuery_ {
- constructor(queryList) {
- this.queryList = queryList;
- this.matches = null;
- }
- clone() {
- return new LQuery_(this.queryList);
- }
- setDirty() {
- this.queryList.setDirty();
- }
- }
- class LQueries_ {
- constructor(queries = []) {
- this.queries = queries;
- }
- createEmbeddedView(tView) {
- const tQueries = tView.queries;
- if (tQueries !== null) {
- const noOfInheritedQueries = tView.contentQueries !== null ? tView.contentQueries[0] : tQueries.length;
- const viewLQueries = [];
- // An embedded view has queries propagated from a declaration view at the beginning of the
- // TQueries collection and up until a first content query declared in the embedded view. Only
- // propagated LQueries are created at this point (LQuery corresponding to declared content
- // queries will be instantiated from the content query instructions for each directive).
- for (let i = 0; i < noOfInheritedQueries; i++) {
- const tQuery = tQueries.getByIndex(i);
- const parentLQuery = this.queries[tQuery.indexInDeclarationView];
- viewLQueries.push(parentLQuery.clone());
- }
- return new LQueries_(viewLQueries);
- }
- return null;
- }
- insertView(tView) {
- this.dirtyQueriesWithMatches(tView);
- }
- detachView(tView) {
- this.dirtyQueriesWithMatches(tView);
- }
- dirtyQueriesWithMatches(tView) {
- for (let i = 0; i < this.queries.length; i++) {
- if (getTQuery(tView, i).matches !== null) {
- this.queries[i].setDirty();
- }
- }
- }
- }
- class TQueryMetadata_ {
- constructor(predicate, descendants, isStatic, read = null) {
- this.predicate = predicate;
- this.descendants = descendants;
- this.isStatic = isStatic;
- this.read = read;
- }
- }
- class TQueries_ {
- constructor(queries = []) {
- this.queries = queries;
- }
- elementStart(tView, tNode) {
- ngDevMode &&
- assertFirstCreatePass(tView, 'Queries should collect results on the first template pass only');
- for (let i = 0; i < this.queries.length; i++) {
- this.queries[i].elementStart(tView, tNode);
- }
- }
- elementEnd(tNode) {
- for (let i = 0; i < this.queries.length; i++) {
- this.queries[i].elementEnd(tNode);
- }
- }
- embeddedTView(tNode) {
- let queriesForTemplateRef = null;
- for (let i = 0; i < this.length; i++) {
- const childQueryIndex = queriesForTemplateRef !== null ? queriesForTemplateRef.length : 0;
- const tqueryClone = this.getByIndex(i).embeddedTView(tNode, childQueryIndex);
- if (tqueryClone) {
- tqueryClone.indexInDeclarationView = i;
- if (queriesForTemplateRef !== null) {
- queriesForTemplateRef.push(tqueryClone);
- }
- else {
- queriesForTemplateRef = [tqueryClone];
- }
- }
- }
- return queriesForTemplateRef !== null ? new TQueries_(queriesForTemplateRef) : null;
- }
- template(tView, tNode) {
- ngDevMode &&
- assertFirstCreatePass(tView, 'Queries should collect results on the first template pass only');
- for (let i = 0; i < this.queries.length; i++) {
- this.queries[i].template(tView, tNode);
- }
- }
- getByIndex(index) {
- ngDevMode && assertIndexInRange(this.queries, index);
- return this.queries[index];
- }
- get length() {
- return this.queries.length;
- }
- track(tquery) {
- this.queries.push(tquery);
- }
- }
- class TQuery_ {
- constructor(metadata, nodeIndex = -1) {
- this.metadata = metadata;
- this.matches = null;
- this.indexInDeclarationView = -1;
- this.crossesNgTemplate = false;
- /**
- * A flag indicating if a given query still applies to nodes it is crossing. We use this flag
- * (alongside with _declarationNodeIndex) to know when to stop applying content queries to
- * elements in a template.
- */
- this._appliesToNextNode = true;
- this._declarationNodeIndex = nodeIndex;
- }
- elementStart(tView, tNode) {
- if (this.isApplyingToNode(tNode)) {
- this.matchTNode(tView, tNode);
- }
- }
- elementEnd(tNode) {
- if (this._declarationNodeIndex === tNode.index) {
- this._appliesToNextNode = false;
- }
- }
- template(tView, tNode) {
- this.elementStart(tView, tNode);
- }
- embeddedTView(tNode, childQueryIndex) {
- if (this.isApplyingToNode(tNode)) {
- this.crossesNgTemplate = true;
- // A marker indicating a `<ng-template>` element (a placeholder for query results from
- // embedded views created based on this `<ng-template>`).
- this.addMatch(-tNode.index, childQueryIndex);
- return new TQuery_(this.metadata);
- }
- return null;
- }
- isApplyingToNode(tNode) {
- if (this._appliesToNextNode && this.metadata.descendants === false) {
- const declarationNodeIdx = this._declarationNodeIndex;
- let parent = tNode.parent;
- // Determine if a given TNode is a "direct" child of a node on which a content query was
- // declared (only direct children of query's host node can match with the descendants: false
- // option). There are 3 main use-case / conditions to consider here:
- // - <needs-target><i #target></i></needs-target>: here <i #target> parent node is a query
- // host node;
- // - <needs-target><ng-template [ngIf]="true"><i #target></i></ng-template></needs-target>:
- // here <i #target> parent node is null;
- // - <needs-target><ng-container><i #target></i></ng-container></needs-target>: here we need
- // to go past `<ng-container>` to determine <i #target> parent node (but we shouldn't traverse
- // up past the query's host node!).
- while (parent !== null && (parent.type & 8 /* ElementContainer */) &&
- parent.index !== declarationNodeIdx) {
- parent = parent.parent;
- }
- return declarationNodeIdx === (parent !== null ? parent.index : -1);
- }
- return this._appliesToNextNode;
- }
- matchTNode(tView, tNode) {
- const predicate = this.metadata.predicate;
- if (Array.isArray(predicate)) {
- for (let i = 0; i < predicate.length; i++) {
- const name = predicate[i];
- this.matchTNodeWithReadOption(tView, tNode, getIdxOfMatchingSelector(tNode, name));
- // Also try matching the name to a provider since strings can be used as DI tokens too.
- this.matchTNodeWithReadOption(tView, tNode, locateDirectiveOrProvider(tNode, tView, name, false, false));
- }
- }
- else {
- if (predicate === TemplateRef) {
- if (tNode.type & 4 /* Container */) {
- this.matchTNodeWithReadOption(tView, tNode, -1);
- }
- }
- else {
- this.matchTNodeWithReadOption(tView, tNode, locateDirectiveOrProvider(tNode, tView, predicate, false, false));
- }
- }
- }
- matchTNodeWithReadOption(tView, tNode, nodeMatchIdx) {
- if (nodeMatchIdx !== null) {
- const read = this.metadata.read;
- if (read !== null) {
- if (read === ElementRef || read === ViewContainerRef ||
- read === TemplateRef && (tNode.type & 4 /* Container */)) {
- this.addMatch(tNode.index, -2);
- }
- else {
- const directiveOrProviderIdx = locateDirectiveOrProvider(tNode, tView, read, false, false);
- if (directiveOrProviderIdx !== null) {
- this.addMatch(tNode.index, directiveOrProviderIdx);
- }
- }
- }
- else {
- this.addMatch(tNode.index, nodeMatchIdx);
- }
- }
- }
- addMatch(tNodeIdx, matchIdx) {
- if (this.matches === null) {
- this.matches = [tNodeIdx, matchIdx];
- }
- else {
- this.matches.push(tNodeIdx, matchIdx);
- }
- }
- }
- /**
- * Iterates over local names for a given node and returns directive index
- * (or -1 if a local name points to an element).
- *
- * @param tNode static data of a node to check
- * @param selector selector to match
- * @returns directive index, -1 or null if a selector didn't match any of the local names
- */
- function getIdxOfMatchingSelector(tNode, selector) {
- const localNames = tNode.localNames;
- if (localNames !== null) {
- for (let i = 0; i < localNames.length; i += 2) {
- if (localNames[i] === selector) {
- return localNames[i + 1];
- }
- }
- }
- return null;
- }
- function createResultByTNodeType(tNode, currentView) {
- if (tNode.type & (3 /* AnyRNode */ | 8 /* ElementContainer */)) {
- return createElementRef(tNode, currentView);
- }
- else if (tNode.type & 4 /* Container */) {
- return createTemplateRef(tNode, currentView);
- }
- return null;
- }
- function createResultForNode(lView, tNode, matchingIdx, read) {
- if (matchingIdx === -1) {
- // if read token and / or strategy is not specified, detect it using appropriate tNode type
- return createResultByTNodeType(tNode, lView);
- }
- else if (matchingIdx === -2) {
- // read a special token from a node injector
- return createSpecialToken(lView, tNode, read);
- }
- else {
- // read a token
- return getNodeInjectable(lView, lView[TVIEW], matchingIdx, tNode);
- }
- }
- function createSpecialToken(lView, tNode, read) {
- if (read === ElementRef) {
- return createElementRef(tNode, lView);
- }
- else if (read === TemplateRef) {
- return createTemplateRef(tNode, lView);
- }
- else if (read === ViewContainerRef) {
- ngDevMode && assertTNodeType(tNode, 3 /* AnyRNode */ | 12 /* AnyContainer */);
- return createContainerRef(tNode, lView);
- }
- else {
- ngDevMode &&
- throwError(`Special token to read should be one of ElementRef, TemplateRef or ViewContainerRef but got ${stringify(read)}.`);
- }
- }
- /**
- * A helper function that creates query results for a given view. This function is meant to do the
- * processing once and only once for a given view instance (a set of results for a given view
- * doesn't change).
- */
- function materializeViewResults(tView, lView, tQuery, queryIndex) {
- const lQuery = lView[QUERIES].queries[queryIndex];
- if (lQuery.matches === null) {
- const tViewData = tView.data;
- const tQueryMatches = tQuery.matches;
- const result = [];
- for (let i = 0; i < tQueryMatches.length; i += 2) {
- const matchedNodeIdx = tQueryMatches[i];
- if (matchedNodeIdx < 0) {
- // we at the <ng-template> marker which might have results in views created based on this
- // <ng-template> - those results will be in separate views though, so here we just leave
- // null as a placeholder
- result.push(null);
- }
- else {
- ngDevMode && assertIndexInRange(tViewData, matchedNodeIdx);
- const tNode = tViewData[matchedNodeIdx];
- result.push(createResultForNode(lView, tNode, tQueryMatches[i + 1], tQuery.metadata.read));
- }
- }
- lQuery.matches = result;
- }
- return lQuery.matches;
- }
- /**
- * A helper function that collects (already materialized) query results from a tree of views,
- * starting with a provided LView.
- */
- function collectQueryResults(tView, lView, queryIndex, result) {
- const tQuery = tView.queries.getByIndex(queryIndex);
- const tQueryMatches = tQuery.matches;
- if (tQueryMatches !== null) {
- const lViewResults = materializeViewResults(tView, lView, tQuery, queryIndex);
- for (let i = 0; i < tQueryMatches.length; i += 2) {
- const tNodeIdx = tQueryMatches[i];
- if (tNodeIdx > 0) {
- result.push(lViewResults[i / 2]);
- }
- else {
- const childQueryIndex = tQueryMatches[i + 1];
- const declarationLContainer = lView[-tNodeIdx];
- ngDevMode && assertLContainer(declarationLContainer);
- // collect matches for views inserted in this container
- for (let i = CONTAINER_HEADER_OFFSET; i < declarationLContainer.length; i++) {
- const embeddedLView = declarationLContainer[i];
- if (embeddedLView[DECLARATION_LCONTAINER] === embeddedLView[PARENT]) {
- collectQueryResults(embeddedLView[TVIEW], embeddedLView, childQueryIndex, result);
- }
- }
- // collect matches for views created from this declaration container and inserted into
- // different containers
- if (declarationLContainer[MOVED_VIEWS] !== null) {
- const embeddedLViews = declarationLContainer[MOVED_VIEWS];
- for (let i = 0; i < embeddedLViews.length; i++) {
- const embeddedLView = embeddedLViews[i];
- collectQueryResults(embeddedLView[TVIEW], embeddedLView, childQueryIndex, result);
- }
- }
- }
- }
- }
- return result;
- }
- /**
- * Refreshes a query by combining matches from all active views and removing matches from deleted
- * views.
- *
- * @returns `true` if a query got dirty during change detection or if this is a static query
- * resolving in creation mode, `false` otherwise.
- *
- * @codeGenApi
- */
- function ɵɵqueryRefresh(queryList) {
- const lView = getLView();
- const tView = getTView();
- const queryIndex = getCurrentQueryIndex();
- setCurrentQueryIndex(queryIndex + 1);
- const tQuery = getTQuery(tView, queryIndex);
- if (queryList.dirty && (isCreationMode(lView) === tQuery.metadata.isStatic)) {
- if (tQuery.matches === null) {
- queryList.reset([]);
- }
- else {
- const result = tQuery.crossesNgTemplate ?
- collectQueryResults(tView, lView, queryIndex, []) :
- materializeViewResults(tView, lView, tQuery, queryIndex);
- queryList.reset(result);
- queryList.notifyOnChanges();
- }
- return true;
- }
- return false;
- }
- /**
- * Creates new QueryList for a static view query.
- *
- * @param predicate The type for which the query will search
- * @param descend Whether or not to descend into children
- * @param read What to save in the query
- *
- * @codeGenApi
- */
- function ɵɵstaticViewQuery(predicate, descend, read) {
- viewQueryInternal(getTView(), getLView(), predicate, descend, read, true);
- }
- /**
- * Creates new QueryList, stores the reference in LView and returns QueryList.
- *
- * @param predicate The type for which the query will search
- * @param descend Whether or not to descend into children
- * @param read What to save in the query
- *
- * @codeGenApi
- */
- function ɵɵviewQuery(predicate, descend, read) {
- viewQueryInternal(getTView(), getLView(), predicate, descend, read, false);
- }
- function viewQueryInternal(tView, lView, predicate, descend, read, isStatic) {
- if (tView.firstCreatePass) {
- createTQuery(tView, new TQueryMetadata_(predicate, descend, isStatic, read), -1);
- if (isStatic) {
- tView.staticViewQueries = true;
- }
- }
- createLQuery(tView, lView);
- }
- /**
- * Registers a QueryList, associated with a content query, for later refresh (part of a view
- * refresh).
- *
- * @param directiveIndex Current directive index
- * @param predicate The type for which the query will search
- * @param descend Whether or not to descend into children
- * @param read What to save in the query
- * @returns QueryList<T>
- *
- * @codeGenApi
- */
- function ɵɵcontentQuery(directiveIndex, predicate, descend, read) {
- contentQueryInternal(getTView(), getLView(), predicate, descend, read, false, getCurrentTNode(), directiveIndex);
- }
- /**
- * Registers a QueryList, associated with a static content query, for later refresh
- * (part of a view refresh).
- *
- * @param directiveIndex Current directive index
- * @param predicate The type for which the query will search
- * @param descend Whether or not to descend into children
- * @param read What to save in the query
- * @returns QueryList<T>
- *
- * @codeGenApi
- */
- function ɵɵstaticContentQuery(directiveIndex, predicate, descend, read) {
- contentQueryInternal(getTView(), getLView(), predicate, descend, read, true, getCurrentTNode(), directiveIndex);
- }
- function contentQueryInternal(tView, lView, predicate, descend, read, isStatic, tNode, directiveIndex) {
- if (tView.firstCreatePass) {
- createTQuery(tView, new TQueryMetadata_(predicate, descend, isStatic, read), tNode.index);
- saveContentQueryAndDirectiveIndex(tView, directiveIndex);
- if (isStatic) {
- tView.staticContentQueries = true;
- }
- }
- createLQuery(tView, lView);
- }
- /**
- * Loads a QueryList corresponding to the current view or content query.
- *
- * @codeGenApi
- */
- function ɵɵloadQuery() {
- return loadQueryInternal(getLView(), getCurrentQueryIndex());
- }
- function loadQueryInternal(lView, queryIndex) {
- ngDevMode &&
- assertDefined(lView[QUERIES], 'LQueries should be defined when trying to load a query');
- ngDevMode && assertIndexInRange(lView[QUERIES].queries, queryIndex);
- return lView[QUERIES].queries[queryIndex].queryList;
- }
- function createLQuery(tView, lView) {
- const queryList = new QueryList();
- storeCleanupWithContext(tView, lView, queryList, queryList.destroy);
- if (lView[QUERIES] === null)
- lView[QUERIES] = new LQueries_();
- lView[QUERIES].queries.push(new LQuery_(queryList));
- }
- function createTQuery(tView, metadata, nodeIndex) {
- if (tView.queries === null)
- tView.queries = new TQueries_();
- tView.queries.track(new TQuery_(metadata, nodeIndex));
- }
- function saveContentQueryAndDirectiveIndex(tView, directiveIndex) {
- const tViewContentQueries = tView.contentQueries || (tView.contentQueries = []);
- const lastSavedDirectiveIndex = tViewContentQueries.length ? tViewContentQueries[tViewContentQueries.length - 1] : -1;
- if (directiveIndex !== lastSavedDirectiveIndex) {
- tViewContentQueries.push(tView.queries.length - 1, directiveIndex);
- }
- }
- function getTQuery(tView, index) {
- ngDevMode && assertDefined(tView.queries, 'TQueries must be defined to retrieve a TQuery');
- return tView.queries.getByIndex(index);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Retrieves `TemplateRef` instance from `Injector` when a local reference is placed on the
- * `<ng-template>` element.
- *
- * @codeGenApi
- */
- function ɵɵtemplateRefExtractor(tNode, lView) {
- return createTemplateRef(tNode, lView);
- }
- /**
- * Returns the appropriate `ChangeDetectorRef` for a pipe.
- *
- * @codeGenApi
- */
- function ɵɵinjectPipeChangeDetectorRef(flags = InjectFlags.Default) {
- const value = injectChangeDetectorRef(true);
- if (value == null && !(flags & InjectFlags.Optional)) {
- throwProviderNotFoundError('ChangeDetectorRef');
- }
- else {
- return value;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ɵ0$c = () => ({
- 'ɵɵattribute': ɵɵattribute,
- 'ɵɵattributeInterpolate1': ɵɵattributeInterpolate1,
- 'ɵɵattributeInterpolate2': ɵɵattributeInterpolate2,
- 'ɵɵattributeInterpolate3': ɵɵattributeInterpolate3,
- 'ɵɵattributeInterpolate4': ɵɵattributeInterpolate4,
- 'ɵɵattributeInterpolate5': ɵɵattributeInterpolate5,
- 'ɵɵattributeInterpolate6': ɵɵattributeInterpolate6,
- 'ɵɵattributeInterpolate7': ɵɵattributeInterpolate7,
- 'ɵɵattributeInterpolate8': ɵɵattributeInterpolate8,
- 'ɵɵattributeInterpolateV': ɵɵattributeInterpolateV,
- 'ɵɵdefineComponent': ɵɵdefineComponent,
- 'ɵɵdefineDirective': ɵɵdefineDirective,
- 'ɵɵdefineInjectable': ɵɵdefineInjectable,
- 'ɵɵdefineInjector': ɵɵdefineInjector,
- 'ɵɵdefineNgModule': ɵɵdefineNgModule,
- 'ɵɵdefinePipe': ɵɵdefinePipe,
- 'ɵɵdirectiveInject': ɵɵdirectiveInject,
- 'ɵɵgetFactoryOf': ɵɵgetFactoryOf,
- 'ɵɵgetInheritedFactory': ɵɵgetInheritedFactory,
- 'ɵɵinject': ɵɵinject,
- 'ɵɵinjectAttribute': ɵɵinjectAttribute,
- 'ɵɵinvalidFactory': ɵɵinvalidFactory,
- 'ɵɵinvalidFactoryDep': ɵɵinvalidFactoryDep,
- 'ɵɵinjectPipeChangeDetectorRef': ɵɵinjectPipeChangeDetectorRef,
- 'ɵɵtemplateRefExtractor': ɵɵtemplateRefExtractor,
- 'ɵɵNgOnChangesFeature': ɵɵNgOnChangesFeature,
- 'ɵɵProvidersFeature': ɵɵProvidersFeature,
- 'ɵɵCopyDefinitionFeature': ɵɵCopyDefinitionFeature,
- 'ɵɵInheritDefinitionFeature': ɵɵInheritDefinitionFeature,
- 'ɵɵnextContext': ɵɵnextContext,
- 'ɵɵnamespaceHTML': ɵɵnamespaceHTML,
- 'ɵɵnamespaceMathML': ɵɵnamespaceMathML,
- 'ɵɵnamespaceSVG': ɵɵnamespaceSVG,
- 'ɵɵenableBindings': ɵɵenableBindings,
- 'ɵɵdisableBindings': ɵɵdisableBindings,
- 'ɵɵelementStart': ɵɵelementStart,
- 'ɵɵelementEnd': ɵɵelementEnd,
- 'ɵɵelement': ɵɵelement,
- 'ɵɵelementContainerStart': ɵɵelementContainerStart,
- 'ɵɵelementContainerEnd': ɵɵelementContainerEnd,
- 'ɵɵelementContainer': ɵɵelementContainer,
- 'ɵɵpureFunction0': ɵɵpureFunction0,
- 'ɵɵpureFunction1': ɵɵpureFunction1,
- 'ɵɵpureFunction2': ɵɵpureFunction2,
- 'ɵɵpureFunction3': ɵɵpureFunction3,
- 'ɵɵpureFunction4': ɵɵpureFunction4,
- 'ɵɵpureFunction5': ɵɵpureFunction5,
- 'ɵɵpureFunction6': ɵɵpureFunction6,
- 'ɵɵpureFunction7': ɵɵpureFunction7,
- 'ɵɵpureFunction8': ɵɵpureFunction8,
- 'ɵɵpureFunctionV': ɵɵpureFunctionV,
- 'ɵɵgetCurrentView': ɵɵgetCurrentView,
- 'ɵɵrestoreView': ɵɵrestoreView,
- 'ɵɵlistener': ɵɵlistener,
- 'ɵɵprojection': ɵɵprojection,
- 'ɵɵsyntheticHostProperty': ɵɵsyntheticHostProperty,
- 'ɵɵsyntheticHostListener': ɵɵsyntheticHostListener,
- 'ɵɵpipeBind1': ɵɵpipeBind1,
- 'ɵɵpipeBind2': ɵɵpipeBind2,
- 'ɵɵpipeBind3': ɵɵpipeBind3,
- 'ɵɵpipeBind4': ɵɵpipeBind4,
- 'ɵɵpipeBindV': ɵɵpipeBindV,
- 'ɵɵprojectionDef': ɵɵprojectionDef,
- 'ɵɵhostProperty': ɵɵhostProperty,
- 'ɵɵproperty': ɵɵproperty,
- 'ɵɵpropertyInterpolate': ɵɵpropertyInterpolate,
- 'ɵɵpropertyInterpolate1': ɵɵpropertyInterpolate1,
- 'ɵɵpropertyInterpolate2': ɵɵpropertyInterpolate2,
- 'ɵɵpropertyInterpolate3': ɵɵpropertyInterpolate3,
- 'ɵɵpropertyInterpolate4': ɵɵpropertyInterpolate4,
- 'ɵɵpropertyInterpolate5': ɵɵpropertyInterpolate5,
- 'ɵɵpropertyInterpolate6': ɵɵpropertyInterpolate6,
- 'ɵɵpropertyInterpolate7': ɵɵpropertyInterpolate7,
- 'ɵɵpropertyInterpolate8': ɵɵpropertyInterpolate8,
- 'ɵɵpropertyInterpolateV': ɵɵpropertyInterpolateV,
- 'ɵɵpipe': ɵɵpipe,
- 'ɵɵqueryRefresh': ɵɵqueryRefresh,
- 'ɵɵviewQuery': ɵɵviewQuery,
- 'ɵɵstaticViewQuery': ɵɵstaticViewQuery,
- 'ɵɵstaticContentQuery': ɵɵstaticContentQuery,
- 'ɵɵloadQuery': ɵɵloadQuery,
- 'ɵɵcontentQuery': ɵɵcontentQuery,
- 'ɵɵreference': ɵɵreference,
- 'ɵɵclassMap': ɵɵclassMap,
- 'ɵɵclassMapInterpolate1': ɵɵclassMapInterpolate1,
- 'ɵɵclassMapInterpolate2': ɵɵclassMapInterpolate2,
- 'ɵɵclassMapInterpolate3': ɵɵclassMapInterpolate3,
- 'ɵɵclassMapInterpolate4': ɵɵclassMapInterpolate4,
- 'ɵɵclassMapInterpolate5': ɵɵclassMapInterpolate5,
- 'ɵɵclassMapInterpolate6': ɵɵclassMapInterpolate6,
- 'ɵɵclassMapInterpolate7': ɵɵclassMapInterpolate7,
- 'ɵɵclassMapInterpolate8': ɵɵclassMapInterpolate8,
- 'ɵɵclassMapInterpolateV': ɵɵclassMapInterpolateV,
- 'ɵɵstyleMap': ɵɵstyleMap,
- 'ɵɵstyleMapInterpolate1': ɵɵstyleMapInterpolate1,
- 'ɵɵstyleMapInterpolate2': ɵɵstyleMapInterpolate2,
- 'ɵɵstyleMapInterpolate3': ɵɵstyleMapInterpolate3,
- 'ɵɵstyleMapInterpolate4': ɵɵstyleMapInterpolate4,
- 'ɵɵstyleMapInterpolate5': ɵɵstyleMapInterpolate5,
- 'ɵɵstyleMapInterpolate6': ɵɵstyleMapInterpolate6,
- 'ɵɵstyleMapInterpolate7': ɵɵstyleMapInterpolate7,
- 'ɵɵstyleMapInterpolate8': ɵɵstyleMapInterpolate8,
- 'ɵɵstyleMapInterpolateV': ɵɵstyleMapInterpolateV,
- 'ɵɵstyleProp': ɵɵstyleProp,
- 'ɵɵstylePropInterpolate1': ɵɵstylePropInterpolate1,
- 'ɵɵstylePropInterpolate2': ɵɵstylePropInterpolate2,
- 'ɵɵstylePropInterpolate3': ɵɵstylePropInterpolate3,
- 'ɵɵstylePropInterpolate4': ɵɵstylePropInterpolate4,
- 'ɵɵstylePropInterpolate5': ɵɵstylePropInterpolate5,
- 'ɵɵstylePropInterpolate6': ɵɵstylePropInterpolate6,
- 'ɵɵstylePropInterpolate7': ɵɵstylePropInterpolate7,
- 'ɵɵstylePropInterpolate8': ɵɵstylePropInterpolate8,
- 'ɵɵstylePropInterpolateV': ɵɵstylePropInterpolateV,
- 'ɵɵclassProp': ɵɵclassProp,
- 'ɵɵadvance': ɵɵadvance,
- 'ɵɵtemplate': ɵɵtemplate,
- 'ɵɵtext': ɵɵtext,
- 'ɵɵtextInterpolate': ɵɵtextInterpolate,
- 'ɵɵtextInterpolate1': ɵɵtextInterpolate1,
- 'ɵɵtextInterpolate2': ɵɵtextInterpolate2,
- 'ɵɵtextInterpolate3': ɵɵtextInterpolate3,
- 'ɵɵtextInterpolate4': ɵɵtextInterpolate4,
- 'ɵɵtextInterpolate5': ɵɵtextInterpolate5,
- 'ɵɵtextInterpolate6': ɵɵtextInterpolate6,
- 'ɵɵtextInterpolate7': ɵɵtextInterpolate7,
- 'ɵɵtextInterpolate8': ɵɵtextInterpolate8,
- 'ɵɵtextInterpolateV': ɵɵtextInterpolateV,
- 'ɵɵi18n': ɵɵi18n,
- 'ɵɵi18nAttributes': ɵɵi18nAttributes,
- 'ɵɵi18nExp': ɵɵi18nExp,
- 'ɵɵi18nStart': ɵɵi18nStart,
- 'ɵɵi18nEnd': ɵɵi18nEnd,
- 'ɵɵi18nApply': ɵɵi18nApply,
- 'ɵɵi18nPostprocess': ɵɵi18nPostprocess,
- 'ɵɵresolveWindow': ɵɵresolveWindow,
- 'ɵɵresolveDocument': ɵɵresolveDocument,
- 'ɵɵresolveBody': ɵɵresolveBody,
- 'ɵɵsetComponentScope': ɵɵsetComponentScope,
- 'ɵɵsetNgModuleScope': ɵɵsetNgModuleScope,
- 'ɵɵsanitizeHtml': ɵɵsanitizeHtml,
- 'ɵɵsanitizeStyle': ɵɵsanitizeStyle,
- 'ɵɵsanitizeResourceUrl': ɵɵsanitizeResourceUrl,
- 'ɵɵsanitizeScript': ɵɵsanitizeScript,
- 'ɵɵsanitizeUrl': ɵɵsanitizeUrl,
- 'ɵɵsanitizeUrlOrResourceUrl': ɵɵsanitizeUrlOrResourceUrl,
- 'ɵɵtrustConstantHtml': ɵɵtrustConstantHtml,
- 'ɵɵtrustConstantScript': ɵɵtrustConstantScript,
- 'ɵɵtrustConstantResourceUrl': ɵɵtrustConstantResourceUrl,
- });
- /**
- * A mapping of the @angular/core API surface used in generated expressions to the actual symbols.
- *
- * This should be kept up to date with the public exports of @angular/core.
- */
- const angularCoreEnv = (ɵ0$c)();
- let jitOptions = null;
- function setJitOptions(options) {
- if (jitOptions !== null) {
- if (options.defaultEncapsulation !== jitOptions.defaultEncapsulation) {
- ngDevMode &&
- console.error('Provided value for `defaultEncapsulation` can not be changed once it has been set.');
- return;
- }
- if (options.preserveWhitespaces !== jitOptions.preserveWhitespaces) {
- ngDevMode &&
- console.error('Provided value for `preserveWhitespaces` can not be changed once it has been set.');
- return;
- }
- }
- jitOptions = options;
- }
- function getJitOptions() {
- return jitOptions;
- }
- function resetJitOptions() {
- jitOptions = null;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const EMPTY_ARRAY$5 = [];
- const moduleQueue = [];
- /**
- * Enqueues moduleDef to be checked later to see if scope can be set on its
- * component declarations.
- */
- function enqueueModuleForDelayedScoping(moduleType, ngModule) {
- moduleQueue.push({ moduleType, ngModule });
- }
- let flushingModuleQueue = false;
- /**
- * Loops over queued module definitions, if a given module definition has all of its
- * declarations resolved, it dequeues that module definition and sets the scope on
- * its declarations.
- */
- function flushModuleScopingQueueAsMuchAsPossible() {
- if (!flushingModuleQueue) {
- flushingModuleQueue = true;
- try {
- for (let i = moduleQueue.length - 1; i >= 0; i--) {
- const { moduleType, ngModule } = moduleQueue[i];
- if (ngModule.declarations && ngModule.declarations.every(isResolvedDeclaration)) {
- // dequeue
- moduleQueue.splice(i, 1);
- setScopeOnDeclaredComponents(moduleType, ngModule);
- }
- }
- }
- finally {
- flushingModuleQueue = false;
- }
- }
- }
- /**
- * Returns truthy if a declaration has resolved. If the declaration happens to be
- * an array of declarations, it will recurse to check each declaration in that array
- * (which may also be arrays).
- */
- function isResolvedDeclaration(declaration) {
- if (Array.isArray(declaration)) {
- return declaration.every(isResolvedDeclaration);
- }
- return !!resolveForwardRef(declaration);
- }
- /**
- * Compiles a module in JIT mode.
- *
- * This function automatically gets called when a class has a `@NgModule` decorator.
- */
- function compileNgModule(moduleType, ngModule = {}) {
- compileNgModuleDefs(moduleType, ngModule);
- // Because we don't know if all declarations have resolved yet at the moment the
- // NgModule decorator is executing, we're enqueueing the setting of module scope
- // on its declarations to be run at a later time when all declarations for the module,
- // including forward refs, have resolved.
- enqueueModuleForDelayedScoping(moduleType, ngModule);
- }
- /**
- * Compiles and adds the `ɵmod` and `ɵinj` properties to the module class.
- *
- * It's possible to compile a module via this API which will allow duplicate declarations in its
- * root.
- */
- function compileNgModuleDefs(moduleType, ngModule, allowDuplicateDeclarationsInRoot = false) {
- ngDevMode && assertDefined(moduleType, 'Required value moduleType');
- ngDevMode && assertDefined(ngModule, 'Required value ngModule');
- const declarations = flatten(ngModule.declarations || EMPTY_ARRAY$5);
- let ngModuleDef = null;
- Object.defineProperty(moduleType, NG_MOD_DEF, {
- configurable: true,
- get: () => {
- if (ngModuleDef === null) {
- if (ngDevMode && ngModule.imports && ngModule.imports.indexOf(moduleType) > -1) {
- // We need to assert this immediately, because allowing it to continue will cause it to
- // go into an infinite loop before we've reached the point where we throw all the errors.
- throw new Error(`'${stringifyForError(moduleType)}' module can't import itself`);
- }
- ngModuleDef = getCompilerFacade().compileNgModule(angularCoreEnv, `ng:///${moduleType.name}/ɵmod.js`, {
- type: moduleType,
- bootstrap: flatten(ngModule.bootstrap || EMPTY_ARRAY$5).map(resolveForwardRef),
- declarations: declarations.map(resolveForwardRef),
- imports: flatten(ngModule.imports || EMPTY_ARRAY$5)
- .map(resolveForwardRef)
- .map(expandModuleWithProviders),
- exports: flatten(ngModule.exports || EMPTY_ARRAY$5)
- .map(resolveForwardRef)
- .map(expandModuleWithProviders),
- schemas: ngModule.schemas ? flatten(ngModule.schemas) : null,
- id: ngModule.id || null,
- });
- // Set `schemas` on ngModuleDef to an empty array in JIT mode to indicate that runtime
- // should verify that there are no unknown elements in a template. In AOT mode, that check
- // happens at compile time and `schemas` information is not present on Component and Module
- // defs after compilation (so the check doesn't happen the second time at runtime).
- if (!ngModuleDef.schemas) {
- ngModuleDef.schemas = [];
- }
- }
- return ngModuleDef;
- }
- });
- let ngInjectorDef = null;
- Object.defineProperty(moduleType, NG_INJ_DEF, {
- get: () => {
- if (ngInjectorDef === null) {
- ngDevMode &&
- verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRoot);
- const meta = {
- name: moduleType.name,
- type: moduleType,
- deps: reflectDependencies(moduleType),
- providers: ngModule.providers || EMPTY_ARRAY$5,
- imports: [
- (ngModule.imports || EMPTY_ARRAY$5).map(resolveForwardRef),
- (ngModule.exports || EMPTY_ARRAY$5).map(resolveForwardRef),
- ],
- };
- ngInjectorDef = getCompilerFacade().compileInjector(angularCoreEnv, `ng:///${moduleType.name}/ɵinj.js`, meta);
- }
- return ngInjectorDef;
- },
- // Make the property configurable in dev mode to allow overriding in tests
- configurable: !!ngDevMode,
- });
- }
- function verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRoot, importingModule) {
- if (verifiedNgModule.get(moduleType))
- return;
- verifiedNgModule.set(moduleType, true);
- moduleType = resolveForwardRef(moduleType);
- let ngModuleDef;
- if (importingModule) {
- ngModuleDef = getNgModuleDef(moduleType);
- if (!ngModuleDef) {
- throw new Error(`Unexpected value '${moduleType.name}' imported by the module '${importingModule.name}'. Please add an @NgModule annotation.`);
- }
- }
- else {
- ngModuleDef = getNgModuleDef(moduleType, true);
- }
- const errors = [];
- const declarations = maybeUnwrapFn(ngModuleDef.declarations);
- const imports = maybeUnwrapFn(ngModuleDef.imports);
- flatten(imports).map(unwrapModuleWithProvidersImports).forEach(mod => {
- verifySemanticsOfNgModuleImport(mod, moduleType);
- verifySemanticsOfNgModuleDef(mod, false, moduleType);
- });
- const exports = maybeUnwrapFn(ngModuleDef.exports);
- declarations.forEach(verifyDeclarationsHaveDefinitions);
- declarations.forEach(verifyDirectivesHaveSelector);
- const combinedDeclarations = [
- ...declarations.map(resolveForwardRef),
- ...flatten(imports.map(computeCombinedExports)).map(resolveForwardRef),
- ];
- exports.forEach(verifyExportsAreDeclaredOrReExported);
- declarations.forEach(decl => verifyDeclarationIsUnique(decl, allowDuplicateDeclarationsInRoot));
- declarations.forEach(verifyComponentEntryComponentsIsPartOfNgModule);
- const ngModule = getAnnotation(moduleType, 'NgModule');
- if (ngModule) {
- ngModule.imports &&
- flatten(ngModule.imports).map(unwrapModuleWithProvidersImports).forEach(mod => {
- verifySemanticsOfNgModuleImport(mod, moduleType);
- verifySemanticsOfNgModuleDef(mod, false, moduleType);
- });
- ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyCorrectBootstrapType);
- ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyComponentIsPartOfNgModule);
- ngModule.entryComponents &&
- deepForEach(ngModule.entryComponents, verifyComponentIsPartOfNgModule);
- }
- // Throw Error if any errors were detected.
- if (errors.length) {
- throw new Error(errors.join('\n'));
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////
- function verifyDeclarationsHaveDefinitions(type) {
- type = resolveForwardRef(type);
- const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef(type);
- if (!def) {
- errors.push(`Unexpected value '${stringifyForError(type)}' declared by the module '${stringifyForError(moduleType)}'. Please add a @Pipe/@Directive/@Component annotation.`);
- }
- }
- function verifyDirectivesHaveSelector(type) {
- type = resolveForwardRef(type);
- const def = getDirectiveDef(type);
- if (!getComponentDef(type) && def && def.selectors.length == 0) {
- errors.push(`Directive ${stringifyForError(type)} has no selector, please add it!`);
- }
- }
- function verifyExportsAreDeclaredOrReExported(type) {
- type = resolveForwardRef(type);
- const kind = getComponentDef(type) && 'component' || getDirectiveDef(type) && 'directive' ||
- getPipeDef(type) && 'pipe';
- if (kind) {
- // only checked if we are declared as Component, Directive, or Pipe
- // Modules don't need to be declared or imported.
- if (combinedDeclarations.lastIndexOf(type) === -1) {
- // We are exporting something which we don't explicitly declare or import.
- errors.push(`Can't export ${kind} ${stringifyForError(type)} from ${stringifyForError(moduleType)} as it was neither declared nor imported!`);
- }
- }
- }
- function verifyDeclarationIsUnique(type, suppressErrors) {
- type = resolveForwardRef(type);
- const existingModule = ownerNgModule.get(type);
- if (existingModule && existingModule !== moduleType) {
- if (!suppressErrors) {
- const modules = [existingModule, moduleType].map(stringifyForError).sort();
- errors.push(`Type ${stringifyForError(type)} is part of the declarations of 2 modules: ${modules[0]} and ${modules[1]}! ` +
- `Please consider moving ${stringifyForError(type)} to a higher module that imports ${modules[0]} and ${modules[1]}. ` +
- `You can also create a new NgModule that exports and includes ${stringifyForError(type)} then import that NgModule in ${modules[0]} and ${modules[1]}.`);
- }
- }
- else {
- // Mark type as having owner.
- ownerNgModule.set(type, moduleType);
- }
- }
- function verifyComponentIsPartOfNgModule(type) {
- type = resolveForwardRef(type);
- const existingModule = ownerNgModule.get(type);
- if (!existingModule) {
- errors.push(`Component ${stringifyForError(type)} is not part of any NgModule or the module has not been imported into your module.`);
- }
- }
- function verifyCorrectBootstrapType(type) {
- type = resolveForwardRef(type);
- if (!getComponentDef(type)) {
- errors.push(`${stringifyForError(type)} cannot be used as an entry component.`);
- }
- }
- function verifyComponentEntryComponentsIsPartOfNgModule(type) {
- type = resolveForwardRef(type);
- if (getComponentDef(type)) {
- // We know we are component
- const component = getAnnotation(type, 'Component');
- if (component && component.entryComponents) {
- deepForEach(component.entryComponents, verifyComponentIsPartOfNgModule);
- }
- }
- }
- function verifySemanticsOfNgModuleImport(type, importingModule) {
- type = resolveForwardRef(type);
- if (getComponentDef(type) || getDirectiveDef(type)) {
- throw new Error(`Unexpected directive '${type.name}' imported by the module '${importingModule.name}'. Please add an @NgModule annotation.`);
- }
- if (getPipeDef(type)) {
- throw new Error(`Unexpected pipe '${type.name}' imported by the module '${importingModule.name}'. Please add an @NgModule annotation.`);
- }
- }
- }
- function unwrapModuleWithProvidersImports(typeOrWithProviders) {
- typeOrWithProviders = resolveForwardRef(typeOrWithProviders);
- return typeOrWithProviders.ngModule || typeOrWithProviders;
- }
- function getAnnotation(type, name) {
- let annotation = null;
- collect(type.__annotations__);
- collect(type.decorators);
- return annotation;
- function collect(annotations) {
- if (annotations) {
- annotations.forEach(readAnnotation);
- }
- }
- function readAnnotation(decorator) {
- if (!annotation) {
- const proto = Object.getPrototypeOf(decorator);
- if (proto.ngMetadataName == name) {
- annotation = decorator;
- }
- else if (decorator.type) {
- const proto = Object.getPrototypeOf(decorator.type);
- if (proto.ngMetadataName == name) {
- annotation = decorator.args[0];
- }
- }
- }
- }
- }
- /**
- * Keep track of compiled components. This is needed because in tests we often want to compile the
- * same component with more than one NgModule. This would cause an error unless we reset which
- * NgModule the component belongs to. We keep the list of compiled components here so that the
- * TestBed can reset it later.
- */
- let ownerNgModule = new Map();
- let verifiedNgModule = new Map();
- function resetCompiledComponents() {
- ownerNgModule = new Map();
- verifiedNgModule = new Map();
- moduleQueue.length = 0;
- }
- /**
- * Computes the combined declarations of explicit declarations, as well as declarations inherited by
- * traversing the exports of imported modules.
- * @param type
- */
- function computeCombinedExports(type) {
- type = resolveForwardRef(type);
- const ngModuleDef = getNgModuleDef(type, true);
- return [...flatten(maybeUnwrapFn(ngModuleDef.exports).map((type) => {
- const ngModuleDef = getNgModuleDef(type);
- if (ngModuleDef) {
- verifySemanticsOfNgModuleDef(type, false);
- return computeCombinedExports(type);
- }
- else {
- return type;
- }
- }))];
- }
- /**
- * Some declared components may be compiled asynchronously, and thus may not have their
- * ɵcmp set yet. If this is the case, then a reference to the module is written into
- * the `ngSelectorScope` property of the declared type.
- */
- function setScopeOnDeclaredComponents(moduleType, ngModule) {
- const declarations = flatten(ngModule.declarations || EMPTY_ARRAY$5);
- const transitiveScopes = transitiveScopesFor(moduleType);
- declarations.forEach(declaration => {
- if (declaration.hasOwnProperty(NG_COMP_DEF)) {
- // A `ɵcmp` field exists - go ahead and patch the component directly.
- const component = declaration;
- const componentDef = getComponentDef(component);
- patchComponentDefWithScope(componentDef, transitiveScopes);
- }
- else if (!declaration.hasOwnProperty(NG_DIR_DEF) && !declaration.hasOwnProperty(NG_PIPE_DEF)) {
- // Set `ngSelectorScope` for future reference when the component compilation finishes.
- declaration.ngSelectorScope = moduleType;
- }
- });
- }
- /**
- * Patch the definition of a component with directives and pipes from the compilation scope of
- * a given module.
- */
- function patchComponentDefWithScope(componentDef, transitiveScopes) {
- componentDef.directiveDefs = () => Array.from(transitiveScopes.compilation.directives)
- .map(dir => dir.hasOwnProperty(NG_COMP_DEF) ? getComponentDef(dir) : getDirectiveDef(dir))
- .filter(def => !!def);
- componentDef.pipeDefs = () => Array.from(transitiveScopes.compilation.pipes).map(pipe => getPipeDef(pipe));
- componentDef.schemas = transitiveScopes.schemas;
- // Since we avoid Components/Directives/Pipes recompiling in case there are no overrides, we
- // may face a problem where previously compiled defs available to a given Component/Directive
- // are cached in TView and may become stale (in case any of these defs gets recompiled). In
- // order to avoid this problem, we force fresh TView to be created.
- componentDef.tView = null;
- }
- /**
- * Compute the pair of transitive scopes (compilation scope and exported scope) for a given module.
- *
- * This operation is memoized and the result is cached on the module's definition. This function can
- * be called on modules with components that have not fully compiled yet, but the result should not
- * be used until they have.
- *
- * @param moduleType module that transitive scope should be calculated for.
- */
- function transitiveScopesFor(moduleType) {
- if (!isNgModule(moduleType)) {
- throw new Error(`${moduleType.name} does not have a module def (ɵmod property)`);
- }
- const def = getNgModuleDef(moduleType);
- if (def.transitiveCompileScopes !== null) {
- return def.transitiveCompileScopes;
- }
- const scopes = {
- schemas: def.schemas || null,
- compilation: {
- directives: new Set(),
- pipes: new Set(),
- },
- exported: {
- directives: new Set(),
- pipes: new Set(),
- },
- };
- maybeUnwrapFn(def.imports).forEach((imported) => {
- const importedType = imported;
- if (!isNgModule(importedType)) {
- throw new Error(`Importing ${importedType.name} which does not have a ɵmod property`);
- }
- // When this module imports another, the imported module's exported directives and pipes are
- // added to the compilation scope of this module.
- const importedScope = transitiveScopesFor(importedType);
- importedScope.exported.directives.forEach(entry => scopes.compilation.directives.add(entry));
- importedScope.exported.pipes.forEach(entry => scopes.compilation.pipes.add(entry));
- });
- maybeUnwrapFn(def.declarations).forEach(declared => {
- const declaredWithDefs = declared;
- if (getPipeDef(declaredWithDefs)) {
- scopes.compilation.pipes.add(declared);
- }
- else {
- // Either declared has a ɵcmp or ɵdir, or it's a component which hasn't
- // had its template compiled yet. In either case, it gets added to the compilation's
- // directives.
- scopes.compilation.directives.add(declared);
- }
- });
- maybeUnwrapFn(def.exports).forEach((exported) => {
- const exportedType = exported;
- // Either the type is a module, a pipe, or a component/directive (which may not have a
- // ɵcmp as it might be compiled asynchronously).
- if (isNgModule(exportedType)) {
- // When this module exports another, the exported module's exported directives and pipes are
- // added to both the compilation and exported scopes of this module.
- const exportedScope = transitiveScopesFor(exportedType);
- exportedScope.exported.directives.forEach(entry => {
- scopes.compilation.directives.add(entry);
- scopes.exported.directives.add(entry);
- });
- exportedScope.exported.pipes.forEach(entry => {
- scopes.compilation.pipes.add(entry);
- scopes.exported.pipes.add(entry);
- });
- }
- else if (getPipeDef(exportedType)) {
- scopes.exported.pipes.add(exportedType);
- }
- else {
- scopes.exported.directives.add(exportedType);
- }
- });
- def.transitiveCompileScopes = scopes;
- return scopes;
- }
- function expandModuleWithProviders(value) {
- if (isModuleWithProviders(value)) {
- return value.ngModule;
- }
- return value;
- }
- function isModuleWithProviders(value) {
- return value.ngModule !== undefined;
- }
- function isNgModule(value) {
- return !!getNgModuleDef(value);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Keep track of the compilation depth to avoid reentrancy issues during JIT compilation. This
- * matters in the following scenario:
- *
- * Consider a component 'A' that extends component 'B', both declared in module 'M'. During
- * the compilation of 'A' the definition of 'B' is requested to capture the inheritance chain,
- * potentially triggering compilation of 'B'. If this nested compilation were to trigger
- * `flushModuleScopingQueueAsMuchAsPossible` it may happen that module 'M' is still pending in the
- * queue, resulting in 'A' and 'B' to be patched with the NgModule scope. As the compilation of
- * 'A' is still in progress, this would introduce a circular dependency on its compilation. To avoid
- * this issue, the module scope queue is only flushed for compilations at the depth 0, to ensure
- * all compilations have finished.
- */
- let compilationDepth = 0;
- /**
- * Compile an Angular component according to its decorator metadata, and patch the resulting
- * component def (ɵcmp) onto the component type.
- *
- * Compilation may be asynchronous (due to the need to resolve URLs for the component template or
- * other resources, for example). In the event that compilation is not immediate, `compileComponent`
- * will enqueue resource resolution into a global queue and will fail to return the `ɵcmp`
- * until the global queue has been resolved with a call to `resolveComponentResources`.
- */
- function compileComponent(type, metadata) {
- // Initialize ngDevMode. This must be the first statement in compileComponent.
- // See the `initNgDevMode` docstring for more information.
- (typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode();
- let ngComponentDef = null;
- // Metadata may have resources which need to be resolved.
- maybeQueueResolutionOfComponentResources(type, metadata);
- // Note that we're using the same function as `Directive`, because that's only subset of metadata
- // that we need to create the ngFactoryDef. We're avoiding using the component metadata
- // because we'd have to resolve the asynchronous templates.
- addDirectiveFactoryDef(type, metadata);
- Object.defineProperty(type, NG_COMP_DEF, {
- get: () => {
- if (ngComponentDef === null) {
- const compiler = getCompilerFacade();
- if (componentNeedsResolution(metadata)) {
- const error = [`Component '${type.name}' is not resolved:`];
- if (metadata.templateUrl) {
- error.push(` - templateUrl: ${metadata.templateUrl}`);
- }
- if (metadata.styleUrls && metadata.styleUrls.length) {
- error.push(` - styleUrls: ${JSON.stringify(metadata.styleUrls)}`);
- }
- error.push(`Did you run and wait for 'resolveComponentResources()'?`);
- throw new Error(error.join('\n'));
- }
- // This const was called `jitOptions` previously but had to be renamed to `options` because
- // of a bug with Terser that caused optimized JIT builds to throw a `ReferenceError`.
- // This bug was investigated in https://github.com/angular/angular-cli/issues/17264.
- // We should not rename it back until https://github.com/terser/terser/issues/615 is fixed.
- const options = getJitOptions();
- let preserveWhitespaces = metadata.preserveWhitespaces;
- if (preserveWhitespaces === undefined) {
- if (options !== null && options.preserveWhitespaces !== undefined) {
- preserveWhitespaces = options.preserveWhitespaces;
- }
- else {
- preserveWhitespaces = false;
- }
- }
- let encapsulation = metadata.encapsulation;
- if (encapsulation === undefined) {
- if (options !== null && options.defaultEncapsulation !== undefined) {
- encapsulation = options.defaultEncapsulation;
- }
- else {
- encapsulation = ViewEncapsulation.Emulated;
- }
- }
- const templateUrl = metadata.templateUrl || `ng:///${type.name}/template.html`;
- const meta = Object.assign(Object.assign({}, directiveMetadata(type, metadata)), { typeSourceSpan: compiler.createParseSourceSpan('Component', type.name, templateUrl), template: metadata.template || '', preserveWhitespaces, styles: metadata.styles || EMPTY_ARRAY, animations: metadata.animations, directives: [], changeDetection: metadata.changeDetection, pipes: new Map(), encapsulation, interpolation: metadata.interpolation, viewProviders: metadata.viewProviders || null });
- compilationDepth++;
- try {
- if (meta.usesInheritance) {
- addDirectiveDefToUndecoratedParents(type);
- }
- ngComponentDef = compiler.compileComponent(angularCoreEnv, templateUrl, meta);
- }
- finally {
- // Ensure that the compilation depth is decremented even when the compilation failed.
- compilationDepth--;
- }
- if (compilationDepth === 0) {
- // When NgModule decorator executed, we enqueued the module definition such that
- // it would only dequeue and add itself as module scope to all of its declarations,
- // but only if if all of its declarations had resolved. This call runs the check
- // to see if any modules that are in the queue can be dequeued and add scope to
- // their declarations.
- flushModuleScopingQueueAsMuchAsPossible();
- }
- // If component compilation is async, then the @NgModule annotation which declares the
- // component may execute and set an ngSelectorScope property on the component type. This
- // allows the component to patch itself with directiveDefs from the module after it
- // finishes compiling.
- if (hasSelectorScope(type)) {
- const scopes = transitiveScopesFor(type.ngSelectorScope);
- patchComponentDefWithScope(ngComponentDef, scopes);
- }
- }
- return ngComponentDef;
- },
- // Make the property configurable in dev mode to allow overriding in tests
- configurable: !!ngDevMode,
- });
- }
- function hasSelectorScope(component) {
- return component.ngSelectorScope !== undefined;
- }
- /**
- * Compile an Angular directive according to its decorator metadata, and patch the resulting
- * directive def onto the component type.
- *
- * In the event that compilation is not immediate, `compileDirective` will return a `Promise` which
- * will resolve when compilation completes and the directive becomes usable.
- */
- function compileDirective(type, directive) {
- let ngDirectiveDef = null;
- addDirectiveFactoryDef(type, directive || {});
- Object.defineProperty(type, NG_DIR_DEF, {
- get: () => {
- if (ngDirectiveDef === null) {
- // `directive` can be null in the case of abstract directives as a base class
- // that use `@Directive()` with no selector. In that case, pass empty object to the
- // `directiveMetadata` function instead of null.
- const meta = getDirectiveMetadata(type, directive || {});
- ngDirectiveDef =
- getCompilerFacade().compileDirective(angularCoreEnv, meta.sourceMapUrl, meta.metadata);
- }
- return ngDirectiveDef;
- },
- // Make the property configurable in dev mode to allow overriding in tests
- configurable: !!ngDevMode,
- });
- }
- function getDirectiveMetadata(type, metadata) {
- const name = type && type.name;
- const sourceMapUrl = `ng:///${name}/ɵdir.js`;
- const compiler = getCompilerFacade();
- const facade = directiveMetadata(type, metadata);
- facade.typeSourceSpan = compiler.createParseSourceSpan('Directive', name, sourceMapUrl);
- if (facade.usesInheritance) {
- addDirectiveDefToUndecoratedParents(type);
- }
- return { metadata: facade, sourceMapUrl };
- }
- function addDirectiveFactoryDef(type, metadata) {
- let ngFactoryDef = null;
- Object.defineProperty(type, NG_FACTORY_DEF, {
- get: () => {
- if (ngFactoryDef === null) {
- const meta = getDirectiveMetadata(type, metadata);
- const compiler = getCompilerFacade();
- ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${type.name}/ɵfac.js`, Object.assign(Object.assign({}, meta.metadata), { injectFn: 'directiveInject', target: compiler.R3FactoryTarget.Directive }));
- }
- return ngFactoryDef;
- },
- // Make the property configurable in dev mode to allow overriding in tests
- configurable: !!ngDevMode,
- });
- }
- function extendsDirectlyFromObject(type) {
- return Object.getPrototypeOf(type.prototype) === Object.prototype;
- }
- /**
- * Extract the `R3DirectiveMetadata` for a particular directive (either a `Directive` or a
- * `Component`).
- */
- function directiveMetadata(type, metadata) {
- // Reflect inputs and outputs.
- const reflect = getReflect();
- const propMetadata = reflect.ownPropMetadata(type);
- return {
- name: type.name,
- type: type,
- typeArgumentCount: 0,
- selector: metadata.selector !== undefined ? metadata.selector : null,
- deps: reflectDependencies(type),
- host: metadata.host || EMPTY_OBJ,
- propMetadata: propMetadata,
- inputs: metadata.inputs || EMPTY_ARRAY,
- outputs: metadata.outputs || EMPTY_ARRAY,
- queries: extractQueriesMetadata(type, propMetadata, isContentQuery),
- lifecycle: { usesOnChanges: reflect.hasLifecycleHook(type, 'ngOnChanges') },
- typeSourceSpan: null,
- usesInheritance: !extendsDirectlyFromObject(type),
- exportAs: extractExportAs(metadata.exportAs),
- providers: metadata.providers || null,
- viewQueries: extractQueriesMetadata(type, propMetadata, isViewQuery)
- };
- }
- /**
- * Adds a directive definition to all parent classes of a type that don't have an Angular decorator.
- */
- function addDirectiveDefToUndecoratedParents(type) {
- const objPrototype = Object.prototype;
- let parent = Object.getPrototypeOf(type.prototype).constructor;
- // Go up the prototype until we hit `Object`.
- while (parent && parent !== objPrototype) {
- // Since inheritance works if the class was annotated already, we only need to add
- // the def if there are no annotations and the def hasn't been created already.
- if (!getDirectiveDef(parent) && !getComponentDef(parent) &&
- shouldAddAbstractDirective(parent)) {
- compileDirective(parent, null);
- }
- parent = Object.getPrototypeOf(parent);
- }
- }
- function convertToR3QueryPredicate(selector) {
- return typeof selector === 'string' ? splitByComma(selector) : resolveForwardRef(selector);
- }
- function convertToR3QueryMetadata(propertyName, ann) {
- return {
- propertyName: propertyName,
- predicate: convertToR3QueryPredicate(ann.selector),
- descendants: ann.descendants,
- first: ann.first,
- read: ann.read ? ann.read : null,
- static: !!ann.static
- };
- }
- function extractQueriesMetadata(type, propMetadata, isQueryAnn) {
- const queriesMeta = [];
- for (const field in propMetadata) {
- if (propMetadata.hasOwnProperty(field)) {
- const annotations = propMetadata[field];
- annotations.forEach(ann => {
- if (isQueryAnn(ann)) {
- if (!ann.selector) {
- throw new Error(`Can't construct a query for the property "${field}" of ` +
- `"${stringifyForError(type)}" since the query selector wasn't defined.`);
- }
- if (annotations.some(isInputAnnotation)) {
- throw new Error(`Cannot combine @Input decorators with query decorators`);
- }
- queriesMeta.push(convertToR3QueryMetadata(field, ann));
- }
- });
- }
- }
- return queriesMeta;
- }
- function extractExportAs(exportAs) {
- return exportAs === undefined ? null : splitByComma(exportAs);
- }
- function isContentQuery(value) {
- const name = value.ngMetadataName;
- return name === 'ContentChild' || name === 'ContentChildren';
- }
- function isViewQuery(value) {
- const name = value.ngMetadataName;
- return name === 'ViewChild' || name === 'ViewChildren';
- }
- function isInputAnnotation(value) {
- return value.ngMetadataName === 'Input';
- }
- function splitByComma(value) {
- return value.split(',').map(piece => piece.trim());
- }
- const LIFECYCLE_HOOKS = [
- 'ngOnChanges', 'ngOnInit', 'ngOnDestroy', 'ngDoCheck', 'ngAfterViewInit', 'ngAfterViewChecked',
- 'ngAfterContentInit', 'ngAfterContentChecked'
- ];
- function shouldAddAbstractDirective(type) {
- const reflect = getReflect();
- if (LIFECYCLE_HOOKS.some(hookName => reflect.hasLifecycleHook(type, hookName))) {
- return true;
- }
- const propMetadata = reflect.propMetadata(type);
- for (const field in propMetadata) {
- const annotations = propMetadata[field];
- for (let i = 0; i < annotations.length; i++) {
- const current = annotations[i];
- const metadataName = current.ngMetadataName;
- if (isInputAnnotation(current) || isContentQuery(current) || isViewQuery(current) ||
- metadataName === 'Output' || metadataName === 'HostBinding' ||
- metadataName === 'HostListener') {
- return true;
- }
- }
- }
- return false;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function compilePipe(type, meta) {
- let ngPipeDef = null;
- let ngFactoryDef = null;
- Object.defineProperty(type, NG_FACTORY_DEF, {
- get: () => {
- if (ngFactoryDef === null) {
- const metadata = getPipeMetadata(type, meta);
- const compiler = getCompilerFacade();
- ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${metadata.name}/ɵfac.js`, Object.assign(Object.assign({}, metadata), { injectFn: 'directiveInject', target: compiler.R3FactoryTarget.Pipe }));
- }
- return ngFactoryDef;
- },
- // Make the property configurable in dev mode to allow overriding in tests
- configurable: !!ngDevMode,
- });
- Object.defineProperty(type, NG_PIPE_DEF, {
- get: () => {
- if (ngPipeDef === null) {
- const metadata = getPipeMetadata(type, meta);
- ngPipeDef = getCompilerFacade().compilePipe(angularCoreEnv, `ng:///${metadata.name}/ɵpipe.js`, metadata);
- }
- return ngPipeDef;
- },
- // Make the property configurable in dev mode to allow overriding in tests
- configurable: !!ngDevMode,
- });
- }
- function getPipeMetadata(type, meta) {
- return {
- type: type,
- typeArgumentCount: 0,
- name: type.name,
- deps: reflectDependencies(type),
- pipeName: meta.name,
- pure: meta.pure !== undefined ? meta.pure : true
- };
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ɵ0$d = (dir = {}) => dir, ɵ1$2 = (type, meta) => SWITCH_COMPILE_DIRECTIVE(type, meta);
- /**
- * Type of the Directive metadata.
- *
- * @publicApi
- */
- const Directive = makeDecorator('Directive', ɵ0$d, undefined, undefined, ɵ1$2);
- const ɵ2$1 = (c = {}) => (Object.assign({ changeDetection: ChangeDetectionStrategy.Default }, c)), ɵ3$1 = (type, meta) => SWITCH_COMPILE_COMPONENT(type, meta);
- /**
- * Component decorator and metadata.
- *
- * @Annotation
- * @publicApi
- */
- const Component = makeDecorator('Component', ɵ2$1, Directive, undefined, ɵ3$1);
- const ɵ4 = (p) => (Object.assign({ pure: true }, p)), ɵ5 = (type, meta) => SWITCH_COMPILE_PIPE(type, meta);
- /**
- * @Annotation
- * @publicApi
- */
- const Pipe = makeDecorator('Pipe', ɵ4, undefined, undefined, ɵ5);
- const ɵ6 = (bindingPropertyName) => ({ bindingPropertyName });
- /**
- * @Annotation
- * @publicApi
- */
- const Input = makePropDecorator('Input', ɵ6);
- const ɵ7 = (bindingPropertyName) => ({ bindingPropertyName });
- /**
- * @Annotation
- * @publicApi
- */
- const Output = makePropDecorator('Output', ɵ7);
- const ɵ8 = (hostPropertyName) => ({ hostPropertyName });
- /**
- * @Annotation
- * @publicApi
- */
- const HostBinding = makePropDecorator('HostBinding', ɵ8);
- const ɵ9 = (eventName, args) => ({ eventName, args });
- /**
- * Decorator that binds a DOM event to a host listener and supplies configuration metadata.
- * Angular invokes the supplied handler method when the host element emits the specified event,
- * and updates the bound element with the result.
- *
- * If the handler method returns false, applies `preventDefault` on the bound element.
- *
- * @usageNotes
- *
- * The following example declares a directive
- * that attaches a click listener to a button and counts clicks.
- *
- * ```ts
- * @Directive({selector: 'button[counting]'})
- * class CountClicks {
- * numberOfClicks = 0;
- *
- * @HostListener('click', ['$event.target'])
- * onClick(btn) {
- * console.log('button', btn, 'number of clicks:', this.numberOfClicks++);
- * }
- * }
- *
- * @Component({
- * selector: 'app',
- * template: '<button counting>Increment</button>',
- * })
- * class App {}
- *
- * ```
- *
- * The following example registers another DOM event handler that listens for key-press events.
- * ``` ts
- * import { HostListener, Component } from "@angular/core";
- *
- * @Component({
- * selector: 'app',
- * template: `<h1>Hello, you have pressed keys {{counter}} number of times!</h1> Press any key to
- * increment the counter.
- * <button (click)="resetCounter()">Reset Counter</button>`
- * })
- * class AppComponent {
- * counter = 0;
- * @HostListener('window:keydown', ['$event'])
- * handleKeyDown(event: KeyboardEvent) {
- * this.counter++;
- * }
- * resetCounter() {
- * this.counter = 0;
- * }
- * }
- * ```
- *
- * @Annotation
- * @publicApi
- */
- const HostListener = makePropDecorator('HostListener', ɵ9);
- const SWITCH_COMPILE_COMPONENT__POST_R3__ = compileComponent;
- const SWITCH_COMPILE_DIRECTIVE__POST_R3__ = compileDirective;
- const SWITCH_COMPILE_PIPE__POST_R3__ = compilePipe;
- const SWITCH_COMPILE_COMPONENT__PRE_R3__ = noop;
- const SWITCH_COMPILE_DIRECTIVE__PRE_R3__ = noop;
- const SWITCH_COMPILE_PIPE__PRE_R3__ = noop;
- const SWITCH_COMPILE_COMPONENT = SWITCH_COMPILE_COMPONENT__POST_R3__;
- const SWITCH_COMPILE_DIRECTIVE = SWITCH_COMPILE_DIRECTIVE__POST_R3__;
- const SWITCH_COMPILE_PIPE = SWITCH_COMPILE_PIPE__POST_R3__;
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ɵ0$e = (ngModule) => ngModule, ɵ1$3 =
- /**
- * Decorator that marks the following class as an NgModule, and supplies
- * configuration metadata for it.
- *
- * * The `declarations` and `entryComponents` options configure the compiler
- * with information about what belongs to the NgModule.
- * * The `providers` options configures the NgModule's injector to provide
- * dependencies the NgModule members.
- * * The `imports` and `exports` options bring in members from other modules, and make
- * this module's members available to others.
- */
- (type, meta) => SWITCH_COMPILE_NGMODULE(type, meta);
- /**
- * @Annotation
- * @publicApi
- */
- const NgModule = makeDecorator('NgModule', ɵ0$e, undefined, undefined, ɵ1$3);
- function preR3NgModuleCompile(moduleType, metadata) {
- let imports = (metadata && metadata.imports) || [];
- if (metadata && metadata.exports) {
- imports = [...imports, metadata.exports];
- }
- moduleType.ɵinj = ɵɵdefineInjector({
- factory: convertInjectableProviderToFactory(moduleType, { useClass: moduleType }),
- providers: metadata && metadata.providers,
- imports: imports,
- });
- }
- const SWITCH_COMPILE_NGMODULE__POST_R3__ = compileNgModule;
- const SWITCH_COMPILE_NGMODULE__PRE_R3__ = preR3NgModuleCompile;
- const SWITCH_COMPILE_NGMODULE = SWITCH_COMPILE_NGMODULE__POST_R3__;
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * A [DI token](guide/glossary#di-token "DI token definition") that you can use to provide
- * one or more initialization functions.
- *
- * The provided functions are injected at application startup and executed during
- * app initialization. If any of these functions returns a Promise, initialization
- * does not complete until the Promise is resolved.
- *
- * You can, for example, create a factory function that loads language data
- * or an external configuration, and provide that function to the `APP_INITIALIZER` token.
- * The function is executed during the application bootstrap process,
- * and the needed data is available on startup.
- *
- * @see `ApplicationInitStatus`
- *
- * @publicApi
- */
- const APP_INITIALIZER = new InjectionToken('Application Initializer');
- /**
- * A class that reflects the state of running {@link APP_INITIALIZER} functions.
- *
- * @publicApi
- */
- class ApplicationInitStatus {
- constructor(appInits) {
- this.appInits = appInits;
- this.resolve = noop;
- this.reject = noop;
- this.initialized = false;
- this.done = false;
- this.donePromise = new Promise((res, rej) => {
- this.resolve = res;
- this.reject = rej;
- });
- }
- /** @internal */
- runInitializers() {
- if (this.initialized) {
- return;
- }
- const asyncInitPromises = [];
- const complete = () => {
- this.done = true;
- this.resolve();
- };
- if (this.appInits) {
- for (let i = 0; i < this.appInits.length; i++) {
- const initResult = this.appInits[i]();
- if (isPromise(initResult)) {
- asyncInitPromises.push(initResult);
- }
- }
- }
- Promise.all(asyncInitPromises)
- .then(() => {
- complete();
- })
- .catch(e => {
- this.reject(e);
- });
- if (asyncInitPromises.length === 0) {
- complete();
- }
- this.initialized = true;
- }
- }
- ApplicationInitStatus.ɵfac = function ApplicationInitStatus_Factory(t) { return new (t || ApplicationInitStatus)(ɵɵinject(APP_INITIALIZER, 8)); };
- ApplicationInitStatus.ɵprov = ɵɵdefineInjectable({ token: ApplicationInitStatus, factory: ApplicationInitStatus.ɵfac });
- ApplicationInitStatus.ctorParameters = () => [
- { type: Array, decorators: [{ type: Inject, args: [APP_INITIALIZER,] }, { type: Optional }] }
- ];
- /*@__PURE__*/ (function () { setClassMetadata(ApplicationInitStatus, [{
- type: Injectable
- }], function () { return [{ type: Array, decorators: [{
- type: Inject,
- args: [APP_INITIALIZER]
- }, {
- type: Optional
- }] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * A [DI token](guide/glossary#di-token "DI token definition") representing a unique string ID, used
- * primarily for prefixing application attributes and CSS styles when
- * {@link ViewEncapsulation#Emulated ViewEncapsulation.Emulated} is being used.
- *
- * BY default, the value is randomly generated and assigned to the application by Angular.
- * To provide a custom ID value, use a DI provider <!-- TODO: provider --> to configure
- * the root {@link Injector} that uses this token.
- *
- * @publicApi
- */
- const APP_ID = new InjectionToken('AppId');
- function _appIdRandomProviderFactory() {
- return `${_randomChar()}${_randomChar()}${_randomChar()}`;
- }
- /**
- * Providers that generate a random `APP_ID_TOKEN`.
- * @publicApi
- */
- const APP_ID_RANDOM_PROVIDER = {
- provide: APP_ID,
- useFactory: _appIdRandomProviderFactory,
- deps: [],
- };
- function _randomChar() {
- return String.fromCharCode(97 + Math.floor(Math.random() * 25));
- }
- /**
- * A function that is executed when a platform is initialized.
- * @publicApi
- */
- const PLATFORM_INITIALIZER = new InjectionToken('Platform Initializer');
- /**
- * A token that indicates an opaque platform ID.
- * @publicApi
- */
- const PLATFORM_ID = new InjectionToken('Platform ID');
- /**
- * A [DI token](guide/glossary#di-token "DI token definition") that provides a set of callbacks to
- * be called for every component that is bootstrapped.
- *
- * Each callback must take a `ComponentRef` instance and return nothing.
- *
- * `(componentRef: ComponentRef) => void`
- *
- * @publicApi
- */
- const APP_BOOTSTRAP_LISTENER = new InjectionToken('appBootstrapListener');
- /**
- * A [DI token](guide/glossary#di-token "DI token definition") that indicates the root directory of
- * the application
- * @publicApi
- */
- const PACKAGE_ROOT_URL = new InjectionToken('Application Packages Root URL');
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class Console {
- log(message) {
- // tslint:disable-next-line:no-console
- console.log(message);
- }
- // Note: for reporting errors use `DOM.logError()` as it is platform specific
- warn(message) {
- // tslint:disable-next-line:no-console
- console.warn(message);
- }
- }
- Console.ɵfac = function Console_Factory(t) { return new (t || Console)(); };
- Console.ɵprov = ɵɵdefineInjectable({ token: Console, factory: Console.ɵfac });
- /*@__PURE__*/ (function () { setClassMetadata(Console, [{
- type: Injectable
- }], null, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Provide this token to set the locale of your application.
- * It is used for i18n extraction, by i18n pipes (DatePipe, I18nPluralPipe, CurrencyPipe,
- * DecimalPipe and PercentPipe) and by ICU expressions.
- *
- * See the [i18n guide](guide/i18n#setting-up-locale) for more information.
- *
- * @usageNotes
- * ### Example
- *
- * ```typescript
- * import { LOCALE_ID } from '@angular/core';
- * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
- * import { AppModule } from './app/app.module';
- *
- * platformBrowserDynamic().bootstrapModule(AppModule, {
- * providers: [{provide: LOCALE_ID, useValue: 'en-US' }]
- * });
- * ```
- *
- * @publicApi
- */
- const LOCALE_ID$1 = new InjectionToken('LocaleId');
- /**
- * Provide this token to set the default currency code your application uses for
- * CurrencyPipe when there is no currency code passed into it. This is only used by
- * CurrencyPipe and has no relation to locale currency. Defaults to USD if not configured.
- *
- * See the [i18n guide](guide/i18n#setting-up-locale) for more information.
- *
- * <div class="alert is-helpful">
- *
- * **Deprecation notice:**
- *
- * The default currency code is currently always `USD` but this is deprecated from v9.
- *
- * **In v10 the default currency code will be taken from the current locale.**
- *
- * If you need the previous behavior then set it by creating a `DEFAULT_CURRENCY_CODE` provider in
- * your application `NgModule`:
- *
- * ```ts
- * {provide: DEFAULT_CURRENCY_CODE, useValue: 'USD'}
- * ```
- *
- * </div>
- *
- * @usageNotes
- * ### Example
- *
- * ```typescript
- * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
- * import { AppModule } from './app/app.module';
- *
- * platformBrowserDynamic().bootstrapModule(AppModule, {
- * providers: [{provide: DEFAULT_CURRENCY_CODE, useValue: 'EUR' }]
- * });
- * ```
- *
- * @publicApi
- */
- const DEFAULT_CURRENCY_CODE = new InjectionToken('DefaultCurrencyCode');
- /**
- * Use this token at bootstrap to provide the content of your translation file (`xtb`,
- * `xlf` or `xlf2`) when you want to translate your application in another language.
- *
- * See the [i18n guide](guide/i18n#merge) for more information.
- *
- * @usageNotes
- * ### Example
- *
- * ```typescript
- * import { TRANSLATIONS } from '@angular/core';
- * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
- * import { AppModule } from './app/app.module';
- *
- * // content of your translation file
- * const translations = '....';
- *
- * platformBrowserDynamic().bootstrapModule(AppModule, {
- * providers: [{provide: TRANSLATIONS, useValue: translations }]
- * });
- * ```
- *
- * @publicApi
- */
- const TRANSLATIONS = new InjectionToken('Translations');
- /**
- * Provide this token at bootstrap to set the format of your {@link TRANSLATIONS}: `xtb`,
- * `xlf` or `xlf2`.
- *
- * See the [i18n guide](guide/i18n#merge) for more information.
- *
- * @usageNotes
- * ### Example
- *
- * ```typescript
- * import { TRANSLATIONS_FORMAT } from '@angular/core';
- * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
- * import { AppModule } from './app/app.module';
- *
- * platformBrowserDynamic().bootstrapModule(AppModule, {
- * providers: [{provide: TRANSLATIONS_FORMAT, useValue: 'xlf' }]
- * });
- * ```
- *
- * @publicApi
- */
- const TRANSLATIONS_FORMAT = new InjectionToken('TranslationsFormat');
- /**
- * Use this enum at bootstrap as an option of `bootstrapModule` to define the strategy
- * that the compiler should use in case of missing translations:
- * - Error: throw if you have missing translations.
- * - Warning (default): show a warning in the console and/or shell.
- * - Ignore: do nothing.
- *
- * See the [i18n guide](guide/i18n#missing-translation) for more information.
- *
- * @usageNotes
- * ### Example
- * ```typescript
- * import { MissingTranslationStrategy } from '@angular/core';
- * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
- * import { AppModule } from './app/app.module';
- *
- * platformBrowserDynamic().bootstrapModule(AppModule, {
- * missingTranslation: MissingTranslationStrategy.Error
- * });
- * ```
- *
- * @publicApi
- */
- var MissingTranslationStrategy;
- (function (MissingTranslationStrategy) {
- MissingTranslationStrategy[MissingTranslationStrategy["Error"] = 0] = "Error";
- MissingTranslationStrategy[MissingTranslationStrategy["Warning"] = 1] = "Warning";
- MissingTranslationStrategy[MissingTranslationStrategy["Ignore"] = 2] = "Ignore";
- })(MissingTranslationStrategy || (MissingTranslationStrategy = {}));
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const SWITCH_IVY_ENABLED__POST_R3__ = true;
- const SWITCH_IVY_ENABLED__PRE_R3__ = false;
- const ivyEnabled = SWITCH_IVY_ENABLED__POST_R3__;
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Combination of NgModuleFactory and ComponentFactorys.
- *
- * @publicApi
- */
- class ModuleWithComponentFactories {
- constructor(ngModuleFactory, componentFactories) {
- this.ngModuleFactory = ngModuleFactory;
- this.componentFactories = componentFactories;
- }
- }
- function _throwError() {
- throw new Error(`Runtime compiler is not loaded`);
- }
- const Compiler_compileModuleSync__PRE_R3__ = _throwError;
- const Compiler_compileModuleSync__POST_R3__ = function (moduleType) {
- return new NgModuleFactory$1(moduleType);
- };
- const Compiler_compileModuleSync = Compiler_compileModuleSync__POST_R3__;
- const Compiler_compileModuleAsync__PRE_R3__ = _throwError;
- const Compiler_compileModuleAsync__POST_R3__ = function (moduleType) {
- return Promise.resolve(Compiler_compileModuleSync__POST_R3__(moduleType));
- };
- const Compiler_compileModuleAsync = Compiler_compileModuleAsync__POST_R3__;
- const Compiler_compileModuleAndAllComponentsSync__PRE_R3__ = _throwError;
- const Compiler_compileModuleAndAllComponentsSync__POST_R3__ = function (moduleType) {
- const ngModuleFactory = Compiler_compileModuleSync__POST_R3__(moduleType);
- const moduleDef = getNgModuleDef(moduleType);
- const componentFactories = maybeUnwrapFn(moduleDef.declarations)
- .reduce((factories, declaration) => {
- const componentDef = getComponentDef(declaration);
- componentDef && factories.push(new ComponentFactory$1(componentDef));
- return factories;
- }, []);
- return new ModuleWithComponentFactories(ngModuleFactory, componentFactories);
- };
- const Compiler_compileModuleAndAllComponentsSync = Compiler_compileModuleAndAllComponentsSync__POST_R3__;
- const Compiler_compileModuleAndAllComponentsAsync__PRE_R3__ = _throwError;
- const Compiler_compileModuleAndAllComponentsAsync__POST_R3__ = function (moduleType) {
- return Promise.resolve(Compiler_compileModuleAndAllComponentsSync__POST_R3__(moduleType));
- };
- const Compiler_compileModuleAndAllComponentsAsync = Compiler_compileModuleAndAllComponentsAsync__POST_R3__;
- /**
- * Low-level service for running the angular compiler during runtime
- * to create {@link ComponentFactory}s, which
- * can later be used to create and render a Component instance.
- *
- * Each `@NgModule` provides an own `Compiler` to its injector,
- * that will use the directives/pipes of the ng module for compilation
- * of components.
- *
- * @publicApi
- */
- class Compiler {
- constructor() {
- /**
- * Compiles the given NgModule and all of its components. All templates of the components listed
- * in `entryComponents` have to be inlined.
- */
- this.compileModuleSync = Compiler_compileModuleSync;
- /**
- * Compiles the given NgModule and all of its components
- */
- this.compileModuleAsync = Compiler_compileModuleAsync;
- /**
- * Same as {@link #compileModuleSync} but also creates ComponentFactories for all components.
- */
- this.compileModuleAndAllComponentsSync = Compiler_compileModuleAndAllComponentsSync;
- /**
- * Same as {@link #compileModuleAsync} but also creates ComponentFactories for all components.
- */
- this.compileModuleAndAllComponentsAsync = Compiler_compileModuleAndAllComponentsAsync;
- }
- /**
- * Clears all caches.
- */
- clearCache() { }
- /**
- * Clears the cache for the given component/ngModule.
- */
- clearCacheFor(type) { }
- /**
- * Returns the id for a given NgModule, if one is defined and known to the compiler.
- */
- getModuleId(moduleType) {
- return undefined;
- }
- }
- Compiler.ɵfac = function Compiler_Factory(t) { return new (t || Compiler)(); };
- Compiler.ɵprov = ɵɵdefineInjectable({ token: Compiler, factory: Compiler.ɵfac });
- /*@__PURE__*/ (function () { setClassMetadata(Compiler, [{
- type: Injectable
- }], function () { return []; }, null); })();
- /**
- * Token to provide CompilerOptions in the platform injector.
- *
- * @publicApi
- */
- const COMPILER_OPTIONS = new InjectionToken('compilerOptions');
- /**
- * A factory for creating a Compiler
- *
- * @publicApi
- */
- class CompilerFactory {
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const promise = (() => Promise.resolve(0))();
- function scheduleMicroTask(fn) {
- if (typeof Zone === 'undefined') {
- // use promise to schedule microTask instead of use Zone
- promise.then(() => {
- fn && fn.apply(null, null);
- });
- }
- else {
- Zone.current.scheduleMicroTask('scheduleMicrotask', fn);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function getNativeRequestAnimationFrame() {
- let nativeRequestAnimationFrame = _global['requestAnimationFrame'];
- let nativeCancelAnimationFrame = _global['cancelAnimationFrame'];
- if (typeof Zone !== 'undefined' && nativeRequestAnimationFrame && nativeCancelAnimationFrame) {
- // use unpatched version of requestAnimationFrame(native delegate) if possible
- // to avoid another Change detection
- const unpatchedRequestAnimationFrame = nativeRequestAnimationFrame[Zone.__symbol__('OriginalDelegate')];
- if (unpatchedRequestAnimationFrame) {
- nativeRequestAnimationFrame = unpatchedRequestAnimationFrame;
- }
- const unpatchedCancelAnimationFrame = nativeCancelAnimationFrame[Zone.__symbol__('OriginalDelegate')];
- if (unpatchedCancelAnimationFrame) {
- nativeCancelAnimationFrame = unpatchedCancelAnimationFrame;
- }
- }
- return { nativeRequestAnimationFrame, nativeCancelAnimationFrame };
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * An injectable service for executing work inside or outside of the Angular zone.
- *
- * The most common use of this service is to optimize performance when starting a work consisting of
- * one or more asynchronous tasks that don't require UI updates or error handling to be handled by
- * Angular. Such tasks can be kicked off via {@link #runOutsideAngular} and if needed, these tasks
- * can reenter the Angular zone via {@link #run}.
- *
- * <!-- TODO: add/fix links to:
- * - docs explaining zones and the use of zones in Angular and change-detection
- * - link to runOutsideAngular/run (throughout this file!)
- * -->
- *
- * @usageNotes
- * ### Example
- *
- * ```
- * import {Component, NgZone} from '@angular/core';
- * import {NgIf} from '@angular/common';
- *
- * @Component({
- * selector: 'ng-zone-demo',
- * template: `
- * <h2>Demo: NgZone</h2>
- *
- * <p>Progress: {{progress}}%</p>
- * <p *ngIf="progress >= 100">Done processing {{label}} of Angular zone!</p>
- *
- * <button (click)="processWithinAngularZone()">Process within Angular zone</button>
- * <button (click)="processOutsideOfAngularZone()">Process outside of Angular zone</button>
- * `,
- * })
- * export class NgZoneDemo {
- * progress: number = 0;
- * label: string;
- *
- * constructor(private _ngZone: NgZone) {}
- *
- * // Loop inside the Angular zone
- * // so the UI DOES refresh after each setTimeout cycle
- * processWithinAngularZone() {
- * this.label = 'inside';
- * this.progress = 0;
- * this._increaseProgress(() => console.log('Inside Done!'));
- * }
- *
- * // Loop outside of the Angular zone
- * // so the UI DOES NOT refresh after each setTimeout cycle
- * processOutsideOfAngularZone() {
- * this.label = 'outside';
- * this.progress = 0;
- * this._ngZone.runOutsideAngular(() => {
- * this._increaseProgress(() => {
- * // reenter the Angular zone and display done
- * this._ngZone.run(() => { console.log('Outside Done!'); });
- * });
- * });
- * }
- *
- * _increaseProgress(doneCallback: () => void) {
- * this.progress += 1;
- * console.log(`Current progress: ${this.progress}%`);
- *
- * if (this.progress < 100) {
- * window.setTimeout(() => this._increaseProgress(doneCallback), 10);
- * } else {
- * doneCallback();
- * }
- * }
- * }
- * ```
- *
- * @publicApi
- */
- class NgZone {
- constructor({ enableLongStackTrace = false, shouldCoalesceEventChangeDetection = false }) {
- this.hasPendingMacrotasks = false;
- this.hasPendingMicrotasks = false;
- /**
- * Whether there are no outstanding microtasks or macrotasks.
- */
- this.isStable = true;
- /**
- * Notifies when code enters Angular Zone. This gets fired first on VM Turn.
- */
- this.onUnstable = new EventEmitter(false);
- /**
- * Notifies when there is no more microtasks enqueued in the current VM Turn.
- * This is a hint for Angular to do change detection, which may enqueue more microtasks.
- * For this reason this event can fire multiple times per VM Turn.
- */
- this.onMicrotaskEmpty = new EventEmitter(false);
- /**
- * Notifies when the last `onMicrotaskEmpty` has run and there are no more microtasks, which
- * implies we are about to relinquish VM turn.
- * This event gets called just once.
- */
- this.onStable = new EventEmitter(false);
- /**
- * Notifies that an error has been delivered.
- */
- this.onError = new EventEmitter(false);
- if (typeof Zone == 'undefined') {
- throw new Error(`In this configuration Angular requires Zone.js`);
- }
- Zone.assertZonePatched();
- const self = this;
- self._nesting = 0;
- self._outer = self._inner = Zone.current;
- if (Zone['TaskTrackingZoneSpec']) {
- self._inner = self._inner.fork(new Zone['TaskTrackingZoneSpec']);
- }
- if (enableLongStackTrace && Zone['longStackTraceZoneSpec']) {
- self._inner = self._inner.fork(Zone['longStackTraceZoneSpec']);
- }
- self.shouldCoalesceEventChangeDetection = shouldCoalesceEventChangeDetection;
- self.lastRequestAnimationFrameId = -1;
- self.nativeRequestAnimationFrame = getNativeRequestAnimationFrame().nativeRequestAnimationFrame;
- forkInnerZoneWithAngularBehavior(self);
- }
- static isInAngularZone() {
- return Zone.current.get('isAngularZone') === true;
- }
- static assertInAngularZone() {
- if (!NgZone.isInAngularZone()) {
- throw new Error('Expected to be in Angular Zone, but it is not!');
- }
- }
- static assertNotInAngularZone() {
- if (NgZone.isInAngularZone()) {
- throw new Error('Expected to not be in Angular Zone, but it is!');
- }
- }
- /**
- * Executes the `fn` function synchronously within the Angular zone and returns value returned by
- * the function.
- *
- * Running functions via `run` allows you to reenter Angular zone from a task that was executed
- * outside of the Angular zone (typically started via {@link #runOutsideAngular}).
- *
- * Any future tasks or microtasks scheduled from within this function will continue executing from
- * within the Angular zone.
- *
- * If a synchronous error happens it will be rethrown and not reported via `onError`.
- */
- run(fn, applyThis, applyArgs) {
- return this._inner.run(fn, applyThis, applyArgs);
- }
- /**
- * Executes the `fn` function synchronously within the Angular zone as a task and returns value
- * returned by the function.
- *
- * Running functions via `run` allows you to reenter Angular zone from a task that was executed
- * outside of the Angular zone (typically started via {@link #runOutsideAngular}).
- *
- * Any future tasks or microtasks scheduled from within this function will continue executing from
- * within the Angular zone.
- *
- * If a synchronous error happens it will be rethrown and not reported via `onError`.
- */
- runTask(fn, applyThis, applyArgs, name) {
- const zone = this._inner;
- const task = zone.scheduleEventTask('NgZoneEvent: ' + name, fn, EMPTY_PAYLOAD, noop, noop);
- try {
- return zone.runTask(task, applyThis, applyArgs);
- }
- finally {
- zone.cancelTask(task);
- }
- }
- /**
- * Same as `run`, except that synchronous errors are caught and forwarded via `onError` and not
- * rethrown.
- */
- runGuarded(fn, applyThis, applyArgs) {
- return this._inner.runGuarded(fn, applyThis, applyArgs);
- }
- /**
- * Executes the `fn` function synchronously in Angular's parent zone and returns value returned by
- * the function.
- *
- * Running functions via {@link #runOutsideAngular} allows you to escape Angular's zone and do
- * work that
- * doesn't trigger Angular change-detection or is subject to Angular's error handling.
- *
- * Any future tasks or microtasks scheduled from within this function will continue executing from
- * outside of the Angular zone.
- *
- * Use {@link #run} to reenter the Angular zone and do work that updates the application model.
- */
- runOutsideAngular(fn) {
- return this._outer.run(fn);
- }
- }
- const EMPTY_PAYLOAD = {};
- function checkStable(zone) {
- if (zone._nesting == 0 && !zone.hasPendingMicrotasks && !zone.isStable) {
- try {
- zone._nesting++;
- zone.onMicrotaskEmpty.emit(null);
- }
- finally {
- zone._nesting--;
- if (!zone.hasPendingMicrotasks) {
- try {
- zone.runOutsideAngular(() => zone.onStable.emit(null));
- }
- finally {
- zone.isStable = true;
- }
- }
- }
- }
- }
- function delayChangeDetectionForEvents(zone) {
- if (zone.lastRequestAnimationFrameId !== -1) {
- return;
- }
- zone.lastRequestAnimationFrameId = zone.nativeRequestAnimationFrame.call(_global, () => {
- // This is a work around for https://github.com/angular/angular/issues/36839.
- // The core issue is that when event coalescing is enabled it is possible for microtasks
- // to get flushed too early (As is the case with `Promise.then`) between the
- // coalescing eventTasks.
- //
- // To workaround this we schedule a "fake" eventTask before we process the
- // coalescing eventTasks. The benefit of this is that the "fake" container eventTask
- // will prevent the microtasks queue from getting drained in between the coalescing
- // eventTask execution.
- if (!zone.fakeTopEventTask) {
- zone.fakeTopEventTask = Zone.root.scheduleEventTask('fakeTopEventTask', () => {
- zone.lastRequestAnimationFrameId = -1;
- updateMicroTaskStatus(zone);
- checkStable(zone);
- }, undefined, () => { }, () => { });
- }
- zone.fakeTopEventTask.invoke();
- });
- updateMicroTaskStatus(zone);
- }
- function forkInnerZoneWithAngularBehavior(zone) {
- const delayChangeDetectionForEventsDelegate = () => {
- delayChangeDetectionForEvents(zone);
- };
- const maybeDelayChangeDetection = !!zone.shouldCoalesceEventChangeDetection &&
- zone.nativeRequestAnimationFrame && delayChangeDetectionForEventsDelegate;
- zone._inner = zone._inner.fork({
- name: 'angular',
- properties: { 'isAngularZone': true, 'maybeDelayChangeDetection': maybeDelayChangeDetection },
- onInvokeTask: (delegate, current, target, task, applyThis, applyArgs) => {
- try {
- onEnter(zone);
- return delegate.invokeTask(target, task, applyThis, applyArgs);
- }
- finally {
- if (maybeDelayChangeDetection && task.type === 'eventTask') {
- maybeDelayChangeDetection();
- }
- onLeave(zone);
- }
- },
- onInvoke: (delegate, current, target, callback, applyThis, applyArgs, source) => {
- try {
- onEnter(zone);
- return delegate.invoke(target, callback, applyThis, applyArgs, source);
- }
- finally {
- onLeave(zone);
- }
- },
- onHasTask: (delegate, current, target, hasTaskState) => {
- delegate.hasTask(target, hasTaskState);
- if (current === target) {
- // We are only interested in hasTask events which originate from our zone
- // (A child hasTask event is not interesting to us)
- if (hasTaskState.change == 'microTask') {
- zone._hasPendingMicrotasks = hasTaskState.microTask;
- updateMicroTaskStatus(zone);
- checkStable(zone);
- }
- else if (hasTaskState.change == 'macroTask') {
- zone.hasPendingMacrotasks = hasTaskState.macroTask;
- }
- }
- },
- onHandleError: (delegate, current, target, error) => {
- delegate.handleError(target, error);
- zone.runOutsideAngular(() => zone.onError.emit(error));
- return false;
- }
- });
- }
- function updateMicroTaskStatus(zone) {
- if (zone._hasPendingMicrotasks ||
- (zone.shouldCoalesceEventChangeDetection && zone.lastRequestAnimationFrameId !== -1)) {
- zone.hasPendingMicrotasks = true;
- }
- else {
- zone.hasPendingMicrotasks = false;
- }
- }
- function onEnter(zone) {
- zone._nesting++;
- if (zone.isStable) {
- zone.isStable = false;
- zone.onUnstable.emit(null);
- }
- }
- function onLeave(zone) {
- zone._nesting--;
- checkStable(zone);
- }
- /**
- * Provides a noop implementation of `NgZone` which does nothing. This zone requires explicit calls
- * to framework to perform rendering.
- */
- class NoopNgZone {
- constructor() {
- this.hasPendingMicrotasks = false;
- this.hasPendingMacrotasks = false;
- this.isStable = true;
- this.onUnstable = new EventEmitter();
- this.onMicrotaskEmpty = new EventEmitter();
- this.onStable = new EventEmitter();
- this.onError = new EventEmitter();
- }
- run(fn, applyThis, applyArgs) {
- return fn.apply(applyThis, applyArgs);
- }
- runGuarded(fn, applyThis, applyArgs) {
- return fn.apply(applyThis, applyArgs);
- }
- runOutsideAngular(fn) {
- return fn();
- }
- runTask(fn, applyThis, applyArgs, name) {
- return fn.apply(applyThis, applyArgs);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * The Testability service provides testing hooks that can be accessed from
- * the browser and by services such as Protractor. Each bootstrapped Angular
- * application on the page will have an instance of Testability.
- * @publicApi
- */
- class Testability {
- constructor(_ngZone) {
- this._ngZone = _ngZone;
- this._pendingCount = 0;
- this._isZoneStable = true;
- /**
- * Whether any work was done since the last 'whenStable' callback. This is
- * useful to detect if this could have potentially destabilized another
- * component while it is stabilizing.
- * @internal
- */
- this._didWork = false;
- this._callbacks = [];
- this.taskTrackingZone = null;
- this._watchAngularEvents();
- _ngZone.run(() => {
- this.taskTrackingZone =
- typeof Zone == 'undefined' ? null : Zone.current.get('TaskTrackingZone');
- });
- }
- _watchAngularEvents() {
- this._ngZone.onUnstable.subscribe({
- next: () => {
- this._didWork = true;
- this._isZoneStable = false;
- }
- });
- this._ngZone.runOutsideAngular(() => {
- this._ngZone.onStable.subscribe({
- next: () => {
- NgZone.assertNotInAngularZone();
- scheduleMicroTask(() => {
- this._isZoneStable = true;
- this._runCallbacksIfReady();
- });
- }
- });
- });
- }
- /**
- * Increases the number of pending request
- * @deprecated pending requests are now tracked with zones.
- */
- increasePendingRequestCount() {
- this._pendingCount += 1;
- this._didWork = true;
- return this._pendingCount;
- }
- /**
- * Decreases the number of pending request
- * @deprecated pending requests are now tracked with zones
- */
- decreasePendingRequestCount() {
- this._pendingCount -= 1;
- if (this._pendingCount < 0) {
- throw new Error('pending async requests below zero');
- }
- this._runCallbacksIfReady();
- return this._pendingCount;
- }
- /**
- * Whether an associated application is stable
- */
- isStable() {
- return this._isZoneStable && this._pendingCount === 0 && !this._ngZone.hasPendingMacrotasks;
- }
- _runCallbacksIfReady() {
- if (this.isStable()) {
- // Schedules the call backs in a new frame so that it is always async.
- scheduleMicroTask(() => {
- while (this._callbacks.length !== 0) {
- let cb = this._callbacks.pop();
- clearTimeout(cb.timeoutId);
- cb.doneCb(this._didWork);
- }
- this._didWork = false;
- });
- }
- else {
- // Still not stable, send updates.
- let pending = this.getPendingTasks();
- this._callbacks = this._callbacks.filter((cb) => {
- if (cb.updateCb && cb.updateCb(pending)) {
- clearTimeout(cb.timeoutId);
- return false;
- }
- return true;
- });
- this._didWork = true;
- }
- }
- getPendingTasks() {
- if (!this.taskTrackingZone) {
- return [];
- }
- // Copy the tasks data so that we don't leak tasks.
- return this.taskTrackingZone.macroTasks.map((t) => {
- return {
- source: t.source,
- // From TaskTrackingZone:
- // https://github.com/angular/zone.js/blob/master/lib/zone-spec/task-tracking.ts#L40
- creationLocation: t.creationLocation,
- data: t.data
- };
- });
- }
- addCallback(cb, timeout, updateCb) {
- let timeoutId = -1;
- if (timeout && timeout > 0) {
- timeoutId = setTimeout(() => {
- this._callbacks = this._callbacks.filter((cb) => cb.timeoutId !== timeoutId);
- cb(this._didWork, this.getPendingTasks());
- }, timeout);
- }
- this._callbacks.push({ doneCb: cb, timeoutId: timeoutId, updateCb: updateCb });
- }
- /**
- * Wait for the application to be stable with a timeout. If the timeout is reached before that
- * happens, the callback receives a list of the macro tasks that were pending, otherwise null.
- *
- * @param doneCb The callback to invoke when Angular is stable or the timeout expires
- * whichever comes first.
- * @param timeout Optional. The maximum time to wait for Angular to become stable. If not
- * specified, whenStable() will wait forever.
- * @param updateCb Optional. If specified, this callback will be invoked whenever the set of
- * pending macrotasks changes. If this callback returns true doneCb will not be invoked
- * and no further updates will be issued.
- */
- whenStable(doneCb, timeout, updateCb) {
- if (updateCb && !this.taskTrackingZone) {
- throw new Error('Task tracking zone is required when passing an update callback to ' +
- 'whenStable(). Is "zone.js/dist/task-tracking.js" loaded?');
- }
- // These arguments are 'Function' above to keep the public API simple.
- this.addCallback(doneCb, timeout, updateCb);
- this._runCallbacksIfReady();
- }
- /**
- * Get the number of pending requests
- * @deprecated pending requests are now tracked with zones
- */
- getPendingRequestCount() {
- return this._pendingCount;
- }
- /**
- * Find providers by name
- * @param using The root element to search from
- * @param provider The name of binding variable
- * @param exactMatch Whether using exactMatch
- */
- findProviders(using, provider, exactMatch) {
- // TODO(juliemr): implement.
- return [];
- }
- }
- Testability.ɵfac = function Testability_Factory(t) { return new (t || Testability)(ɵɵinject(NgZone)); };
- Testability.ɵprov = ɵɵdefineInjectable({ token: Testability, factory: Testability.ɵfac });
- Testability.ctorParameters = () => [
- { type: NgZone }
- ];
- /*@__PURE__*/ (function () { setClassMetadata(Testability, [{
- type: Injectable
- }], function () { return [{ type: NgZone }]; }, null); })();
- /**
- * A global registry of {@link Testability} instances for specific elements.
- * @publicApi
- */
- class TestabilityRegistry {
- constructor() {
- /** @internal */
- this._applications = new Map();
- _testabilityGetter.addToWindow(this);
- }
- /**
- * Registers an application with a testability hook so that it can be tracked
- * @param token token of application, root element
- * @param testability Testability hook
- */
- registerApplication(token, testability) {
- this._applications.set(token, testability);
- }
- /**
- * Unregisters an application.
- * @param token token of application, root element
- */
- unregisterApplication(token) {
- this._applications.delete(token);
- }
- /**
- * Unregisters all applications
- */
- unregisterAllApplications() {
- this._applications.clear();
- }
- /**
- * Get a testability hook associated with the application
- * @param elem root element
- */
- getTestability(elem) {
- return this._applications.get(elem) || null;
- }
- /**
- * Get all registered testabilities
- */
- getAllTestabilities() {
- return Array.from(this._applications.values());
- }
- /**
- * Get all registered applications(root elements)
- */
- getAllRootElements() {
- return Array.from(this._applications.keys());
- }
- /**
- * Find testability of a node in the Tree
- * @param elem node
- * @param findInAncestors whether finding testability in ancestors if testability was not found in
- * current node
- */
- findTestabilityInTree(elem, findInAncestors = true) {
- return _testabilityGetter.findTestabilityInTree(this, elem, findInAncestors);
- }
- }
- TestabilityRegistry.ɵfac = function TestabilityRegistry_Factory(t) { return new (t || TestabilityRegistry)(); };
- TestabilityRegistry.ɵprov = ɵɵdefineInjectable({ token: TestabilityRegistry, factory: TestabilityRegistry.ɵfac });
- TestabilityRegistry.ctorParameters = () => [];
- /*@__PURE__*/ (function () { setClassMetadata(TestabilityRegistry, [{
- type: Injectable
- }], function () { return []; }, null); })();
- class _NoopGetTestability {
- addToWindow(registry) { }
- findTestabilityInTree(registry, elem, findInAncestors) {
- return null;
- }
- }
- /**
- * Set the {@link GetTestability} implementation used by the Angular testing framework.
- * @publicApi
- */
- function setTestabilityGetter(getter) {
- _testabilityGetter = getter;
- }
- let _testabilityGetter = new _NoopGetTestability();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * This file is used to control if the default rendering pipeline should be `ViewEngine` or `Ivy`.
- *
- * For more information on how to run and debug tests with either Ivy or View Engine (legacy),
- * please see [BAZEL.md](./docs/BAZEL.md).
- */
- let _devMode = true;
- let _runModeLocked = false;
- /**
- * Returns whether Angular is in development mode. After called once,
- * the value is locked and won't change any more.
- *
- * By default, this is true, unless a user calls `enableProdMode` before calling this.
- *
- * @publicApi
- */
- function isDevMode() {
- _runModeLocked = true;
- return _devMode;
- }
- /**
- * Disable Angular's development mode, which turns off assertions and other
- * checks within the framework.
- *
- * One important assertion this disables verifies that a change detection pass
- * does not result in additional changes to any bindings (also known as
- * unidirectional data flow).
- *
- * @publicApi
- */
- function enableProdMode() {
- if (_runModeLocked) {
- throw new Error('Cannot enable prod mode after platform setup.');
- }
- _devMode = false;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- let _platform;
- let compileNgModuleFactory = compileNgModuleFactory__POST_R3__;
- function compileNgModuleFactory__PRE_R3__(injector, options, moduleType) {
- const compilerFactory = injector.get(CompilerFactory);
- const compiler = compilerFactory.createCompiler([options]);
- return compiler.compileModuleAsync(moduleType);
- }
- function compileNgModuleFactory__POST_R3__(injector, options, moduleType) {
- ngDevMode && assertNgModuleType(moduleType);
- const moduleFactory = new NgModuleFactory$1(moduleType);
- // All of the logic below is irrelevant for AOT-compiled code.
- if (typeof ngJitMode !== 'undefined' && !ngJitMode) {
- return Promise.resolve(moduleFactory);
- }
- const compilerOptions = injector.get(COMPILER_OPTIONS, []).concat(options);
- // Configure the compiler to use the provided options. This call may fail when multiple modules
- // are bootstrapped with incompatible options, as a component can only be compiled according to
- // a single set of options.
- setJitOptions({
- defaultEncapsulation: _lastDefined(compilerOptions.map(opts => opts.defaultEncapsulation)),
- preserveWhitespaces: _lastDefined(compilerOptions.map(opts => opts.preserveWhitespaces)),
- });
- if (isComponentResourceResolutionQueueEmpty()) {
- return Promise.resolve(moduleFactory);
- }
- const compilerProviders = _mergeArrays(compilerOptions.map(o => o.providers));
- // In case there are no compiler providers, we just return the module factory as
- // there won't be any resource loader. This can happen with Ivy, because AOT compiled
- // modules can be still passed through "bootstrapModule". In that case we shouldn't
- // unnecessarily require the JIT compiler.
- if (compilerProviders.length === 0) {
- return Promise.resolve(moduleFactory);
- }
- const compiler = getCompilerFacade();
- const compilerInjector = Injector.create({ providers: compilerProviders });
- const resourceLoader = compilerInjector.get(compiler.ResourceLoader);
- // The resource loader can also return a string while the "resolveComponentResources"
- // always expects a promise. Therefore we need to wrap the returned value in a promise.
- return resolveComponentResources(url => Promise.resolve(resourceLoader.get(url)))
- .then(() => moduleFactory);
- }
- // the `window.ng` global utilities are only available in non-VE versions of
- // Angular. The function switch below will make sure that the code is not
- // included into Angular when PRE mode is active.
- function publishDefaultGlobalUtils__PRE_R3__() { }
- function publishDefaultGlobalUtils__POST_R3__() {
- ngDevMode && publishDefaultGlobalUtils();
- }
- let publishDefaultGlobalUtils$1 = publishDefaultGlobalUtils__POST_R3__;
- let isBoundToModule = isBoundToModule__POST_R3__;
- function isBoundToModule__PRE_R3__(cf) {
- return cf instanceof ComponentFactoryBoundToModule;
- }
- function isBoundToModule__POST_R3__(cf) {
- return cf.isBoundToModule;
- }
- const ALLOW_MULTIPLE_PLATFORMS = new InjectionToken('AllowMultipleToken');
- /**
- * A token for third-party components that can register themselves with NgProbe.
- *
- * @publicApi
- */
- class NgProbeToken {
- constructor(name, token) {
- this.name = name;
- this.token = token;
- }
- }
- /**
- * Creates a platform.
- * Platforms must be created on launch using this function.
- *
- * @publicApi
- */
- function createPlatform(injector) {
- if (_platform && !_platform.destroyed &&
- !_platform.injector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {
- throw new Error('There can be only one platform. Destroy the previous one to create a new one.');
- }
- publishDefaultGlobalUtils$1();
- _platform = injector.get(PlatformRef);
- const inits = injector.get(PLATFORM_INITIALIZER, null);
- if (inits)
- inits.forEach((init) => init());
- return _platform;
- }
- /**
- * Creates a factory for a platform. Can be used to provide or override `Providers` specific to
- * your applciation's runtime needs, such as `PLATFORM_INITIALIZER` and `PLATFORM_ID`.
- * @param parentPlatformFactory Another platform factory to modify. Allows you to compose factories
- * to build up configurations that might be required by different libraries or parts of the
- * application.
- * @param name Identifies the new platform factory.
- * @param providers A set of dependency providers for platforms created with the new factory.
- *
- * @publicApi
- */
- function createPlatformFactory(parentPlatformFactory, name, providers = []) {
- const desc = `Platform: ${name}`;
- const marker = new InjectionToken(desc);
- return (extraProviders = []) => {
- let platform = getPlatform();
- if (!platform || platform.injector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {
- if (parentPlatformFactory) {
- parentPlatformFactory(providers.concat(extraProviders).concat({ provide: marker, useValue: true }));
- }
- else {
- const injectedProviders = providers.concat(extraProviders).concat({ provide: marker, useValue: true }, {
- provide: INJECTOR_SCOPE,
- useValue: 'platform'
- });
- createPlatform(Injector.create({ providers: injectedProviders, name: desc }));
- }
- }
- return assertPlatform(marker);
- };
- }
- /**
- * Checks that there is currently a platform that contains the given token as a provider.
- *
- * @publicApi
- */
- function assertPlatform(requiredToken) {
- const platform = getPlatform();
- if (!platform) {
- throw new Error('No platform exists!');
- }
- if (!platform.injector.get(requiredToken, null)) {
- throw new Error('A platform with a different configuration has been created. Please destroy it first.');
- }
- return platform;
- }
- /**
- * Destroys the current Angular platform and all Angular applications on the page.
- * Destroys all modules and listeners registered with the platform.
- *
- * @publicApi
- */
- function destroyPlatform() {
- if (_platform && !_platform.destroyed) {
- _platform.destroy();
- }
- }
- /**
- * Returns the current platform.
- *
- * @publicApi
- */
- function getPlatform() {
- return _platform && !_platform.destroyed ? _platform : null;
- }
- /**
- * The Angular platform is the entry point for Angular on a web page.
- * Each page has exactly one platform. Services (such as reflection) which are common
- * to every Angular application running on the page are bound in its scope.
- * A page's platform is initialized implicitly when a platform is created using a platform
- * factory such as `PlatformBrowser`, or explicitly by calling the `createPlatform()` function.
- *
- * @publicApi
- */
- class PlatformRef {
- /** @internal */
- constructor(_injector) {
- this._injector = _injector;
- this._modules = [];
- this._destroyListeners = [];
- this._destroyed = false;
- }
- /**
- * Creates an instance of an `@NgModule` for the given platform for offline compilation.
- *
- * @usageNotes
- *
- * The following example creates the NgModule for a browser platform.
- *
- * ```typescript
- * my_module.ts:
- *
- * @NgModule({
- * imports: [BrowserModule]
- * })
- * class MyModule {}
- *
- * main.ts:
- * import {MyModuleNgFactory} from './my_module.ngfactory';
- * import {platformBrowser} from '@angular/platform-browser';
- *
- * let moduleRef = platformBrowser().bootstrapModuleFactory(MyModuleNgFactory);
- * ```
- */
- bootstrapModuleFactory(moduleFactory, options) {
- // Note: We need to create the NgZone _before_ we instantiate the module,
- // as instantiating the module creates some providers eagerly.
- // So we create a mini parent injector that just contains the new NgZone and
- // pass that as parent to the NgModuleFactory.
- const ngZoneOption = options ? options.ngZone : undefined;
- const ngZoneEventCoalescing = (options && options.ngZoneEventCoalescing) || false;
- const ngZone = getNgZone(ngZoneOption, ngZoneEventCoalescing);
- const providers = [{ provide: NgZone, useValue: ngZone }];
- // Attention: Don't use ApplicationRef.run here,
- // as we want to be sure that all possible constructor calls are inside `ngZone.run`!
- return ngZone.run(() => {
- const ngZoneInjector = Injector.create({ providers: providers, parent: this.injector, name: moduleFactory.moduleType.name });
- const moduleRef = moduleFactory.create(ngZoneInjector);
- const exceptionHandler = moduleRef.injector.get(ErrorHandler, null);
- if (!exceptionHandler) {
- throw new Error('No ErrorHandler. Is platform module (BrowserModule) included?');
- }
- ngZone.runOutsideAngular(() => {
- const subscription = ngZone.onError.subscribe({
- next: (error) => {
- exceptionHandler.handleError(error);
- }
- });
- moduleRef.onDestroy(() => {
- remove(this._modules, moduleRef);
- subscription.unsubscribe();
- });
- });
- return _callAndReportToErrorHandler(exceptionHandler, ngZone, () => {
- const initStatus = moduleRef.injector.get(ApplicationInitStatus);
- initStatus.runInitializers();
- return initStatus.donePromise.then(() => {
- if (ivyEnabled) {
- // If the `LOCALE_ID` provider is defined at bootstrap then we set the value for ivy
- const localeId = moduleRef.injector.get(LOCALE_ID$1, DEFAULT_LOCALE_ID);
- setLocaleId(localeId || DEFAULT_LOCALE_ID);
- }
- this._moduleDoBootstrap(moduleRef);
- return moduleRef;
- });
- });
- });
- }
- /**
- * Creates an instance of an `@NgModule` for a given platform using the given runtime compiler.
- *
- * @usageNotes
- * ### Simple Example
- *
- * ```typescript
- * @NgModule({
- * imports: [BrowserModule]
- * })
- * class MyModule {}
- *
- * let moduleRef = platformBrowser().bootstrapModule(MyModule);
- * ```
- *
- */
- bootstrapModule(moduleType, compilerOptions = []) {
- const options = optionsReducer({}, compilerOptions);
- return compileNgModuleFactory(this.injector, options, moduleType)
- .then(moduleFactory => this.bootstrapModuleFactory(moduleFactory, options));
- }
- _moduleDoBootstrap(moduleRef) {
- const appRef = moduleRef.injector.get(ApplicationRef);
- if (moduleRef._bootstrapComponents.length > 0) {
- moduleRef._bootstrapComponents.forEach(f => appRef.bootstrap(f));
- }
- else if (moduleRef.instance.ngDoBootstrap) {
- moduleRef.instance.ngDoBootstrap(appRef);
- }
- else {
- throw new Error(`The module ${stringify(moduleRef.instance
- .constructor)} was bootstrapped, but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method. ` +
- `Please define one of these.`);
- }
- this._modules.push(moduleRef);
- }
- /**
- * Registers a listener to be called when the platform is destroyed.
- */
- onDestroy(callback) {
- this._destroyListeners.push(callback);
- }
- /**
- * Retrieves the platform {@link Injector}, which is the parent injector for
- * every Angular application on the page and provides singleton providers.
- */
- get injector() {
- return this._injector;
- }
- /**
- * Destroys the current Angular platform and all Angular applications on the page.
- * Destroys all modules and listeners registered with the platform.
- */
- destroy() {
- if (this._destroyed) {
- throw new Error('The platform has already been destroyed!');
- }
- this._modules.slice().forEach(module => module.destroy());
- this._destroyListeners.forEach(listener => listener());
- this._destroyed = true;
- }
- get destroyed() {
- return this._destroyed;
- }
- }
- PlatformRef.ɵfac = function PlatformRef_Factory(t) { return new (t || PlatformRef)(ɵɵinject(Injector)); };
- PlatformRef.ɵprov = ɵɵdefineInjectable({ token: PlatformRef, factory: PlatformRef.ɵfac });
- PlatformRef.ctorParameters = () => [
- { type: Injector }
- ];
- /*@__PURE__*/ (function () { setClassMetadata(PlatformRef, [{
- type: Injectable
- }], function () { return [{ type: Injector }]; }, null); })();
- function getNgZone(ngZoneOption, ngZoneEventCoalescing) {
- let ngZone;
- if (ngZoneOption === 'noop') {
- ngZone = new NoopNgZone();
- }
- else {
- ngZone = (ngZoneOption === 'zone.js' ? undefined : ngZoneOption) || new NgZone({
- enableLongStackTrace: isDevMode(),
- shouldCoalesceEventChangeDetection: ngZoneEventCoalescing
- });
- }
- return ngZone;
- }
- function _callAndReportToErrorHandler(errorHandler, ngZone, callback) {
- try {
- const result = callback();
- if (isPromise(result)) {
- return result.catch((e) => {
- ngZone.runOutsideAngular(() => errorHandler.handleError(e));
- // rethrow as the exception handler might not do it
- throw e;
- });
- }
- return result;
- }
- catch (e) {
- ngZone.runOutsideAngular(() => errorHandler.handleError(e));
- // rethrow as the exception handler might not do it
- throw e;
- }
- }
- function optionsReducer(dst, objs) {
- if (Array.isArray(objs)) {
- dst = objs.reduce(optionsReducer, dst);
- }
- else {
- dst = Object.assign(Object.assign({}, dst), objs);
- }
- return dst;
- }
- /**
- * A reference to an Angular application running on a page.
- *
- * @usageNotes
- *
- * {@a is-stable-examples}
- * ### isStable examples and caveats
- *
- * Note two important points about `isStable`, demonstrated in the examples below:
- * - the application will never be stable if you start any kind
- * of recurrent asynchronous task when the application starts
- * (for example for a polling process, started with a `setInterval`, a `setTimeout`
- * or using RxJS operators like `interval`);
- * - the `isStable` Observable runs outside of the Angular zone.
- *
- * Let's imagine that you start a recurrent task
- * (here incrementing a counter, using RxJS `interval`),
- * and at the same time subscribe to `isStable`.
- *
- * ```
- * constructor(appRef: ApplicationRef) {
- * appRef.isStable.pipe(
- * filter(stable => stable)
- * ).subscribe(() => console.log('App is stable now');
- * interval(1000).subscribe(counter => console.log(counter));
- * }
- * ```
- * In this example, `isStable` will never emit `true`,
- * and the trace "App is stable now" will never get logged.
- *
- * If you want to execute something when the app is stable,
- * you have to wait for the application to be stable
- * before starting your polling process.
- *
- * ```
- * constructor(appRef: ApplicationRef) {
- * appRef.isStable.pipe(
- * first(stable => stable),
- * tap(stable => console.log('App is stable now')),
- * switchMap(() => interval(1000))
- * ).subscribe(counter => console.log(counter));
- * }
- * ```
- * In this example, the trace "App is stable now" will be logged
- * and then the counter starts incrementing every second.
- *
- * Note also that this Observable runs outside of the Angular zone,
- * which means that the code in the subscription
- * to this Observable will not trigger the change detection.
- *
- * Let's imagine that instead of logging the counter value,
- * you update a field of your component
- * and display it in its template.
- *
- * ```
- * constructor(appRef: ApplicationRef) {
- * appRef.isStable.pipe(
- * first(stable => stable),
- * switchMap(() => interval(1000))
- * ).subscribe(counter => this.value = counter);
- * }
- * ```
- * As the `isStable` Observable runs outside the zone,
- * the `value` field will be updated properly,
- * but the template will not be refreshed!
- *
- * You'll have to manually trigger the change detection to update the template.
- *
- * ```
- * constructor(appRef: ApplicationRef, cd: ChangeDetectorRef) {
- * appRef.isStable.pipe(
- * first(stable => stable),
- * switchMap(() => interval(1000))
- * ).subscribe(counter => {
- * this.value = counter;
- * cd.detectChanges();
- * });
- * }
- * ```
- *
- * Or make the subscription callback run inside the zone.
- *
- * ```
- * constructor(appRef: ApplicationRef, zone: NgZone) {
- * appRef.isStable.pipe(
- * first(stable => stable),
- * switchMap(() => interval(1000))
- * ).subscribe(counter => zone.run(() => this.value = counter));
- * }
- * ```
- *
- * @publicApi
- */
- class ApplicationRef {
- /** @internal */
- constructor(_zone, _console, _injector, _exceptionHandler, _componentFactoryResolver, _initStatus) {
- this._zone = _zone;
- this._console = _console;
- this._injector = _injector;
- this._exceptionHandler = _exceptionHandler;
- this._componentFactoryResolver = _componentFactoryResolver;
- this._initStatus = _initStatus;
- /** @internal */
- this._bootstrapListeners = [];
- this._views = [];
- this._runningTick = false;
- this._stable = true;
- /**
- * Get a list of component types registered to this application.
- * This list is populated even before the component is created.
- */
- this.componentTypes = [];
- /**
- * Get a list of components registered to this application.
- */
- this.components = [];
- this._onMicrotaskEmptySubscription = this._zone.onMicrotaskEmpty.subscribe({
- next: () => {
- this._zone.run(() => {
- this.tick();
- });
- }
- });
- const isCurrentlyStable = new rxjs__WEBPACK_IMPORTED_MODULE_0__["Observable"]((observer) => {
- this._stable = this._zone.isStable && !this._zone.hasPendingMacrotasks &&
- !this._zone.hasPendingMicrotasks;
- this._zone.runOutsideAngular(() => {
- observer.next(this._stable);
- observer.complete();
- });
- });
- const isStable = new rxjs__WEBPACK_IMPORTED_MODULE_0__["Observable"]((observer) => {
- // Create the subscription to onStable outside the Angular Zone so that
- // the callback is run outside the Angular Zone.
- let stableSub;
- this._zone.runOutsideAngular(() => {
- stableSub = this._zone.onStable.subscribe(() => {
- NgZone.assertNotInAngularZone();
- // Check whether there are no pending macro/micro tasks in the next tick
- // to allow for NgZone to update the state.
- scheduleMicroTask(() => {
- if (!this._stable && !this._zone.hasPendingMacrotasks &&
- !this._zone.hasPendingMicrotasks) {
- this._stable = true;
- observer.next(true);
- }
- });
- });
- });
- const unstableSub = this._zone.onUnstable.subscribe(() => {
- NgZone.assertInAngularZone();
- if (this._stable) {
- this._stable = false;
- this._zone.runOutsideAngular(() => {
- observer.next(false);
- });
- }
- });
- return () => {
- stableSub.unsubscribe();
- unstableSub.unsubscribe();
- };
- });
- this.isStable =
- Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["merge"])(isCurrentlyStable, isStable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["share"])()));
- }
- /**
- * Bootstrap a new component at the root level of the application.
- *
- * @usageNotes
- * ### Bootstrap process
- *
- * When bootstrapping a new root component into an application, Angular mounts the
- * specified application component onto DOM elements identified by the componentType's
- * selector and kicks off automatic change detection to finish initializing the component.
- *
- * Optionally, a component can be mounted onto a DOM element that does not match the
- * componentType's selector.
- *
- * ### Example
- * {@example core/ts/platform/platform.ts region='longform'}
- */
- bootstrap(componentOrFactory, rootSelectorOrNode) {
- if (!this._initStatus.done) {
- throw new Error('Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.');
- }
- let componentFactory;
- if (componentOrFactory instanceof ComponentFactory) {
- componentFactory = componentOrFactory;
- }
- else {
- componentFactory =
- this._componentFactoryResolver.resolveComponentFactory(componentOrFactory);
- }
- this.componentTypes.push(componentFactory.componentType);
- // Create a factory associated with the current module if it's not bound to some other
- const ngModule = isBoundToModule(componentFactory) ? undefined : this._injector.get(NgModuleRef);
- const selectorOrNode = rootSelectorOrNode || componentFactory.selector;
- const compRef = componentFactory.create(Injector.NULL, [], selectorOrNode, ngModule);
- const nativeElement = compRef.location.nativeElement;
- const testability = compRef.injector.get(Testability, null);
- const testabilityRegistry = testability && compRef.injector.get(TestabilityRegistry);
- if (testability && testabilityRegistry) {
- testabilityRegistry.registerApplication(nativeElement, testability);
- }
- compRef.onDestroy(() => {
- this.detachView(compRef.hostView);
- remove(this.components, compRef);
- if (testabilityRegistry) {
- testabilityRegistry.unregisterApplication(nativeElement);
- }
- });
- this._loadComponent(compRef);
- if (isDevMode()) {
- this._console.log(`Angular is running in development mode. Call enableProdMode() to enable production mode.`);
- }
- return compRef;
- }
- /**
- * Invoke this method to explicitly process change detection and its side-effects.
- *
- * In development mode, `tick()` also performs a second change detection cycle to ensure that no
- * further changes are detected. If additional changes are picked up during this second cycle,
- * bindings in the app have side-effects that cannot be resolved in a single change detection
- * pass.
- * In this case, Angular throws an error, since an Angular application can only have one change
- * detection pass during which all change detection must complete.
- */
- tick() {
- if (this._runningTick) {
- throw new Error('ApplicationRef.tick is called recursively');
- }
- try {
- this._runningTick = true;
- for (let view of this._views) {
- view.detectChanges();
- }
- // Note that we have still left the `isDevMode()` condition in order to avoid
- // creating a breaking change for projects that still use the View Engine.
- if ((typeof ngDevMode === 'undefined' || ngDevMode) && isDevMode()) {
- for (let view of this._views) {
- view.checkNoChanges();
- }
- }
- }
- catch (e) {
- // Attention: Don't rethrow as it could cancel subscriptions to Observables!
- this._zone.runOutsideAngular(() => this._exceptionHandler.handleError(e));
- }
- finally {
- this._runningTick = false;
- }
- }
- /**
- * Attaches a view so that it will be dirty checked.
- * The view will be automatically detached when it is destroyed.
- * This will throw if the view is already attached to a ViewContainer.
- */
- attachView(viewRef) {
- const view = viewRef;
- this._views.push(view);
- view.attachToAppRef(this);
- }
- /**
- * Detaches a view from dirty checking again.
- */
- detachView(viewRef) {
- const view = viewRef;
- remove(this._views, view);
- view.detachFromAppRef();
- }
- _loadComponent(componentRef) {
- this.attachView(componentRef.hostView);
- this.tick();
- this.components.push(componentRef);
- // Get the listeners lazily to prevent DI cycles.
- const listeners = this._injector.get(APP_BOOTSTRAP_LISTENER, []).concat(this._bootstrapListeners);
- listeners.forEach((listener) => listener(componentRef));
- }
- /** @internal */
- ngOnDestroy() {
- this._views.slice().forEach((view) => view.destroy());
- this._onMicrotaskEmptySubscription.unsubscribe();
- }
- /**
- * Returns the number of attached views.
- */
- get viewCount() {
- return this._views.length;
- }
- }
- ApplicationRef.ɵfac = function ApplicationRef_Factory(t) { return new (t || ApplicationRef)(ɵɵinject(NgZone), ɵɵinject(Console), ɵɵinject(Injector), ɵɵinject(ErrorHandler), ɵɵinject(ComponentFactoryResolver), ɵɵinject(ApplicationInitStatus)); };
- ApplicationRef.ɵprov = ɵɵdefineInjectable({ token: ApplicationRef, factory: ApplicationRef.ɵfac });
- ApplicationRef.ctorParameters = () => [
- { type: NgZone },
- { type: Console },
- { type: Injector },
- { type: ErrorHandler },
- { type: ComponentFactoryResolver },
- { type: ApplicationInitStatus }
- ];
- /*@__PURE__*/ (function () { setClassMetadata(ApplicationRef, [{
- type: Injectable
- }], function () { return [{ type: NgZone }, { type: Console }, { type: Injector }, { type: ErrorHandler }, { type: ComponentFactoryResolver }, { type: ApplicationInitStatus }]; }, null); })();
- function remove(list, el) {
- const index = list.indexOf(el);
- if (index > -1) {
- list.splice(index, 1);
- }
- }
- function _lastDefined(args) {
- for (let i = args.length - 1; i >= 0; i--) {
- if (args[i] !== undefined) {
- return args[i];
- }
- }
- return undefined;
- }
- function _mergeArrays(parts) {
- const result = [];
- parts.forEach((part) => part && result.push(...part));
- return result;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Used to load ng module factories.
- *
- * @publicApi
- * @deprecated the `string` form of `loadChildren` is deprecated, and `NgModuleFactoryLoader` is
- * part of its implementation. See `LoadChildren` for more details.
- */
- class NgModuleFactoryLoader {
- }
- function getModuleFactory__PRE_R3__(id) {
- const factory = getRegisteredNgModuleType(id);
- if (!factory)
- throw noModuleError(id);
- return factory;
- }
- function getModuleFactory__POST_R3__(id) {
- const type = getRegisteredNgModuleType(id);
- if (!type)
- throw noModuleError(id);
- return new NgModuleFactory$1(type);
- }
- /**
- * Returns the NgModuleFactory with the given id, if it exists and has been loaded.
- * Factories for modules that do not specify an `id` cannot be retrieved. Throws if the module
- * cannot be found.
- * @publicApi
- */
- const getModuleFactory = getModuleFactory__POST_R3__;
- function noModuleError(id) {
- return new Error(`No module with ID ${id} loaded`);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const _SEPARATOR = '#';
- const FACTORY_CLASS_SUFFIX = 'NgFactory';
- /**
- * Configuration for SystemJsNgModuleLoader.
- * token.
- *
- * @publicApi
- * @deprecated the `string` form of `loadChildren` is deprecated, and `SystemJsNgModuleLoaderConfig`
- * is part of its implementation. See `LoadChildren` for more details.
- */
- class SystemJsNgModuleLoaderConfig {
- }
- const DEFAULT_CONFIG = {
- factoryPathPrefix: '',
- factoryPathSuffix: '.ngfactory',
- };
- /**
- * NgModuleFactoryLoader that uses SystemJS to load NgModuleFactory
- * @publicApi
- * @deprecated the `string` form of `loadChildren` is deprecated, and `SystemJsNgModuleLoader` is
- * part of its implementation. See `LoadChildren` for more details.
- */
- class SystemJsNgModuleLoader {
- constructor(_compiler, config) {
- this._compiler = _compiler;
- this._config = config || DEFAULT_CONFIG;
- }
- load(path) {
- const legacyOfflineMode = !ivyEnabled && this._compiler instanceof Compiler;
- return legacyOfflineMode ? this.loadFactory(path) : this.loadAndCompile(path);
- }
- loadAndCompile(path) {
- let [module, exportName] = path.split(_SEPARATOR);
- if (exportName === undefined) {
- exportName = 'default';
- }
- return __webpack_require__("zn8P")(module)
- .then((module) => module[exportName])
- .then((type) => checkNotEmpty(type, module, exportName))
- .then((type) => this._compiler.compileModuleAsync(type));
- }
- loadFactory(path) {
- let [module, exportName] = path.split(_SEPARATOR);
- let factoryClassSuffix = FACTORY_CLASS_SUFFIX;
- if (exportName === undefined) {
- exportName = 'default';
- factoryClassSuffix = '';
- }
- return __webpack_require__("zn8P")(this._config.factoryPathPrefix + module + this._config.factoryPathSuffix)
- .then((module) => module[exportName + factoryClassSuffix])
- .then((factory) => checkNotEmpty(factory, module, exportName));
- }
- }
- SystemJsNgModuleLoader.ɵfac = function SystemJsNgModuleLoader_Factory(t) { return new (t || SystemJsNgModuleLoader)(ɵɵinject(Compiler), ɵɵinject(SystemJsNgModuleLoaderConfig, 8)); };
- SystemJsNgModuleLoader.ɵprov = ɵɵdefineInjectable({ token: SystemJsNgModuleLoader, factory: SystemJsNgModuleLoader.ɵfac });
- SystemJsNgModuleLoader.ctorParameters = () => [
- { type: Compiler },
- { type: SystemJsNgModuleLoaderConfig, decorators: [{ type: Optional }] }
- ];
- /*@__PURE__*/ (function () { setClassMetadata(SystemJsNgModuleLoader, [{
- type: Injectable
- }], function () { return [{ type: Compiler }, { type: SystemJsNgModuleLoaderConfig, decorators: [{
- type: Optional
- }] }]; }, null); })();
- function checkNotEmpty(value, modulePath, exportName) {
- if (!value) {
- throw new Error(`Cannot find '${exportName}' in '${modulePath}'`);
- }
- return value;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Represents an Angular [view](guide/glossary#view "Definition").
- *
- * @see {@link ChangeDetectorRef#usage-notes Change detection usage}
- *
- * @publicApi
- */
- class ViewRef$1 extends ChangeDetectorRef {
- }
- /**
- * Represents an Angular [view](guide/glossary#view) in a view container.
- * An [embedded view](guide/glossary#view-tree) can be referenced from a component
- * other than the hosting component whose template defines it, or it can be defined
- * independently by a `TemplateRef`.
- *
- * Properties of elements in a view can change, but the structure (number and order) of elements in
- * a view cannot. Change the structure of elements by inserting, moving, or
- * removing nested views in a view container.
- *
- * @see `ViewContainerRef`
- *
- * @usageNotes
- *
- * The following template breaks down into two separate `TemplateRef` instances,
- * an outer one and an inner one.
- *
- * ```
- * Count: {{items.length}}
- * <ul>
- * <li *ngFor="let item of items">{{item}}</li>
- * </ul>
- * ```
- *
- * This is the outer `TemplateRef`:
- *
- * ```
- * Count: {{items.length}}
- * <ul>
- * <ng-template ngFor let-item [ngForOf]="items"></ng-template>
- * </ul>
- * ```
- *
- * This is the inner `TemplateRef`:
- *
- * ```
- * <li>{{item}}</li>
- * ```
- *
- * The outer and inner `TemplateRef` instances are assembled into views as follows:
- *
- * ```
- * <!-- ViewRef: outer-0 -->
- * Count: 2
- * <ul>
- * <ng-template view-container-ref></ng-template>
- * <!-- ViewRef: inner-1 --><li>first</li><!-- /ViewRef: inner-1 -->
- * <!-- ViewRef: inner-2 --><li>second</li><!-- /ViewRef: inner-2 -->
- * </ul>
- * <!-- /ViewRef: outer-0 -->
- * ```
- * @publicApi
- */
- class EmbeddedViewRef extends ViewRef$1 {
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @publicApi
- */
- class DebugEventListener {
- constructor(name, callback) {
- this.name = name;
- this.callback = callback;
- }
- }
- class DebugNode__PRE_R3__ {
- constructor(nativeNode, parent, _debugContext) {
- this.listeners = [];
- this.parent = null;
- this._debugContext = _debugContext;
- this.nativeNode = nativeNode;
- if (parent && parent instanceof DebugElement__PRE_R3__) {
- parent.addChild(this);
- }
- }
- get injector() {
- return this._debugContext.injector;
- }
- get componentInstance() {
- return this._debugContext.component;
- }
- get context() {
- return this._debugContext.context;
- }
- get references() {
- return this._debugContext.references;
- }
- get providerTokens() {
- return this._debugContext.providerTokens;
- }
- }
- class DebugElement__PRE_R3__ extends DebugNode__PRE_R3__ {
- constructor(nativeNode, parent, _debugContext) {
- super(nativeNode, parent, _debugContext);
- this.properties = {};
- this.attributes = {};
- this.classes = {};
- this.styles = {};
- this.childNodes = [];
- this.nativeElement = nativeNode;
- }
- addChild(child) {
- if (child) {
- this.childNodes.push(child);
- child.parent = this;
- }
- }
- removeChild(child) {
- const childIndex = this.childNodes.indexOf(child);
- if (childIndex !== -1) {
- child.parent = null;
- this.childNodes.splice(childIndex, 1);
- }
- }
- insertChildrenAfter(child, newChildren) {
- const siblingIndex = this.childNodes.indexOf(child);
- if (siblingIndex !== -1) {
- this.childNodes.splice(siblingIndex + 1, 0, ...newChildren);
- newChildren.forEach(c => {
- if (c.parent) {
- c.parent.removeChild(c);
- }
- child.parent = this;
- });
- }
- }
- insertBefore(refChild, newChild) {
- const refIndex = this.childNodes.indexOf(refChild);
- if (refIndex === -1) {
- this.addChild(newChild);
- }
- else {
- if (newChild.parent) {
- newChild.parent.removeChild(newChild);
- }
- newChild.parent = this;
- this.childNodes.splice(refIndex, 0, newChild);
- }
- }
- query(predicate) {
- const results = this.queryAll(predicate);
- return results[0] || null;
- }
- queryAll(predicate) {
- const matches = [];
- _queryElementChildren(this, predicate, matches);
- return matches;
- }
- queryAllNodes(predicate) {
- const matches = [];
- _queryNodeChildren(this, predicate, matches);
- return matches;
- }
- get children() {
- return this.childNodes //
- .filter((node) => node instanceof DebugElement__PRE_R3__);
- }
- triggerEventHandler(eventName, eventObj) {
- this.listeners.forEach((listener) => {
- if (listener.name == eventName) {
- listener.callback(eventObj);
- }
- });
- }
- }
- /**
- * @publicApi
- */
- function asNativeElements(debugEls) {
- return debugEls.map((el) => el.nativeElement);
- }
- function _queryElementChildren(element, predicate, matches) {
- element.childNodes.forEach(node => {
- if (node instanceof DebugElement__PRE_R3__) {
- if (predicate(node)) {
- matches.push(node);
- }
- _queryElementChildren(node, predicate, matches);
- }
- });
- }
- function _queryNodeChildren(parentNode, predicate, matches) {
- if (parentNode instanceof DebugElement__PRE_R3__) {
- parentNode.childNodes.forEach(node => {
- if (predicate(node)) {
- matches.push(node);
- }
- if (node instanceof DebugElement__PRE_R3__) {
- _queryNodeChildren(node, predicate, matches);
- }
- });
- }
- }
- class DebugNode__POST_R3__ {
- constructor(nativeNode) {
- this.nativeNode = nativeNode;
- }
- get parent() {
- const parent = this.nativeNode.parentNode;
- return parent ? new DebugElement__POST_R3__(parent) : null;
- }
- get injector() {
- return getInjector(this.nativeNode);
- }
- get componentInstance() {
- const nativeElement = this.nativeNode;
- return nativeElement &&
- (getComponent(nativeElement) || getOwningComponent(nativeElement));
- }
- get context() {
- return getComponent(this.nativeNode) || getContext(this.nativeNode);
- }
- get listeners() {
- return getListeners(this.nativeNode).filter(listener => listener.type === 'dom');
- }
- get references() {
- return getLocalRefs(this.nativeNode);
- }
- get providerTokens() {
- return getInjectionTokens(this.nativeNode);
- }
- }
- class DebugElement__POST_R3__ extends DebugNode__POST_R3__ {
- constructor(nativeNode) {
- ngDevMode && assertDomNode(nativeNode);
- super(nativeNode);
- }
- get nativeElement() {
- return this.nativeNode.nodeType == Node.ELEMENT_NODE ? this.nativeNode : null;
- }
- get name() {
- try {
- const context = loadLContext(this.nativeNode);
- const lView = context.lView;
- const tData = lView[TVIEW].data;
- const tNode = tData[context.nodeIndex];
- return tNode.value;
- }
- catch (e) {
- return this.nativeNode.nodeName;
- }
- }
- /**
- * Gets a map of property names to property values for an element.
- *
- * This map includes:
- * - Regular property bindings (e.g. `[id]="id"`)
- * - Host property bindings (e.g. `host: { '[id]': "id" }`)
- * - Interpolated property bindings (e.g. `id="{{ value }}")
- *
- * It does not include:
- * - input property bindings (e.g. `[myCustomInput]="value"`)
- * - attribute bindings (e.g. `[attr.role]="menu"`)
- */
- get properties() {
- const context = loadLContext(this.nativeNode, false);
- if (context == null) {
- return {};
- }
- const lView = context.lView;
- const tData = lView[TVIEW].data;
- const tNode = tData[context.nodeIndex];
- const properties = {};
- // Collect properties from the DOM.
- copyDomProperties(this.nativeElement, properties);
- // Collect properties from the bindings. This is needed for animation renderer which has
- // synthetic properties which don't get reflected into the DOM.
- collectPropertyBindings(properties, tNode, lView, tData);
- return properties;
- }
- get attributes() {
- const attributes = {};
- const element = this.nativeElement;
- if (!element) {
- return attributes;
- }
- const context = loadLContext(element, false);
- if (context == null) {
- return {};
- }
- const lView = context.lView;
- const tNodeAttrs = lView[TVIEW].data[context.nodeIndex].attrs;
- const lowercaseTNodeAttrs = [];
- // For debug nodes we take the element's attribute directly from the DOM since it allows us
- // to account for ones that weren't set via bindings (e.g. ViewEngine keeps track of the ones
- // that are set through `Renderer2`). The problem is that the browser will lowercase all names,
- // however since we have the attributes already on the TNode, we can preserve the case by going
- // through them once, adding them to the `attributes` map and putting their lower-cased name
- // into an array. Afterwards when we're going through the native DOM attributes, we can check
- // whether we haven't run into an attribute already through the TNode.
- if (tNodeAttrs) {
- let i = 0;
- while (i < tNodeAttrs.length) {
- const attrName = tNodeAttrs[i];
- // Stop as soon as we hit a marker. We only care about the regular attributes. Everything
- // else will be handled below when we read the final attributes off the DOM.
- if (typeof attrName !== 'string')
- break;
- const attrValue = tNodeAttrs[i + 1];
- attributes[attrName] = attrValue;
- lowercaseTNodeAttrs.push(attrName.toLowerCase());
- i += 2;
- }
- }
- const eAttrs = element.attributes;
- for (let i = 0; i < eAttrs.length; i++) {
- const attr = eAttrs[i];
- const lowercaseName = attr.name.toLowerCase();
- // Make sure that we don't assign the same attribute both in its
- // case-sensitive form and the lower-cased one from the browser.
- if (lowercaseTNodeAttrs.indexOf(lowercaseName) === -1) {
- // Save the lowercase name to align the behavior between browsers.
- // IE preserves the case, while all other browser convert it to lower case.
- attributes[lowercaseName] = attr.value;
- }
- }
- return attributes;
- }
- get styles() {
- if (this.nativeElement && this.nativeElement.style) {
- return this.nativeElement.style;
- }
- return {};
- }
- get classes() {
- const result = {};
- const element = this.nativeElement;
- // SVG elements return an `SVGAnimatedString` instead of a plain string for the `className`.
- const className = element.className;
- const classes = className && typeof className !== 'string' ? className.baseVal.split(' ') :
- className.split(' ');
- classes.forEach((value) => result[value] = true);
- return result;
- }
- get childNodes() {
- const childNodes = this.nativeNode.childNodes;
- const children = [];
- for (let i = 0; i < childNodes.length; i++) {
- const element = childNodes[i];
- children.push(getDebugNode__POST_R3__(element));
- }
- return children;
- }
- get children() {
- const nativeElement = this.nativeElement;
- if (!nativeElement)
- return [];
- const childNodes = nativeElement.children;
- const children = [];
- for (let i = 0; i < childNodes.length; i++) {
- const element = childNodes[i];
- children.push(getDebugNode__POST_R3__(element));
- }
- return children;
- }
- query(predicate) {
- const results = this.queryAll(predicate);
- return results[0] || null;
- }
- queryAll(predicate) {
- const matches = [];
- _queryAllR3(this, predicate, matches, true);
- return matches;
- }
- queryAllNodes(predicate) {
- const matches = [];
- _queryAllR3(this, predicate, matches, false);
- return matches;
- }
- triggerEventHandler(eventName, eventObj) {
- const node = this.nativeNode;
- const invokedListeners = [];
- this.listeners.forEach(listener => {
- if (listener.name === eventName) {
- const callback = listener.callback;
- callback.call(node, eventObj);
- invokedListeners.push(callback);
- }
- });
- // We need to check whether `eventListeners` exists, because it's something
- // that Zone.js only adds to `EventTarget` in browser environments.
- if (typeof node.eventListeners === 'function') {
- // Note that in Ivy we wrap event listeners with a call to `event.preventDefault` in some
- // cases. We use '__ngUnwrap__' as a special token that gives us access to the actual event
- // listener.
- node.eventListeners(eventName).forEach((listener) => {
- // In order to ensure that we can detect the special __ngUnwrap__ token described above, we
- // use `toString` on the listener and see if it contains the token. We use this approach to
- // ensure that it still worked with compiled code since it cannot remove or rename string
- // literals. We also considered using a special function name (i.e. if(listener.name ===
- // special)) but that was more cumbersome and we were also concerned the compiled code could
- // strip the name, turning the condition in to ("" === "") and always returning true.
- if (listener.toString().indexOf('__ngUnwrap__') !== -1) {
- const unwrappedListener = listener('__ngUnwrap__');
- return invokedListeners.indexOf(unwrappedListener) === -1 &&
- unwrappedListener.call(node, eventObj);
- }
- });
- }
- }
- }
- function copyDomProperties(element, properties) {
- if (element) {
- // Skip own properties (as those are patched)
- let obj = Object.getPrototypeOf(element);
- const NodePrototype = Node.prototype;
- while (obj !== null && obj !== NodePrototype) {
- const descriptors = Object.getOwnPropertyDescriptors(obj);
- for (let key in descriptors) {
- if (!key.startsWith('__') && !key.startsWith('on')) {
- // don't include properties starting with `__` and `on`.
- // `__` are patched values which should not be included.
- // `on` are listeners which also should not be included.
- const value = element[key];
- if (isPrimitiveValue(value)) {
- properties[key] = value;
- }
- }
- }
- obj = Object.getPrototypeOf(obj);
- }
- }
- }
- function isPrimitiveValue(value) {
- return typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number' ||
- value === null;
- }
- function _queryAllR3(parentElement, predicate, matches, elementsOnly) {
- const context = loadLContext(parentElement.nativeNode, false);
- if (context !== null) {
- const parentTNode = context.lView[TVIEW].data[context.nodeIndex];
- _queryNodeChildrenR3(parentTNode, context.lView, predicate, matches, elementsOnly, parentElement.nativeNode);
- }
- else {
- // If the context is null, then `parentElement` was either created with Renderer2 or native DOM
- // APIs.
- _queryNativeNodeDescendants(parentElement.nativeNode, predicate, matches, elementsOnly);
- }
- }
- /**
- * Recursively match the current TNode against the predicate, and goes on with the next ones.
- *
- * @param tNode the current TNode
- * @param lView the LView of this TNode
- * @param predicate the predicate to match
- * @param matches the list of positive matches
- * @param elementsOnly whether only elements should be searched
- * @param rootNativeNode the root native node on which predicate should not be matched
- */
- function _queryNodeChildrenR3(tNode, lView, predicate, matches, elementsOnly, rootNativeNode) {
- ngDevMode && assertTNodeForLView(tNode, lView);
- const nativeNode = getNativeByTNodeOrNull(tNode, lView);
- // For each type of TNode, specific logic is executed.
- if (tNode.type & (3 /* AnyRNode */ | 8 /* ElementContainer */)) {
- // Case 1: the TNode is an element
- // The native node has to be checked.
- _addQueryMatchR3(nativeNode, predicate, matches, elementsOnly, rootNativeNode);
- if (isComponentHost(tNode)) {
- // If the element is the host of a component, then all nodes in its view have to be processed.
- // Note: the component's content (tNode.child) will be processed from the insertion points.
- const componentView = getComponentLViewByIndex(tNode.index, lView);
- if (componentView && componentView[TVIEW].firstChild) {
- _queryNodeChildrenR3(componentView[TVIEW].firstChild, componentView, predicate, matches, elementsOnly, rootNativeNode);
- }
- }
- else {
- if (tNode.child) {
- // Otherwise, its children have to be processed.
- _queryNodeChildrenR3(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);
- }
- // We also have to query the DOM directly in order to catch elements inserted through
- // Renderer2. Note that this is __not__ optimal, because we're walking similar trees multiple
- // times. ViewEngine could do it more efficiently, because all the insertions go through
- // Renderer2, however that's not the case in Ivy. This approach is being used because:
- // 1. Matching the ViewEngine behavior would mean potentially introducing a depedency
- // from `Renderer2` to Ivy which could bring Ivy code into ViewEngine.
- // 2. We would have to make `Renderer3` "know" about debug nodes.
- // 3. It allows us to capture nodes that were inserted directly via the DOM.
- nativeNode && _queryNativeNodeDescendants(nativeNode, predicate, matches, elementsOnly);
- }
- // In all cases, if a dynamic container exists for this node, each view inside it has to be
- // processed.
- const nodeOrContainer = lView[tNode.index];
- if (isLContainer(nodeOrContainer)) {
- _queryNodeChildrenInContainerR3(nodeOrContainer, predicate, matches, elementsOnly, rootNativeNode);
- }
- }
- else if (tNode.type & 4 /* Container */) {
- // Case 2: the TNode is a container
- // The native node has to be checked.
- const lContainer = lView[tNode.index];
- _addQueryMatchR3(lContainer[NATIVE], predicate, matches, elementsOnly, rootNativeNode);
- // Each view inside the container has to be processed.
- _queryNodeChildrenInContainerR3(lContainer, predicate, matches, elementsOnly, rootNativeNode);
- }
- else if (tNode.type & 16 /* Projection */) {
- // Case 3: the TNode is a projection insertion point (i.e. a <ng-content>).
- // The nodes projected at this location all need to be processed.
- const componentView = lView[DECLARATION_COMPONENT_VIEW];
- const componentHost = componentView[T_HOST];
- const head = componentHost.projection[tNode.projection];
- if (Array.isArray(head)) {
- for (let nativeNode of head) {
- _addQueryMatchR3(nativeNode, predicate, matches, elementsOnly, rootNativeNode);
- }
- }
- else if (head) {
- const nextLView = componentView[PARENT];
- const nextTNode = nextLView[TVIEW].data[head.index];
- _queryNodeChildrenR3(nextTNode, nextLView, predicate, matches, elementsOnly, rootNativeNode);
- }
- }
- else if (tNode.child) {
- // Case 4: the TNode is a view.
- _queryNodeChildrenR3(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);
- }
- // We don't want to go to the next sibling of the root node.
- if (rootNativeNode !== nativeNode) {
- // To determine the next node to be processed, we need to use the next or the projectionNext
- // link, depending on whether the current node has been projected.
- const nextTNode = (tNode.flags & 4 /* isProjected */) ? tNode.projectionNext : tNode.next;
- if (nextTNode) {
- _queryNodeChildrenR3(nextTNode, lView, predicate, matches, elementsOnly, rootNativeNode);
- }
- }
- }
- /**
- * Process all TNodes in a given container.
- *
- * @param lContainer the container to be processed
- * @param predicate the predicate to match
- * @param matches the list of positive matches
- * @param elementsOnly whether only elements should be searched
- * @param rootNativeNode the root native node on which predicate should not be matched
- */
- function _queryNodeChildrenInContainerR3(lContainer, predicate, matches, elementsOnly, rootNativeNode) {
- for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
- const childView = lContainer[i];
- const firstChild = childView[TVIEW].firstChild;
- if (firstChild) {
- _queryNodeChildrenR3(firstChild, childView, predicate, matches, elementsOnly, rootNativeNode);
- }
- }
- }
- /**
- * Match the current native node against the predicate.
- *
- * @param nativeNode the current native node
- * @param predicate the predicate to match
- * @param matches the list of positive matches
- * @param elementsOnly whether only elements should be searched
- * @param rootNativeNode the root native node on which predicate should not be matched
- */
- function _addQueryMatchR3(nativeNode, predicate, matches, elementsOnly, rootNativeNode) {
- if (rootNativeNode !== nativeNode) {
- const debugNode = getDebugNode$1(nativeNode);
- if (!debugNode) {
- return;
- }
- // Type of the "predicate and "matches" array are set based on the value of
- // the "elementsOnly" parameter. TypeScript is not able to properly infer these
- // types with generics, so we manually cast the parameters accordingly.
- if (elementsOnly && debugNode instanceof DebugElement__POST_R3__ && predicate(debugNode) &&
- matches.indexOf(debugNode) === -1) {
- matches.push(debugNode);
- }
- else if (!elementsOnly && predicate(debugNode) &&
- matches.indexOf(debugNode) === -1) {
- matches.push(debugNode);
- }
- }
- }
- /**
- * Match all the descendants of a DOM node against a predicate.
- *
- * @param nativeNode the current native node
- * @param predicate the predicate to match
- * @param matches the list where matches are stored
- * @param elementsOnly whether only elements should be searched
- */
- function _queryNativeNodeDescendants(parentNode, predicate, matches, elementsOnly) {
- const nodes = parentNode.childNodes;
- const length = nodes.length;
- for (let i = 0; i < length; i++) {
- const node = nodes[i];
- const debugNode = getDebugNode$1(node);
- if (debugNode) {
- if (elementsOnly && debugNode instanceof DebugElement__POST_R3__ && predicate(debugNode) &&
- matches.indexOf(debugNode) === -1) {
- matches.push(debugNode);
- }
- else if (!elementsOnly && predicate(debugNode) &&
- matches.indexOf(debugNode) === -1) {
- matches.push(debugNode);
- }
- _queryNativeNodeDescendants(node, predicate, matches, elementsOnly);
- }
- }
- }
- /**
- * Iterates through the property bindings for a given node and generates
- * a map of property names to values. This map only contains property bindings
- * defined in templates, not in host bindings.
- */
- function collectPropertyBindings(properties, tNode, lView, tData) {
- let bindingIndexes = tNode.propertyBindings;
- if (bindingIndexes !== null) {
- for (let i = 0; i < bindingIndexes.length; i++) {
- const bindingIndex = bindingIndexes[i];
- const propMetadata = tData[bindingIndex];
- const metadataParts = propMetadata.split(INTERPOLATION_DELIMITER);
- const propertyName = metadataParts[0];
- if (metadataParts.length > 1) {
- let value = metadataParts[1];
- for (let j = 1; j < metadataParts.length - 1; j++) {
- value += renderStringify(lView[bindingIndex + j - 1]) + metadataParts[j + 1];
- }
- properties[propertyName] = value;
- }
- else {
- properties[propertyName] = lView[bindingIndex];
- }
- }
- }
- }
- // Need to keep the nodes in a global Map so that multiple angular apps are supported.
- const _nativeNodeToDebugNode = new Map();
- function getDebugNode__PRE_R3__(nativeNode) {
- return _nativeNodeToDebugNode.get(nativeNode) || null;
- }
- const NG_DEBUG_PROPERTY = '__ng_debug__';
- function getDebugNode__POST_R3__(nativeNode) {
- if (nativeNode instanceof Node) {
- if (!(nativeNode.hasOwnProperty(NG_DEBUG_PROPERTY))) {
- nativeNode[NG_DEBUG_PROPERTY] = nativeNode.nodeType == Node.ELEMENT_NODE ?
- new DebugElement__POST_R3__(nativeNode) :
- new DebugNode__POST_R3__(nativeNode);
- }
- return nativeNode[NG_DEBUG_PROPERTY];
- }
- return null;
- }
- /**
- * @publicApi
- */
- const getDebugNode$1 = getDebugNode__POST_R3__;
- function getDebugNodeR2__PRE_R3__(nativeNode) {
- return getDebugNode__PRE_R3__(nativeNode);
- }
- function getDebugNodeR2__POST_R3__(_nativeNode) {
- return null;
- }
- const getDebugNodeR2 = getDebugNodeR2__POST_R3__;
- function getAllDebugNodes() {
- return Array.from(_nativeNodeToDebugNode.values());
- }
- function indexDebugNode(node) {
- _nativeNodeToDebugNode.set(node.nativeNode, node);
- }
- function removeDebugNodeFromIndex(node) {
- _nativeNodeToDebugNode.delete(node.nativeNode);
- }
- /**
- * @publicApi
- */
- const DebugNode = DebugNode__POST_R3__;
- /**
- * @publicApi
- */
- const DebugElement = DebugElement__POST_R3__;
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const _CORE_PLATFORM_PROVIDERS = [
- // Set a default platform name for platforms that don't set it explicitly.
- { provide: PLATFORM_ID, useValue: 'unknown' },
- { provide: PlatformRef, deps: [Injector] },
- { provide: TestabilityRegistry, deps: [] },
- { provide: Console, deps: [] },
- ];
- /**
- * This platform has to be included in any other platform
- *
- * @publicApi
- */
- const platformCore = createPlatformFactory(null, 'core', _CORE_PLATFORM_PROVIDERS);
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function _iterableDiffersFactory() {
- return defaultIterableDiffers;
- }
- function _keyValueDiffersFactory() {
- return defaultKeyValueDiffers;
- }
- function _localeFactory(locale) {
- locale = locale || getGlobalLocale();
- if (ivyEnabled) {
- setLocaleId(locale);
- }
- return locale;
- }
- /**
- * Work out the locale from the potential global properties.
- *
- * * Closure Compiler: use `goog.LOCALE`.
- * * Ivy enabled: use `$localize.locale`
- */
- function getGlobalLocale() {
- if (typeof ngI18nClosureMode !== 'undefined' && ngI18nClosureMode &&
- typeof goog !== 'undefined' && goog.LOCALE !== 'en') {
- // * The default `goog.LOCALE` value is `en`, while Angular used `en-US`.
- // * In order to preserve backwards compatibility, we use Angular default value over
- // Closure Compiler's one.
- return goog.LOCALE;
- }
- else {
- // KEEP `typeof $localize !== 'undefined' && $localize.locale` IN SYNC WITH THE LOCALIZE
- // COMPILE-TIME INLINER.
- //
- // * During compile time inlining of translations the expression will be replaced
- // with a string literal that is the current locale. Other forms of this expression are not
- // guaranteed to be replaced.
- //
- // * During runtime translation evaluation, the developer is required to set `$localize.locale`
- // if required, or just to provide their own `LOCALE_ID` provider.
- return (ivyEnabled && typeof $localize !== 'undefined' && $localize.locale) ||
- DEFAULT_LOCALE_ID;
- }
- }
- const ɵ0$f = USD_CURRENCY_CODE;
- /**
- * A built-in [dependency injection token](guide/glossary#di-token)
- * that is used to configure the root injector for bootstrapping.
- */
- const APPLICATION_MODULE_PROVIDERS = [
- {
- provide: ApplicationRef,
- useClass: ApplicationRef,
- deps: [NgZone, Console, Injector, ErrorHandler, ComponentFactoryResolver, ApplicationInitStatus]
- },
- { provide: SCHEDULER, deps: [NgZone], useFactory: zoneSchedulerFactory },
- {
- provide: ApplicationInitStatus,
- useClass: ApplicationInitStatus,
- deps: [[new Optional(), APP_INITIALIZER]]
- },
- { provide: Compiler, useClass: Compiler, deps: [] },
- APP_ID_RANDOM_PROVIDER,
- { provide: IterableDiffers, useFactory: _iterableDiffersFactory, deps: [] },
- { provide: KeyValueDiffers, useFactory: _keyValueDiffersFactory, deps: [] },
- {
- provide: LOCALE_ID$1,
- useFactory: _localeFactory,
- deps: [[new Inject(LOCALE_ID$1), new Optional(), new SkipSelf()]]
- },
- { provide: DEFAULT_CURRENCY_CODE, useValue: ɵ0$f },
- ];
- /**
- * Schedule work at next available slot.
- *
- * In Ivy this is just `requestAnimationFrame`. For compatibility reasons when bootstrapped
- * using `platformRef.bootstrap` we need to use `NgZone.onStable` as the scheduling mechanism.
- * This overrides the scheduling mechanism in Ivy to `NgZone.onStable`.
- *
- * @param ngZone NgZone to use for scheduling.
- */
- function zoneSchedulerFactory(ngZone) {
- let queue = [];
- ngZone.onStable.subscribe(() => {
- while (queue.length) {
- queue.pop()();
- }
- });
- return function (fn) {
- queue.push(fn);
- };
- }
- /**
- * Configures the root injector for an app with
- * providers of `@angular/core` dependencies that `ApplicationRef` needs
- * to bootstrap components.
- *
- * Re-exported by `BrowserModule`, which is included automatically in the root
- * `AppModule` when you create a new app with the CLI `new` command.
- *
- * @publicApi
- */
- class ApplicationModule {
- // Inject ApplicationRef to make it eager...
- constructor(appRef) { }
- }
- ApplicationModule.ɵmod = ɵɵdefineNgModule({ type: ApplicationModule });
- ApplicationModule.ɵinj = ɵɵdefineInjector({ factory: function ApplicationModule_Factory(t) { return new (t || ApplicationModule)(ɵɵinject(ApplicationRef)); }, providers: APPLICATION_MODULE_PROVIDERS });
- ApplicationModule.ctorParameters = () => [
- { type: ApplicationRef }
- ];
- /*@__PURE__*/ (function () { setClassMetadata(ApplicationModule, [{
- type: NgModule,
- args: [{ providers: APPLICATION_MODULE_PROVIDERS }]
- }], function () { return [{ type: ApplicationRef }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function anchorDef(flags, matchedQueriesDsl, ngContentIndex, childCount, handleEvent, templateFactory) {
- flags |= 1 /* TypeElement */;
- const { matchedQueries, references, matchedQueryIds } = splitMatchedQueriesDsl(matchedQueriesDsl);
- const template = templateFactory ? resolveDefinition(templateFactory) : null;
- return {
- // will bet set by the view definition
- nodeIndex: -1,
- parent: null,
- renderParent: null,
- bindingIndex: -1,
- outputIndex: -1,
- // regular values
- flags,
- checkIndex: -1,
- childFlags: 0,
- directChildFlags: 0,
- childMatchedQueries: 0,
- matchedQueries,
- matchedQueryIds,
- references,
- ngContentIndex,
- childCount,
- bindings: [],
- bindingFlags: 0,
- outputs: [],
- element: {
- ns: null,
- name: null,
- attrs: null,
- template,
- componentProvider: null,
- componentView: null,
- componentRendererType: null,
- publicProviders: null,
- allProviders: null,
- handleEvent: handleEvent || NOOP
- },
- provider: null,
- text: null,
- query: null,
- ngContent: null
- };
- }
- function elementDef(checkIndex, flags, matchedQueriesDsl, ngContentIndex, childCount, namespaceAndName, fixedAttrs = [], bindings, outputs, handleEvent, componentView, componentRendererType) {
- if (!handleEvent) {
- handleEvent = NOOP;
- }
- const { matchedQueries, references, matchedQueryIds } = splitMatchedQueriesDsl(matchedQueriesDsl);
- let ns = null;
- let name = null;
- if (namespaceAndName) {
- [ns, name] = splitNamespace(namespaceAndName);
- }
- bindings = bindings || [];
- const bindingDefs = [];
- for (let i = 0; i < bindings.length; i++) {
- const [bindingFlags, namespaceAndName, suffixOrSecurityContext] = bindings[i];
- const [ns, name] = splitNamespace(namespaceAndName);
- let securityContext = undefined;
- let suffix = undefined;
- switch (bindingFlags & 15 /* Types */) {
- case 4 /* TypeElementStyle */:
- suffix = suffixOrSecurityContext;
- break;
- case 1 /* TypeElementAttribute */:
- case 8 /* TypeProperty */:
- securityContext = suffixOrSecurityContext;
- break;
- }
- bindingDefs[i] =
- { flags: bindingFlags, ns, name, nonMinifiedName: name, securityContext, suffix };
- }
- outputs = outputs || [];
- const outputDefs = [];
- for (let i = 0; i < outputs.length; i++) {
- const [target, eventName] = outputs[i];
- outputDefs[i] =
- { type: 0 /* ElementOutput */, target: target, eventName, propName: null };
- }
- fixedAttrs = fixedAttrs || [];
- const attrs = fixedAttrs.map(([namespaceAndName, value]) => {
- const [ns, name] = splitNamespace(namespaceAndName);
- return [ns, name, value];
- });
- componentRendererType = resolveRendererType2(componentRendererType);
- if (componentView) {
- flags |= 33554432 /* ComponentView */;
- }
- flags |= 1 /* TypeElement */;
- return {
- // will bet set by the view definition
- nodeIndex: -1,
- parent: null,
- renderParent: null,
- bindingIndex: -1,
- outputIndex: -1,
- // regular values
- checkIndex,
- flags,
- childFlags: 0,
- directChildFlags: 0,
- childMatchedQueries: 0,
- matchedQueries,
- matchedQueryIds,
- references,
- ngContentIndex,
- childCount,
- bindings: bindingDefs,
- bindingFlags: calcBindingFlags(bindingDefs),
- outputs: outputDefs,
- element: {
- ns,
- name,
- attrs,
- template: null,
- // will bet set by the view definition
- componentProvider: null,
- componentView: componentView || null,
- componentRendererType: componentRendererType,
- publicProviders: null,
- allProviders: null,
- handleEvent: handleEvent || NOOP,
- },
- provider: null,
- text: null,
- query: null,
- ngContent: null
- };
- }
- function createElement(view, renderHost, def) {
- const elDef = def.element;
- const rootSelectorOrNode = view.root.selectorOrNode;
- const renderer = view.renderer;
- let el;
- if (view.parent || !rootSelectorOrNode) {
- if (elDef.name) {
- el = renderer.createElement(elDef.name, elDef.ns);
- }
- else {
- el = renderer.createComment('');
- }
- const parentEl = getParentRenderElement(view, renderHost, def);
- if (parentEl) {
- renderer.appendChild(parentEl, el);
- }
- }
- else {
- // when using native Shadow DOM, do not clear the root element contents to allow slot projection
- const preserveContent = (!!elDef.componentRendererType &&
- elDef.componentRendererType.encapsulation === ViewEncapsulation.ShadowDom);
- el = renderer.selectRootElement(rootSelectorOrNode, preserveContent);
- }
- if (elDef.attrs) {
- for (let i = 0; i < elDef.attrs.length; i++) {
- const [ns, name, value] = elDef.attrs[i];
- renderer.setAttribute(el, name, value, ns);
- }
- }
- return el;
- }
- function listenToElementOutputs(view, compView, def, el) {
- for (let i = 0; i < def.outputs.length; i++) {
- const output = def.outputs[i];
- const handleEventClosure = renderEventHandlerClosure(view, def.nodeIndex, elementEventFullName(output.target, output.eventName));
- let listenTarget = output.target;
- let listenerView = view;
- if (output.target === 'component') {
- listenTarget = null;
- listenerView = compView;
- }
- const disposable = listenerView.renderer.listen(listenTarget || el, output.eventName, handleEventClosure);
- view.disposables[def.outputIndex + i] = disposable;
- }
- }
- function renderEventHandlerClosure(view, index, eventName) {
- return (event) => dispatchEvent(view, index, eventName, event);
- }
- function checkAndUpdateElementInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
- const bindLen = def.bindings.length;
- let changed = false;
- if (bindLen > 0 && checkAndUpdateElementValue(view, def, 0, v0))
- changed = true;
- if (bindLen > 1 && checkAndUpdateElementValue(view, def, 1, v1))
- changed = true;
- if (bindLen > 2 && checkAndUpdateElementValue(view, def, 2, v2))
- changed = true;
- if (bindLen > 3 && checkAndUpdateElementValue(view, def, 3, v3))
- changed = true;
- if (bindLen > 4 && checkAndUpdateElementValue(view, def, 4, v4))
- changed = true;
- if (bindLen > 5 && checkAndUpdateElementValue(view, def, 5, v5))
- changed = true;
- if (bindLen > 6 && checkAndUpdateElementValue(view, def, 6, v6))
- changed = true;
- if (bindLen > 7 && checkAndUpdateElementValue(view, def, 7, v7))
- changed = true;
- if (bindLen > 8 && checkAndUpdateElementValue(view, def, 8, v8))
- changed = true;
- if (bindLen > 9 && checkAndUpdateElementValue(view, def, 9, v9))
- changed = true;
- return changed;
- }
- function checkAndUpdateElementDynamic(view, def, values) {
- let changed = false;
- for (let i = 0; i < values.length; i++) {
- if (checkAndUpdateElementValue(view, def, i, values[i]))
- changed = true;
- }
- return changed;
- }
- function checkAndUpdateElementValue(view, def, bindingIdx, value) {
- if (!checkAndUpdateBinding(view, def, bindingIdx, value)) {
- return false;
- }
- const binding = def.bindings[bindingIdx];
- const elData = asElementData(view, def.nodeIndex);
- const renderNode = elData.renderElement;
- const name = binding.name;
- switch (binding.flags & 15 /* Types */) {
- case 1 /* TypeElementAttribute */:
- setElementAttribute$1(view, binding, renderNode, binding.ns, name, value);
- break;
- case 2 /* TypeElementClass */:
- setElementClass(view, renderNode, name, value);
- break;
- case 4 /* TypeElementStyle */:
- setElementStyle(view, binding, renderNode, name, value);
- break;
- case 8 /* TypeProperty */:
- const bindView = (def.flags & 33554432 /* ComponentView */ &&
- binding.flags & 32 /* SyntheticHostProperty */) ?
- elData.componentView :
- view;
- setElementProperty(bindView, binding, renderNode, name, value);
- break;
- }
- return true;
- }
- function setElementAttribute$1(view, binding, renderNode, ns, name, value) {
- const securityContext = binding.securityContext;
- let renderValue = securityContext ? view.root.sanitizer.sanitize(securityContext, value) : value;
- renderValue = renderValue != null ? renderValue.toString() : null;
- const renderer = view.renderer;
- if (value != null) {
- renderer.setAttribute(renderNode, name, renderValue, ns);
- }
- else {
- renderer.removeAttribute(renderNode, name, ns);
- }
- }
- function setElementClass(view, renderNode, name, value) {
- const renderer = view.renderer;
- if (value) {
- renderer.addClass(renderNode, name);
- }
- else {
- renderer.removeClass(renderNode, name);
- }
- }
- function setElementStyle(view, binding, renderNode, name, value) {
- let renderValue = view.root.sanitizer.sanitize(SecurityContext.STYLE, value);
- if (renderValue != null) {
- renderValue = renderValue.toString();
- const unit = binding.suffix;
- if (unit != null) {
- renderValue = renderValue + unit;
- }
- }
- else {
- renderValue = null;
- }
- const renderer = view.renderer;
- if (renderValue != null) {
- renderer.setStyle(renderNode, name, renderValue);
- }
- else {
- renderer.removeStyle(renderNode, name);
- }
- }
- function setElementProperty(view, binding, renderNode, name, value) {
- const securityContext = binding.securityContext;
- let renderValue = securityContext ? view.root.sanitizer.sanitize(securityContext, value) : value;
- view.renderer.setProperty(renderNode, name, renderValue);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function queryDef(flags, id, bindings) {
- let bindingDefs = [];
- for (let propName in bindings) {
- const bindingType = bindings[propName];
- bindingDefs.push({ propName, bindingType });
- }
- return {
- // will bet set by the view definition
- nodeIndex: -1,
- parent: null,
- renderParent: null,
- bindingIndex: -1,
- outputIndex: -1,
- // regular values
- // TODO(vicb): check
- checkIndex: -1,
- flags,
- childFlags: 0,
- directChildFlags: 0,
- childMatchedQueries: 0,
- ngContentIndex: -1,
- matchedQueries: {},
- matchedQueryIds: 0,
- references: {},
- childCount: 0,
- bindings: [],
- bindingFlags: 0,
- outputs: [],
- element: null,
- provider: null,
- text: null,
- query: { id, filterId: filterQueryId(id), bindings: bindingDefs },
- ngContent: null
- };
- }
- function createQuery() {
- return new QueryList();
- }
- function dirtyParentQueries(view) {
- const queryIds = view.def.nodeMatchedQueries;
- while (view.parent && isEmbeddedView(view)) {
- let tplDef = view.parentNodeDef;
- view = view.parent;
- // content queries
- const end = tplDef.nodeIndex + tplDef.childCount;
- for (let i = 0; i <= end; i++) {
- const nodeDef = view.def.nodes[i];
- if ((nodeDef.flags & 67108864 /* TypeContentQuery */) &&
- (nodeDef.flags & 536870912 /* DynamicQuery */) &&
- (nodeDef.query.filterId & queryIds) === nodeDef.query.filterId) {
- asQueryList(view, i).setDirty();
- }
- if ((nodeDef.flags & 1 /* TypeElement */ && i + nodeDef.childCount < tplDef.nodeIndex) ||
- !(nodeDef.childFlags & 67108864 /* TypeContentQuery */) ||
- !(nodeDef.childFlags & 536870912 /* DynamicQuery */)) {
- // skip elements that don't contain the template element or no query.
- i += nodeDef.childCount;
- }
- }
- }
- // view queries
- if (view.def.nodeFlags & 134217728 /* TypeViewQuery */) {
- for (let i = 0; i < view.def.nodes.length; i++) {
- const nodeDef = view.def.nodes[i];
- if ((nodeDef.flags & 134217728 /* TypeViewQuery */) && (nodeDef.flags & 536870912 /* DynamicQuery */)) {
- asQueryList(view, i).setDirty();
- }
- // only visit the root nodes
- i += nodeDef.childCount;
- }
- }
- }
- function checkAndUpdateQuery(view, nodeDef) {
- const queryList = asQueryList(view, nodeDef.nodeIndex);
- if (!queryList.dirty) {
- return;
- }
- let directiveInstance;
- let newValues = undefined;
- if (nodeDef.flags & 67108864 /* TypeContentQuery */) {
- const elementDef = nodeDef.parent.parent;
- newValues = calcQueryValues(view, elementDef.nodeIndex, elementDef.nodeIndex + elementDef.childCount, nodeDef.query, []);
- directiveInstance = asProviderData(view, nodeDef.parent.nodeIndex).instance;
- }
- else if (nodeDef.flags & 134217728 /* TypeViewQuery */) {
- newValues = calcQueryValues(view, 0, view.def.nodes.length - 1, nodeDef.query, []);
- directiveInstance = view.component;
- }
- queryList.reset(newValues);
- const bindings = nodeDef.query.bindings;
- let notify = false;
- for (let i = 0; i < bindings.length; i++) {
- const binding = bindings[i];
- let boundValue;
- switch (binding.bindingType) {
- case 0 /* First */:
- boundValue = queryList.first;
- break;
- case 1 /* All */:
- boundValue = queryList;
- notify = true;
- break;
- }
- directiveInstance[binding.propName] = boundValue;
- }
- if (notify) {
- queryList.notifyOnChanges();
- }
- }
- function calcQueryValues(view, startIndex, endIndex, queryDef, values) {
- for (let i = startIndex; i <= endIndex; i++) {
- const nodeDef = view.def.nodes[i];
- const valueType = nodeDef.matchedQueries[queryDef.id];
- if (valueType != null) {
- values.push(getQueryValue(view, nodeDef, valueType));
- }
- if (nodeDef.flags & 1 /* TypeElement */ && nodeDef.element.template &&
- (nodeDef.element.template.nodeMatchedQueries & queryDef.filterId) ===
- queryDef.filterId) {
- const elementData = asElementData(view, i);
- // check embedded views that were attached at the place of their template,
- // but process child nodes first if some match the query (see issue #16568)
- if ((nodeDef.childMatchedQueries & queryDef.filterId) === queryDef.filterId) {
- calcQueryValues(view, i + 1, i + nodeDef.childCount, queryDef, values);
- i += nodeDef.childCount;
- }
- if (nodeDef.flags & 16777216 /* EmbeddedViews */) {
- const embeddedViews = elementData.viewContainer._embeddedViews;
- for (let k = 0; k < embeddedViews.length; k++) {
- const embeddedView = embeddedViews[k];
- const dvc = declaredViewContainer(embeddedView);
- if (dvc && dvc === elementData) {
- calcQueryValues(embeddedView, 0, embeddedView.def.nodes.length - 1, queryDef, values);
- }
- }
- }
- const projectedViews = elementData.template._projectedViews;
- if (projectedViews) {
- for (let k = 0; k < projectedViews.length; k++) {
- const projectedView = projectedViews[k];
- calcQueryValues(projectedView, 0, projectedView.def.nodes.length - 1, queryDef, values);
- }
- }
- }
- if ((nodeDef.childMatchedQueries & queryDef.filterId) !== queryDef.filterId) {
- // if no child matches the query, skip the children.
- i += nodeDef.childCount;
- }
- }
- return values;
- }
- function getQueryValue(view, nodeDef, queryValueType) {
- if (queryValueType != null) {
- // a match
- switch (queryValueType) {
- case 1 /* RenderElement */:
- return asElementData(view, nodeDef.nodeIndex).renderElement;
- case 0 /* ElementRef */:
- return new ElementRef(asElementData(view, nodeDef.nodeIndex).renderElement);
- case 2 /* TemplateRef */:
- return asElementData(view, nodeDef.nodeIndex).template;
- case 3 /* ViewContainerRef */:
- return asElementData(view, nodeDef.nodeIndex).viewContainer;
- case 4 /* Provider */:
- return asProviderData(view, nodeDef.nodeIndex).instance;
- }
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function ngContentDef(ngContentIndex, index) {
- return {
- // will bet set by the view definition
- nodeIndex: -1,
- parent: null,
- renderParent: null,
- bindingIndex: -1,
- outputIndex: -1,
- // regular values
- checkIndex: -1,
- flags: 8 /* TypeNgContent */,
- childFlags: 0,
- directChildFlags: 0,
- childMatchedQueries: 0,
- matchedQueries: {},
- matchedQueryIds: 0,
- references: {},
- ngContentIndex,
- childCount: 0,
- bindings: [],
- bindingFlags: 0,
- outputs: [],
- element: null,
- provider: null,
- text: null,
- query: null,
- ngContent: { index }
- };
- }
- function appendNgContent(view, renderHost, def) {
- const parentEl = getParentRenderElement(view, renderHost, def);
- if (!parentEl) {
- // Nothing to do if there is no parent element.
- return;
- }
- const ngContentIndex = def.ngContent.index;
- visitProjectedRenderNodes(view, ngContentIndex, 1 /* AppendChild */, parentEl, null, undefined);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function purePipeDef(checkIndex, argCount) {
- // argCount + 1 to include the pipe as first arg
- return _pureExpressionDef(128 /* TypePurePipe */, checkIndex, newArray(argCount + 1));
- }
- function pureArrayDef(checkIndex, argCount) {
- return _pureExpressionDef(32 /* TypePureArray */, checkIndex, newArray(argCount));
- }
- function pureObjectDef(checkIndex, propToIndex) {
- const keys = Object.keys(propToIndex);
- const nbKeys = keys.length;
- const propertyNames = [];
- for (let i = 0; i < nbKeys; i++) {
- const key = keys[i];
- const index = propToIndex[key];
- propertyNames.push(key);
- }
- return _pureExpressionDef(64 /* TypePureObject */, checkIndex, propertyNames);
- }
- function _pureExpressionDef(flags, checkIndex, propertyNames) {
- const bindings = [];
- for (let i = 0; i < propertyNames.length; i++) {
- const prop = propertyNames[i];
- bindings.push({
- flags: 8 /* TypeProperty */,
- name: prop,
- ns: null,
- nonMinifiedName: prop,
- securityContext: null,
- suffix: null
- });
- }
- return {
- // will bet set by the view definition
- nodeIndex: -1,
- parent: null,
- renderParent: null,
- bindingIndex: -1,
- outputIndex: -1,
- // regular values
- checkIndex,
- flags,
- childFlags: 0,
- directChildFlags: 0,
- childMatchedQueries: 0,
- matchedQueries: {},
- matchedQueryIds: 0,
- references: {},
- ngContentIndex: -1,
- childCount: 0,
- bindings,
- bindingFlags: calcBindingFlags(bindings),
- outputs: [],
- element: null,
- provider: null,
- text: null,
- query: null,
- ngContent: null
- };
- }
- function createPureExpression(view, def) {
- return { value: undefined };
- }
- function checkAndUpdatePureExpressionInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
- const bindings = def.bindings;
- let changed = false;
- const bindLen = bindings.length;
- if (bindLen > 0 && checkAndUpdateBinding(view, def, 0, v0))
- changed = true;
- if (bindLen > 1 && checkAndUpdateBinding(view, def, 1, v1))
- changed = true;
- if (bindLen > 2 && checkAndUpdateBinding(view, def, 2, v2))
- changed = true;
- if (bindLen > 3 && checkAndUpdateBinding(view, def, 3, v3))
- changed = true;
- if (bindLen > 4 && checkAndUpdateBinding(view, def, 4, v4))
- changed = true;
- if (bindLen > 5 && checkAndUpdateBinding(view, def, 5, v5))
- changed = true;
- if (bindLen > 6 && checkAndUpdateBinding(view, def, 6, v6))
- changed = true;
- if (bindLen > 7 && checkAndUpdateBinding(view, def, 7, v7))
- changed = true;
- if (bindLen > 8 && checkAndUpdateBinding(view, def, 8, v8))
- changed = true;
- if (bindLen > 9 && checkAndUpdateBinding(view, def, 9, v9))
- changed = true;
- if (changed) {
- const data = asPureExpressionData(view, def.nodeIndex);
- let value;
- switch (def.flags & 201347067 /* Types */) {
- case 32 /* TypePureArray */:
- value = [];
- if (bindLen > 0)
- value.push(v0);
- if (bindLen > 1)
- value.push(v1);
- if (bindLen > 2)
- value.push(v2);
- if (bindLen > 3)
- value.push(v3);
- if (bindLen > 4)
- value.push(v4);
- if (bindLen > 5)
- value.push(v5);
- if (bindLen > 6)
- value.push(v6);
- if (bindLen > 7)
- value.push(v7);
- if (bindLen > 8)
- value.push(v8);
- if (bindLen > 9)
- value.push(v9);
- break;
- case 64 /* TypePureObject */:
- value = {};
- if (bindLen > 0)
- value[bindings[0].name] = v0;
- if (bindLen > 1)
- value[bindings[1].name] = v1;
- if (bindLen > 2)
- value[bindings[2].name] = v2;
- if (bindLen > 3)
- value[bindings[3].name] = v3;
- if (bindLen > 4)
- value[bindings[4].name] = v4;
- if (bindLen > 5)
- value[bindings[5].name] = v5;
- if (bindLen > 6)
- value[bindings[6].name] = v6;
- if (bindLen > 7)
- value[bindings[7].name] = v7;
- if (bindLen > 8)
- value[bindings[8].name] = v8;
- if (bindLen > 9)
- value[bindings[9].name] = v9;
- break;
- case 128 /* TypePurePipe */:
- const pipe = v0;
- switch (bindLen) {
- case 1:
- value = pipe.transform(v0);
- break;
- case 2:
- value = pipe.transform(v1);
- break;
- case 3:
- value = pipe.transform(v1, v2);
- break;
- case 4:
- value = pipe.transform(v1, v2, v3);
- break;
- case 5:
- value = pipe.transform(v1, v2, v3, v4);
- break;
- case 6:
- value = pipe.transform(v1, v2, v3, v4, v5);
- break;
- case 7:
- value = pipe.transform(v1, v2, v3, v4, v5, v6);
- break;
- case 8:
- value = pipe.transform(v1, v2, v3, v4, v5, v6, v7);
- break;
- case 9:
- value = pipe.transform(v1, v2, v3, v4, v5, v6, v7, v8);
- break;
- case 10:
- value = pipe.transform(v1, v2, v3, v4, v5, v6, v7, v8, v9);
- break;
- }
- break;
- }
- data.value = value;
- }
- return changed;
- }
- function checkAndUpdatePureExpressionDynamic(view, def, values) {
- const bindings = def.bindings;
- let changed = false;
- for (let i = 0; i < values.length; i++) {
- // Note: We need to loop over all values, so that
- // the old values are updates as well!
- if (checkAndUpdateBinding(view, def, i, values[i])) {
- changed = true;
- }
- }
- if (changed) {
- const data = asPureExpressionData(view, def.nodeIndex);
- let value;
- switch (def.flags & 201347067 /* Types */) {
- case 32 /* TypePureArray */:
- value = values;
- break;
- case 64 /* TypePureObject */:
- value = {};
- for (let i = 0; i < values.length; i++) {
- value[bindings[i].name] = values[i];
- }
- break;
- case 128 /* TypePurePipe */:
- const pipe = values[0];
- const params = values.slice(1);
- value = pipe.transform(...params);
- break;
- }
- data.value = value;
- }
- return changed;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function textDef(checkIndex, ngContentIndex, staticText) {
- const bindings = [];
- for (let i = 1; i < staticText.length; i++) {
- bindings[i - 1] = {
- flags: 8 /* TypeProperty */,
- name: null,
- ns: null,
- nonMinifiedName: null,
- securityContext: null,
- suffix: staticText[i],
- };
- }
- return {
- // will bet set by the view definition
- nodeIndex: -1,
- parent: null,
- renderParent: null,
- bindingIndex: -1,
- outputIndex: -1,
- // regular values
- checkIndex,
- flags: 2 /* TypeText */,
- childFlags: 0,
- directChildFlags: 0,
- childMatchedQueries: 0,
- matchedQueries: {},
- matchedQueryIds: 0,
- references: {},
- ngContentIndex,
- childCount: 0,
- bindings,
- bindingFlags: 8 /* TypeProperty */,
- outputs: [],
- element: null,
- provider: null,
- text: { prefix: staticText[0] },
- query: null,
- ngContent: null,
- };
- }
- function createText(view, renderHost, def) {
- let renderNode;
- const renderer = view.renderer;
- renderNode = renderer.createText(def.text.prefix);
- const parentEl = getParentRenderElement(view, renderHost, def);
- if (parentEl) {
- renderer.appendChild(parentEl, renderNode);
- }
- return { renderText: renderNode };
- }
- function checkAndUpdateTextInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
- let changed = false;
- const bindings = def.bindings;
- const bindLen = bindings.length;
- if (bindLen > 0 && checkAndUpdateBinding(view, def, 0, v0))
- changed = true;
- if (bindLen > 1 && checkAndUpdateBinding(view, def, 1, v1))
- changed = true;
- if (bindLen > 2 && checkAndUpdateBinding(view, def, 2, v2))
- changed = true;
- if (bindLen > 3 && checkAndUpdateBinding(view, def, 3, v3))
- changed = true;
- if (bindLen > 4 && checkAndUpdateBinding(view, def, 4, v4))
- changed = true;
- if (bindLen > 5 && checkAndUpdateBinding(view, def, 5, v5))
- changed = true;
- if (bindLen > 6 && checkAndUpdateBinding(view, def, 6, v6))
- changed = true;
- if (bindLen > 7 && checkAndUpdateBinding(view, def, 7, v7))
- changed = true;
- if (bindLen > 8 && checkAndUpdateBinding(view, def, 8, v8))
- changed = true;
- if (bindLen > 9 && checkAndUpdateBinding(view, def, 9, v9))
- changed = true;
- if (changed) {
- let value = def.text.prefix;
- if (bindLen > 0)
- value += _addInterpolationPart(v0, bindings[0]);
- if (bindLen > 1)
- value += _addInterpolationPart(v1, bindings[1]);
- if (bindLen > 2)
- value += _addInterpolationPart(v2, bindings[2]);
- if (bindLen > 3)
- value += _addInterpolationPart(v3, bindings[3]);
- if (bindLen > 4)
- value += _addInterpolationPart(v4, bindings[4]);
- if (bindLen > 5)
- value += _addInterpolationPart(v5, bindings[5]);
- if (bindLen > 6)
- value += _addInterpolationPart(v6, bindings[6]);
- if (bindLen > 7)
- value += _addInterpolationPart(v7, bindings[7]);
- if (bindLen > 8)
- value += _addInterpolationPart(v8, bindings[8]);
- if (bindLen > 9)
- value += _addInterpolationPart(v9, bindings[9]);
- const renderNode = asTextData(view, def.nodeIndex).renderText;
- view.renderer.setValue(renderNode, value);
- }
- return changed;
- }
- function checkAndUpdateTextDynamic(view, def, values) {
- const bindings = def.bindings;
- let changed = false;
- for (let i = 0; i < values.length; i++) {
- // Note: We need to loop over all values, so that
- // the old values are updates as well!
- if (checkAndUpdateBinding(view, def, i, values[i])) {
- changed = true;
- }
- }
- if (changed) {
- let value = '';
- for (let i = 0; i < values.length; i++) {
- value = value + _addInterpolationPart(values[i], bindings[i]);
- }
- value = def.text.prefix + value;
- const renderNode = asTextData(view, def.nodeIndex).renderText;
- view.renderer.setValue(renderNode, value);
- }
- return changed;
- }
- function _addInterpolationPart(value, binding) {
- const valueStr = value != null ? value.toString() : '';
- return valueStr + binding.suffix;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function viewDef(flags, nodes, updateDirectives, updateRenderer) {
- // clone nodes and set auto calculated values
- let viewBindingCount = 0;
- let viewDisposableCount = 0;
- let viewNodeFlags = 0;
- let viewRootNodeFlags = 0;
- let viewMatchedQueries = 0;
- let currentParent = null;
- let currentRenderParent = null;
- let currentElementHasPublicProviders = false;
- let currentElementHasPrivateProviders = false;
- let lastRenderRootNode = null;
- for (let i = 0; i < nodes.length; i++) {
- const node = nodes[i];
- node.nodeIndex = i;
- node.parent = currentParent;
- node.bindingIndex = viewBindingCount;
- node.outputIndex = viewDisposableCount;
- node.renderParent = currentRenderParent;
- viewNodeFlags |= node.flags;
- viewMatchedQueries |= node.matchedQueryIds;
- if (node.element) {
- const elDef = node.element;
- elDef.publicProviders =
- currentParent ? currentParent.element.publicProviders : Object.create(null);
- elDef.allProviders = elDef.publicProviders;
- // Note: We assume that all providers of an element are before any child element!
- currentElementHasPublicProviders = false;
- currentElementHasPrivateProviders = false;
- if (node.element.template) {
- viewMatchedQueries |= node.element.template.nodeMatchedQueries;
- }
- }
- validateNode(currentParent, node, nodes.length);
- viewBindingCount += node.bindings.length;
- viewDisposableCount += node.outputs.length;
- if (!currentRenderParent && (node.flags & 3 /* CatRenderNode */)) {
- lastRenderRootNode = node;
- }
- if (node.flags & 20224 /* CatProvider */) {
- if (!currentElementHasPublicProviders) {
- currentElementHasPublicProviders = true;
- // Use prototypical inheritance to not get O(n^2) complexity...
- currentParent.element.publicProviders =
- Object.create(currentParent.element.publicProviders);
- currentParent.element.allProviders = currentParent.element.publicProviders;
- }
- const isPrivateService = (node.flags & 8192 /* PrivateProvider */) !== 0;
- const isComponent = (node.flags & 32768 /* Component */) !== 0;
- if (!isPrivateService || isComponent) {
- currentParent.element.publicProviders[tokenKey(node.provider.token)] = node;
- }
- else {
- if (!currentElementHasPrivateProviders) {
- currentElementHasPrivateProviders = true;
- // Use prototypical inheritance to not get O(n^2) complexity...
- currentParent.element.allProviders =
- Object.create(currentParent.element.publicProviders);
- }
- currentParent.element.allProviders[tokenKey(node.provider.token)] = node;
- }
- if (isComponent) {
- currentParent.element.componentProvider = node;
- }
- }
- if (currentParent) {
- currentParent.childFlags |= node.flags;
- currentParent.directChildFlags |= node.flags;
- currentParent.childMatchedQueries |= node.matchedQueryIds;
- if (node.element && node.element.template) {
- currentParent.childMatchedQueries |= node.element.template.nodeMatchedQueries;
- }
- }
- else {
- viewRootNodeFlags |= node.flags;
- }
- if (node.childCount > 0) {
- currentParent = node;
- if (!isNgContainer(node)) {
- currentRenderParent = node;
- }
- }
- else {
- // When the current node has no children, check if it is the last children of its parent.
- // When it is, propagate the flags up.
- // The loop is required because an element could be the last transitive children of several
- // elements. We loop to either the root or the highest opened element (= with remaining
- // children)
- while (currentParent && i === currentParent.nodeIndex + currentParent.childCount) {
- const newParent = currentParent.parent;
- if (newParent) {
- newParent.childFlags |= currentParent.childFlags;
- newParent.childMatchedQueries |= currentParent.childMatchedQueries;
- }
- currentParent = newParent;
- // We also need to update the render parent & account for ng-container
- if (currentParent && isNgContainer(currentParent)) {
- currentRenderParent = currentParent.renderParent;
- }
- else {
- currentRenderParent = currentParent;
- }
- }
- }
- }
- const handleEvent = (view, nodeIndex, eventName, event) => nodes[nodeIndex].element.handleEvent(view, eventName, event);
- return {
- // Will be filled later...
- factory: null,
- nodeFlags: viewNodeFlags,
- rootNodeFlags: viewRootNodeFlags,
- nodeMatchedQueries: viewMatchedQueries,
- flags,
- nodes: nodes,
- updateDirectives: updateDirectives || NOOP,
- updateRenderer: updateRenderer || NOOP,
- handleEvent,
- bindingCount: viewBindingCount,
- outputCount: viewDisposableCount,
- lastRenderRootNode
- };
- }
- function isNgContainer(node) {
- return (node.flags & 1 /* TypeElement */) !== 0 && node.element.name === null;
- }
- function validateNode(parent, node, nodeCount) {
- const template = node.element && node.element.template;
- if (template) {
- if (!template.lastRenderRootNode) {
- throw new Error(`Illegal State: Embedded templates without nodes are not allowed!`);
- }
- if (template.lastRenderRootNode &&
- template.lastRenderRootNode.flags & 16777216 /* EmbeddedViews */) {
- throw new Error(`Illegal State: Last root node of a template can't have embedded views, at index ${node.nodeIndex}!`);
- }
- }
- if (node.flags & 20224 /* CatProvider */) {
- const parentFlags = parent ? parent.flags : 0;
- if ((parentFlags & 1 /* TypeElement */) === 0) {
- throw new Error(`Illegal State: StaticProvider/Directive nodes need to be children of elements or anchors, at index ${node.nodeIndex}!`);
- }
- }
- if (node.query) {
- if (node.flags & 67108864 /* TypeContentQuery */ &&
- (!parent || (parent.flags & 16384 /* TypeDirective */) === 0)) {
- throw new Error(`Illegal State: Content Query nodes need to be children of directives, at index ${node.nodeIndex}!`);
- }
- if (node.flags & 134217728 /* TypeViewQuery */ && parent) {
- throw new Error(`Illegal State: View Query nodes have to be top level nodes, at index ${node.nodeIndex}!`);
- }
- }
- if (node.childCount) {
- const parentEnd = parent ? parent.nodeIndex + parent.childCount : nodeCount - 1;
- if (node.nodeIndex <= parentEnd && node.nodeIndex + node.childCount > parentEnd) {
- throw new Error(`Illegal State: childCount of node leads outside of parent, at index ${node.nodeIndex}!`);
- }
- }
- }
- function createEmbeddedView(parent, anchorDef, viewDef, context) {
- // embedded views are seen as siblings to the anchor, so we need
- // to get the parent of the anchor and use it as parentIndex.
- const view = createView(parent.root, parent.renderer, parent, anchorDef, viewDef);
- initView(view, parent.component, context);
- createViewNodes(view);
- return view;
- }
- function createRootView(root, def, context) {
- const view = createView(root, root.renderer, null, null, def);
- initView(view, context, context);
- createViewNodes(view);
- return view;
- }
- function createComponentView(parentView, nodeDef, viewDef, hostElement) {
- const rendererType = nodeDef.element.componentRendererType;
- let compRenderer;
- if (!rendererType) {
- compRenderer = parentView.root.renderer;
- }
- else {
- compRenderer = parentView.root.rendererFactory.createRenderer(hostElement, rendererType);
- }
- return createView(parentView.root, compRenderer, parentView, nodeDef.element.componentProvider, viewDef);
- }
- function createView(root, renderer, parent, parentNodeDef, def) {
- const nodes = new Array(def.nodes.length);
- const disposables = def.outputCount ? new Array(def.outputCount) : null;
- const view = {
- def,
- parent,
- viewContainerParent: null,
- parentNodeDef,
- context: null,
- component: null,
- nodes,
- state: 13 /* CatInit */,
- root,
- renderer,
- oldValues: new Array(def.bindingCount),
- disposables,
- initIndex: -1
- };
- return view;
- }
- function initView(view, component, context) {
- view.component = component;
- view.context = context;
- }
- function createViewNodes(view) {
- let renderHost;
- if (isComponentView(view)) {
- const hostDef = view.parentNodeDef;
- renderHost = asElementData(view.parent, hostDef.parent.nodeIndex).renderElement;
- }
- const def = view.def;
- const nodes = view.nodes;
- for (let i = 0; i < def.nodes.length; i++) {
- const nodeDef = def.nodes[i];
- Services.setCurrentNode(view, i);
- let nodeData;
- switch (nodeDef.flags & 201347067 /* Types */) {
- case 1 /* TypeElement */:
- const el = createElement(view, renderHost, nodeDef);
- let componentView = undefined;
- if (nodeDef.flags & 33554432 /* ComponentView */) {
- const compViewDef = resolveDefinition(nodeDef.element.componentView);
- componentView = Services.createComponentView(view, nodeDef, compViewDef, el);
- }
- listenToElementOutputs(view, componentView, nodeDef, el);
- nodeData = {
- renderElement: el,
- componentView,
- viewContainer: null,
- template: nodeDef.element.template ? createTemplateData(view, nodeDef) : undefined
- };
- if (nodeDef.flags & 16777216 /* EmbeddedViews */) {
- nodeData.viewContainer = createViewContainerData(view, nodeDef, nodeData);
- }
- break;
- case 2 /* TypeText */:
- nodeData = createText(view, renderHost, nodeDef);
- break;
- case 512 /* TypeClassProvider */:
- case 1024 /* TypeFactoryProvider */:
- case 2048 /* TypeUseExistingProvider */:
- case 256 /* TypeValueProvider */: {
- nodeData = nodes[i];
- if (!nodeData && !(nodeDef.flags & 4096 /* LazyProvider */)) {
- const instance = createProviderInstance(view, nodeDef);
- nodeData = { instance };
- }
- break;
- }
- case 16 /* TypePipe */: {
- const instance = createPipeInstance(view, nodeDef);
- nodeData = { instance };
- break;
- }
- case 16384 /* TypeDirective */: {
- nodeData = nodes[i];
- if (!nodeData) {
- const instance = createDirectiveInstance(view, nodeDef);
- nodeData = { instance };
- }
- if (nodeDef.flags & 32768 /* Component */) {
- const compView = asElementData(view, nodeDef.parent.nodeIndex).componentView;
- initView(compView, nodeData.instance, nodeData.instance);
- }
- break;
- }
- case 32 /* TypePureArray */:
- case 64 /* TypePureObject */:
- case 128 /* TypePurePipe */:
- nodeData = createPureExpression(view, nodeDef);
- break;
- case 67108864 /* TypeContentQuery */:
- case 134217728 /* TypeViewQuery */:
- nodeData = createQuery();
- break;
- case 8 /* TypeNgContent */:
- appendNgContent(view, renderHost, nodeDef);
- // no runtime data needed for NgContent...
- nodeData = undefined;
- break;
- }
- nodes[i] = nodeData;
- }
- // Create the ViewData.nodes of component views after we created everything else,
- // so that e.g. ng-content works
- execComponentViewsAction(view, ViewAction.CreateViewNodes);
- // fill static content and view queries
- execQueriesAction(view, 67108864 /* TypeContentQuery */ | 134217728 /* TypeViewQuery */, 268435456 /* StaticQuery */, 0 /* CheckAndUpdate */);
- }
- function checkNoChangesView(view) {
- markProjectedViewsForCheck(view);
- Services.updateDirectives(view, 1 /* CheckNoChanges */);
- execEmbeddedViewsAction(view, ViewAction.CheckNoChanges);
- Services.updateRenderer(view, 1 /* CheckNoChanges */);
- execComponentViewsAction(view, ViewAction.CheckNoChanges);
- // Note: We don't check queries for changes as we didn't do this in v2.x.
- // TODO(tbosch): investigate if we can enable the check again in v5.x with a nicer error message.
- view.state &= ~(64 /* CheckProjectedViews */ | 32 /* CheckProjectedView */);
- }
- function checkAndUpdateView(view) {
- if (view.state & 1 /* BeforeFirstCheck */) {
- view.state &= ~1 /* BeforeFirstCheck */;
- view.state |= 2 /* FirstCheck */;
- }
- else {
- view.state &= ~2 /* FirstCheck */;
- }
- shiftInitState(view, 0 /* InitState_BeforeInit */, 256 /* InitState_CallingOnInit */);
- markProjectedViewsForCheck(view);
- Services.updateDirectives(view, 0 /* CheckAndUpdate */);
- execEmbeddedViewsAction(view, ViewAction.CheckAndUpdate);
- execQueriesAction(view, 67108864 /* TypeContentQuery */, 536870912 /* DynamicQuery */, 0 /* CheckAndUpdate */);
- let callInit = shiftInitState(view, 256 /* InitState_CallingOnInit */, 512 /* InitState_CallingAfterContentInit */);
- callLifecycleHooksChildrenFirst(view, 2097152 /* AfterContentChecked */ | (callInit ? 1048576 /* AfterContentInit */ : 0));
- Services.updateRenderer(view, 0 /* CheckAndUpdate */);
- execComponentViewsAction(view, ViewAction.CheckAndUpdate);
- execQueriesAction(view, 134217728 /* TypeViewQuery */, 536870912 /* DynamicQuery */, 0 /* CheckAndUpdate */);
- callInit = shiftInitState(view, 512 /* InitState_CallingAfterContentInit */, 768 /* InitState_CallingAfterViewInit */);
- callLifecycleHooksChildrenFirst(view, 8388608 /* AfterViewChecked */ | (callInit ? 4194304 /* AfterViewInit */ : 0));
- if (view.def.flags & 2 /* OnPush */) {
- view.state &= ~8 /* ChecksEnabled */;
- }
- view.state &= ~(64 /* CheckProjectedViews */ | 32 /* CheckProjectedView */);
- shiftInitState(view, 768 /* InitState_CallingAfterViewInit */, 1024 /* InitState_AfterInit */);
- }
- function checkAndUpdateNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
- if (argStyle === 0 /* Inline */) {
- return checkAndUpdateNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
- }
- else {
- return checkAndUpdateNodeDynamic(view, nodeDef, v0);
- }
- }
- function markProjectedViewsForCheck(view) {
- const def = view.def;
- if (!(def.nodeFlags & 4 /* ProjectedTemplate */)) {
- return;
- }
- for (let i = 0; i < def.nodes.length; i++) {
- const nodeDef = def.nodes[i];
- if (nodeDef.flags & 4 /* ProjectedTemplate */) {
- const projectedViews = asElementData(view, i).template._projectedViews;
- if (projectedViews) {
- for (let i = 0; i < projectedViews.length; i++) {
- const projectedView = projectedViews[i];
- projectedView.state |= 32 /* CheckProjectedView */;
- markParentViewsForCheckProjectedViews(projectedView, view);
- }
- }
- }
- else if ((nodeDef.childFlags & 4 /* ProjectedTemplate */) === 0) {
- // a parent with leafs
- // no child is a component,
- // then skip the children
- i += nodeDef.childCount;
- }
- }
- }
- function checkAndUpdateNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
- switch (nodeDef.flags & 201347067 /* Types */) {
- case 1 /* TypeElement */:
- return checkAndUpdateElementInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
- case 2 /* TypeText */:
- return checkAndUpdateTextInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
- case 16384 /* TypeDirective */:
- return checkAndUpdateDirectiveInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
- case 32 /* TypePureArray */:
- case 64 /* TypePureObject */:
- case 128 /* TypePurePipe */:
- return checkAndUpdatePureExpressionInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
- default:
- throw 'unreachable';
- }
- }
- function checkAndUpdateNodeDynamic(view, nodeDef, values) {
- switch (nodeDef.flags & 201347067 /* Types */) {
- case 1 /* TypeElement */:
- return checkAndUpdateElementDynamic(view, nodeDef, values);
- case 2 /* TypeText */:
- return checkAndUpdateTextDynamic(view, nodeDef, values);
- case 16384 /* TypeDirective */:
- return checkAndUpdateDirectiveDynamic(view, nodeDef, values);
- case 32 /* TypePureArray */:
- case 64 /* TypePureObject */:
- case 128 /* TypePurePipe */:
- return checkAndUpdatePureExpressionDynamic(view, nodeDef, values);
- default:
- throw 'unreachable';
- }
- }
- function checkNoChangesNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
- if (argStyle === 0 /* Inline */) {
- checkNoChangesNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
- }
- else {
- checkNoChangesNodeDynamic(view, nodeDef, v0);
- }
- // Returning false is ok here as we would have thrown in case of a change.
- return false;
- }
- function checkNoChangesNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
- const bindLen = nodeDef.bindings.length;
- if (bindLen > 0)
- checkBindingNoChanges(view, nodeDef, 0, v0);
- if (bindLen > 1)
- checkBindingNoChanges(view, nodeDef, 1, v1);
- if (bindLen > 2)
- checkBindingNoChanges(view, nodeDef, 2, v2);
- if (bindLen > 3)
- checkBindingNoChanges(view, nodeDef, 3, v3);
- if (bindLen > 4)
- checkBindingNoChanges(view, nodeDef, 4, v4);
- if (bindLen > 5)
- checkBindingNoChanges(view, nodeDef, 5, v5);
- if (bindLen > 6)
- checkBindingNoChanges(view, nodeDef, 6, v6);
- if (bindLen > 7)
- checkBindingNoChanges(view, nodeDef, 7, v7);
- if (bindLen > 8)
- checkBindingNoChanges(view, nodeDef, 8, v8);
- if (bindLen > 9)
- checkBindingNoChanges(view, nodeDef, 9, v9);
- }
- function checkNoChangesNodeDynamic(view, nodeDef, values) {
- for (let i = 0; i < values.length; i++) {
- checkBindingNoChanges(view, nodeDef, i, values[i]);
- }
- }
- /**
- * Workaround https://github.com/angular/tsickle/issues/497
- * @suppress {misplacedTypeAnnotation}
- */
- function checkNoChangesQuery(view, nodeDef) {
- const queryList = asQueryList(view, nodeDef.nodeIndex);
- if (queryList.dirty) {
- throw expressionChangedAfterItHasBeenCheckedError(Services.createDebugContext(view, nodeDef.nodeIndex), `Query ${nodeDef.query.id} not dirty`, `Query ${nodeDef.query.id} dirty`, (view.state & 1 /* BeforeFirstCheck */) !== 0);
- }
- }
- function destroyView(view) {
- if (view.state & 128 /* Destroyed */) {
- return;
- }
- execEmbeddedViewsAction(view, ViewAction.Destroy);
- execComponentViewsAction(view, ViewAction.Destroy);
- callLifecycleHooksChildrenFirst(view, 131072 /* OnDestroy */);
- if (view.disposables) {
- for (let i = 0; i < view.disposables.length; i++) {
- view.disposables[i]();
- }
- }
- detachProjectedView(view);
- if (view.renderer.destroyNode) {
- destroyViewNodes(view);
- }
- if (isComponentView(view)) {
- view.renderer.destroy();
- }
- view.state |= 128 /* Destroyed */;
- }
- function destroyViewNodes(view) {
- const len = view.def.nodes.length;
- for (let i = 0; i < len; i++) {
- const def = view.def.nodes[i];
- if (def.flags & 1 /* TypeElement */) {
- view.renderer.destroyNode(asElementData(view, i).renderElement);
- }
- else if (def.flags & 2 /* TypeText */) {
- view.renderer.destroyNode(asTextData(view, i).renderText);
- }
- else if (def.flags & 67108864 /* TypeContentQuery */ || def.flags & 134217728 /* TypeViewQuery */) {
- asQueryList(view, i).destroy();
- }
- }
- }
- var ViewAction;
- (function (ViewAction) {
- ViewAction[ViewAction["CreateViewNodes"] = 0] = "CreateViewNodes";
- ViewAction[ViewAction["CheckNoChanges"] = 1] = "CheckNoChanges";
- ViewAction[ViewAction["CheckNoChangesProjectedViews"] = 2] = "CheckNoChangesProjectedViews";
- ViewAction[ViewAction["CheckAndUpdate"] = 3] = "CheckAndUpdate";
- ViewAction[ViewAction["CheckAndUpdateProjectedViews"] = 4] = "CheckAndUpdateProjectedViews";
- ViewAction[ViewAction["Destroy"] = 5] = "Destroy";
- })(ViewAction || (ViewAction = {}));
- function execComponentViewsAction(view, action) {
- const def = view.def;
- if (!(def.nodeFlags & 33554432 /* ComponentView */)) {
- return;
- }
- for (let i = 0; i < def.nodes.length; i++) {
- const nodeDef = def.nodes[i];
- if (nodeDef.flags & 33554432 /* ComponentView */) {
- // a leaf
- callViewAction(asElementData(view, i).componentView, action);
- }
- else if ((nodeDef.childFlags & 33554432 /* ComponentView */) === 0) {
- // a parent with leafs
- // no child is a component,
- // then skip the children
- i += nodeDef.childCount;
- }
- }
- }
- function execEmbeddedViewsAction(view, action) {
- const def = view.def;
- if (!(def.nodeFlags & 16777216 /* EmbeddedViews */)) {
- return;
- }
- for (let i = 0; i < def.nodes.length; i++) {
- const nodeDef = def.nodes[i];
- if (nodeDef.flags & 16777216 /* EmbeddedViews */) {
- // a leaf
- const embeddedViews = asElementData(view, i).viewContainer._embeddedViews;
- for (let k = 0; k < embeddedViews.length; k++) {
- callViewAction(embeddedViews[k], action);
- }
- }
- else if ((nodeDef.childFlags & 16777216 /* EmbeddedViews */) === 0) {
- // a parent with leafs
- // no child is a component,
- // then skip the children
- i += nodeDef.childCount;
- }
- }
- }
- function callViewAction(view, action) {
- const viewState = view.state;
- switch (action) {
- case ViewAction.CheckNoChanges:
- if ((viewState & 128 /* Destroyed */) === 0) {
- if ((viewState & 12 /* CatDetectChanges */) === 12 /* CatDetectChanges */) {
- checkNoChangesView(view);
- }
- else if (viewState & 64 /* CheckProjectedViews */) {
- execProjectedViewsAction(view, ViewAction.CheckNoChangesProjectedViews);
- }
- }
- break;
- case ViewAction.CheckNoChangesProjectedViews:
- if ((viewState & 128 /* Destroyed */) === 0) {
- if (viewState & 32 /* CheckProjectedView */) {
- checkNoChangesView(view);
- }
- else if (viewState & 64 /* CheckProjectedViews */) {
- execProjectedViewsAction(view, action);
- }
- }
- break;
- case ViewAction.CheckAndUpdate:
- if ((viewState & 128 /* Destroyed */) === 0) {
- if ((viewState & 12 /* CatDetectChanges */) === 12 /* CatDetectChanges */) {
- checkAndUpdateView(view);
- }
- else if (viewState & 64 /* CheckProjectedViews */) {
- execProjectedViewsAction(view, ViewAction.CheckAndUpdateProjectedViews);
- }
- }
- break;
- case ViewAction.CheckAndUpdateProjectedViews:
- if ((viewState & 128 /* Destroyed */) === 0) {
- if (viewState & 32 /* CheckProjectedView */) {
- checkAndUpdateView(view);
- }
- else if (viewState & 64 /* CheckProjectedViews */) {
- execProjectedViewsAction(view, action);
- }
- }
- break;
- case ViewAction.Destroy:
- // Note: destroyView recurses over all views,
- // so we don't need to special case projected views here.
- destroyView(view);
- break;
- case ViewAction.CreateViewNodes:
- createViewNodes(view);
- break;
- }
- }
- function execProjectedViewsAction(view, action) {
- execEmbeddedViewsAction(view, action);
- execComponentViewsAction(view, action);
- }
- function execQueriesAction(view, queryFlags, staticDynamicQueryFlag, checkType) {
- if (!(view.def.nodeFlags & queryFlags) || !(view.def.nodeFlags & staticDynamicQueryFlag)) {
- return;
- }
- const nodeCount = view.def.nodes.length;
- for (let i = 0; i < nodeCount; i++) {
- const nodeDef = view.def.nodes[i];
- if ((nodeDef.flags & queryFlags) && (nodeDef.flags & staticDynamicQueryFlag)) {
- Services.setCurrentNode(view, nodeDef.nodeIndex);
- switch (checkType) {
- case 0 /* CheckAndUpdate */:
- checkAndUpdateQuery(view, nodeDef);
- break;
- case 1 /* CheckNoChanges */:
- checkNoChangesQuery(view, nodeDef);
- break;
- }
- }
- if (!(nodeDef.childFlags & queryFlags) || !(nodeDef.childFlags & staticDynamicQueryFlag)) {
- // no child has a matching query
- // then skip the children
- i += nodeDef.childCount;
- }
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- let initialized = false;
- function initServicesIfNeeded() {
- if (initialized) {
- return;
- }
- initialized = true;
- const services = isDevMode() ? createDebugServices() : createProdServices();
- Services.setCurrentNode = services.setCurrentNode;
- Services.createRootView = services.createRootView;
- Services.createEmbeddedView = services.createEmbeddedView;
- Services.createComponentView = services.createComponentView;
- Services.createNgModuleRef = services.createNgModuleRef;
- Services.overrideProvider = services.overrideProvider;
- Services.overrideComponentView = services.overrideComponentView;
- Services.clearOverrides = services.clearOverrides;
- Services.checkAndUpdateView = services.checkAndUpdateView;
- Services.checkNoChangesView = services.checkNoChangesView;
- Services.destroyView = services.destroyView;
- Services.resolveDep = resolveDep;
- Services.createDebugContext = services.createDebugContext;
- Services.handleEvent = services.handleEvent;
- Services.updateDirectives = services.updateDirectives;
- Services.updateRenderer = services.updateRenderer;
- Services.dirtyParentQueries = dirtyParentQueries;
- }
- function createProdServices() {
- return {
- setCurrentNode: () => { },
- createRootView: createProdRootView,
- createEmbeddedView: createEmbeddedView,
- createComponentView: createComponentView,
- createNgModuleRef: createNgModuleRef,
- overrideProvider: NOOP,
- overrideComponentView: NOOP,
- clearOverrides: NOOP,
- checkAndUpdateView: checkAndUpdateView,
- checkNoChangesView: checkNoChangesView,
- destroyView: destroyView,
- createDebugContext: (view, nodeIndex) => new DebugContext_(view, nodeIndex),
- handleEvent: (view, nodeIndex, eventName, event) => view.def.handleEvent(view, nodeIndex, eventName, event),
- updateDirectives: (view, checkType) => view.def.updateDirectives(checkType === 0 /* CheckAndUpdate */ ? prodCheckAndUpdateNode : prodCheckNoChangesNode, view),
- updateRenderer: (view, checkType) => view.def.updateRenderer(checkType === 0 /* CheckAndUpdate */ ? prodCheckAndUpdateNode : prodCheckNoChangesNode, view),
- };
- }
- function createDebugServices() {
- return {
- setCurrentNode: debugSetCurrentNode,
- createRootView: debugCreateRootView,
- createEmbeddedView: debugCreateEmbeddedView,
- createComponentView: debugCreateComponentView,
- createNgModuleRef: debugCreateNgModuleRef,
- overrideProvider: debugOverrideProvider,
- overrideComponentView: debugOverrideComponentView,
- clearOverrides: debugClearOverrides,
- checkAndUpdateView: debugCheckAndUpdateView,
- checkNoChangesView: debugCheckNoChangesView,
- destroyView: debugDestroyView,
- createDebugContext: (view, nodeIndex) => new DebugContext_(view, nodeIndex),
- handleEvent: debugHandleEvent,
- updateDirectives: debugUpdateDirectives,
- updateRenderer: debugUpdateRenderer,
- };
- }
- function createProdRootView(elInjector, projectableNodes, rootSelectorOrNode, def, ngModule, context) {
- const rendererFactory = ngModule.injector.get(RendererFactory2);
- return createRootView(createRootData(elInjector, ngModule, rendererFactory, projectableNodes, rootSelectorOrNode), def, context);
- }
- function debugCreateRootView(elInjector, projectableNodes, rootSelectorOrNode, def, ngModule, context) {
- const rendererFactory = ngModule.injector.get(RendererFactory2);
- const root = createRootData(elInjector, ngModule, new DebugRendererFactory2(rendererFactory), projectableNodes, rootSelectorOrNode);
- const defWithOverride = applyProviderOverridesToView(def);
- return callWithDebugContext(DebugAction.create, createRootView, null, [root, defWithOverride, context]);
- }
- function createRootData(elInjector, ngModule, rendererFactory, projectableNodes, rootSelectorOrNode) {
- const sanitizer = ngModule.injector.get(Sanitizer);
- const errorHandler = ngModule.injector.get(ErrorHandler);
- const renderer = rendererFactory.createRenderer(null, null);
- return {
- ngModule,
- injector: elInjector,
- projectableNodes,
- selectorOrNode: rootSelectorOrNode,
- sanitizer,
- rendererFactory,
- renderer,
- errorHandler
- };
- }
- function debugCreateEmbeddedView(parentView, anchorDef, viewDef, context) {
- const defWithOverride = applyProviderOverridesToView(viewDef);
- return callWithDebugContext(DebugAction.create, createEmbeddedView, null, [parentView, anchorDef, defWithOverride, context]);
- }
- function debugCreateComponentView(parentView, nodeDef, viewDef, hostElement) {
- const overrideComponentView = viewDefOverrides.get(nodeDef.element.componentProvider.provider.token);
- if (overrideComponentView) {
- viewDef = overrideComponentView;
- }
- else {
- viewDef = applyProviderOverridesToView(viewDef);
- }
- return callWithDebugContext(DebugAction.create, createComponentView, null, [parentView, nodeDef, viewDef, hostElement]);
- }
- function debugCreateNgModuleRef(moduleType, parentInjector, bootstrapComponents, def) {
- const defWithOverride = applyProviderOverridesToNgModule(def);
- return createNgModuleRef(moduleType, parentInjector, bootstrapComponents, defWithOverride);
- }
- const providerOverrides = new Map();
- const providerOverridesWithScope = new Map();
- const viewDefOverrides = new Map();
- function debugOverrideProvider(override) {
- providerOverrides.set(override.token, override);
- let injectableDef;
- if (typeof override.token === 'function' && (injectableDef = getInjectableDef(override.token)) &&
- typeof injectableDef.providedIn === 'function') {
- providerOverridesWithScope.set(override.token, override);
- }
- }
- function debugOverrideComponentView(comp, compFactory) {
- const hostViewDef = resolveDefinition(getComponentViewDefinitionFactory(compFactory));
- const compViewDef = resolveDefinition(hostViewDef.nodes[0].element.componentView);
- viewDefOverrides.set(comp, compViewDef);
- }
- function debugClearOverrides() {
- providerOverrides.clear();
- providerOverridesWithScope.clear();
- viewDefOverrides.clear();
- }
- // Notes about the algorithm:
- // 1) Locate the providers of an element and check if one of them was overwritten
- // 2) Change the providers of that element
- //
- // We only create new datastructures if we need to, to keep perf impact
- // reasonable.
- function applyProviderOverridesToView(def) {
- if (providerOverrides.size === 0) {
- return def;
- }
- const elementIndicesWithOverwrittenProviders = findElementIndicesWithOverwrittenProviders(def);
- if (elementIndicesWithOverwrittenProviders.length === 0) {
- return def;
- }
- // clone the whole view definition,
- // as it maintains references between the nodes that are hard to update.
- def = def.factory(() => NOOP);
- for (let i = 0; i < elementIndicesWithOverwrittenProviders.length; i++) {
- applyProviderOverridesToElement(def, elementIndicesWithOverwrittenProviders[i]);
- }
- return def;
- function findElementIndicesWithOverwrittenProviders(def) {
- const elIndicesWithOverwrittenProviders = [];
- let lastElementDef = null;
- for (let i = 0; i < def.nodes.length; i++) {
- const nodeDef = def.nodes[i];
- if (nodeDef.flags & 1 /* TypeElement */) {
- lastElementDef = nodeDef;
- }
- if (lastElementDef && nodeDef.flags & 3840 /* CatProviderNoDirective */ &&
- providerOverrides.has(nodeDef.provider.token)) {
- elIndicesWithOverwrittenProviders.push(lastElementDef.nodeIndex);
- lastElementDef = null;
- }
- }
- return elIndicesWithOverwrittenProviders;
- }
- function applyProviderOverridesToElement(viewDef, elIndex) {
- for (let i = elIndex + 1; i < viewDef.nodes.length; i++) {
- const nodeDef = viewDef.nodes[i];
- if (nodeDef.flags & 1 /* TypeElement */) {
- // stop at the next element
- return;
- }
- if (nodeDef.flags & 3840 /* CatProviderNoDirective */) {
- const provider = nodeDef.provider;
- const override = providerOverrides.get(provider.token);
- if (override) {
- nodeDef.flags = (nodeDef.flags & ~3840 /* CatProviderNoDirective */) | override.flags;
- provider.deps = splitDepsDsl(override.deps);
- provider.value = override.value;
- }
- }
- }
- }
- }
- // Notes about the algorithm:
- // We only create new datastructures if we need to, to keep perf impact
- // reasonable.
- function applyProviderOverridesToNgModule(def) {
- const { hasOverrides, hasDeprecatedOverrides } = calcHasOverrides(def);
- if (!hasOverrides) {
- return def;
- }
- // clone the whole view definition,
- // as it maintains references between the nodes that are hard to update.
- def = def.factory(() => NOOP);
- applyProviderOverrides(def);
- return def;
- function calcHasOverrides(def) {
- let hasOverrides = false;
- let hasDeprecatedOverrides = false;
- if (providerOverrides.size === 0) {
- return { hasOverrides, hasDeprecatedOverrides };
- }
- def.providers.forEach(node => {
- const override = providerOverrides.get(node.token);
- if ((node.flags & 3840 /* CatProviderNoDirective */) && override) {
- hasOverrides = true;
- hasDeprecatedOverrides = hasDeprecatedOverrides || override.deprecatedBehavior;
- }
- });
- def.modules.forEach(module => {
- providerOverridesWithScope.forEach((override, token) => {
- if (getInjectableDef(token).providedIn === module) {
- hasOverrides = true;
- hasDeprecatedOverrides = hasDeprecatedOverrides || override.deprecatedBehavior;
- }
- });
- });
- return { hasOverrides, hasDeprecatedOverrides };
- }
- function applyProviderOverrides(def) {
- for (let i = 0; i < def.providers.length; i++) {
- const provider = def.providers[i];
- if (hasDeprecatedOverrides) {
- // We had a bug where me made
- // all providers lazy. Keep this logic behind a flag
- // for migrating existing users.
- provider.flags |= 4096 /* LazyProvider */;
- }
- const override = providerOverrides.get(provider.token);
- if (override) {
- provider.flags = (provider.flags & ~3840 /* CatProviderNoDirective */) | override.flags;
- provider.deps = splitDepsDsl(override.deps);
- provider.value = override.value;
- }
- }
- if (providerOverridesWithScope.size > 0) {
- let moduleSet = new Set(def.modules);
- providerOverridesWithScope.forEach((override, token) => {
- if (moduleSet.has(getInjectableDef(token).providedIn)) {
- let provider = {
- token: token,
- flags: override.flags | (hasDeprecatedOverrides ? 4096 /* LazyProvider */ : 0 /* None */),
- deps: splitDepsDsl(override.deps),
- value: override.value,
- index: def.providers.length,
- };
- def.providers.push(provider);
- def.providersByKey[tokenKey(token)] = provider;
- }
- });
- }
- }
- }
- function prodCheckAndUpdateNode(view, checkIndex, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
- const nodeDef = view.def.nodes[checkIndex];
- checkAndUpdateNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
- return (nodeDef.flags & 224 /* CatPureExpression */) ?
- asPureExpressionData(view, checkIndex).value :
- undefined;
- }
- function prodCheckNoChangesNode(view, checkIndex, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
- const nodeDef = view.def.nodes[checkIndex];
- checkNoChangesNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
- return (nodeDef.flags & 224 /* CatPureExpression */) ?
- asPureExpressionData(view, checkIndex).value :
- undefined;
- }
- function debugCheckAndUpdateView(view) {
- return callWithDebugContext(DebugAction.detectChanges, checkAndUpdateView, null, [view]);
- }
- function debugCheckNoChangesView(view) {
- return callWithDebugContext(DebugAction.checkNoChanges, checkNoChangesView, null, [view]);
- }
- function debugDestroyView(view) {
- return callWithDebugContext(DebugAction.destroy, destroyView, null, [view]);
- }
- var DebugAction;
- (function (DebugAction) {
- DebugAction[DebugAction["create"] = 0] = "create";
- DebugAction[DebugAction["detectChanges"] = 1] = "detectChanges";
- DebugAction[DebugAction["checkNoChanges"] = 2] = "checkNoChanges";
- DebugAction[DebugAction["destroy"] = 3] = "destroy";
- DebugAction[DebugAction["handleEvent"] = 4] = "handleEvent";
- })(DebugAction || (DebugAction = {}));
- let _currentAction;
- let _currentView;
- let _currentNodeIndex;
- function debugSetCurrentNode(view, nodeIndex) {
- _currentView = view;
- _currentNodeIndex = nodeIndex;
- }
- function debugHandleEvent(view, nodeIndex, eventName, event) {
- debugSetCurrentNode(view, nodeIndex);
- return callWithDebugContext(DebugAction.handleEvent, view.def.handleEvent, null, [view, nodeIndex, eventName, event]);
- }
- function debugUpdateDirectives(view, checkType) {
- if (view.state & 128 /* Destroyed */) {
- throw viewDestroyedError(DebugAction[_currentAction]);
- }
- debugSetCurrentNode(view, nextDirectiveWithBinding(view, 0));
- return view.def.updateDirectives(debugCheckDirectivesFn, view);
- function debugCheckDirectivesFn(view, nodeIndex, argStyle, ...values) {
- const nodeDef = view.def.nodes[nodeIndex];
- if (checkType === 0 /* CheckAndUpdate */) {
- debugCheckAndUpdateNode(view, nodeDef, argStyle, values);
- }
- else {
- debugCheckNoChangesNode(view, nodeDef, argStyle, values);
- }
- if (nodeDef.flags & 16384 /* TypeDirective */) {
- debugSetCurrentNode(view, nextDirectiveWithBinding(view, nodeIndex));
- }
- return (nodeDef.flags & 224 /* CatPureExpression */) ?
- asPureExpressionData(view, nodeDef.nodeIndex).value :
- undefined;
- }
- }
- function debugUpdateRenderer(view, checkType) {
- if (view.state & 128 /* Destroyed */) {
- throw viewDestroyedError(DebugAction[_currentAction]);
- }
- debugSetCurrentNode(view, nextRenderNodeWithBinding(view, 0));
- return view.def.updateRenderer(debugCheckRenderNodeFn, view);
- function debugCheckRenderNodeFn(view, nodeIndex, argStyle, ...values) {
- const nodeDef = view.def.nodes[nodeIndex];
- if (checkType === 0 /* CheckAndUpdate */) {
- debugCheckAndUpdateNode(view, nodeDef, argStyle, values);
- }
- else {
- debugCheckNoChangesNode(view, nodeDef, argStyle, values);
- }
- if (nodeDef.flags & 3 /* CatRenderNode */) {
- debugSetCurrentNode(view, nextRenderNodeWithBinding(view, nodeIndex));
- }
- return (nodeDef.flags & 224 /* CatPureExpression */) ?
- asPureExpressionData(view, nodeDef.nodeIndex).value :
- undefined;
- }
- }
- function debugCheckAndUpdateNode(view, nodeDef, argStyle, givenValues) {
- const changed = checkAndUpdateNode(view, nodeDef, argStyle, ...givenValues);
- if (changed) {
- const values = argStyle === 1 /* Dynamic */ ? givenValues[0] : givenValues;
- if (nodeDef.flags & 16384 /* TypeDirective */) {
- const bindingValues = {};
- for (let i = 0; i < nodeDef.bindings.length; i++) {
- const binding = nodeDef.bindings[i];
- const value = values[i];
- if (binding.flags & 8 /* TypeProperty */) {
- bindingValues[normalizeDebugBindingName(binding.nonMinifiedName)] =
- normalizeDebugBindingValue(value);
- }
- }
- const elDef = nodeDef.parent;
- const el = asElementData(view, elDef.nodeIndex).renderElement;
- if (!elDef.element.name) {
- // a comment.
- view.renderer.setValue(el, `bindings=${JSON.stringify(bindingValues, null, 2)}`);
- }
- else {
- // a regular element.
- for (let attr in bindingValues) {
- const value = bindingValues[attr];
- if (value != null) {
- view.renderer.setAttribute(el, attr, value);
- }
- else {
- view.renderer.removeAttribute(el, attr);
- }
- }
- }
- }
- }
- }
- function debugCheckNoChangesNode(view, nodeDef, argStyle, values) {
- checkNoChangesNode(view, nodeDef, argStyle, ...values);
- }
- function nextDirectiveWithBinding(view, nodeIndex) {
- for (let i = nodeIndex; i < view.def.nodes.length; i++) {
- const nodeDef = view.def.nodes[i];
- if (nodeDef.flags & 16384 /* TypeDirective */ && nodeDef.bindings && nodeDef.bindings.length) {
- return i;
- }
- }
- return null;
- }
- function nextRenderNodeWithBinding(view, nodeIndex) {
- for (let i = nodeIndex; i < view.def.nodes.length; i++) {
- const nodeDef = view.def.nodes[i];
- if ((nodeDef.flags & 3 /* CatRenderNode */) && nodeDef.bindings && nodeDef.bindings.length) {
- return i;
- }
- }
- return null;
- }
- class DebugContext_ {
- constructor(view, nodeIndex) {
- this.view = view;
- this.nodeIndex = nodeIndex;
- if (nodeIndex == null) {
- this.nodeIndex = nodeIndex = 0;
- }
- this.nodeDef = view.def.nodes[nodeIndex];
- let elDef = this.nodeDef;
- let elView = view;
- while (elDef && (elDef.flags & 1 /* TypeElement */) === 0) {
- elDef = elDef.parent;
- }
- if (!elDef) {
- while (!elDef && elView) {
- elDef = viewParentEl(elView);
- elView = elView.parent;
- }
- }
- this.elDef = elDef;
- this.elView = elView;
- }
- get elOrCompView() {
- // Has to be done lazily as we use the DebugContext also during creation of elements...
- return asElementData(this.elView, this.elDef.nodeIndex).componentView || this.view;
- }
- get injector() {
- return createInjector$1(this.elView, this.elDef);
- }
- get component() {
- return this.elOrCompView.component;
- }
- get context() {
- return this.elOrCompView.context;
- }
- get providerTokens() {
- const tokens = [];
- if (this.elDef) {
- for (let i = this.elDef.nodeIndex + 1; i <= this.elDef.nodeIndex + this.elDef.childCount; i++) {
- const childDef = this.elView.def.nodes[i];
- if (childDef.flags & 20224 /* CatProvider */) {
- tokens.push(childDef.provider.token);
- }
- i += childDef.childCount;
- }
- }
- return tokens;
- }
- get references() {
- const references = {};
- if (this.elDef) {
- collectReferences(this.elView, this.elDef, references);
- for (let i = this.elDef.nodeIndex + 1; i <= this.elDef.nodeIndex + this.elDef.childCount; i++) {
- const childDef = this.elView.def.nodes[i];
- if (childDef.flags & 20224 /* CatProvider */) {
- collectReferences(this.elView, childDef, references);
- }
- i += childDef.childCount;
- }
- }
- return references;
- }
- get componentRenderElement() {
- const elData = findHostElement(this.elOrCompView);
- return elData ? elData.renderElement : undefined;
- }
- get renderNode() {
- return this.nodeDef.flags & 2 /* TypeText */ ? renderNode(this.view, this.nodeDef) :
- renderNode(this.elView, this.elDef);
- }
- logError(console, ...values) {
- let logViewDef;
- let logNodeIndex;
- if (this.nodeDef.flags & 2 /* TypeText */) {
- logViewDef = this.view.def;
- logNodeIndex = this.nodeDef.nodeIndex;
- }
- else {
- logViewDef = this.elView.def;
- logNodeIndex = this.elDef.nodeIndex;
- }
- // Note: we only generate a log function for text and element nodes
- // to make the generated code as small as possible.
- const renderNodeIndex = getRenderNodeIndex(logViewDef, logNodeIndex);
- let currRenderNodeIndex = -1;
- let nodeLogger = () => {
- currRenderNodeIndex++;
- if (currRenderNodeIndex === renderNodeIndex) {
- return console.error.bind(console, ...values);
- }
- else {
- return NOOP;
- }
- };
- logViewDef.factory(nodeLogger);
- if (currRenderNodeIndex < renderNodeIndex) {
- console.error('Illegal state: the ViewDefinitionFactory did not call the logger!');
- console.error(...values);
- }
- }
- }
- function getRenderNodeIndex(viewDef, nodeIndex) {
- let renderNodeIndex = -1;
- for (let i = 0; i <= nodeIndex; i++) {
- const nodeDef = viewDef.nodes[i];
- if (nodeDef.flags & 3 /* CatRenderNode */) {
- renderNodeIndex++;
- }
- }
- return renderNodeIndex;
- }
- function findHostElement(view) {
- while (view && !isComponentView(view)) {
- view = view.parent;
- }
- if (view.parent) {
- return asElementData(view.parent, viewParentEl(view).nodeIndex);
- }
- return null;
- }
- function collectReferences(view, nodeDef, references) {
- for (let refName in nodeDef.references) {
- references[refName] = getQueryValue(view, nodeDef, nodeDef.references[refName]);
- }
- }
- function callWithDebugContext(action, fn, self, args) {
- const oldAction = _currentAction;
- const oldView = _currentView;
- const oldNodeIndex = _currentNodeIndex;
- try {
- _currentAction = action;
- const result = fn.apply(self, args);
- _currentView = oldView;
- _currentNodeIndex = oldNodeIndex;
- _currentAction = oldAction;
- return result;
- }
- catch (e) {
- if (isViewDebugError(e) || !_currentView) {
- throw e;
- }
- throw viewWrappedDebugError(e, getCurrentDebugContext());
- }
- }
- function getCurrentDebugContext() {
- return _currentView ? new DebugContext_(_currentView, _currentNodeIndex) : null;
- }
- class DebugRendererFactory2 {
- constructor(delegate) {
- this.delegate = delegate;
- }
- createRenderer(element, renderData) {
- return new DebugRenderer2(this.delegate.createRenderer(element, renderData));
- }
- begin() {
- if (this.delegate.begin) {
- this.delegate.begin();
- }
- }
- end() {
- if (this.delegate.end) {
- this.delegate.end();
- }
- }
- whenRenderingDone() {
- if (this.delegate.whenRenderingDone) {
- return this.delegate.whenRenderingDone();
- }
- return Promise.resolve(null);
- }
- }
- class DebugRenderer2 {
- constructor(delegate) {
- this.delegate = delegate;
- /**
- * Factory function used to create a `DebugContext` when a node is created.
- *
- * The `DebugContext` allows to retrieve information about the nodes that are useful in tests.
- *
- * The factory is configurable so that the `DebugRenderer2` could instantiate either a View Engine
- * or a Render context.
- */
- this.debugContextFactory = getCurrentDebugContext;
- this.data = this.delegate.data;
- }
- createDebugContext(nativeElement) {
- return this.debugContextFactory(nativeElement);
- }
- destroyNode(node) {
- const debugNode = getDebugNode$1(node);
- removeDebugNodeFromIndex(debugNode);
- if (debugNode instanceof DebugNode__PRE_R3__) {
- debugNode.listeners.length = 0;
- }
- if (this.delegate.destroyNode) {
- this.delegate.destroyNode(node);
- }
- }
- destroy() {
- this.delegate.destroy();
- }
- createElement(name, namespace) {
- const el = this.delegate.createElement(name, namespace);
- const debugCtx = this.createDebugContext(el);
- if (debugCtx) {
- const debugEl = new DebugElement__PRE_R3__(el, null, debugCtx);
- debugEl.name = name;
- indexDebugNode(debugEl);
- }
- return el;
- }
- createComment(value) {
- const comment = this.delegate.createComment(value);
- const debugCtx = this.createDebugContext(comment);
- if (debugCtx) {
- indexDebugNode(new DebugNode__PRE_R3__(comment, null, debugCtx));
- }
- return comment;
- }
- createText(value) {
- const text = this.delegate.createText(value);
- const debugCtx = this.createDebugContext(text);
- if (debugCtx) {
- indexDebugNode(new DebugNode__PRE_R3__(text, null, debugCtx));
- }
- return text;
- }
- appendChild(parent, newChild) {
- const debugEl = getDebugNode$1(parent);
- const debugChildEl = getDebugNode$1(newChild);
- if (debugEl && debugChildEl && debugEl instanceof DebugElement__PRE_R3__) {
- debugEl.addChild(debugChildEl);
- }
- this.delegate.appendChild(parent, newChild);
- }
- insertBefore(parent, newChild, refChild, isMove) {
- const debugEl = getDebugNode$1(parent);
- const debugChildEl = getDebugNode$1(newChild);
- const debugRefEl = getDebugNode$1(refChild);
- if (debugEl && debugChildEl && debugEl instanceof DebugElement__PRE_R3__) {
- debugEl.insertBefore(debugRefEl, debugChildEl);
- }
- this.delegate.insertBefore(parent, newChild, refChild, isMove);
- }
- removeChild(parent, oldChild) {
- const debugEl = getDebugNode$1(parent);
- const debugChildEl = getDebugNode$1(oldChild);
- if (debugEl && debugChildEl && debugEl instanceof DebugElement__PRE_R3__) {
- debugEl.removeChild(debugChildEl);
- }
- this.delegate.removeChild(parent, oldChild);
- }
- selectRootElement(selectorOrNode, preserveContent) {
- const el = this.delegate.selectRootElement(selectorOrNode, preserveContent);
- const debugCtx = getCurrentDebugContext();
- if (debugCtx) {
- indexDebugNode(new DebugElement__PRE_R3__(el, null, debugCtx));
- }
- return el;
- }
- setAttribute(el, name, value, namespace) {
- const debugEl = getDebugNode$1(el);
- if (debugEl && debugEl instanceof DebugElement__PRE_R3__) {
- const fullName = namespace ? namespace + ':' + name : name;
- debugEl.attributes[fullName] = value;
- }
- this.delegate.setAttribute(el, name, value, namespace);
- }
- removeAttribute(el, name, namespace) {
- const debugEl = getDebugNode$1(el);
- if (debugEl && debugEl instanceof DebugElement__PRE_R3__) {
- const fullName = namespace ? namespace + ':' + name : name;
- debugEl.attributes[fullName] = null;
- }
- this.delegate.removeAttribute(el, name, namespace);
- }
- addClass(el, name) {
- const debugEl = getDebugNode$1(el);
- if (debugEl && debugEl instanceof DebugElement__PRE_R3__) {
- debugEl.classes[name] = true;
- }
- this.delegate.addClass(el, name);
- }
- removeClass(el, name) {
- const debugEl = getDebugNode$1(el);
- if (debugEl && debugEl instanceof DebugElement__PRE_R3__) {
- debugEl.classes[name] = false;
- }
- this.delegate.removeClass(el, name);
- }
- setStyle(el, style, value, flags) {
- const debugEl = getDebugNode$1(el);
- if (debugEl && debugEl instanceof DebugElement__PRE_R3__) {
- debugEl.styles[style] = value;
- }
- this.delegate.setStyle(el, style, value, flags);
- }
- removeStyle(el, style, flags) {
- const debugEl = getDebugNode$1(el);
- if (debugEl && debugEl instanceof DebugElement__PRE_R3__) {
- debugEl.styles[style] = null;
- }
- this.delegate.removeStyle(el, style, flags);
- }
- setProperty(el, name, value) {
- const debugEl = getDebugNode$1(el);
- if (debugEl && debugEl instanceof DebugElement__PRE_R3__) {
- debugEl.properties[name] = value;
- }
- this.delegate.setProperty(el, name, value);
- }
- listen(target, eventName, callback) {
- if (typeof target !== 'string') {
- const debugEl = getDebugNode$1(target);
- if (debugEl) {
- debugEl.listeners.push(new DebugEventListener(eventName, callback));
- }
- }
- return this.delegate.listen(target, eventName, callback);
- }
- parentNode(node) {
- return this.delegate.parentNode(node);
- }
- nextSibling(node) {
- return this.delegate.nextSibling(node);
- }
- setValue(node, value) {
- return this.delegate.setValue(node, value);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function overrideProvider(override) {
- initServicesIfNeeded();
- return Services.overrideProvider(override);
- }
- function overrideComponentView(comp, componentFactory) {
- initServicesIfNeeded();
- return Services.overrideComponentView(comp, componentFactory);
- }
- function clearOverrides() {
- initServicesIfNeeded();
- return Services.clearOverrides();
- }
- // Attention: this function is called as top level function.
- // Putting any logic in here will destroy closure tree shaking!
- function createNgModuleFactory(ngModuleType, bootstrapComponents, defFactory) {
- return new NgModuleFactory_(ngModuleType, bootstrapComponents, defFactory);
- }
- function cloneNgModuleDefinition(def) {
- const providers = Array.from(def.providers);
- const modules = Array.from(def.modules);
- const providersByKey = {};
- for (const key in def.providersByKey) {
- providersByKey[key] = def.providersByKey[key];
- }
- return {
- factory: def.factory,
- scope: def.scope,
- providers,
- modules,
- providersByKey,
- };
- }
- class NgModuleFactory_ extends NgModuleFactory {
- constructor(moduleType, _bootstrapComponents, _ngModuleDefFactory) {
- // Attention: this ctor is called as top level function.
- // Putting any logic in here will destroy closure tree shaking!
- super();
- this.moduleType = moduleType;
- this._bootstrapComponents = _bootstrapComponents;
- this._ngModuleDefFactory = _ngModuleDefFactory;
- }
- create(parentInjector) {
- initServicesIfNeeded();
- // Clone the NgModuleDefinition so that any tree shakeable provider definition
- // added to this instance of the NgModuleRef doesn't affect the cached copy.
- // See https://github.com/angular/angular/issues/25018.
- const def = cloneNgModuleDefinition(resolveDefinition(this._ngModuleDefFactory));
- return Services.createNgModuleRef(this.moduleType, parentInjector || Injector.NULL, this._bootstrapComponents, def);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // clang-format on
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- if (typeof ngDevMode !== 'undefined' && ngDevMode) {
- // This helper is to give a reasonable error message to people upgrading to v9 that have not yet
- // installed `@angular/localize` in their app.
- // tslint:disable-next-line: no-toplevel-property-access
- _global.$localize = _global.$localize || function () {
- throw new Error('It looks like your application or one of its dependencies is using i18n.\n' +
- 'Angular 9 introduced a global `$localize()` function that needs to be loaded.\n' +
- 'Please run `ng add @angular/localize` from the Angular CLI.\n' +
- '(For non-CLI projects, add `import \'@angular/localize/init\';` to your `polyfills.ts` file.\n' +
- 'For server-side rendering applications add the import to your `main.server.ts` file.)');
- };
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // This file only reexports content of the `src` folder. Keep it that way.
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=core.js.map
- /***/ }),
- /***/ "gRHU":
- /*!*********************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/Observer.js ***!
- \*********************************************************/
- /*! exports provided: empty */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empty", function() { return empty; });
- /* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config */ "2fFW");
- /* harmony import */ var _util_hostReportError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/hostReportError */ "NJ4a");
- const empty = {
- closed: true,
- next(value) { },
- error(err) {
- if (_config__WEBPACK_IMPORTED_MODULE_0__["config"].useDeprecatedSynchronousErrorHandling) {
- throw err;
- }
- else {
- Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_1__["hostReportError"])(err);
- }
- },
- complete() { }
- };
- //# sourceMappingURL=Observer.js.map
- /***/ }),
- /***/ "gcYM":
- /*!***********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/throttleTime.js ***!
- \***********************************************************************/
- /*! exports provided: throttleTime */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "throttleTime", function() { return throttleTime; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../scheduler/async */ "D0XW");
- /* harmony import */ var _throttle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./throttle */ "yuhW");
- function throttleTime(duration, scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"], config = _throttle__WEBPACK_IMPORTED_MODULE_2__["defaultThrottleConfig"]) {
- return (source) => source.lift(new ThrottleTimeOperator(duration, scheduler, config.leading, config.trailing));
- }
- class ThrottleTimeOperator {
- constructor(duration, scheduler, leading, trailing) {
- this.duration = duration;
- this.scheduler = scheduler;
- this.leading = leading;
- this.trailing = trailing;
- }
- call(subscriber, source) {
- return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler, this.leading, this.trailing));
- }
- }
- class ThrottleTimeSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, duration, scheduler, leading, trailing) {
- super(destination);
- this.duration = duration;
- this.scheduler = scheduler;
- this.leading = leading;
- this.trailing = trailing;
- this._hasTrailingValue = false;
- this._trailingValue = null;
- }
- _next(value) {
- if (this.throttled) {
- if (this.trailing) {
- this._trailingValue = value;
- this._hasTrailingValue = true;
- }
- }
- else {
- this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, { subscriber: this }));
- if (this.leading) {
- this.destination.next(value);
- }
- else if (this.trailing) {
- this._trailingValue = value;
- this._hasTrailingValue = true;
- }
- }
- }
- _complete() {
- if (this._hasTrailingValue) {
- this.destination.next(this._trailingValue);
- this.destination.complete();
- }
- else {
- this.destination.complete();
- }
- }
- clearThrottle() {
- const throttled = this.throttled;
- if (throttled) {
- if (this.trailing && this._hasTrailingValue) {
- this.destination.next(this._trailingValue);
- this._trailingValue = null;
- this._hasTrailingValue = false;
- }
- throttled.unsubscribe();
- this.remove(throttled);
- this.throttled = null;
- }
- }
- }
- function dispatchNext(arg) {
- const { subscriber } = arg;
- subscriber.clearThrottle();
- }
- //# sourceMappingURL=throttleTime.js.map
- /***/ }),
- /***/ "hKy8":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/pairs.js ***!
- \*****************************************************************/
- /*! exports provided: pairs, dispatch */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pairs", function() { return pairs; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dispatch", function() { return dispatch; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Subscription */ "quSY");
- function pairs(obj, scheduler) {
- if (!scheduler) {
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- const keys = Object.keys(obj);
- for (let i = 0; i < keys.length && !subscriber.closed; i++) {
- const key = keys[i];
- if (obj.hasOwnProperty(key)) {
- subscriber.next([key, obj[key]]);
- }
- }
- subscriber.complete();
- });
- }
- else {
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- const keys = Object.keys(obj);
- const subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
- subscription.add(scheduler.schedule(dispatch, 0, { keys, index: 0, subscriber, subscription, obj }));
- return subscription;
- });
- }
- }
- function dispatch(state) {
- const { keys, index, subscriber, subscription, obj } = state;
- if (!subscriber.closed) {
- if (index < keys.length) {
- const key = keys[index];
- subscriber.next([key, obj[key]]);
- subscription.add(this.schedule({ keys, index: index + 1, subscriber, subscription, obj }));
- }
- else {
- subscriber.complete();
- }
- }
- }
- //# sourceMappingURL=pairs.js.map
- /***/ }),
- /***/ "iKkX":
- /*!*******************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduler/VirtualTimeScheduler.js ***!
- \*******************************************************************************/
- /*! exports provided: VirtualTimeScheduler, VirtualAction */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VirtualTimeScheduler", function() { return VirtualTimeScheduler; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VirtualAction", function() { return VirtualAction; });
- /* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsyncAction */ "3N8a");
- /* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AsyncScheduler */ "IjjT");
- class VirtualTimeScheduler extends _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__["AsyncScheduler"] {
- constructor(SchedulerAction = VirtualAction, maxFrames = Number.POSITIVE_INFINITY) {
- super(SchedulerAction, () => this.frame);
- this.maxFrames = maxFrames;
- this.frame = 0;
- this.index = -1;
- }
- flush() {
- const { actions, maxFrames } = this;
- let error, action;
- while ((action = actions[0]) && action.delay <= maxFrames) {
- actions.shift();
- this.frame = action.delay;
- if (error = action.execute(action.state, action.delay)) {
- break;
- }
- }
- if (error) {
- while (action = actions.shift()) {
- action.unsubscribe();
- }
- throw error;
- }
- }
- }
- VirtualTimeScheduler.frameTimeFactor = 10;
- class VirtualAction extends _AsyncAction__WEBPACK_IMPORTED_MODULE_0__["AsyncAction"] {
- constructor(scheduler, work, index = scheduler.index += 1) {
- super(scheduler, work);
- this.scheduler = scheduler;
- this.work = work;
- this.index = index;
- this.active = true;
- this.index = scheduler.index = index;
- }
- schedule(state, delay = 0) {
- if (!this.id) {
- return super.schedule(state, delay);
- }
- this.active = false;
- const action = new VirtualAction(this.scheduler, this.work);
- this.add(action);
- return action.schedule(state, delay);
- }
- requestAsyncId(scheduler, id, delay = 0) {
- this.delay = scheduler.frame + delay;
- const { actions } = scheduler;
- actions.push(this);
- actions.sort(VirtualAction.sortActions);
- return true;
- }
- recycleAsyncId(scheduler, id, delay = 0) {
- return undefined;
- }
- _execute(state, delay) {
- if (this.active === true) {
- return super._execute(state, delay);
- }
- }
- static sortActions(a, b) {
- if (a.delay === b.delay) {
- if (a.index === b.index) {
- return 0;
- }
- else if (a.index > b.index) {
- return 1;
- }
- else {
- return -1;
- }
- }
- else if (a.delay > b.delay) {
- return 1;
- }
- else {
- return -1;
- }
- }
- }
- //# sourceMappingURL=VirtualTimeScheduler.js.map
- /***/ }),
- /***/ "itXk":
- /*!*************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/combineLatest.js ***!
- \*************************************************************************/
- /*! exports provided: combineLatest, CombineLatestOperator, CombineLatestSubscriber */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return combineLatest; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CombineLatestOperator", function() { return CombineLatestOperator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CombineLatestSubscriber", function() { return CombineLatestSubscriber; });
- /* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/isScheduler */ "z+Ro");
- /* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/isArray */ "DH7j");
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- /* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./fromArray */ "yCtX");
- const NONE = {};
- function combineLatest(...observables) {
- let resultSelector = null;
- let scheduler = null;
- if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__["isScheduler"])(observables[observables.length - 1])) {
- scheduler = observables.pop();
- }
- if (typeof observables[observables.length - 1] === 'function') {
- resultSelector = observables.pop();
- }
- if (observables.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(observables[0])) {
- observables = observables[0];
- }
- return Object(_fromArray__WEBPACK_IMPORTED_MODULE_4__["fromArray"])(observables, scheduler).lift(new CombineLatestOperator(resultSelector));
- }
- class CombineLatestOperator {
- constructor(resultSelector) {
- this.resultSelector = resultSelector;
- }
- call(subscriber, source) {
- return source.subscribe(new CombineLatestSubscriber(subscriber, this.resultSelector));
- }
- }
- class CombineLatestSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"] {
- constructor(destination, resultSelector) {
- super(destination);
- this.resultSelector = resultSelector;
- this.active = 0;
- this.values = [];
- this.observables = [];
- }
- _next(observable) {
- this.values.push(NONE);
- this.observables.push(observable);
- }
- _complete() {
- const observables = this.observables;
- const len = observables.length;
- if (len === 0) {
- this.destination.complete();
- }
- else {
- this.active = len;
- this.toRespond = len;
- for (let i = 0; i < len; i++) {
- const observable = observables[i];
- this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, observable, observable, i));
- }
- }
- }
- notifyComplete(unused) {
- if ((this.active -= 1) === 0) {
- this.destination.complete();
- }
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- const values = this.values;
- const oldVal = values[outerIndex];
- const toRespond = !this.toRespond
- ? 0
- : oldVal === NONE ? --this.toRespond : this.toRespond;
- values[outerIndex] = innerValue;
- if (toRespond === 0) {
- if (this.resultSelector) {
- this._tryResultSelector(values);
- }
- else {
- this.destination.next(values.slice());
- }
- }
- }
- _tryResultSelector(values) {
- let result;
- try {
- result = this.resultSelector.apply(this, values);
- }
- catch (err) {
- this.destination.error(err);
- return;
- }
- this.destination.next(result);
- }
- }
- //# sourceMappingURL=combineLatest.js.map
- /***/ }),
- /***/ "jZKg":
- /*!************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduled/scheduleArray.js ***!
- \************************************************************************/
- /*! exports provided: scheduleArray */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheduleArray", function() { return scheduleArray; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Subscription */ "quSY");
- function scheduleArray(input, scheduler) {
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- const sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
- let i = 0;
- sub.add(scheduler.schedule(function () {
- if (i === input.length) {
- subscriber.complete();
- return;
- }
- subscriber.next(input[i++]);
- if (!subscriber.closed) {
- sub.add(this.schedule());
- }
- }));
- return sub;
- });
- }
- //# sourceMappingURL=scheduleArray.js.map
- /***/ }),
- /***/ "jhN1":
- /*!******************************************************************************************!*\
- !*** ./node_modules/@angular/platform-browser/__ivy_ngcc__/fesm2015/platform-browser.js ***!
- \******************************************************************************************/
- /*! exports provided: ɵgetDOM, BrowserModule, BrowserTransferStateModule, By, DomSanitizer, EVENT_MANAGER_PLUGINS, EventManager, HAMMER_GESTURE_CONFIG, HAMMER_LOADER, HammerGestureConfig, HammerModule, Meta, Title, TransferState, VERSION, disableDebugTools, enableDebugTools, makeStateKey, platformBrowser, ɵBROWSER_SANITIZATION_PROVIDERS, ɵBROWSER_SANITIZATION_PROVIDERS__POST_R3__, ɵBrowserDomAdapter, ɵBrowserGetTestability, ɵDomEventsPlugin, ɵDomRendererFactory2, ɵDomSanitizerImpl, ɵDomSharedStylesHost, ɵELEMENT_PROBE_PROVIDERS, ɵELEMENT_PROBE_PROVIDERS__POST_R3__, ɵHAMMER_PROVIDERS__POST_R3__, ɵHammerGesturesPlugin, ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS, ɵKeyEventsPlugin, ɵNAMESPACE_URIS, ɵSharedStylesHost, ɵTRANSITION_ID, ɵangular_packages_platform_browser_platform_browser_a, ɵangular_packages_platform_browser_platform_browser_b, ɵangular_packages_platform_browser_platform_browser_c, ɵangular_packages_platform_browser_platform_browser_d, ɵangular_packages_platform_browser_platform_browser_e, ɵangular_packages_platform_browser_platform_browser_f, ɵangular_packages_platform_browser_platform_browser_g, ɵangular_packages_platform_browser_platform_browser_h, ɵangular_packages_platform_browser_platform_browser_i, ɵangular_packages_platform_browser_platform_browser_j, ɵangular_packages_platform_browser_platform_browser_k, ɵangular_packages_platform_browser_platform_browser_l, ɵangular_packages_platform_browser_platform_browser_m, ɵangular_packages_platform_browser_platform_browser_n, ɵangular_packages_platform_browser_platform_browser_o, ɵescapeHtml, ɵflattenStyles, ɵinitDomAdapter, ɵshimContentAttribute, ɵshimHostAttribute */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BrowserModule", function() { return BrowserModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BrowserTransferStateModule", function() { return BrowserTransferStateModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "By", function() { return By; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DomSanitizer", function() { return DomSanitizer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EVENT_MANAGER_PLUGINS", function() { return EVENT_MANAGER_PLUGINS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EventManager", function() { return EventManager; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HAMMER_GESTURE_CONFIG", function() { return HAMMER_GESTURE_CONFIG; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HAMMER_LOADER", function() { return HAMMER_LOADER; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HammerGestureConfig", function() { return HammerGestureConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HammerModule", function() { return HammerModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Meta", function() { return Meta; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Title", function() { return Title; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TransferState", function() { return TransferState; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VERSION", function() { return VERSION; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "disableDebugTools", function() { return disableDebugTools; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "enableDebugTools", function() { return enableDebugTools; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "makeStateKey", function() { return makeStateKey; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "platformBrowser", function() { return platformBrowser; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵBROWSER_SANITIZATION_PROVIDERS", function() { return BROWSER_SANITIZATION_PROVIDERS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵBROWSER_SANITIZATION_PROVIDERS__POST_R3__", function() { return BROWSER_SANITIZATION_PROVIDERS__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵBrowserDomAdapter", function() { return BrowserDomAdapter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵBrowserGetTestability", function() { return BrowserGetTestability; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵDomEventsPlugin", function() { return DomEventsPlugin; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵDomRendererFactory2", function() { return DomRendererFactory2; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵDomSanitizerImpl", function() { return DomSanitizerImpl; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵDomSharedStylesHost", function() { return DomSharedStylesHost; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵELEMENT_PROBE_PROVIDERS", function() { return ELEMENT_PROBE_PROVIDERS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵELEMENT_PROBE_PROVIDERS__POST_R3__", function() { return ELEMENT_PROBE_PROVIDERS__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵHAMMER_PROVIDERS__POST_R3__", function() { return HAMMER_PROVIDERS__POST_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵHammerGesturesPlugin", function() { return HammerGesturesPlugin; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS", function() { return INTERNAL_BROWSER_PLATFORM_PROVIDERS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵKeyEventsPlugin", function() { return KeyEventsPlugin; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵNAMESPACE_URIS", function() { return NAMESPACE_URIS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵSharedStylesHost", function() { return SharedStylesHost; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵTRANSITION_ID", function() { return TRANSITION_ID; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_a", function() { return errorHandler; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_b", function() { return _document; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_c", function() { return BROWSER_MODULE_PROVIDERS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_d", function() { return createMeta; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_e", function() { return createTitle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_f", function() { return initTransferState; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_g", function() { return EventManagerPlugin; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_h", function() { return HAMMER_PROVIDERS__PRE_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_i", function() { return HAMMER_PROVIDERS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_j", function() { return domSanitizerImplFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_k", function() { return appInitializerFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_l", function() { return SERVER_TRANSITION_PROVIDERS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_m", function() { return _createNgProbeR2; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_n", function() { return ELEMENT_PROBE_PROVIDERS__PRE_R3__; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_o", function() { return GenericBrowserDomAdapter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵescapeHtml", function() { return escapeHtml; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵflattenStyles", function() { return flattenStyles; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵinitDomAdapter", function() { return initDomAdapter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵshimContentAttribute", function() { return shimContentAttribute; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵshimHostAttribute", function() { return shimHostAttribute; });
- /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/common */ "ofXK");
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ɵgetDOM", function() { return _angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"]; });
- /**
- * @license Angular v11.0.4
- * (c) 2010-2020 Google LLC. https://angular.io/
- * License: MIT
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Provides DOM operations in any browser environment.
- *
- * @security Tread carefully! Interacting with the DOM directly is dangerous and
- * can introduce XSS risks.
- */
- class GenericBrowserDomAdapter extends _angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵDomAdapter"] {
- constructor() {
- super();
- }
- supportsDOMEvents() {
- return true;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ɵ0 = () => {
- if (_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['Node']) {
- return _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['Node'].prototype.contains || function (node) {
- return !!(this.compareDocumentPosition(node) & 16);
- };
- }
- return undefined;
- };
- const nodeContains = (ɵ0)();
- /**
- * A `DomAdapter` powered by full browser DOM APIs.
- *
- * @security Tread carefully! Interacting with the DOM directly is dangerous and
- * can introduce XSS risks.
- */
- /* tslint:disable:requireParameterType no-console */
- class BrowserDomAdapter extends GenericBrowserDomAdapter {
- static makeCurrent() {
- Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵsetRootDomAdapter"])(new BrowserDomAdapter());
- }
- getProperty(el, name) {
- return el[name];
- }
- log(error) {
- if (window.console) {
- window.console.log && window.console.log(error);
- }
- }
- logGroup(error) {
- if (window.console) {
- window.console.group && window.console.group(error);
- }
- }
- logGroupEnd() {
- if (window.console) {
- window.console.groupEnd && window.console.groupEnd();
- }
- }
- onAndCancel(el, evt, listener) {
- el.addEventListener(evt, listener, false);
- // Needed to follow Dart's subscription semantic, until fix of
- // https://code.google.com/p/dart/issues/detail?id=17406
- return () => {
- el.removeEventListener(evt, listener, false);
- };
- }
- dispatchEvent(el, evt) {
- el.dispatchEvent(evt);
- }
- remove(node) {
- if (node.parentNode) {
- node.parentNode.removeChild(node);
- }
- return node;
- }
- getValue(el) {
- return el.value;
- }
- createElement(tagName, doc) {
- doc = doc || this.getDefaultDocument();
- return doc.createElement(tagName);
- }
- createHtmlDocument() {
- return document.implementation.createHTMLDocument('fakeTitle');
- }
- getDefaultDocument() {
- return document;
- }
- isElementNode(node) {
- return node.nodeType === Node.ELEMENT_NODE;
- }
- isShadowRoot(node) {
- return node instanceof DocumentFragment;
- }
- getGlobalEventTarget(doc, target) {
- if (target === 'window') {
- return window;
- }
- if (target === 'document') {
- return doc;
- }
- if (target === 'body') {
- return doc.body;
- }
- return null;
- }
- getHistory() {
- return window.history;
- }
- getLocation() {
- return window.location;
- }
- getBaseHref(doc) {
- const href = getBaseElementHref();
- return href == null ? null : relativePath(href);
- }
- resetBaseElement() {
- baseElement = null;
- }
- getUserAgent() {
- return window.navigator.userAgent;
- }
- performanceNow() {
- // performance.now() is not available in all browsers, see
- // https://caniuse.com/high-resolution-time
- return window.performance && window.performance.now ? window.performance.now() :
- new Date().getTime();
- }
- supportsCookies() {
- return true;
- }
- getCookie(name) {
- return Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵparseCookieValue"])(document.cookie, name);
- }
- }
- let baseElement = null;
- function getBaseElementHref() {
- if (!baseElement) {
- baseElement = document.querySelector('base');
- if (!baseElement) {
- return null;
- }
- }
- return baseElement.getAttribute('href');
- }
- // based on urlUtils.js in AngularJS 1
- let urlParsingNode;
- function relativePath(url) {
- if (!urlParsingNode) {
- urlParsingNode = document.createElement('a');
- }
- urlParsingNode.setAttribute('href', url);
- return (urlParsingNode.pathname.charAt(0) === '/') ? urlParsingNode.pathname :
- '/' + urlParsingNode.pathname;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * An id that identifies a particular application being bootstrapped, that should
- * match across the client/server boundary.
- */
- const TRANSITION_ID = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('TRANSITION_ID');
- function appInitializerFactory(transitionId, document, injector) {
- return () => {
- // Wait for all application initializers to be completed before removing the styles set by
- // the server.
- injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationInitStatus"]).donePromise.then(() => {
- const dom = Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])();
- const styles = Array.prototype.slice.apply(document.querySelectorAll(`style[ng-transition]`));
- styles.filter(el => el.getAttribute('ng-transition') === transitionId)
- .forEach(el => dom.remove(el));
- });
- };
- }
- const SERVER_TRANSITION_PROVIDERS = [
- {
- provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_INITIALIZER"],
- useFactory: appInitializerFactory,
- deps: [TRANSITION_ID, _angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]],
- multi: true
- },
- ];
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class BrowserGetTestability {
- static init() {
- Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["setTestabilityGetter"])(new BrowserGetTestability());
- }
- addToWindow(registry) {
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['getAngularTestability'] = (elem, findInAncestors = true) => {
- const testability = registry.findTestabilityInTree(elem, findInAncestors);
- if (testability == null) {
- throw new Error('Could not find testability for element.');
- }
- return testability;
- };
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['getAllAngularTestabilities'] = () => registry.getAllTestabilities();
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['getAllAngularRootElements'] = () => registry.getAllRootElements();
- const whenAllStable = (callback /** TODO #9100 */) => {
- const testabilities = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['getAllAngularTestabilities']();
- let count = testabilities.length;
- let didWork = false;
- const decrement = function (didWork_ /** TODO #9100 */) {
- didWork = didWork || didWork_;
- count--;
- if (count == 0) {
- callback(didWork);
- }
- };
- testabilities.forEach(function (testability /** TODO #9100 */) {
- testability.whenStable(decrement);
- });
- };
- if (!_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['frameworkStabilizers']) {
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['frameworkStabilizers'] = [];
- }
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['frameworkStabilizers'].push(whenAllStable);
- }
- findTestabilityInTree(registry, elem, findInAncestors) {
- if (elem == null) {
- return null;
- }
- const t = registry.getTestability(elem);
- if (t != null) {
- return t;
- }
- else if (!findInAncestors) {
- return null;
- }
- if (Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])().isShadowRoot(elem)) {
- return this.findTestabilityInTree(registry, elem.host, true);
- }
- return this.findTestabilityInTree(registry, elem.parentElement, true);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const CAMEL_CASE_REGEXP = /([A-Z])/g;
- const DASH_CASE_REGEXP = /-([a-z])/g;
- function camelCaseToDashCase(input) {
- return input.replace(CAMEL_CASE_REGEXP, (...m) => '-' + m[1].toLowerCase());
- }
- function dashCaseToCamelCase(input) {
- return input.replace(DASH_CASE_REGEXP, (...m) => m[1].toUpperCase());
- }
- /**
- * Exports the value under a given `name` in the global property `ng`. For example `ng.probe` if
- * `name` is `'probe'`.
- * @param name Name under which it will be exported. Keep in mind this will be a property of the
- * global `ng` object.
- * @param value The value to export.
- */
- function exportNgVar(name, value) {
- if (typeof COMPILED === 'undefined' || !COMPILED) {
- // Note: we can't export `ng` when using closure enhanced optimization as:
- // - closure declares globals itself for minified names, which sometimes clobber our `ng` global
- // - we can't declare a closure extern as the namespace `ng` is already used within Google
- // for typings for angularJS (via `goog.provide('ng....')`).
- const ng = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['ng'] = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['ng'] || {};
- ng[name] = value;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ɵ0$1 = () => ({
- 'ApplicationRef': _angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationRef"],
- 'NgZone': _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"],
- });
- const CORE_TOKENS = (ɵ0$1)();
- const INSPECT_GLOBAL_NAME = 'probe';
- const CORE_TOKENS_GLOBAL_NAME = 'coreTokens';
- /**
- * Returns a {@link DebugElement} for the given native DOM element, or
- * null if the given native element does not have an Angular view associated
- * with it.
- */
- function inspectNativeElementR2(element) {
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵgetDebugNodeR2"])(element);
- }
- function _createNgProbeR2(coreTokens) {
- exportNgVar(INSPECT_GLOBAL_NAME, inspectNativeElementR2);
- exportNgVar(CORE_TOKENS_GLOBAL_NAME, Object.assign(Object.assign({}, CORE_TOKENS), _ngProbeTokensToMap(coreTokens || [])));
- return () => inspectNativeElementR2;
- }
- function _ngProbeTokensToMap(tokens) {
- return tokens.reduce((prev, t) => (prev[t.name] = t.token, prev), {});
- }
- /**
- * In Ivy, we don't support NgProbe because we have our own set of testing utilities
- * with more robust functionality.
- *
- * We shouldn't bring in NgProbe because it prevents DebugNode and friends from
- * tree-shaking properly.
- */
- const ELEMENT_PROBE_PROVIDERS__POST_R3__ = [];
- /**
- * Providers which support debugging Angular applications (e.g. via `ng.probe`).
- */
- const ELEMENT_PROBE_PROVIDERS__PRE_R3__ = [
- {
- provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_INITIALIZER"],
- useFactory: _createNgProbeR2,
- deps: [
- [_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgProbeToken"], new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]()],
- ],
- multi: true,
- },
- ];
- const ELEMENT_PROBE_PROVIDERS = ELEMENT_PROBE_PROVIDERS__POST_R3__;
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * The injection token for the event-manager plug-in service.
- *
- * @publicApi
- */
- const EVENT_MANAGER_PLUGINS = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('EventManagerPlugins');
- /**
- * An injectable service that provides event management for Angular
- * through a browser plug-in.
- *
- * @publicApi
- */
- class EventManager {
- /**
- * Initializes an instance of the event-manager service.
- */
- constructor(plugins, _zone) {
- this._zone = _zone;
- this._eventNameToPlugin = new Map();
- plugins.forEach(p => p.manager = this);
- this._plugins = plugins.slice().reverse();
- }
- /**
- * Registers a handler for a specific element and event.
- *
- * @param element The HTML element to receive event notifications.
- * @param eventName The name of the event to listen for.
- * @param handler A function to call when the notification occurs. Receives the
- * event object as an argument.
- * @returns A callback function that can be used to remove the handler.
- */
- addEventListener(element, eventName, handler) {
- const plugin = this._findPluginFor(eventName);
- return plugin.addEventListener(element, eventName, handler);
- }
- /**
- * Registers a global handler for an event in a target view.
- *
- * @param target A target for global event notifications. One of "window", "document", or "body".
- * @param eventName The name of the event to listen for.
- * @param handler A function to call when the notification occurs. Receives the
- * event object as an argument.
- * @returns A callback function that can be used to remove the handler.
- */
- addGlobalEventListener(target, eventName, handler) {
- const plugin = this._findPluginFor(eventName);
- return plugin.addGlobalEventListener(target, eventName, handler);
- }
- /**
- * Retrieves the compilation zone in which event listeners are registered.
- */
- getZone() {
- return this._zone;
- }
- /** @internal */
- _findPluginFor(eventName) {
- const plugin = this._eventNameToPlugin.get(eventName);
- if (plugin) {
- return plugin;
- }
- const plugins = this._plugins;
- for (let i = 0; i < plugins.length; i++) {
- const plugin = plugins[i];
- if (plugin.supports(eventName)) {
- this._eventNameToPlugin.set(eventName, plugin);
- return plugin;
- }
- }
- throw new Error(`No event manager plugin found for event ${eventName}`);
- }
- }
- EventManager.ɵfac = function EventManager_Factory(t) { return new (t || EventManager)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](EVENT_MANAGER_PLUGINS), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"])); };
- EventManager.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({ token: EventManager, factory: EventManager.ɵfac });
- EventManager.ctorParameters = () => [
- { type: Array, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"], args: [EVENT_MANAGER_PLUGINS,] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](EventManager, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
- }], function () { return [{ type: Array, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
- args: [EVENT_MANAGER_PLUGINS]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"] }]; }, null); })();
- class EventManagerPlugin {
- constructor(_doc) {
- this._doc = _doc;
- }
- addGlobalEventListener(element, eventName, handler) {
- const target = Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])().getGlobalEventTarget(this._doc, element);
- if (!target) {
- throw new Error(`Unsupported event target ${target} for event ${eventName}`);
- }
- return this.addEventListener(target, eventName, handler);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class SharedStylesHost {
- constructor() {
- /** @internal */
- this._stylesSet = new Set();
- }
- addStyles(styles) {
- const additions = new Set();
- styles.forEach(style => {
- if (!this._stylesSet.has(style)) {
- this._stylesSet.add(style);
- additions.add(style);
- }
- });
- this.onStylesAdded(additions);
- }
- onStylesAdded(additions) { }
- getAllStyles() {
- return Array.from(this._stylesSet);
- }
- }
- SharedStylesHost.ɵfac = function SharedStylesHost_Factory(t) { return new (t || SharedStylesHost)(); };
- SharedStylesHost.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({ token: SharedStylesHost, factory: SharedStylesHost.ɵfac });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](SharedStylesHost, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
- }], function () { return []; }, null); })();
- class DomSharedStylesHost extends SharedStylesHost {
- constructor(_doc) {
- super();
- this._doc = _doc;
- this._hostNodes = new Set();
- this._styleNodes = new Set();
- this._hostNodes.add(_doc.head);
- }
- _addStylesToHost(styles, host) {
- styles.forEach((style) => {
- const styleEl = this._doc.createElement('style');
- styleEl.textContent = style;
- this._styleNodes.add(host.appendChild(styleEl));
- });
- }
- addHost(hostNode) {
- this._addStylesToHost(this._stylesSet, hostNode);
- this._hostNodes.add(hostNode);
- }
- removeHost(hostNode) {
- this._hostNodes.delete(hostNode);
- }
- onStylesAdded(additions) {
- this._hostNodes.forEach(hostNode => this._addStylesToHost(additions, hostNode));
- }
- ngOnDestroy() {
- this._styleNodes.forEach(styleNode => Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])().remove(styleNode));
- }
- }
- DomSharedStylesHost.ɵfac = function DomSharedStylesHost_Factory(t) { return new (t || DomSharedStylesHost)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"])); };
- DomSharedStylesHost.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({ token: DomSharedStylesHost, factory: DomSharedStylesHost.ɵfac });
- DomSharedStylesHost.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](DomSharedStylesHost, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
- }] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const NAMESPACE_URIS = {
- 'svg': 'http://www.w3.org/2000/svg',
- 'xhtml': 'http://www.w3.org/1999/xhtml',
- 'xlink': 'http://www.w3.org/1999/xlink',
- 'xml': 'http://www.w3.org/XML/1998/namespace',
- 'xmlns': 'http://www.w3.org/2000/xmlns/',
- };
- const COMPONENT_REGEX = /%COMP%/g;
- const NG_DEV_MODE = typeof ngDevMode === 'undefined' || !!ngDevMode;
- const COMPONENT_VARIABLE = '%COMP%';
- const HOST_ATTR = `_nghost-${COMPONENT_VARIABLE}`;
- const CONTENT_ATTR = `_ngcontent-${COMPONENT_VARIABLE}`;
- function shimContentAttribute(componentShortId) {
- return CONTENT_ATTR.replace(COMPONENT_REGEX, componentShortId);
- }
- function shimHostAttribute(componentShortId) {
- return HOST_ATTR.replace(COMPONENT_REGEX, componentShortId);
- }
- function flattenStyles(compId, styles, target) {
- for (let i = 0; i < styles.length; i++) {
- let style = styles[i];
- if (Array.isArray(style)) {
- flattenStyles(compId, style, target);
- }
- else {
- style = style.replace(COMPONENT_REGEX, compId);
- target.push(style);
- }
- }
- return target;
- }
- function decoratePreventDefault(eventHandler) {
- // `DebugNode.triggerEventHandler` needs to know if the listener was created with
- // decoratePreventDefault or is a listener added outside the Angular context so it can handle the
- // two differently. In the first case, the special '__ngUnwrap__' token is passed to the unwrap
- // the listener (see below).
- return (event) => {
- // Ivy uses '__ngUnwrap__' as a special token that allows us to unwrap the function
- // so that it can be invoked programmatically by `DebugNode.triggerEventHandler`. The debug_node
- // can inspect the listener toString contents for the existence of this special token. Because
- // the token is a string literal, it is ensured to not be modified by compiled code.
- if (event === '__ngUnwrap__') {
- return eventHandler;
- }
- const allowDefaultBehavior = eventHandler(event);
- if (allowDefaultBehavior === false) {
- // TODO(tbosch): move preventDefault into event plugins...
- event.preventDefault();
- event.returnValue = false;
- }
- return undefined;
- };
- }
- let hasLoggedNativeEncapsulationWarning = false;
- class DomRendererFactory2 {
- constructor(eventManager, sharedStylesHost, appId) {
- this.eventManager = eventManager;
- this.sharedStylesHost = sharedStylesHost;
- this.appId = appId;
- this.rendererByCompId = new Map();
- this.defaultRenderer = new DefaultDomRenderer2(eventManager);
- }
- createRenderer(element, type) {
- if (!element || !type) {
- return this.defaultRenderer;
- }
- switch (type.encapsulation) {
- case _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewEncapsulation"].Emulated: {
- let renderer = this.rendererByCompId.get(type.id);
- if (!renderer) {
- renderer = new EmulatedEncapsulationDomRenderer2(this.eventManager, this.sharedStylesHost, type, this.appId);
- this.rendererByCompId.set(type.id, renderer);
- }
- renderer.applyToHost(element);
- return renderer;
- }
- case 1:
- case _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewEncapsulation"].ShadowDom:
- // TODO(FW-2290): remove the `case 1:` fallback logic and the warning in v12.
- if ((typeof ngDevMode === 'undefined' || ngDevMode) &&
- !hasLoggedNativeEncapsulationWarning && type.encapsulation === 1) {
- hasLoggedNativeEncapsulationWarning = true;
- console.warn('ViewEncapsulation.Native is no longer supported. Falling back to ViewEncapsulation.ShadowDom. The fallback will be removed in v12.');
- }
- return new ShadowDomRenderer(this.eventManager, this.sharedStylesHost, element, type);
- default: {
- if (!this.rendererByCompId.has(type.id)) {
- const styles = flattenStyles(type.id, type.styles, []);
- this.sharedStylesHost.addStyles(styles);
- this.rendererByCompId.set(type.id, this.defaultRenderer);
- }
- return this.defaultRenderer;
- }
- }
- }
- begin() { }
- end() { }
- }
- DomRendererFactory2.ɵfac = function DomRendererFactory2_Factory(t) { return new (t || DomRendererFactory2)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](EventManager), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](DomSharedStylesHost), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_ID"])); };
- DomRendererFactory2.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({ token: DomRendererFactory2, factory: DomRendererFactory2.ɵfac });
- DomRendererFactory2.ctorParameters = () => [
- { type: EventManager },
- { type: DomSharedStylesHost },
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_ID"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](DomRendererFactory2, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
- }], function () { return [{ type: EventManager }, { type: DomSharedStylesHost }, { type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_ID"]]
- }] }]; }, null); })();
- class DefaultDomRenderer2 {
- constructor(eventManager) {
- this.eventManager = eventManager;
- this.data = Object.create(null);
- }
- destroy() { }
- createElement(name, namespace) {
- if (namespace) {
- // In cases where Ivy (not ViewEngine) is giving us the actual namespace, the look up by key
- // will result in undefined, so we just return the namespace here.
- return document.createElementNS(NAMESPACE_URIS[namespace] || namespace, name);
- }
- return document.createElement(name);
- }
- createComment(value) {
- return document.createComment(value);
- }
- createText(value) {
- return document.createTextNode(value);
- }
- appendChild(parent, newChild) {
- parent.appendChild(newChild);
- }
- insertBefore(parent, newChild, refChild) {
- if (parent) {
- parent.insertBefore(newChild, refChild);
- }
- }
- removeChild(parent, oldChild) {
- if (parent) {
- parent.removeChild(oldChild);
- }
- }
- selectRootElement(selectorOrNode, preserveContent) {
- let el = typeof selectorOrNode === 'string' ? document.querySelector(selectorOrNode) :
- selectorOrNode;
- if (!el) {
- throw new Error(`The selector "${selectorOrNode}" did not match any elements`);
- }
- if (!preserveContent) {
- el.textContent = '';
- }
- return el;
- }
- parentNode(node) {
- return node.parentNode;
- }
- nextSibling(node) {
- return node.nextSibling;
- }
- setAttribute(el, name, value, namespace) {
- if (namespace) {
- name = namespace + ':' + name;
- // TODO(FW-811): Ivy may cause issues here because it's passing around
- // full URIs for namespaces, therefore this lookup will fail.
- const namespaceUri = NAMESPACE_URIS[namespace];
- if (namespaceUri) {
- el.setAttributeNS(namespaceUri, name, value);
- }
- else {
- el.setAttribute(name, value);
- }
- }
- else {
- el.setAttribute(name, value);
- }
- }
- removeAttribute(el, name, namespace) {
- if (namespace) {
- // TODO(FW-811): Ivy may cause issues here because it's passing around
- // full URIs for namespaces, therefore this lookup will fail.
- const namespaceUri = NAMESPACE_URIS[namespace];
- if (namespaceUri) {
- el.removeAttributeNS(namespaceUri, name);
- }
- else {
- // TODO(FW-811): Since ivy is passing around full URIs for namespaces
- // this could result in properties like `http://www.w3.org/2000/svg:cx="123"`,
- // which is wrong.
- el.removeAttribute(`${namespace}:${name}`);
- }
- }
- else {
- el.removeAttribute(name);
- }
- }
- addClass(el, name) {
- el.classList.add(name);
- }
- removeClass(el, name) {
- el.classList.remove(name);
- }
- setStyle(el, style, value, flags) {
- if (flags & (_angular_core__WEBPACK_IMPORTED_MODULE_1__["RendererStyleFlags2"].DashCase | _angular_core__WEBPACK_IMPORTED_MODULE_1__["RendererStyleFlags2"].Important)) {
- el.style.setProperty(style, value, flags & _angular_core__WEBPACK_IMPORTED_MODULE_1__["RendererStyleFlags2"].Important ? 'important' : '');
- }
- else {
- el.style[style] = value;
- }
- }
- removeStyle(el, style, flags) {
- if (flags & _angular_core__WEBPACK_IMPORTED_MODULE_1__["RendererStyleFlags2"].DashCase) {
- el.style.removeProperty(style);
- }
- else {
- // IE requires '' instead of null
- // see https://github.com/angular/angular/issues/7916
- el.style[style] = '';
- }
- }
- setProperty(el, name, value) {
- NG_DEV_MODE && checkNoSyntheticProp(name, 'property');
- el[name] = value;
- }
- setValue(node, value) {
- node.nodeValue = value;
- }
- listen(target, event, callback) {
- NG_DEV_MODE && checkNoSyntheticProp(event, 'listener');
- if (typeof target === 'string') {
- return this.eventManager.addGlobalEventListener(target, event, decoratePreventDefault(callback));
- }
- return this.eventManager.addEventListener(target, event, decoratePreventDefault(callback));
- }
- }
- const ɵ0$2 = () => '@'.charCodeAt(0);
- const AT_CHARCODE = (ɵ0$2)();
- function checkNoSyntheticProp(name, nameKind) {
- if (name.charCodeAt(0) === AT_CHARCODE) {
- throw new Error(`Found the synthetic ${nameKind} ${name}. Please include either "BrowserAnimationsModule" or "NoopAnimationsModule" in your application.`);
- }
- }
- class EmulatedEncapsulationDomRenderer2 extends DefaultDomRenderer2 {
- constructor(eventManager, sharedStylesHost, component, appId) {
- super(eventManager);
- this.component = component;
- const styles = flattenStyles(appId + '-' + component.id, component.styles, []);
- sharedStylesHost.addStyles(styles);
- this.contentAttr = shimContentAttribute(appId + '-' + component.id);
- this.hostAttr = shimHostAttribute(appId + '-' + component.id);
- }
- applyToHost(element) {
- super.setAttribute(element, this.hostAttr, '');
- }
- createElement(parent, name) {
- const el = super.createElement(parent, name);
- super.setAttribute(el, this.contentAttr, '');
- return el;
- }
- }
- class ShadowDomRenderer extends DefaultDomRenderer2 {
- constructor(eventManager, sharedStylesHost, hostEl, component) {
- super(eventManager);
- this.sharedStylesHost = sharedStylesHost;
- this.hostEl = hostEl;
- this.shadowRoot = hostEl.attachShadow({ mode: 'open' });
- this.sharedStylesHost.addHost(this.shadowRoot);
- const styles = flattenStyles(component.id, component.styles, []);
- for (let i = 0; i < styles.length; i++) {
- const styleEl = document.createElement('style');
- styleEl.textContent = styles[i];
- this.shadowRoot.appendChild(styleEl);
- }
- }
- nodeOrShadowRoot(node) {
- return node === this.hostEl ? this.shadowRoot : node;
- }
- destroy() {
- this.sharedStylesHost.removeHost(this.shadowRoot);
- }
- appendChild(parent, newChild) {
- return super.appendChild(this.nodeOrShadowRoot(parent), newChild);
- }
- insertBefore(parent, newChild, refChild) {
- return super.insertBefore(this.nodeOrShadowRoot(parent), newChild, refChild);
- }
- removeChild(parent, oldChild) {
- return super.removeChild(this.nodeOrShadowRoot(parent), oldChild);
- }
- parentNode(node) {
- return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(node)));
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class DomEventsPlugin extends EventManagerPlugin {
- constructor(doc) {
- super(doc);
- }
- // This plugin should come last in the list of plugins, because it accepts all
- // events.
- supports(eventName) {
- return true;
- }
- addEventListener(element, eventName, handler) {
- element.addEventListener(eventName, handler, false);
- return () => this.removeEventListener(element, eventName, handler);
- }
- removeEventListener(target, eventName, callback) {
- return target.removeEventListener(eventName, callback);
- }
- }
- DomEventsPlugin.ɵfac = function DomEventsPlugin_Factory(t) { return new (t || DomEventsPlugin)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"])); };
- DomEventsPlugin.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({ token: DomEventsPlugin, factory: DomEventsPlugin.ɵfac });
- DomEventsPlugin.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](DomEventsPlugin, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
- }] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Supported HammerJS recognizer event names.
- */
- const EVENT_NAMES = {
- // pan
- 'pan': true,
- 'panstart': true,
- 'panmove': true,
- 'panend': true,
- 'pancancel': true,
- 'panleft': true,
- 'panright': true,
- 'panup': true,
- 'pandown': true,
- // pinch
- 'pinch': true,
- 'pinchstart': true,
- 'pinchmove': true,
- 'pinchend': true,
- 'pinchcancel': true,
- 'pinchin': true,
- 'pinchout': true,
- // press
- 'press': true,
- 'pressup': true,
- // rotate
- 'rotate': true,
- 'rotatestart': true,
- 'rotatemove': true,
- 'rotateend': true,
- 'rotatecancel': true,
- // swipe
- 'swipe': true,
- 'swipeleft': true,
- 'swiperight': true,
- 'swipeup': true,
- 'swipedown': true,
- // tap
- 'tap': true,
- };
- /**
- * DI token for providing [HammerJS](https://hammerjs.github.io/) support to Angular.
- * @see `HammerGestureConfig`
- *
- * @ngModule HammerModule
- * @publicApi
- */
- const HAMMER_GESTURE_CONFIG = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('HammerGestureConfig');
- /**
- * Injection token used to provide a {@link HammerLoader} to Angular.
- *
- * @publicApi
- */
- const HAMMER_LOADER = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('HammerLoader');
- /**
- * An injectable [HammerJS Manager](https://hammerjs.github.io/api/#hammermanager)
- * for gesture recognition. Configures specific event recognition.
- * @publicApi
- */
- class HammerGestureConfig {
- constructor() {
- /**
- * A set of supported event names for gestures to be used in Angular.
- * Angular supports all built-in recognizers, as listed in
- * [HammerJS documentation](https://hammerjs.github.io/).
- */
- this.events = [];
- /**
- * Maps gesture event names to a set of configuration options
- * that specify overrides to the default values for specific properties.
- *
- * The key is a supported event name to be configured,
- * and the options object contains a set of properties, with override values
- * to be applied to the named recognizer event.
- * For example, to disable recognition of the rotate event, specify
- * `{"rotate": {"enable": false}}`.
- *
- * Properties that are not present take the HammerJS default values.
- * For information about which properties are supported for which events,
- * and their allowed and default values, see
- * [HammerJS documentation](https://hammerjs.github.io/).
- *
- */
- this.overrides = {};
- }
- /**
- * Creates a [HammerJS Manager](https://hammerjs.github.io/api/#hammermanager)
- * and attaches it to a given HTML element.
- * @param element The element that will recognize gestures.
- * @returns A HammerJS event-manager object.
- */
- buildHammer(element) {
- const mc = new Hammer(element, this.options);
- mc.get('pinch').set({ enable: true });
- mc.get('rotate').set({ enable: true });
- for (const eventName in this.overrides) {
- mc.get(eventName).set(this.overrides[eventName]);
- }
- return mc;
- }
- }
- HammerGestureConfig.ɵfac = function HammerGestureConfig_Factory(t) { return new (t || HammerGestureConfig)(); };
- HammerGestureConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({ token: HammerGestureConfig, factory: HammerGestureConfig.ɵfac });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](HammerGestureConfig, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
- }], function () { return []; }, null); })();
- /**
- * Event plugin that adds Hammer support to an application.
- *
- * @ngModule HammerModule
- */
- class HammerGesturesPlugin extends EventManagerPlugin {
- constructor(doc, _config, console, loader) {
- super(doc);
- this._config = _config;
- this.console = console;
- this.loader = loader;
- }
- supports(eventName) {
- if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {
- return false;
- }
- if (!window.Hammer && !this.loader) {
- this.console.warn(`The "${eventName}" event cannot be bound because Hammer.JS is not ` +
- `loaded and no custom loader has been specified.`);
- return false;
- }
- return true;
- }
- addEventListener(element, eventName, handler) {
- const zone = this.manager.getZone();
- eventName = eventName.toLowerCase();
- // If Hammer is not present but a loader is specified, we defer adding the event listener
- // until Hammer is loaded.
- if (!window.Hammer && this.loader) {
- // This `addEventListener` method returns a function to remove the added listener.
- // Until Hammer is loaded, the returned function needs to *cancel* the registration rather
- // than remove anything.
- let cancelRegistration = false;
- let deregister = () => {
- cancelRegistration = true;
- };
- this.loader()
- .then(() => {
- // If Hammer isn't actually loaded when the custom loader resolves, give up.
- if (!window.Hammer) {
- this.console.warn(`The custom HAMMER_LOADER completed, but Hammer.JS is not present.`);
- deregister = () => { };
- return;
- }
- if (!cancelRegistration) {
- // Now that Hammer is loaded and the listener is being loaded for real,
- // the deregistration function changes from canceling registration to removal.
- deregister = this.addEventListener(element, eventName, handler);
- }
- })
- .catch(() => {
- this.console.warn(`The "${eventName}" event cannot be bound because the custom ` +
- `Hammer.JS loader failed.`);
- deregister = () => { };
- });
- // Return a function that *executes* `deregister` (and not `deregister` itself) so that we
- // can change the behavior of `deregister` once the listener is added. Using a closure in
- // this way allows us to avoid any additional data structures to track listener removal.
- return () => {
- deregister();
- };
- }
- return zone.runOutsideAngular(() => {
- // Creating the manager bind events, must be done outside of angular
- const mc = this._config.buildHammer(element);
- const callback = function (eventObj) {
- zone.runGuarded(function () {
- handler(eventObj);
- });
- };
- mc.on(eventName, callback);
- return () => {
- mc.off(eventName, callback);
- // destroy mc to prevent memory leak
- if (typeof mc.destroy === 'function') {
- mc.destroy();
- }
- };
- });
- }
- isCustomEvent(eventName) {
- return this._config.events.indexOf(eventName) > -1;
- }
- }
- HammerGesturesPlugin.ɵfac = function HammerGesturesPlugin_Factory(t) { return new (t || HammerGesturesPlugin)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](HAMMER_GESTURE_CONFIG), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵConsole"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](HAMMER_LOADER, 8)); };
- HammerGesturesPlugin.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({ token: HammerGesturesPlugin, factory: HammerGesturesPlugin.ɵfac });
- HammerGesturesPlugin.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"],] }] },
- { type: HammerGestureConfig, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"], args: [HAMMER_GESTURE_CONFIG,] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵConsole"] },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"], args: [HAMMER_LOADER,] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](HammerGesturesPlugin, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
- }] }, { type: HammerGestureConfig, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
- args: [HAMMER_GESTURE_CONFIG]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵConsole"] }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
- args: [HAMMER_LOADER]
- }] }]; }, null); })();
- /**
- * In Ivy, support for Hammer gestures is optional, so applications must
- * import the `HammerModule` at root to turn on support. This means that
- * Hammer-specific code can be tree-shaken away if not needed.
- */
- const HAMMER_PROVIDERS__POST_R3__ = [];
- /**
- * In View Engine, support for Hammer gestures is built-in by default.
- */
- const HAMMER_PROVIDERS__PRE_R3__ = [
- {
- provide: EVENT_MANAGER_PLUGINS,
- useClass: HammerGesturesPlugin,
- multi: true,
- deps: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"], HAMMER_GESTURE_CONFIG, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵConsole"], [new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"](), HAMMER_LOADER]]
- },
- { provide: HAMMER_GESTURE_CONFIG, useClass: HammerGestureConfig, deps: [] },
- ];
- const HAMMER_PROVIDERS = HAMMER_PROVIDERS__POST_R3__;
- /**
- * Adds support for HammerJS.
- *
- * Import this module at the root of your application so that Angular can work with
- * HammerJS to detect gesture events.
- *
- * Note that applications still need to include the HammerJS script itself. This module
- * simply sets up the coordination layer between HammerJS and Angular's EventManager.
- *
- * @publicApi
- */
- class HammerModule {
- }
- HammerModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({ type: HammerModule });
- HammerModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({ factory: function HammerModule_Factory(t) { return new (t || HammerModule)(); }, providers: HAMMER_PROVIDERS__PRE_R3__ });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](HammerModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
- args: [{ providers: HAMMER_PROVIDERS__PRE_R3__ }]
- }], null, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Defines supported modifiers for key events.
- */
- const MODIFIER_KEYS = ['alt', 'control', 'meta', 'shift'];
- const DOM_KEY_LOCATION_NUMPAD = 3;
- // Map to convert some key or keyIdentifier values to what will be returned by getEventKey
- const _keyMap = {
- // The following values are here for cross-browser compatibility and to match the W3C standard
- // cf https://www.w3.org/TR/DOM-Level-3-Events-key/
- '\b': 'Backspace',
- '\t': 'Tab',
- '\x7F': 'Delete',
- '\x1B': 'Escape',
- 'Del': 'Delete',
- 'Esc': 'Escape',
- 'Left': 'ArrowLeft',
- 'Right': 'ArrowRight',
- 'Up': 'ArrowUp',
- 'Down': 'ArrowDown',
- 'Menu': 'ContextMenu',
- 'Scroll': 'ScrollLock',
- 'Win': 'OS'
- };
- // There is a bug in Chrome for numeric keypad keys:
- // https://code.google.com/p/chromium/issues/detail?id=155654
- // 1, 2, 3 ... are reported as A, B, C ...
- const _chromeNumKeyPadMap = {
- 'A': '1',
- 'B': '2',
- 'C': '3',
- 'D': '4',
- 'E': '5',
- 'F': '6',
- 'G': '7',
- 'H': '8',
- 'I': '9',
- 'J': '*',
- 'K': '+',
- 'M': '-',
- 'N': '.',
- 'O': '/',
- '\x60': '0',
- '\x90': 'NumLock'
- };
- const ɵ0$3 = (event) => event.altKey, ɵ1 = (event) => event.ctrlKey, ɵ2 = (event) => event.metaKey, ɵ3 = (event) => event.shiftKey;
- /**
- * Retrieves modifiers from key-event objects.
- */
- const MODIFIER_KEY_GETTERS = {
- 'alt': ɵ0$3,
- 'control': ɵ1,
- 'meta': ɵ2,
- 'shift': ɵ3
- };
- /**
- * @publicApi
- * A browser plug-in that provides support for handling of key events in Angular.
- */
- class KeyEventsPlugin extends EventManagerPlugin {
- /**
- * Initializes an instance of the browser plug-in.
- * @param doc The document in which key events will be detected.
- */
- constructor(doc) {
- super(doc);
- }
- /**
- * Reports whether a named key event is supported.
- * @param eventName The event name to query.
- * @return True if the named key event is supported.
- */
- supports(eventName) {
- return KeyEventsPlugin.parseEventName(eventName) != null;
- }
- /**
- * Registers a handler for a specific element and key event.
- * @param element The HTML element to receive event notifications.
- * @param eventName The name of the key event to listen for.
- * @param handler A function to call when the notification occurs. Receives the
- * event object as an argument.
- * @returns The key event that was registered.
- */
- addEventListener(element, eventName, handler) {
- const parsedEvent = KeyEventsPlugin.parseEventName(eventName);
- const outsideHandler = KeyEventsPlugin.eventCallback(parsedEvent['fullKey'], handler, this.manager.getZone());
- return this.manager.getZone().runOutsideAngular(() => {
- return Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])().onAndCancel(element, parsedEvent['domEventName'], outsideHandler);
- });
- }
- static parseEventName(eventName) {
- const parts = eventName.toLowerCase().split('.');
- const domEventName = parts.shift();
- if ((parts.length === 0) || !(domEventName === 'keydown' || domEventName === 'keyup')) {
- return null;
- }
- const key = KeyEventsPlugin._normalizeKey(parts.pop());
- let fullKey = '';
- MODIFIER_KEYS.forEach(modifierName => {
- const index = parts.indexOf(modifierName);
- if (index > -1) {
- parts.splice(index, 1);
- fullKey += modifierName + '.';
- }
- });
- fullKey += key;
- if (parts.length != 0 || key.length === 0) {
- // returning null instead of throwing to let another plugin process the event
- return null;
- }
- // NOTE: Please don't rewrite this as so, as it will break JSCompiler property renaming.
- // The code must remain in the `result['domEventName']` form.
- // return {domEventName, fullKey};
- const result = {};
- result['domEventName'] = domEventName;
- result['fullKey'] = fullKey;
- return result;
- }
- static getEventFullKey(event) {
- let fullKey = '';
- let key = getEventKey(event);
- key = key.toLowerCase();
- if (key === ' ') {
- key = 'space'; // for readability
- }
- else if (key === '.') {
- key = 'dot'; // because '.' is used as a separator in event names
- }
- MODIFIER_KEYS.forEach(modifierName => {
- if (modifierName != key) {
- const modifierGetter = MODIFIER_KEY_GETTERS[modifierName];
- if (modifierGetter(event)) {
- fullKey += modifierName + '.';
- }
- }
- });
- fullKey += key;
- return fullKey;
- }
- /**
- * Configures a handler callback for a key event.
- * @param fullKey The event name that combines all simultaneous keystrokes.
- * @param handler The function that responds to the key event.
- * @param zone The zone in which the event occurred.
- * @returns A callback function.
- */
- static eventCallback(fullKey, handler, zone) {
- return (event /** TODO #9100 */) => {
- if (KeyEventsPlugin.getEventFullKey(event) === fullKey) {
- zone.runGuarded(() => handler(event));
- }
- };
- }
- /** @internal */
- static _normalizeKey(keyName) {
- // TODO: switch to a Map if the mapping grows too much
- switch (keyName) {
- case 'esc':
- return 'escape';
- default:
- return keyName;
- }
- }
- }
- KeyEventsPlugin.ɵfac = function KeyEventsPlugin_Factory(t) { return new (t || KeyEventsPlugin)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"])); };
- KeyEventsPlugin.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({ token: KeyEventsPlugin, factory: KeyEventsPlugin.ɵfac });
- KeyEventsPlugin.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](KeyEventsPlugin, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
- }] }]; }, null); })();
- function getEventKey(event) {
- let key = event.key;
- if (key == null) {
- key = event.keyIdentifier;
- // keyIdentifier is defined in the old draft of DOM Level 3 Events implemented by Chrome and
- // Safari cf
- // https://www.w3.org/TR/2007/WD-DOM-Level-3-Events-20071221/events.html#Events-KeyboardEvents-Interfaces
- if (key == null) {
- return 'Unidentified';
- }
- if (key.startsWith('U+')) {
- key = String.fromCharCode(parseInt(key.substring(2), 16));
- if (event.location === DOM_KEY_LOCATION_NUMPAD && _chromeNumKeyPadMap.hasOwnProperty(key)) {
- // There is a bug in Chrome for numeric keypad keys:
- // https://code.google.com/p/chromium/issues/detail?id=155654
- // 1, 2, 3 ... are reported as A, B, C ...
- key = _chromeNumKeyPadMap[key];
- }
- }
- }
- return _keyMap[key] || key;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * DomSanitizer helps preventing Cross Site Scripting Security bugs (XSS) by sanitizing
- * values to be safe to use in the different DOM contexts.
- *
- * For example, when binding a URL in an `<a [href]="someValue">` hyperlink, `someValue` will be
- * sanitized so that an attacker cannot inject e.g. a `javascript:` URL that would execute code on
- * the website.
- *
- * In specific situations, it might be necessary to disable sanitization, for example if the
- * application genuinely needs to produce a `javascript:` style link with a dynamic value in it.
- * Users can bypass security by constructing a value with one of the `bypassSecurityTrust...`
- * methods, and then binding to that value from the template.
- *
- * These situations should be very rare, and extraordinary care must be taken to avoid creating a
- * Cross Site Scripting (XSS) security bug!
- *
- * When using `bypassSecurityTrust...`, make sure to call the method as early as possible and as
- * close as possible to the source of the value, to make it easy to verify no security bug is
- * created by its use.
- *
- * It is not required (and not recommended) to bypass security if the value is safe, e.g. a URL that
- * does not start with a suspicious protocol, or an HTML snippet that does not contain dangerous
- * code. The sanitizer leaves safe values intact.
- *
- * @security Calling any of the `bypassSecurityTrust...` APIs disables Angular's built-in
- * sanitization for the value passed in. Carefully check and audit all values and code paths going
- * into this call. Make sure any user data is appropriately escaped for this security context.
- * For more detail, see the [Security Guide](https://g.co/ng/security).
- *
- * @publicApi
- */
- class DomSanitizer {
- }
- DomSanitizer.ɵfac = function DomSanitizer_Factory(t) { return new (t || DomSanitizer)(); };
- DomSanitizer.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({ factory: function DomSanitizer_Factory() { return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(DomSanitizerImpl); }, token: DomSanitizer, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](DomSanitizer, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
- args: [{ providedIn: 'root', useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["forwardRef"])(() => DomSanitizerImpl) }]
- }], null, null); })();
- function domSanitizerImplFactory(injector) {
- return new DomSanitizerImpl(injector.get(_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
- }
- class DomSanitizerImpl extends DomSanitizer {
- constructor(_doc) {
- super();
- this._doc = _doc;
- }
- sanitize(ctx, value) {
- if (value == null)
- return null;
- switch (ctx) {
- case _angular_core__WEBPACK_IMPORTED_MODULE_1__["SecurityContext"].NONE:
- return value;
- case _angular_core__WEBPACK_IMPORTED_MODULE_1__["SecurityContext"].HTML:
- if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵallowSanitizationBypassAndThrow"])(value, "HTML" /* Html */)) {
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵunwrapSafeValue"])(value);
- }
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵ_sanitizeHtml"])(this._doc, String(value));
- case _angular_core__WEBPACK_IMPORTED_MODULE_1__["SecurityContext"].STYLE:
- if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵallowSanitizationBypassAndThrow"])(value, "Style" /* Style */)) {
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵunwrapSafeValue"])(value);
- }
- return value;
- case _angular_core__WEBPACK_IMPORTED_MODULE_1__["SecurityContext"].SCRIPT:
- if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵallowSanitizationBypassAndThrow"])(value, "Script" /* Script */)) {
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵunwrapSafeValue"])(value);
- }
- throw new Error('unsafe value used in a script context');
- case _angular_core__WEBPACK_IMPORTED_MODULE_1__["SecurityContext"].URL:
- const type = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵgetSanitizationBypassType"])(value);
- if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵallowSanitizationBypassAndThrow"])(value, "URL" /* Url */)) {
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵunwrapSafeValue"])(value);
- }
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵ_sanitizeUrl"])(String(value));
- case _angular_core__WEBPACK_IMPORTED_MODULE_1__["SecurityContext"].RESOURCE_URL:
- if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵallowSanitizationBypassAndThrow"])(value, "ResourceURL" /* ResourceUrl */)) {
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵunwrapSafeValue"])(value);
- }
- throw new Error('unsafe value used in a resource URL context (see https://g.co/ng/security#xss)');
- default:
- throw new Error(`Unexpected SecurityContext ${ctx} (see https://g.co/ng/security#xss)`);
- }
- }
- bypassSecurityTrustHtml(value) {
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵbypassSanitizationTrustHtml"])(value);
- }
- bypassSecurityTrustStyle(value) {
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵbypassSanitizationTrustStyle"])(value);
- }
- bypassSecurityTrustScript(value) {
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵbypassSanitizationTrustScript"])(value);
- }
- bypassSecurityTrustUrl(value) {
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵbypassSanitizationTrustUrl"])(value);
- }
- bypassSecurityTrustResourceUrl(value) {
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵbypassSanitizationTrustResourceUrl"])(value);
- }
- }
- DomSanitizerImpl.ɵfac = function DomSanitizerImpl_Factory(t) { return new (t || DomSanitizerImpl)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"])); };
- DomSanitizerImpl.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({ factory: function DomSanitizerImpl_Factory() { return domSanitizerImplFactory(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["INJECTOR"])); }, token: DomSanitizerImpl, providedIn: "root" });
- DomSanitizerImpl.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](DomSanitizerImpl, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
- args: [{ providedIn: 'root', useFactory: domSanitizerImplFactory, deps: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]] }]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
- }] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function initDomAdapter() {
- BrowserDomAdapter.makeCurrent();
- BrowserGetTestability.init();
- }
- function errorHandler() {
- return new _angular_core__WEBPACK_IMPORTED_MODULE_1__["ErrorHandler"]();
- }
- function _document() {
- // Tell ivy about the global document
- Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetDocument"])(document);
- return document;
- }
- const ɵ0$4 = _angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵPLATFORM_BROWSER_ID"];
- const INTERNAL_BROWSER_PLATFORM_PROVIDERS = [
- { provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["PLATFORM_ID"], useValue: ɵ0$4 },
- { provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["PLATFORM_INITIALIZER"], useValue: initDomAdapter, multi: true },
- { provide: _angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"], useFactory: _document, deps: [] },
- ];
- const BROWSER_SANITIZATION_PROVIDERS__PRE_R3__ = [
- { provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Sanitizer"], useExisting: DomSanitizer },
- { provide: DomSanitizer, useClass: DomSanitizerImpl, deps: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]] },
- ];
- const BROWSER_SANITIZATION_PROVIDERS__POST_R3__ = [];
- /**
- * @security Replacing built-in sanitization providers exposes the application to XSS risks.
- * Attacker-controlled data introduced by an unsanitized provider could expose your
- * application to XSS risks. For more detail, see the [Security Guide](https://g.co/ng/security).
- * @publicApi
- */
- const BROWSER_SANITIZATION_PROVIDERS = BROWSER_SANITIZATION_PROVIDERS__POST_R3__;
- /**
- * A factory function that returns a `PlatformRef` instance associated with browser service
- * providers.
- *
- * @publicApi
- */
- const platformBrowser = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["createPlatformFactory"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["platformCore"], 'browser', INTERNAL_BROWSER_PLATFORM_PROVIDERS);
- const BROWSER_MODULE_PROVIDERS = [
- BROWSER_SANITIZATION_PROVIDERS,
- { provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵINJECTOR_SCOPE"], useValue: 'root' },
- { provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ErrorHandler"], useFactory: errorHandler, deps: [] },
- {
- provide: EVENT_MANAGER_PLUGINS,
- useClass: DomEventsPlugin,
- multi: true,
- deps: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["PLATFORM_ID"]]
- },
- { provide: EVENT_MANAGER_PLUGINS, useClass: KeyEventsPlugin, multi: true, deps: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]] },
- HAMMER_PROVIDERS,
- {
- provide: DomRendererFactory2,
- useClass: DomRendererFactory2,
- deps: [EventManager, DomSharedStylesHost, _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_ID"]]
- },
- { provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["RendererFactory2"], useExisting: DomRendererFactory2 },
- { provide: SharedStylesHost, useExisting: DomSharedStylesHost },
- { provide: DomSharedStylesHost, useClass: DomSharedStylesHost, deps: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]] },
- { provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Testability"], useClass: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Testability"], deps: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]] },
- { provide: EventManager, useClass: EventManager, deps: [EVENT_MANAGER_PLUGINS, _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]] },
- ELEMENT_PROBE_PROVIDERS,
- ];
- /**
- * Exports required infrastructure for all Angular apps.
- * Included by default in all Angular apps created with the CLI
- * `new` command.
- * Re-exports `CommonModule` and `ApplicationModule`, making their
- * exports and providers available to all apps.
- *
- * @publicApi
- */
- class BrowserModule {
- constructor(parentModule) {
- if (parentModule) {
- throw new Error(`BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.`);
- }
- }
- /**
- * Configures a browser-based app to transition from a server-rendered app, if
- * one is present on the page.
- *
- * @param params An object containing an identifier for the app to transition.
- * The ID must match between the client and server versions of the app.
- * @returns The reconfigured `BrowserModule` to import into the app's root `AppModule`.
- */
- static withServerTransition(params) {
- return {
- ngModule: BrowserModule,
- providers: [
- { provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_ID"], useValue: params.appId },
- { provide: TRANSITION_ID, useExisting: _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_ID"] },
- SERVER_TRANSITION_PROVIDERS,
- ],
- };
- }
- }
- BrowserModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({ type: BrowserModule });
- BrowserModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({ factory: function BrowserModule_Factory(t) { return new (t || BrowserModule)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](BrowserModule, 12)); }, providers: BROWSER_MODULE_PROVIDERS, imports: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationModule"]] });
- BrowserModule.ctorParameters = () => [
- { type: BrowserModule, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["SkipSelf"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"], args: [BrowserModule,] }] }
- ];
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](BrowserModule, { exports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationModule"]]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](BrowserModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
- args: [{ providers: BROWSER_MODULE_PROVIDERS, exports: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationModule"]] }]
- }], function () { return [{ type: BrowserModule, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["SkipSelf"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
- args: [BrowserModule]
- }] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Factory to create a `Meta` service instance for the current DOM document.
- */
- function createMeta() {
- return new Meta(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
- }
- /**
- * A service for managing HTML `<meta>` tags.
- *
- * Properties of the `MetaDefinition` object match the attributes of the
- * HTML `<meta>` tag. These tags define document metadata that is important for
- * things like configuring a Content Security Policy, defining browser compatibility
- * and security settings, setting HTTP Headers, defining rich content for social sharing,
- * and Search Engine Optimization (SEO).
- *
- * To identify specific `<meta>` tags in a document, use an attribute selection
- * string in the format `"tag_attribute='value string'"`.
- * For example, an `attrSelector` value of `"name='description'"` matches a tag
- * whose `name` attribute has the value `"description"`.
- * Selectors are used with the `querySelector()` Document method,
- * in the format `meta[{attrSelector}]`.
- *
- * @see [HTML meta tag](https://developer.mozilla.org/docs/Web/HTML/Element/meta)
- * @see [Document.querySelector()](https://developer.mozilla.org/docs/Web/API/Document/querySelector)
- *
- *
- * @publicApi
- */
- class Meta {
- constructor(_doc) {
- this._doc = _doc;
- this._dom = Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])();
- }
- /**
- * Retrieves or creates a specific `<meta>` tag element in the current HTML document.
- * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute
- * values in the provided tag definition, and verifies that all other attribute values are equal.
- * If an existing element is found, it is returned and is not modified in any way.
- * @param tag The definition of a `<meta>` element to match or create.
- * @param forceCreation True to create a new element without checking whether one already exists.
- * @returns The existing element with the same attributes and values if found,
- * the new element if no match is found, or `null` if the tag parameter is not defined.
- */
- addTag(tag, forceCreation = false) {
- if (!tag)
- return null;
- return this._getOrCreateElement(tag, forceCreation);
- }
- /**
- * Retrieves or creates a set of `<meta>` tag elements in the current HTML document.
- * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute
- * values in the provided tag definition, and verifies that all other attribute values are equal.
- * @param tags An array of tag definitions to match or create.
- * @param forceCreation True to create new elements without checking whether they already exist.
- * @returns The matching elements if found, or the new elements.
- */
- addTags(tags, forceCreation = false) {
- if (!tags)
- return [];
- return tags.reduce((result, tag) => {
- if (tag) {
- result.push(this._getOrCreateElement(tag, forceCreation));
- }
- return result;
- }, []);
- }
- /**
- * Retrieves a `<meta>` tag element in the current HTML document.
- * @param attrSelector The tag attribute and value to match against, in the format
- * `"tag_attribute='value string'"`.
- * @returns The matching element, if any.
- */
- getTag(attrSelector) {
- if (!attrSelector)
- return null;
- return this._doc.querySelector(`meta[${attrSelector}]`) || null;
- }
- /**
- * Retrieves a set of `<meta>` tag elements in the current HTML document.
- * @param attrSelector The tag attribute and value to match against, in the format
- * `"tag_attribute='value string'"`.
- * @returns The matching elements, if any.
- */
- getTags(attrSelector) {
- if (!attrSelector)
- return [];
- const list /*NodeList*/ = this._doc.querySelectorAll(`meta[${attrSelector}]`);
- return list ? [].slice.call(list) : [];
- }
- /**
- * Modifies an existing `<meta>` tag element in the current HTML document.
- * @param tag The tag description with which to replace the existing tag content.
- * @param selector A tag attribute and value to match against, to identify
- * an existing tag. A string in the format `"tag_attribute=`value string`"`.
- * If not supplied, matches a tag with the same `name` or `property` attribute value as the
- * replacement tag.
- * @return The modified element.
- */
- updateTag(tag, selector) {
- if (!tag)
- return null;
- selector = selector || this._parseSelector(tag);
- const meta = this.getTag(selector);
- if (meta) {
- return this._setMetaElementAttributes(tag, meta);
- }
- return this._getOrCreateElement(tag, true);
- }
- /**
- * Removes an existing `<meta>` tag element from the current HTML document.
- * @param attrSelector A tag attribute and value to match against, to identify
- * an existing tag. A string in the format `"tag_attribute=`value string`"`.
- */
- removeTag(attrSelector) {
- this.removeTagElement(this.getTag(attrSelector));
- }
- /**
- * Removes an existing `<meta>` tag element from the current HTML document.
- * @param meta The tag definition to match against to identify an existing tag.
- */
- removeTagElement(meta) {
- if (meta) {
- this._dom.remove(meta);
- }
- }
- _getOrCreateElement(meta, forceCreation = false) {
- if (!forceCreation) {
- const selector = this._parseSelector(meta);
- const elem = this.getTag(selector);
- // It's allowed to have multiple elements with the same name so it's not enough to
- // just check that element with the same name already present on the page. We also need to
- // check if element has tag attributes
- if (elem && this._containsAttributes(meta, elem))
- return elem;
- }
- const element = this._dom.createElement('meta');
- this._setMetaElementAttributes(meta, element);
- const head = this._doc.getElementsByTagName('head')[0];
- head.appendChild(element);
- return element;
- }
- _setMetaElementAttributes(tag, el) {
- Object.keys(tag).forEach((prop) => el.setAttribute(this._getMetaKeyMap(prop), tag[prop]));
- return el;
- }
- _parseSelector(tag) {
- const attr = tag.name ? 'name' : 'property';
- return `${attr}="${tag[attr]}"`;
- }
- _containsAttributes(tag, elem) {
- return Object.keys(tag).every((key) => elem.getAttribute(this._getMetaKeyMap(key)) === tag[key]);
- }
- _getMetaKeyMap(prop) {
- return META_KEYS_MAP[prop] || prop;
- }
- }
- Meta.ɵfac = function Meta_Factory(t) { return new (t || Meta)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"])); };
- Meta.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({ factory: createMeta, token: Meta, providedIn: "root" });
- Meta.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](Meta, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
- args: [{ providedIn: 'root', useFactory: createMeta, deps: [] }]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
- }] }]; }, null); })();
- /**
- * Mapping for MetaDefinition properties with their correct meta attribute names
- */
- const META_KEYS_MAP = {
- httpEquiv: 'http-equiv'
- };
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Factory to create Title service.
- */
- function createTitle() {
- return new Title(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
- }
- /**
- * A service that can be used to get and set the title of a current HTML document.
- *
- * Since an Angular application can't be bootstrapped on the entire HTML document (`<html>` tag)
- * it is not possible to bind to the `text` property of the `HTMLTitleElement` elements
- * (representing the `<title>` tag). Instead, this service can be used to set and get the current
- * title value.
- *
- * @publicApi
- */
- class Title {
- constructor(_doc) {
- this._doc = _doc;
- }
- /**
- * Get the title of the current HTML document.
- */
- getTitle() {
- return this._doc.title;
- }
- /**
- * Set the title of the current HTML document.
- * @param newTitle
- */
- setTitle(newTitle) {
- this._doc.title = newTitle || '';
- }
- }
- Title.ɵfac = function Title_Factory(t) { return new (t || Title)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"])); };
- Title.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({ factory: createTitle, token: Title, providedIn: "root" });
- Title.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](Title, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
- args: [{ providedIn: 'root', useFactory: createTitle, deps: [] }]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
- }] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const win = typeof window !== 'undefined' && window || {};
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class ChangeDetectionPerfRecord {
- constructor(msPerTick, numTicks) {
- this.msPerTick = msPerTick;
- this.numTicks = numTicks;
- }
- }
- /**
- * Entry point for all Angular profiling-related debug tools. This object
- * corresponds to the `ng.profiler` in the dev console.
- */
- class AngularProfiler {
- constructor(ref) {
- this.appRef = ref.injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationRef"]);
- }
- // tslint:disable:no-console
- /**
- * Exercises change detection in a loop and then prints the average amount of
- * time in milliseconds how long a single round of change detection takes for
- * the current state of the UI. It runs a minimum of 5 rounds for a minimum
- * of 500 milliseconds.
- *
- * Optionally, a user may pass a `config` parameter containing a map of
- * options. Supported options are:
- *
- * `record` (boolean) - causes the profiler to record a CPU profile while
- * it exercises the change detector. Example:
- *
- * ```
- * ng.profiler.timeChangeDetection({record: true})
- * ```
- */
- timeChangeDetection(config) {
- const record = config && config['record'];
- const profileName = 'Change Detection';
- // Profiler is not available in Android browsers without dev tools opened
- const isProfilerAvailable = win.console.profile != null;
- if (record && isProfilerAvailable) {
- win.console.profile(profileName);
- }
- const start = Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])().performanceNow();
- let numTicks = 0;
- while (numTicks < 5 || (Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])().performanceNow() - start) < 500) {
- this.appRef.tick();
- numTicks++;
- }
- const end = Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])().performanceNow();
- if (record && isProfilerAvailable) {
- win.console.profileEnd(profileName);
- }
- const msPerTick = (end - start) / numTicks;
- win.console.log(`ran ${numTicks} change detection cycles`);
- win.console.log(`${msPerTick.toFixed(2)} ms per check`);
- return new ChangeDetectionPerfRecord(msPerTick, numTicks);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const PROFILER_GLOBAL_NAME = 'profiler';
- /**
- * Enabled Angular debug tools that are accessible via your browser's
- * developer console.
- *
- * Usage:
- *
- * 1. Open developer console (e.g. in Chrome Ctrl + Shift + j)
- * 1. Type `ng.` (usually the console will show auto-complete suggestion)
- * 1. Try the change detection profiler `ng.profiler.timeChangeDetection()`
- * then hit Enter.
- *
- * @publicApi
- */
- function enableDebugTools(ref) {
- exportNgVar(PROFILER_GLOBAL_NAME, new AngularProfiler(ref));
- return ref;
- }
- /**
- * Disables Angular tools.
- *
- * @publicApi
- */
- function disableDebugTools() {
- exportNgVar(PROFILER_GLOBAL_NAME, null);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function escapeHtml(text) {
- const escapedText = {
- '&': '&a;',
- '"': '&q;',
- '\'': '&s;',
- '<': '&l;',
- '>': '&g;',
- };
- return text.replace(/[&"'<>]/g, s => escapedText[s]);
- }
- function unescapeHtml(text) {
- const unescapedText = {
- '&a;': '&',
- '&q;': '"',
- '&s;': '\'',
- '&l;': '<',
- '&g;': '>',
- };
- return text.replace(/&[^;]+;/g, s => unescapedText[s]);
- }
- /**
- * Create a `StateKey<T>` that can be used to store value of type T with `TransferState`.
- *
- * Example:
- *
- * ```
- * const COUNTER_KEY = makeStateKey<number>('counter');
- * let value = 10;
- *
- * transferState.set(COUNTER_KEY, value);
- * ```
- *
- * @publicApi
- */
- function makeStateKey(key) {
- return key;
- }
- /**
- * A key value store that is transferred from the application on the server side to the application
- * on the client side.
- *
- * `TransferState` will be available as an injectable token. To use it import
- * `ServerTransferStateModule` on the server and `BrowserTransferStateModule` on the client.
- *
- * The values in the store are serialized/deserialized using JSON.stringify/JSON.parse. So only
- * boolean, number, string, null and non-class objects will be serialized and deserialized in a
- * non-lossy manner.
- *
- * @publicApi
- */
- class TransferState {
- constructor() {
- this.store = {};
- this.onSerializeCallbacks = {};
- }
- /** @internal */
- static init(initState) {
- const transferState = new TransferState();
- transferState.store = initState;
- return transferState;
- }
- /**
- * Get the value corresponding to a key. Return `defaultValue` if key is not found.
- */
- get(key, defaultValue) {
- return this.store[key] !== undefined ? this.store[key] : defaultValue;
- }
- /**
- * Set the value corresponding to a key.
- */
- set(key, value) {
- this.store[key] = value;
- }
- /**
- * Remove a key from the store.
- */
- remove(key) {
- delete this.store[key];
- }
- /**
- * Test whether a key exists in the store.
- */
- hasKey(key) {
- return this.store.hasOwnProperty(key);
- }
- /**
- * Register a callback to provide the value for a key when `toJson` is called.
- */
- onSerialize(key, callback) {
- this.onSerializeCallbacks[key] = callback;
- }
- /**
- * Serialize the current state of the store to JSON.
- */
- toJson() {
- // Call the onSerialize callbacks and put those values into the store.
- for (const key in this.onSerializeCallbacks) {
- if (this.onSerializeCallbacks.hasOwnProperty(key)) {
- try {
- this.store[key] = this.onSerializeCallbacks[key]();
- }
- catch (e) {
- console.warn('Exception in onSerialize callback: ', e);
- }
- }
- }
- return JSON.stringify(this.store);
- }
- }
- TransferState.ɵfac = function TransferState_Factory(t) { return new (t || TransferState)(); };
- TransferState.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({ token: TransferState, factory: TransferState.ɵfac });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](TransferState, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
- }], function () { return []; }, null); })();
- function initTransferState(doc, appId) {
- // Locate the script tag with the JSON data transferred from the server.
- // The id of the script tag is set to the Angular appId + 'state'.
- const script = doc.getElementById(appId + '-state');
- let initialState = {};
- if (script && script.textContent) {
- try {
- initialState = JSON.parse(unescapeHtml(script.textContent));
- }
- catch (e) {
- console.warn('Exception while restoring TransferState for app ' + appId, e);
- }
- }
- return TransferState.init(initialState);
- }
- /**
- * NgModule to install on the client side while using the `TransferState` to transfer state from
- * server to client.
- *
- * @publicApi
- */
- class BrowserTransferStateModule {
- }
- BrowserTransferStateModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({ type: BrowserTransferStateModule });
- BrowserTransferStateModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({ factory: function BrowserTransferStateModule_Factory(t) { return new (t || BrowserTransferStateModule)(); }, providers: [{ provide: TransferState, useFactory: initTransferState, deps: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_ID"]] }] });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](BrowserTransferStateModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
- args: [{
- providers: [{ provide: TransferState, useFactory: initTransferState, deps: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_ID"]] }]
- }]
- }], null, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Predicates for use with {@link DebugElement}'s query functions.
- *
- * @publicApi
- */
- class By {
- /**
- * Match all nodes.
- *
- * @usageNotes
- * ### Example
- *
- * {@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}
- */
- static all() {
- return () => true;
- }
- /**
- * Match elements by the given CSS selector.
- *
- * @usageNotes
- * ### Example
- *
- * {@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}
- */
- static css(selector) {
- return (debugElement) => {
- return debugElement.nativeElement != null ?
- elementMatches(debugElement.nativeElement, selector) :
- false;
- };
- }
- /**
- * Match nodes that have the given directive present.
- *
- * @usageNotes
- * ### Example
- *
- * {@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}
- */
- static directive(type) {
- return (debugNode) => debugNode.providerTokens.indexOf(type) !== -1;
- }
- }
- function elementMatches(n, selector) {
- if (Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])().isElementNode(n)) {
- return n.matches && n.matches(selector) ||
- n.msMatchesSelector && n.msMatchesSelector(selector) ||
- n.webkitMatchesSelector && n.webkitMatchesSelector(selector);
- }
- return false;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @publicApi
- */
- const VERSION = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Version"]('11.0.4');
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // This file only reexports content of the `src` folder. Keep it that way.
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=platform-browser.js.map
- /***/ }),
- /***/ "jtHE":
- /*!**************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/ReplaySubject.js ***!
- \**************************************************************/
- /*! exports provided: ReplaySubject */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ReplaySubject", function() { return ReplaySubject; });
- /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Subject */ "XNiG");
- /* harmony import */ var _scheduler_queue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./scheduler/queue */ "qgXg");
- /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Subscription */ "quSY");
- /* harmony import */ var _operators_observeOn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./operators/observeOn */ "pxpQ");
- /* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util/ObjectUnsubscribedError */ "9ppp");
- /* harmony import */ var _SubjectSubscription__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./SubjectSubscription */ "Ylt2");
- class ReplaySubject extends _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"] {
- constructor(bufferSize = Number.POSITIVE_INFINITY, windowTime = Number.POSITIVE_INFINITY, scheduler) {
- super();
- this.scheduler = scheduler;
- this._events = [];
- this._infiniteTimeWindow = false;
- this._bufferSize = bufferSize < 1 ? 1 : bufferSize;
- this._windowTime = windowTime < 1 ? 1 : windowTime;
- if (windowTime === Number.POSITIVE_INFINITY) {
- this._infiniteTimeWindow = true;
- this.next = this.nextInfiniteTimeWindow;
- }
- else {
- this.next = this.nextTimeWindow;
- }
- }
- nextInfiniteTimeWindow(value) {
- const _events = this._events;
- _events.push(value);
- if (_events.length > this._bufferSize) {
- _events.shift();
- }
- super.next(value);
- }
- nextTimeWindow(value) {
- this._events.push(new ReplayEvent(this._getNow(), value));
- this._trimBufferThenGetEvents();
- super.next(value);
- }
- _subscribe(subscriber) {
- const _infiniteTimeWindow = this._infiniteTimeWindow;
- const _events = _infiniteTimeWindow ? this._events : this._trimBufferThenGetEvents();
- const scheduler = this.scheduler;
- const len = _events.length;
- let subscription;
- if (this.closed) {
- throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__["ObjectUnsubscribedError"]();
- }
- else if (this.isStopped || this.hasError) {
- subscription = _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;
- }
- else {
- this.observers.push(subscriber);
- subscription = new _SubjectSubscription__WEBPACK_IMPORTED_MODULE_5__["SubjectSubscription"](this, subscriber);
- }
- if (scheduler) {
- subscriber.add(subscriber = new _operators_observeOn__WEBPACK_IMPORTED_MODULE_3__["ObserveOnSubscriber"](subscriber, scheduler));
- }
- if (_infiniteTimeWindow) {
- for (let i = 0; i < len && !subscriber.closed; i++) {
- subscriber.next(_events[i]);
- }
- }
- else {
- for (let i = 0; i < len && !subscriber.closed; i++) {
- subscriber.next(_events[i].value);
- }
- }
- if (this.hasError) {
- subscriber.error(this.thrownError);
- }
- else if (this.isStopped) {
- subscriber.complete();
- }
- return subscription;
- }
- _getNow() {
- return (this.scheduler || _scheduler_queue__WEBPACK_IMPORTED_MODULE_1__["queue"]).now();
- }
- _trimBufferThenGetEvents() {
- const now = this._getNow();
- const _bufferSize = this._bufferSize;
- const _windowTime = this._windowTime;
- const _events = this._events;
- const eventsCount = _events.length;
- let spliceCount = 0;
- while (spliceCount < eventsCount) {
- if ((now - _events[spliceCount].time) < _windowTime) {
- break;
- }
- spliceCount++;
- }
- if (eventsCount > _bufferSize) {
- spliceCount = Math.max(spliceCount, eventsCount - _bufferSize);
- }
- if (spliceCount > 0) {
- _events.splice(0, spliceCount);
- }
- return _events;
- }
- }
- class ReplayEvent {
- constructor(time, value) {
- this.time = time;
- this.value = value;
- }
- }
- //# sourceMappingURL=ReplaySubject.js.map
- /***/ }),
- /***/ "kJWO":
- /*!******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/symbol/observable.js ***!
- \******************************************************************/
- /*! exports provided: observable */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "observable", function() { return observable; });
- const observable = (() => typeof Symbol === 'function' && Symbol.observable || '@@observable')();
- //# sourceMappingURL=observable.js.map
- /***/ }),
- /***/ "kU1M":
- /*!*******************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/operators/index.js ***!
- \*******************************************************/
- /*! exports provided: audit, auditTime, buffer, bufferCount, bufferTime, bufferToggle, bufferWhen, catchError, combineAll, combineLatest, concat, concatAll, concatMap, concatMapTo, count, debounce, debounceTime, defaultIfEmpty, delay, delayWhen, dematerialize, distinct, distinctUntilChanged, distinctUntilKeyChanged, elementAt, endWith, every, exhaust, exhaustMap, expand, filter, finalize, find, findIndex, first, groupBy, ignoreElements, isEmpty, last, map, mapTo, materialize, max, merge, mergeAll, mergeMap, flatMap, mergeMapTo, mergeScan, min, multicast, observeOn, onErrorResumeNext, pairwise, partition, pluck, publish, publishBehavior, publishLast, publishReplay, race, reduce, repeat, repeatWhen, retry, retryWhen, refCount, sample, sampleTime, scan, sequenceEqual, share, shareReplay, single, skip, skipLast, skipUntil, skipWhile, startWith, subscribeOn, switchAll, switchMap, switchMapTo, take, takeLast, takeUntil, takeWhile, tap, throttle, throttleTime, throwIfEmpty, timeInterval, timeout, timeoutWith, timestamp, toArray, window, windowCount, windowTime, windowToggle, windowWhen, withLatestFrom, zip, zipAll */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony import */ var _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../internal/operators/audit */ "tnsW");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "audit", function() { return _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__["audit"]; });
- /* harmony import */ var _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../internal/operators/auditTime */ "3UWI");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "auditTime", function() { return _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__["auditTime"]; });
- /* harmony import */ var _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../internal/operators/buffer */ "p9/F");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buffer", function() { return _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__["buffer"]; });
- /* harmony import */ var _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../internal/operators/bufferCount */ "9M8c");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferCount", function() { return _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__["bufferCount"]; });
- /* harmony import */ var _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../internal/operators/bufferTime */ "OsX3");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferTime", function() { return _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__["bufferTime"]; });
- /* harmony import */ var _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../internal/operators/bufferToggle */ "FD9M");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferToggle", function() { return _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__["bufferToggle"]; });
- /* harmony import */ var _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../internal/operators/bufferWhen */ "PfrF");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferWhen", function() { return _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__["bufferWhen"]; });
- /* harmony import */ var _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../internal/operators/catchError */ "JIr8");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "catchError", function() { return _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__["catchError"]; });
- /* harmony import */ var _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../internal/operators/combineAll */ "7wxJ");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "combineAll", function() { return _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__["combineAll"]; });
- /* harmony import */ var _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../internal/operators/combineLatest */ "fFD9");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__["combineLatest"]; });
- /* harmony import */ var _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../internal/operators/concat */ "f29J");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__["concat"]; });
- /* harmony import */ var _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../internal/operators/concatAll */ "0EUg");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatAll", function() { return _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__["concatAll"]; });
- /* harmony import */ var _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../internal/operators/concatMap */ "bOdf");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatMap", function() { return _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__["concatMap"]; });
- /* harmony import */ var _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../internal/operators/concatMapTo */ "q7zd");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatMapTo", function() { return _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__["concatMapTo"]; });
- /* harmony import */ var _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../internal/operators/count */ "HrJb");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "count", function() { return _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__["count"]; });
- /* harmony import */ var _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../internal/operators/debounce */ "6eBy");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "debounce", function() { return _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__["debounce"]; });
- /* harmony import */ var _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../internal/operators/debounceTime */ "Kj3r");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "debounceTime", function() { return _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__["debounceTime"]; });
- /* harmony import */ var _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../internal/operators/defaultIfEmpty */ "xbPD");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "defaultIfEmpty", function() { return _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__["defaultIfEmpty"]; });
- /* harmony import */ var _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../internal/operators/delay */ "3E0/");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "delay", function() { return _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__["delay"]; });
- /* harmony import */ var _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../internal/operators/delayWhen */ "coGc");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "delayWhen", function() { return _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__["delayWhen"]; });
- /* harmony import */ var _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../internal/operators/dematerialize */ "kgNN");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dematerialize", function() { return _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__["dematerialize"]; });
- /* harmony import */ var _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../internal/operators/distinct */ "02Lk");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinct", function() { return _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__["distinct"]; });
- /* harmony import */ var _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../internal/operators/distinctUntilChanged */ "/uUt");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinctUntilChanged", function() { return _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__["distinctUntilChanged"]; });
- /* harmony import */ var _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../internal/operators/distinctUntilKeyChanged */ "PZkE");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinctUntilKeyChanged", function() { return _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__["distinctUntilKeyChanged"]; });
- /* harmony import */ var _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../internal/operators/elementAt */ "9ihq");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "elementAt", function() { return _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__["elementAt"]; });
- /* harmony import */ var _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../internal/operators/endWith */ "0Pi8");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "endWith", function() { return _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__["endWith"]; });
- /* harmony import */ var _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../internal/operators/every */ "Gi4w");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "every", function() { return _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__["every"]; });
- /* harmony import */ var _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../internal/operators/exhaust */ "zt7V");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "exhaust", function() { return _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__["exhaust"]; });
- /* harmony import */ var _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../internal/operators/exhaustMap */ "XqQ8");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "exhaustMap", function() { return _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__["exhaustMap"]; });
- /* harmony import */ var _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../internal/operators/expand */ "FQpF");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "expand", function() { return _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__["expand"]; });
- /* harmony import */ var _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../internal/operators/filter */ "pLZG");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "filter", function() { return _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__["filter"]; });
- /* harmony import */ var _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../internal/operators/finalize */ "nYR2");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "finalize", function() { return _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__["finalize"]; });
- /* harmony import */ var _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../internal/operators/find */ "cBqT");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "find", function() { return _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__["find"]; });
- /* harmony import */ var _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../internal/operators/findIndex */ "K7De");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "findIndex", function() { return _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__["findIndex"]; });
- /* harmony import */ var _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../internal/operators/first */ "SxV6");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "first", function() { return _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__["first"]; });
- /* harmony import */ var _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../internal/operators/groupBy */ "OQgR");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "groupBy", function() { return _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__["groupBy"]; });
- /* harmony import */ var _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../internal/operators/ignoreElements */ "4A3s");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ignoreElements", function() { return _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__["ignoreElements"]; });
- /* harmony import */ var _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../internal/operators/isEmpty */ "m2j4");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isEmpty", function() { return _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__["isEmpty"]; });
- /* harmony import */ var _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ../internal/operators/last */ "NJ9Y");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "last", function() { return _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__["last"]; });
- /* harmony import */ var _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ../internal/operators/map */ "lJxs");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "map", function() { return _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__["map"]; });
- /* harmony import */ var _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../internal/operators/mapTo */ "CqXF");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mapTo", function() { return _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__["mapTo"]; });
- /* harmony import */ var _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ../internal/operators/materialize */ "dkDA");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "materialize", function() { return _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__["materialize"]; });
- /* harmony import */ var _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ../internal/operators/max */ "yI9Y");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "max", function() { return _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__["max"]; });
- /* harmony import */ var _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ../internal/operators/merge */ "q92s");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__["merge"]; });
- /* harmony import */ var _internal_operators_mergeAll__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ../internal/operators/mergeAll */ "bHdf");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeAll", function() { return _internal_operators_mergeAll__WEBPACK_IMPORTED_MODULE_44__["mergeAll"]; });
- /* harmony import */ var _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ../internal/operators/mergeMap */ "5+tZ");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeMap", function() { return _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__["mergeMap"]; });
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "flatMap", function() { return _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__["mergeMap"]; });
- /* harmony import */ var _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ../internal/operators/mergeMapTo */ "UXbc");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeMapTo", function() { return _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__["mergeMapTo"]; });
- /* harmony import */ var _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ../internal/operators/mergeScan */ "51Bx");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeScan", function() { return _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__["mergeScan"]; });
- /* harmony import */ var _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ../internal/operators/min */ "FZB8");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "min", function() { return _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__["min"]; });
- /* harmony import */ var _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ../internal/operators/multicast */ "oB13");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "multicast", function() { return _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__["multicast"]; });
- /* harmony import */ var _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ../internal/operators/observeOn */ "pxpQ");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "observeOn", function() { return _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__["observeOn"]; });
- /* harmony import */ var _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ../internal/operators/onErrorResumeNext */ "uTdr");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__["onErrorResumeNext"]; });
- /* harmony import */ var _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ../internal/operators/pairwise */ "Zy1z");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pairwise", function() { return _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__["pairwise"]; });
- /* harmony import */ var _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ../internal/operators/partition */ "A3iJ");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__["partition"]; });
- /* harmony import */ var _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ../internal/operators/pluck */ "wO+i");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pluck", function() { return _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__["pluck"]; });
- /* harmony import */ var _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ../internal/operators/publish */ "NfdI");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publish", function() { return _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__["publish"]; });
- /* harmony import */ var _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ../internal/operators/publishBehavior */ "UGaM");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishBehavior", function() { return _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__["publishBehavior"]; });
- /* harmony import */ var _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ../internal/operators/publishLast */ "qZ0a");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishLast", function() { return _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__["publishLast"]; });
- /* harmony import */ var _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ../internal/operators/publishReplay */ "05l1");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishReplay", function() { return _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__["publishReplay"]; });
- /* harmony import */ var _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ../internal/operators/race */ "4f8F");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "race", function() { return _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__["race"]; });
- /* harmony import */ var _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ../internal/operators/reduce */ "128B");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "reduce", function() { return _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__["reduce"]; });
- /* harmony import */ var _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ../internal/operators/repeat */ "/d8p");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "repeat", function() { return _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__["repeat"]; });
- /* harmony import */ var _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ../internal/operators/repeatWhen */ "Gqsl");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "repeatWhen", function() { return _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__["repeatWhen"]; });
- /* harmony import */ var _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ../internal/operators/retry */ "un/a");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "retry", function() { return _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__["retry"]; });
- /* harmony import */ var _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ../internal/operators/retryWhen */ "MtjB");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "retryWhen", function() { return _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__["retryWhen"]; });
- /* harmony import */ var _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ../internal/operators/refCount */ "x+ZX");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "refCount", function() { return _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__["refCount"]; });
- /* harmony import */ var _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ../internal/operators/sample */ "c6ID");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sample", function() { return _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__["sample"]; });
- /* harmony import */ var _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ../internal/operators/sampleTime */ "1Ykd");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sampleTime", function() { return _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__["sampleTime"]; });
- /* harmony import */ var _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ../internal/operators/scan */ "Kqap");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scan", function() { return _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__["scan"]; });
- /* harmony import */ var _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ../internal/operators/sequenceEqual */ "Zyez");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sequenceEqual", function() { return _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__["sequenceEqual"]; });
- /* harmony import */ var _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ../internal/operators/share */ "w1tV");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "share", function() { return _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__["share"]; });
- /* harmony import */ var _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ../internal/operators/shareReplay */ "UXun");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "shareReplay", function() { return _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__["shareReplay"]; });
- /* harmony import */ var _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ../internal/operators/single */ "cx9U");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "single", function() { return _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__["single"]; });
- /* harmony import */ var _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ../internal/operators/skip */ "zP0r");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skip", function() { return _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__["skip"]; });
- /* harmony import */ var _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ../internal/operators/skipLast */ "kagm");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipLast", function() { return _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__["skipLast"]; });
- /* harmony import */ var _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ../internal/operators/skipUntil */ "vqkR");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipUntil", function() { return _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__["skipUntil"]; });
- /* harmony import */ var _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ../internal/operators/skipWhile */ "32Ea");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipWhile", function() { return _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__["skipWhile"]; });
- /* harmony import */ var _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ../internal/operators/startWith */ "JX91");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "startWith", function() { return _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__["startWith"]; });
- /* harmony import */ var _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ../internal/operators/subscribeOn */ "tf+s");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "subscribeOn", function() { return _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__["subscribeOn"]; });
- /* harmony import */ var _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ../internal/operators/switchAll */ "Y6wi");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchAll", function() { return _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__["switchAll"]; });
- /* harmony import */ var _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ../internal/operators/switchMap */ "eIep");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchMap", function() { return _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__["switchMap"]; });
- /* harmony import */ var _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ../internal/operators/switchMapTo */ "aGrj");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchMapTo", function() { return _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__["switchMapTo"]; });
- /* harmony import */ var _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ../internal/operators/take */ "IzEk");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "take", function() { return _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__["take"]; });
- /* harmony import */ var _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ../internal/operators/takeLast */ "BFxc");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeLast", function() { return _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__["takeLast"]; });
- /* harmony import */ var _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ../internal/operators/takeUntil */ "1G5W");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeUntil", function() { return _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__["takeUntil"]; });
- /* harmony import */ var _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! ../internal/operators/takeWhile */ "GJmQ");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeWhile", function() { return _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__["takeWhile"]; });
- /* harmony import */ var _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! ../internal/operators/tap */ "vkgz");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tap", function() { return _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__["tap"]; });
- /* harmony import */ var _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! ../internal/operators/throttle */ "yuhW");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throttle", function() { return _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__["throttle"]; });
- /* harmony import */ var _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! ../internal/operators/throttleTime */ "gcYM");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throttleTime", function() { return _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__["throttleTime"]; });
- /* harmony import */ var _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(/*! ../internal/operators/throwIfEmpty */ "XDbj");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throwIfEmpty", function() { return _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__["throwIfEmpty"]; });
- /* harmony import */ var _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(/*! ../internal/operators/timeInterval */ "4hIw");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeInterval", function() { return _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__["timeInterval"]; });
- /* harmony import */ var _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(/*! ../internal/operators/timeout */ "tS1D");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeout", function() { return _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__["timeout"]; });
- /* harmony import */ var _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(/*! ../internal/operators/timeoutWith */ "syX2");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeoutWith", function() { return _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__["timeoutWith"]; });
- /* harmony import */ var _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(/*! ../internal/operators/timestamp */ "r0WS");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timestamp", function() { return _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__["timestamp"]; });
- /* harmony import */ var _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(/*! ../internal/operators/toArray */ "IAdc");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "toArray", function() { return _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__["toArray"]; });
- /* harmony import */ var _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(/*! ../internal/operators/window */ "mk5/");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "window", function() { return _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__["window"]; });
- /* harmony import */ var _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(/*! ../internal/operators/windowCount */ "lpKW");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowCount", function() { return _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__["windowCount"]; });
- /* harmony import */ var _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(/*! ../internal/operators/windowTime */ "UHp3");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowTime", function() { return _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__["windowTime"]; });
- /* harmony import */ var _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(/*! ../internal/operators/windowToggle */ "sTY7");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowToggle", function() { return _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__["windowToggle"]; });
- /* harmony import */ var _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(/*! ../internal/operators/windowWhen */ "pXlZ");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowWhen", function() { return _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__["windowWhen"]; });
- /* harmony import */ var _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(/*! ../internal/operators/withLatestFrom */ "zp1y");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "withLatestFrom", function() { return _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__["withLatestFrom"]; });
- /* harmony import */ var _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(/*! ../internal/operators/zip */ "GjHo");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__["zip"]; });
- /* harmony import */ var _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(/*! ../internal/operators/zipAll */ "JmF6");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zipAll", function() { return _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__["zipAll"]; });
- //# sourceMappingURL=index.js.map
- /***/ }),
- /***/ "kagm":
- /*!*******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/skipLast.js ***!
- \*******************************************************************/
- /*! exports provided: skipLast */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skipLast", function() { return skipLast; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/ArgumentOutOfRangeError */ "4I5i");
- function skipLast(count) {
- return (source) => source.lift(new SkipLastOperator(count));
- }
- class SkipLastOperator {
- constructor(_skipCount) {
- this._skipCount = _skipCount;
- if (this._skipCount < 0) {
- throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_1__["ArgumentOutOfRangeError"];
- }
- }
- call(subscriber, source) {
- if (this._skipCount === 0) {
- return source.subscribe(new _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"](subscriber));
- }
- else {
- return source.subscribe(new SkipLastSubscriber(subscriber, this._skipCount));
- }
- }
- }
- class SkipLastSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, _skipCount) {
- super(destination);
- this._skipCount = _skipCount;
- this._count = 0;
- this._ring = new Array(_skipCount);
- }
- _next(value) {
- const skipCount = this._skipCount;
- const count = this._count++;
- if (count < skipCount) {
- this._ring[count] = value;
- }
- else {
- const currentIndex = count % skipCount;
- const ring = this._ring;
- const oldValue = ring[currentIndex];
- ring[currentIndex] = value;
- this.destination.next(oldValue);
- }
- }
- }
- //# sourceMappingURL=skipLast.js.map
- /***/ }),
- /***/ "kgNN":
- /*!************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/dematerialize.js ***!
- \************************************************************************/
- /*! exports provided: dematerialize */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dematerialize", function() { return dematerialize; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function dematerialize() {
- return function dematerializeOperatorFunction(source) {
- return source.lift(new DeMaterializeOperator());
- };
- }
- class DeMaterializeOperator {
- call(subscriber, source) {
- return source.subscribe(new DeMaterializeSubscriber(subscriber));
- }
- }
- class DeMaterializeSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination) {
- super(destination);
- }
- _next(value) {
- value.observe(this.destination);
- }
- }
- //# sourceMappingURL=dematerialize.js.map
- /***/ }),
- /***/ "l5mm":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/interval.js ***!
- \********************************************************************/
- /*! exports provided: interval */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "interval", function() { return interval; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../scheduler/async */ "D0XW");
- /* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/isNumeric */ "Y7HM");
- function interval(period = 0, scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"]) {
- if (!Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__["isNumeric"])(period) || period < 0) {
- period = 0;
- }
- if (!scheduler || typeof scheduler.schedule !== 'function') {
- scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
- }
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- subscriber.add(scheduler.schedule(dispatch, period, { subscriber, counter: 0, period }));
- return subscriber;
- });
- }
- function dispatch(state) {
- const { subscriber, counter, period } = state;
- subscriber.next(counter);
- this.schedule({ subscriber, counter: counter + 1, period }, period);
- }
- //# sourceMappingURL=interval.js.map
- /***/ }),
- /***/ "l7GE":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/OuterSubscriber.js ***!
- \****************************************************************/
- /*! exports provided: OuterSubscriber */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OuterSubscriber", function() { return OuterSubscriber; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Subscriber */ "7o/Q");
- class OuterSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.destination.next(innerValue);
- }
- notifyError(error, innerSub) {
- this.destination.error(error);
- }
- notifyComplete(innerSub) {
- this.destination.complete();
- }
- }
- //# sourceMappingURL=OuterSubscriber.js.map
- /***/ }),
- /***/ "lJxs":
- /*!**************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/map.js ***!
- \**************************************************************/
- /*! exports provided: map, MapOperator */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "map", function() { return map; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MapOperator", function() { return MapOperator; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function map(project, thisArg) {
- return function mapOperation(source) {
- if (typeof project !== 'function') {
- throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');
- }
- return source.lift(new MapOperator(project, thisArg));
- };
- }
- class MapOperator {
- constructor(project, thisArg) {
- this.project = project;
- this.thisArg = thisArg;
- }
- call(subscriber, source) {
- return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));
- }
- }
- class MapSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, project, thisArg) {
- super(destination);
- this.project = project;
- this.count = 0;
- this.thisArg = thisArg || this;
- }
- _next(value) {
- let result;
- try {
- result = this.project.call(this.thisArg, value, this.count++);
- }
- catch (err) {
- this.destination.error(err);
- return;
- }
- this.destination.next(result);
- }
- }
- //# sourceMappingURL=map.js.map
- /***/ }),
- /***/ "lpKW":
- /*!**********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/windowCount.js ***!
- \**********************************************************************/
- /*! exports provided: windowCount */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowCount", function() { return windowCount; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Subject */ "XNiG");
- function windowCount(windowSize, startWindowEvery = 0) {
- return function windowCountOperatorFunction(source) {
- return source.lift(new WindowCountOperator(windowSize, startWindowEvery));
- };
- }
- class WindowCountOperator {
- constructor(windowSize, startWindowEvery) {
- this.windowSize = windowSize;
- this.startWindowEvery = startWindowEvery;
- }
- call(subscriber, source) {
- return source.subscribe(new WindowCountSubscriber(subscriber, this.windowSize, this.startWindowEvery));
- }
- }
- class WindowCountSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, windowSize, startWindowEvery) {
- super(destination);
- this.destination = destination;
- this.windowSize = windowSize;
- this.startWindowEvery = startWindowEvery;
- this.windows = [new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]()];
- this.count = 0;
- destination.next(this.windows[0]);
- }
- _next(value) {
- const startWindowEvery = (this.startWindowEvery > 0) ? this.startWindowEvery : this.windowSize;
- const destination = this.destination;
- const windowSize = this.windowSize;
- const windows = this.windows;
- const len = windows.length;
- for (let i = 0; i < len && !this.closed; i++) {
- windows[i].next(value);
- }
- const c = this.count - windowSize + 1;
- if (c >= 0 && c % startWindowEvery === 0 && !this.closed) {
- windows.shift().complete();
- }
- if (++this.count % startWindowEvery === 0 && !this.closed) {
- const window = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
- windows.push(window);
- destination.next(window);
- }
- }
- _error(err) {
- const windows = this.windows;
- if (windows) {
- while (windows.length > 0 && !this.closed) {
- windows.shift().error(err);
- }
- }
- this.destination.error(err);
- }
- _complete() {
- const windows = this.windows;
- if (windows) {
- while (windows.length > 0 && !this.closed) {
- windows.shift().complete();
- }
- }
- this.destination.complete();
- }
- _unsubscribe() {
- this.count = 0;
- this.windows = null;
- }
- }
- //# sourceMappingURL=windowCount.js.map
- /***/ }),
- /***/ "m2j4":
- /*!******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/isEmpty.js ***!
- \******************************************************************/
- /*! exports provided: isEmpty */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEmpty", function() { return isEmpty; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function isEmpty() {
- return (source) => source.lift(new IsEmptyOperator());
- }
- class IsEmptyOperator {
- call(observer, source) {
- return source.subscribe(new IsEmptySubscriber(observer));
- }
- }
- class IsEmptySubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination) {
- super(destination);
- }
- notifyComplete(isEmpty) {
- const destination = this.destination;
- destination.next(isEmpty);
- destination.complete();
- }
- _next(value) {
- this.notifyComplete(false);
- }
- _complete() {
- this.notifyComplete(true);
- }
- }
- //# sourceMappingURL=isEmpty.js.map
- /***/ }),
- /***/ "mCNh":
- /*!**********************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/pipe.js ***!
- \**********************************************************/
- /*! exports provided: pipe, pipeFromArray */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pipe", function() { return pipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pipeFromArray", function() { return pipeFromArray; });
- /* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./noop */ "KqfI");
- function pipe(...fns) {
- return pipeFromArray(fns);
- }
- function pipeFromArray(fns) {
- if (!fns) {
- return _noop__WEBPACK_IMPORTED_MODULE_0__["noop"];
- }
- if (fns.length === 1) {
- return fns[0];
- }
- return function piped(input) {
- return fns.reduce((prev, fn) => fn(prev), input);
- };
- }
- //# sourceMappingURL=pipe.js.map
- /***/ }),
- /***/ "mgaL":
- /*!****************************************************************************************************!*\
- !*** ./node_modules/@angular-slider/ngx-slider/__ivy_ngcc__/fesm2015/angular-slider-ngx-slider.js ***!
- \****************************************************************************************************/
- /*! exports provided: NgxSliderModule, ChangeContext, PointerType, LabelType, Options, ɵb, ɵc, ɵd, ɵa, ɵe */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgxSliderModule", function() { return NgxSliderModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ChangeContext", function() { return ChangeContext; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PointerType", function() { return PointerType; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LabelType", function() { return LabelType; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Options", function() { return Options; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵb", function() { return SliderElementDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵc", function() { return SliderHandleDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵd", function() { return SliderLabelDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵa", function() { return SliderComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵe", function() { return TooltipWrapperComponent; });
- /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "qCKp");
- /* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "kU1M");
- /* harmony import */ var detect_passive_events__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! detect-passive-events */ "A/ap");
- /* harmony import */ var detect_passive_events__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(detect_passive_events__WEBPACK_IMPORTED_MODULE_2__);
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/forms */ "3Pt+");
- /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/common */ "ofXK");
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
- */
- /** @enum {number} */
- const _c0 = ["tooltipTemplate"];
- const _c1 = ["leftOuterSelectionBar"];
- const _c2 = ["rightOuterSelectionBar"];
- const _c3 = ["fullBar"];
- const _c4 = ["selectionBar"];
- const _c5 = ["minHandle"];
- const _c6 = ["maxHandle"];
- const _c7 = ["floorLabel"];
- const _c8 = ["ceilLabel"];
- const _c9 = ["minHandleLabel"];
- const _c10 = ["maxHandleLabel"];
- const _c11 = ["combinedLabel"];
- const _c12 = ["ticksElement"];
- function SliderComponent_span_28_ngx_slider_tooltip_wrapper_2_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](0, "ngx-slider-tooltip-wrapper", 31);
- } if (rf & 2) {
- const t_r13 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]().$implicit;
- const ctx_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("template", ctx_r14.tooltipTemplate)("tooltip", t_r13.valueTooltip)("placement", t_r13.valueTooltipPlacement)("content", t_r13.value);
- } }
- function SliderComponent_span_28_span_3_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](0, "span", 32);
- } if (rf & 2) {
- const t_r13 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]().$implicit;
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("innerHTML", t_r13.legend, _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵsanitizeHtml"]);
- } }
- const _c13 = function (a0) { return { "ngx-slider-selected": a0 }; };
- function SliderComponent_span_28_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "span", 27);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](1, "ngx-slider-tooltip-wrapper", 28);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](2, SliderComponent_span_28_ngx_slider_tooltip_wrapper_2_Template, 1, 4, "ngx-slider-tooltip-wrapper", 29);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](3, SliderComponent_span_28_span_3_Template, 1, 1, "span", 30);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
- } if (rf & 2) {
- const t_r13 = ctx.$implicit;
- const ctx_r12 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵpureFunction1"](7, _c13, t_r13.selected))("ngStyle", t_r13.style);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("template", ctx_r12.tooltipTemplate)("tooltip", t_r13.tooltip)("placement", t_r13.tooltipPlacement);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", t_r13.value != null);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", t_r13.legend != null);
- } }
- function TooltipWrapperComponent_ng_container_0_1_ng_template_0_Template(rf, ctx) { }
- function TooltipWrapperComponent_ng_container_0_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](0, TooltipWrapperComponent_ng_container_0_1_ng_template_0_Template, 0, 0, "ng-template");
- } }
- const _c14 = function (a0, a1, a2) { return { tooltip: a0, placement: a1, content: a2 }; };
- function TooltipWrapperComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainerStart"](0);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](1, TooltipWrapperComponent_ng_container_0_1_Template, 1, 0, undefined, 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainerEnd"]();
- } if (rf & 2) {
- const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngTemplateOutlet", ctx_r0.template)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵpureFunction3"](2, _c14, ctx_r0.tooltip, ctx_r0.placement, ctx_r0.content));
- } }
- function TooltipWrapperComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainerStart"](0);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](1, "div", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainerEnd"]();
- } if (rf & 2) {
- const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵattribute"]("title", ctx_r1.tooltip)("data-tooltip-placement", ctx_r1.placement);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate1"](" ", ctx_r1.content, " ");
- } }
- const LabelType = {
- /** Label above low pointer */
- Low: 0,
- /** Label above high pointer */
- High: 1,
- /** Label for minimum slider value */
- Floor: 2,
- /** Label for maximum slider value */
- Ceil: 3,
- /** Label below legend tick */
- TickValue: 4,
- };
- LabelType[LabelType.Low] = 'Low';
- LabelType[LabelType.High] = 'High';
- LabelType[LabelType.Floor] = 'Floor';
- LabelType[LabelType.Ceil] = 'Ceil';
- LabelType[LabelType.TickValue] = 'TickValue';
- /**
- * Slider options
- */
- class Options {
- constructor() {
- /**
- * Minimum value for a slider.
- * Not applicable when using stepsArray.
- */
- this.floor = 0;
- /**
- * Maximum value for a slider.
- * Not applicable when using stepsArray.
- */
- this.ceil = null;
- /**
- * Step between each value.
- * Not applicable when using stepsArray.
- */
- this.step = 1;
- /**
- * The minimum range authorized on the slider.
- * Applies to range slider only.
- * When using stepsArray, expressed as index into stepsArray.
- */
- this.minRange = null;
- /**
- * The maximum range authorized on the slider.
- * Applies to range slider only.
- * When using stepsArray, expressed as index into stepsArray.
- */
- this.maxRange = null;
- /**
- * Set to true to have a push behavior. When the min handle goes above the max,
- * the max is moved as well (and vice-versa). The range between min and max is
- * defined by the step option (defaults to 1) and can also be overriden by
- * the minRange option. Applies to range slider only.
- */
- this.pushRange = false;
- /**
- * The minimum value authorized on the slider.
- * When using stepsArray, expressed as index into stepsArray.
- */
- this.minLimit = null;
- /**
- * The maximum value authorized on the slider.
- * When using stepsArray, expressed as index into stepsArray.
- */
- this.maxLimit = null;
- /**
- * Custom translate function. Use this if you want to translate values displayed
- * on the slider.
- */
- this.translate = null;
- /**
- * Custom function for combining overlapping labels in range slider.
- * It takes the min and max values (already translated with translate fuction)
- * and should return how these two values should be combined.
- * If not provided, the default function will join the two values with
- * ' - ' as separator.
- */
- this.combineLabels = null;
- /**
- * Use to display legend under ticks (thus, it needs to be used along with
- * showTicks or showTicksValues). The function will be called with each tick
- * value and returned content will be displayed under the tick as a legend.
- * If the returned value is null, then no legend is displayed under
- * the corresponding tick.You can also directly provide the legend values
- * in the stepsArray option.
- */
- this.getLegend = null;
- /**
- * If you want to display a slider with non linear/number steps.
- * Just pass an array with each slider value and that's it; the floor, ceil and step settings
- * of the slider will be computed automatically.
- * By default, the value model and valueHigh model values will be the value of the selected item
- * in the stepsArray.
- * They can also be bound to the index of the selected item by setting the bindIndexForStepsArray
- * option to true.
- */
- this.stepsArray = null;
- /**
- * Set to true to bind the index of the selected item to value model and valueHigh model.
- */
- this.bindIndexForStepsArray = false;
- /**
- * When set to true and using a range slider, the range can be dragged by the selection bar.
- * Applies to range slider only.
- */
- this.draggableRange = false;
- /**
- * Same as draggableRange but the slider range can't be changed.
- * Applies to range slider only.
- */
- this.draggableRangeOnly = false;
- /**
- * Set to true to always show the selection bar before the slider handle.
- */
- this.showSelectionBar = false;
- /**
- * Set to true to always show the selection bar after the slider handle.
- */
- this.showSelectionBarEnd = false;
- /**
- * Set a number to draw the selection bar between this value and the slider handle.
- * When using stepsArray, expressed as index into stepsArray.
- */
- this.showSelectionBarFromValue = null;
- /**
- * Only for range slider. Set to true to visualize in different colour the areas
- * on the left/right (top/bottom for vertical range slider) of selection bar between the handles.
- */
- this.showOuterSelectionBars = false;
- /**
- * Set to true to hide pointer labels
- */
- this.hidePointerLabels = false;
- /**
- * Set to true to hide min / max labels
- */
- this.hideLimitLabels = false;
- /**
- * Set to false to disable the auto-hiding behavior of the limit labels.
- */
- this.autoHideLimitLabels = true;
- /**
- * Set to true to make the slider read-only.
- */
- this.readOnly = false;
- /**
- * Set to true to disable the slider.
- */
- this.disabled = false;
- /**
- * Throttle interval for mouse events in milliseconds.
- * This is provided to avoid a flood of events when moving the slider with mouse.
- */
- this.mouseEventsInterval = 50;
- /**
- * Throttle interval for touch events in milliseconds.
- * This is provided to avoid a flood of events when moving the slider with touch gesture.
- */
- this.touchEventsInterval = 50;
- /**
- * Throttle interval for input changes (changes to bindings or reactive form inputs)
- * This is provided to avoid a flood of events on frequent input binding changes affecting performance.
- */
- this.inputEventsInterval = 100;
- /**
- * Throttle interval for output changes (signalling changes to output bindings and user callbacks)
- * This is provided to avoid a flood of outgoing events affecting Angular app performance.
- */
- this.outputEventsInterval = 100;
- /**
- * Set to true to display a tick for each step of the slider.
- */
- this.showTicks = false;
- /**
- * Set to true to display a tick and the step value for each step of the slider..
- */
- this.showTicksValues = false;
- /* The step between each tick to display. If not set, the step value is used.
- Not used when ticksArray is specified. */
- this.tickStep = null;
- /* The step between displaying each tick step value.
- If not set, then tickStep or step is used, depending on which one is set. */
- this.tickValueStep = null;
- /**
- * Use to display ticks at specific positions.
- * The array contains the index of the ticks that should be displayed.
- * For example, [0, 1, 5] will display a tick for the first, second and sixth values.
- */
- this.ticksArray = null;
- /**
- * Used to display a tooltip when a tick is hovered.
- * Set to a function that returns the tooltip content for a given value.
- */
- this.ticksTooltip = null;
- /**
- * Same as ticksTooltip but for ticks values.
- */
- this.ticksValuesTooltip = null;
- /**
- * Set to true to display the slider vertically.
- * The slider will take the full height of its parent.
- * Changing this value at runtime is not currently supported.
- */
- this.vertical = false;
- /**
- * Function that returns the current color of the selection bar.
- * If your color won't change, don't use this option but set it through CSS.
- * If the returned color depends on a model value (either value or valueHigh),
- * you should use the argument passed to the function.
- * Indeed, when the function is called, there is no certainty that the model
- * has already been updated.
- */
- this.getSelectionBarColor = null;
- /**
- * Function that returns the color of a tick. showTicks must be enabled.
- */
- this.getTickColor = null;
- /**
- * Function that returns the current color of a pointer.
- * If your color won't change, don't use this option but set it through CSS.
- * If the returned color depends on a model value (either value or valueHigh),
- * you should use the argument passed to the function.
- * Indeed, when the function is called, there is no certainty that the model has already been updated.
- * To handle range slider pointers independently, you should evaluate pointerType within the given
- * function where "min" stands for value model and "max" for valueHigh model values.
- */
- this.getPointerColor = null;
- /**
- * Handles are focusable (on click or with tab) and can be modified using the following keyboard controls:
- * Left/bottom arrows: -1
- * Right/top arrows: +1
- * Page-down: -10%
- * Page-up: +10%
- * Home: minimum value
- * End: maximum value
- */
- this.keyboardSupport = true;
- /**
- * If you display the slider in an element that uses transform: scale(0.5), set the scale value to 2
- * so that the slider is rendered properly and the events are handled correctly.
- */
- this.scale = 1;
- /**
- * Set to true to force the value(s) to be rounded to the step, even when modified from the outside.
- * When set to false, if the model values are modified from outside the slider, they are not rounded
- * and can be between two steps.
- */
- this.enforceStep = true;
- /**
- * Set to true to force the value(s) to be normalised to allowed range (floor to ceil), even when modified from the outside.
- * When set to false, if the model values are modified from outside the slider, and they are outside allowed range,
- * the slider may be rendered incorrectly. However, setting this to false may be useful if you want to perform custom normalisation.
- */
- this.enforceRange = true;
- /**
- * Set to true to force the value(s) to be rounded to the nearest step value, even when modified from the outside.
- * When set to false, if the model values are modified from outside the slider, and they are outside allowed range,
- * the slider may be rendered incorrectly. However, setting this to false may be useful if you want to perform custom normalisation.
- */
- this.enforceStepsArray = true;
- /**
- * Set to true to prevent to user from switching the min and max handles. Applies to range slider only.
- */
- this.noSwitching = false;
- /**
- * Set to true to only bind events on slider handles.
- */
- this.onlyBindHandles = false;
- /**
- * Set to true to show graphs right to left.
- * If vertical is true it will be from top to bottom and left / right arrow functions reversed.
- */
- this.rightToLeft = false;
- /**
- * Set to true to reverse keyboard navigation:
- * Right/top arrows: -1
- * Left/bottom arrows: +1
- * Page-up: -10%
- * Page-down: +10%
- * End: minimum value
- * Home: maximum value
- */
- this.reversedControls = false;
- /**
- * Set to true to keep the slider labels inside the slider bounds.
- */
- this.boundPointerLabels = true;
- /**
- * Set to true to use a logarithmic scale to display the slider.
- */
- this.logScale = false;
- /**
- * Function that returns the position on the slider for a given value.
- * The position must be a percentage between 0 and 1.
- * The function should be monotonically increasing or decreasing; otherwise the slider may behave incorrectly.
- */
- this.customValueToPosition = null;
- /**
- * Function that returns the value for a given position on the slider.
- * The position is a percentage between 0 and 1.
- * The function should be monotonically increasing or decreasing; otherwise the slider may behave incorrectly.
- */
- this.customPositionToValue = null;
- /**
- * Precision limit for calculated values.
- * Values used in calculations will be rounded to this number of significant digits
- * to prevent accumulating small floating-point errors.
- */
- this.precisionLimit = 12;
- /**
- * Use to display the selection bar as a gradient.
- * The given object must contain from and to properties which are colors.
- */
- this.selectionBarGradient = null;
- /**
- * Use to add a label directly to the slider for accessibility. Adds the aria-label attribute.
- */
- this.ariaLabel = null;
- /**
- * Use instead of ariaLabel to reference the id of an element which will be used to label the slider.
- * Adds the aria-labelledby attribute.
- */
- this.ariaLabelledBy = null;
- /**
- * Use to add a label directly to the slider range for accessibility. Adds the aria-label attribute.
- */
- this.ariaLabelHigh = null;
- /**
- * Use instead of ariaLabelHigh to reference the id of an element which will be used to label the slider range.
- * Adds the aria-labelledby attribute.
- */
- this.ariaLabelledByHigh = null;
- /**
- * Use to increase rendering performance. If the value is not provided, the slider calculates the with/height of the handle
- */
- this.handleDimension = null;
- /**
- * Use to increase rendering performance. If the value is not provided, the slider calculates the with/height of the bar
- */
- this.barDimension = null;
- /**
- * Enable/disable CSS animations
- */
- this.animate = true;
- /**
- * Enable/disable CSS animations while moving the slider
- */
- this.animateOnMove = false;
- }
- }
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
- */
- /** @enum {number} */
- const PointerType = {
- /** Low pointer */
- Min: 0,
- /** High pointer */
- Max: 1,
- };
- PointerType[PointerType.Min] = 'Min';
- PointerType[PointerType.Max] = 'Max';
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
- */
- class ChangeContext {
- }
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
- */
- /**
- * Collection of functions to handle conversions/lookups of values
- */
- class ValueHelper {
- /**
- * @param {?} value
- * @return {?}
- */
- static isNullOrUndefined(value) {
- return value === undefined || value === null;
- }
- /**
- * @param {?} array1
- * @param {?} array2
- * @return {?}
- */
- static areArraysEqual(array1, array2) {
- if (array1.length !== array2.length) {
- return false;
- }
- for (let i = 0; i < array1.length; ++i) {
- if (array1[i] !== array2[i]) {
- return false;
- }
- }
- return true;
- }
- /**
- * @param {?} val
- * @param {?} minVal
- * @param {?} maxVal
- * @return {?}
- */
- static linearValueToPosition(val, minVal, maxVal) {
- /** @type {?} */
- const range = maxVal - minVal;
- return (val - minVal) / range;
- }
- /**
- * @param {?} val
- * @param {?} minVal
- * @param {?} maxVal
- * @return {?}
- */
- static logValueToPosition(val, minVal, maxVal) {
- val = Math.log(val);
- minVal = Math.log(minVal);
- maxVal = Math.log(maxVal);
- /** @type {?} */
- const range = maxVal - minVal;
- return (val - minVal) / range;
- }
- /**
- * @param {?} percent
- * @param {?} minVal
- * @param {?} maxVal
- * @return {?}
- */
- static linearPositionToValue(percent, minVal, maxVal) {
- return percent * (maxVal - minVal) + minVal;
- }
- /**
- * @param {?} percent
- * @param {?} minVal
- * @param {?} maxVal
- * @return {?}
- */
- static logPositionToValue(percent, minVal, maxVal) {
- minVal = Math.log(minVal);
- maxVal = Math.log(maxVal);
- /** @type {?} */
- const value = percent * (maxVal - minVal) + minVal;
- return Math.exp(value);
- }
- /**
- * @param {?} modelValue
- * @param {?} stepsArray
- * @return {?}
- */
- static findStepIndex(modelValue, stepsArray) {
- /** @type {?} */
- const differences = stepsArray.map((step) => Math.abs(modelValue - step.value));
- /** @type {?} */
- let minDifferenceIndex = 0;
- for (let index = 0; index < stepsArray.length; index++) {
- if (differences[index] !== differences[minDifferenceIndex] && differences[index] < differences[minDifferenceIndex]) {
- minDifferenceIndex = index;
- }
- }
- return minDifferenceIndex;
- }
- }
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
- */
- /**
- * Helper with compatibility functions to support different browsers
- */
- class CompatibilityHelper {
- /**
- * Workaround for TouchEvent constructor sadly not being available on all browsers (e.g. Firefox, Safari)
- * @param {?} event
- * @return {?}
- */
- static isTouchEvent(event) {
- if ((/** @type {?} */ (window)).TouchEvent !== undefined) {
- return event instanceof TouchEvent;
- }
- return event.touches !== undefined;
- }
- /**
- * Detect presence of ResizeObserver API
- * @return {?}
- */
- static isResizeObserverAvailable() {
- return (/** @type {?} */ (window)).ResizeObserver !== undefined;
- }
- }
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
- */
- /**
- * Helper with mathematical functions
- */
- class MathHelper {
- /**
- * @param {?} value
- * @param {?} precisionLimit
- * @return {?}
- */
- static roundToPrecisionLimit(value, precisionLimit) {
- return +(value.toPrecision(precisionLimit));
- }
- /**
- * @param {?} value
- * @param {?} modulo
- * @param {?} precisionLimit
- * @return {?}
- */
- static isModuloWithinPrecisionLimit(value, modulo, precisionLimit) {
- /** @type {?} */
- const limit = Math.pow(10, -precisionLimit);
- return Math.abs(value % modulo) <= limit || Math.abs(Math.abs(value % modulo) - modulo) <= limit;
- }
- /**
- * @param {?} value
- * @param {?} floor
- * @param {?} ceil
- * @return {?}
- */
- static clampToRange(value, floor, ceil) {
- return Math.min(Math.max(value, floor), ceil);
- }
- }
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
- */
- class EventListener {
- constructor() {
- this.eventName = null;
- this.events = null;
- this.eventsSubscription = null;
- this.teardownCallback = null;
- }
- }
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
- */
- /**
- * Helper class to attach event listeners to DOM elements with debounce support using rxjs
- */
- class EventListenerHelper {
- /**
- * @param {?} renderer
- */
- constructor(renderer) {
- this.renderer = renderer;
- }
- /**
- * @param {?} nativeElement
- * @param {?} eventName
- * @param {?} callback
- * @param {?=} throttleInterval
- * @return {?}
- */
- attachPassiveEventListener(nativeElement, eventName, callback, throttleInterval) {
- // Only use passive event listeners if the browser supports it
- if (detect_passive_events__WEBPACK_IMPORTED_MODULE_2___default.a.hasSupport !== true) {
- return this.attachEventListener(nativeElement, eventName, callback, throttleInterval);
- }
- /** @type {?} */
- const listener = new EventListener();
- listener.eventName = eventName;
- listener.events = new rxjs__WEBPACK_IMPORTED_MODULE_0__["Subject"]();
- /** @type {?} */
- const observerCallback = (event) => {
- listener.events.next(event);
- };
- nativeElement.addEventListener(eventName, observerCallback, { passive: true, capture: false });
- listener.teardownCallback = () => {
- nativeElement.removeEventListener(eventName, observerCallback, { passive: true, capture: false });
- };
- listener.eventsSubscription = listener.events
- .pipe((!ValueHelper.isNullOrUndefined(throttleInterval))
- ? Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["throttleTime"])(throttleInterval, undefined, { leading: true, trailing: true })
- : Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(() => { }) // no-op
- )
- .subscribe((event) => {
- callback(event);
- });
- return listener;
- }
- /**
- * @param {?} eventListener
- * @return {?}
- */
- detachEventListener(eventListener) {
- if (!ValueHelper.isNullOrUndefined(eventListener.eventsSubscription)) {
- eventListener.eventsSubscription.unsubscribe();
- eventListener.eventsSubscription = null;
- }
- if (!ValueHelper.isNullOrUndefined(eventListener.events)) {
- eventListener.events.complete();
- eventListener.events = null;
- }
- if (!ValueHelper.isNullOrUndefined(eventListener.teardownCallback)) {
- eventListener.teardownCallback();
- eventListener.teardownCallback = null;
- }
- }
- /**
- * @param {?} nativeElement
- * @param {?} eventName
- * @param {?} callback
- * @param {?=} throttleInterval
- * @return {?}
- */
- attachEventListener(nativeElement, eventName, callback, throttleInterval) {
- /** @type {?} */
- const listener = new EventListener();
- listener.eventName = eventName;
- listener.events = new rxjs__WEBPACK_IMPORTED_MODULE_0__["Subject"]();
- /** @type {?} */
- const observerCallback = (event) => {
- listener.events.next(event);
- };
- listener.teardownCallback = this.renderer.listen(nativeElement, eventName, observerCallback);
- listener.eventsSubscription = listener.events
- .pipe((!ValueHelper.isNullOrUndefined(throttleInterval))
- ? Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["throttleTime"])(throttleInterval, undefined, { leading: true, trailing: true })
- : Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(() => { }) // no-op
- )
- .subscribe((event) => { callback(event); });
- return listener;
- }
- }
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
- */
- class SliderElementDirective {
- /**
- * @param {?} elemRef
- * @param {?} renderer
- * @param {?} changeDetectionRef
- */
- constructor(elemRef, renderer, changeDetectionRef) {
- this.elemRef = elemRef;
- this.renderer = renderer;
- this.changeDetectionRef = changeDetectionRef;
- this._position = 0;
- this._dimension = 0;
- this._alwaysHide = false;
- this._vertical = false;
- this._scale = 1;
- this.opacity = 1;
- this.visibility = 'visible';
- this.left = '';
- this.bottom = '';
- this.height = '';
- this.width = '';
- this.eventListeners = [];
- this.eventListenerHelper = new EventListenerHelper(this.renderer);
- }
- /**
- * @return {?}
- */
- get position() {
- return this._position;
- }
- /**
- * @return {?}
- */
- get dimension() {
- return this._dimension;
- }
- /**
- * @return {?}
- */
- get alwaysHide() {
- return this._alwaysHide;
- }
- /**
- * @return {?}
- */
- get vertical() {
- return this._vertical;
- }
- /**
- * @return {?}
- */
- get scale() {
- return this._scale;
- }
- /**
- * @param {?} hide
- * @return {?}
- */
- setAlwaysHide(hide) {
- this._alwaysHide = hide;
- if (hide) {
- this.visibility = 'hidden';
- }
- else {
- this.visibility = 'visible';
- }
- }
- /**
- * @return {?}
- */
- hide() {
- this.opacity = 0;
- }
- /**
- * @return {?}
- */
- show() {
- if (this.alwaysHide) {
- return;
- }
- this.opacity = 1;
- }
- /**
- * @return {?}
- */
- isVisible() {
- if (this.alwaysHide) {
- return false;
- }
- return this.opacity !== 0;
- }
- /**
- * @param {?} vertical
- * @return {?}
- */
- setVertical(vertical) {
- this._vertical = vertical;
- if (this._vertical) {
- this.left = '';
- this.width = '';
- }
- else {
- this.bottom = '';
- this.height = '';
- }
- }
- /**
- * @param {?} scale
- * @return {?}
- */
- setScale(scale) {
- this._scale = scale;
- }
- /**
- * @param {?} pos
- * @return {?}
- */
- setPosition(pos) {
- if (this._position !== pos && !this.isRefDestroyed()) {
- this.changeDetectionRef.markForCheck();
- }
- this._position = pos;
- if (this._vertical) {
- this.bottom = Math.round(pos) + 'px';
- }
- else {
- this.left = Math.round(pos) + 'px';
- }
- }
- /**
- * @return {?}
- */
- calculateDimension() {
- /** @type {?} */
- const val = this.getBoundingClientRect();
- if (this.vertical) {
- this._dimension = (val.bottom - val.top) * this.scale;
- }
- else {
- this._dimension = (val.right - val.left) * this.scale;
- }
- }
- /**
- * @param {?} dim
- * @return {?}
- */
- setDimension(dim) {
- if (this._dimension !== dim && !this.isRefDestroyed()) {
- this.changeDetectionRef.markForCheck();
- }
- this._dimension = dim;
- if (this._vertical) {
- this.height = Math.round(dim) + 'px';
- }
- else {
- this.width = Math.round(dim) + 'px';
- }
- }
- /**
- * @return {?}
- */
- getBoundingClientRect() {
- return this.elemRef.nativeElement.getBoundingClientRect();
- }
- /**
- * @param {?} eventName
- * @param {?} callback
- * @param {?=} debounceInterval
- * @return {?}
- */
- on(eventName, callback, debounceInterval) {
- /** @type {?} */
- const listener = this.eventListenerHelper.attachEventListener(this.elemRef.nativeElement, eventName, callback, debounceInterval);
- this.eventListeners.push(listener);
- }
- /**
- * @param {?} eventName
- * @param {?} callback
- * @param {?=} debounceInterval
- * @return {?}
- */
- onPassive(eventName, callback, debounceInterval) {
- /** @type {?} */
- const listener = this.eventListenerHelper.attachPassiveEventListener(this.elemRef.nativeElement, eventName, callback, debounceInterval);
- this.eventListeners.push(listener);
- }
- /**
- * @param {?=} eventName
- * @return {?}
- */
- off(eventName) {
- /** @type {?} */
- let listenersToKeep;
- /** @type {?} */
- let listenersToRemove;
- if (!ValueHelper.isNullOrUndefined(eventName)) {
- listenersToKeep = this.eventListeners.filter((event) => event.eventName !== eventName);
- listenersToRemove = this.eventListeners.filter((event) => event.eventName === eventName);
- }
- else {
- listenersToKeep = [];
- listenersToRemove = this.eventListeners;
- }
- for (const listener of listenersToRemove) {
- this.eventListenerHelper.detachEventListener(listener);
- }
- this.eventListeners = listenersToKeep;
- }
- /**
- * @return {?}
- */
- isRefDestroyed() {
- return ValueHelper.isNullOrUndefined(this.changeDetectionRef) || this.changeDetectionRef['destroyed'];
- }
- }
- SliderElementDirective.ɵfac = function SliderElementDirective_Factory(t) { return new (t || SliderElementDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"])); };
- SliderElementDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({ type: SliderElementDirective, selectors: [["", "ngxSliderElement", ""]], hostVars: 12, hostBindings: function SliderElementDirective_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵstyleProp"]("opacity", ctx.opacity)("visibility", ctx.visibility)("left", ctx.left)("bottom", ctx.bottom)("height", ctx.height)("width", ctx.width);
- } } });
- /** @nocollapse */
- SliderElementDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"] }
- ];
- SliderElementDirective.propDecorators = {
- opacity: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['style.opacity',] }],
- visibility: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['style.visibility',] }],
- left: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['style.left',] }],
- bottom: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['style.bottom',] }],
- height: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['style.height',] }],
- width: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['style.width',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](SliderElementDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
- args: [{
- selector: '[ngxSliderElement]'
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"] }]; }, { opacity: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['style.opacity']
- }], visibility: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['style.visibility']
- }], left: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['style.left']
- }], bottom: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['style.bottom']
- }], height: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['style.height']
- }], width: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['style.width']
- }] }); })();
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
- */
- class SliderHandleDirective extends SliderElementDirective {
- /**
- * @param {?} elemRef
- * @param {?} renderer
- * @param {?} changeDetectionRef
- */
- constructor(elemRef, renderer, changeDetectionRef) {
- super(elemRef, renderer, changeDetectionRef);
- this.active = false;
- this.role = '';
- this.tabindex = '';
- this.ariaOrientation = '';
- this.ariaLabel = '';
- this.ariaLabelledBy = '';
- this.ariaValueNow = '';
- this.ariaValueText = '';
- this.ariaValueMin = '';
- this.ariaValueMax = '';
- }
- /**
- * @return {?}
- */
- focus() {
- this.elemRef.nativeElement.focus();
- }
- }
- SliderHandleDirective.ɵfac = function SliderHandleDirective_Factory(t) { return new (t || SliderHandleDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"])); };
- SliderHandleDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({ type: SliderHandleDirective, selectors: [["", "ngxSliderHandle", ""]], hostVars: 11, hostBindings: function SliderHandleDirective_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵattribute"]("role", ctx.role)("tabindex", ctx.tabindex)("aria-orientation", ctx.ariaOrientation)("aria-label", ctx.ariaLabel)("aria-labelledby", ctx.ariaLabelledBy)("aria-valuenow", ctx.ariaValueNow)("aria-valuetext", ctx.ariaValueText)("aria-valuemin", ctx.ariaValueMin)("aria-valuemax", ctx.ariaValueMax);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵclassProp"]("ngx-slider-active", ctx.active);
- } }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]] });
- /** @nocollapse */
- SliderHandleDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"] }
- ];
- SliderHandleDirective.propDecorators = {
- active: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['class.ngx-slider-active',] }],
- role: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['attr.role',] }],
- tabindex: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['attr.tabindex',] }],
- ariaOrientation: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['attr.aria-orientation',] }],
- ariaLabel: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['attr.aria-label',] }],
- ariaLabelledBy: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['attr.aria-labelledby',] }],
- ariaValueNow: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['attr.aria-valuenow',] }],
- ariaValueText: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['attr.aria-valuetext',] }],
- ariaValueMin: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['attr.aria-valuemin',] }],
- ariaValueMax: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['attr.aria-valuemax',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](SliderHandleDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
- args: [{
- selector: '[ngxSliderHandle]'
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"] }]; }, { active: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['class.ngx-slider-active']
- }], role: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['attr.role']
- }], tabindex: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['attr.tabindex']
- }], ariaOrientation: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['attr.aria-orientation']
- }], ariaLabel: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['attr.aria-label']
- }], ariaLabelledBy: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['attr.aria-labelledby']
- }], ariaValueNow: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['attr.aria-valuenow']
- }], ariaValueText: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['attr.aria-valuetext']
- }], ariaValueMin: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['attr.aria-valuemin']
- }], ariaValueMax: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['attr.aria-valuemax']
- }] }); })();
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
- */
- class SliderLabelDirective extends SliderElementDirective {
- /**
- * @param {?} elemRef
- * @param {?} renderer
- * @param {?} changeDetectionRef
- */
- constructor(elemRef, renderer, changeDetectionRef) {
- super(elemRef, renderer, changeDetectionRef);
- this._value = null;
- }
- /**
- * @return {?}
- */
- get value() {
- return this._value;
- }
- /**
- * @param {?} value
- * @return {?}
- */
- setValue(value) {
- /** @type {?} */
- let recalculateDimension = false;
- if (!this.alwaysHide &&
- (ValueHelper.isNullOrUndefined(this.value) ||
- this.value.length !== value.length ||
- (this.value.length > 0 && this.dimension === 0))) {
- recalculateDimension = true;
- }
- this._value = value;
- this.elemRef.nativeElement.innerHTML = value;
- // Update dimension only when length of the label have changed
- if (recalculateDimension) {
- this.calculateDimension();
- }
- }
- }
- SliderLabelDirective.ɵfac = function SliderLabelDirective_Factory(t) { return new (t || SliderLabelDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"])); };
- SliderLabelDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({ type: SliderLabelDirective, selectors: [["", "ngxSliderLabel", ""]], features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]] });
- /** @nocollapse */
- SliderLabelDirective.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](SliderLabelDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
- args: [{
- selector: '[ngxSliderLabel]'
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"] }]; }, null); })();
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
- */
- class Tick {
- constructor() {
- this.selected = false;
- this.style = {};
- this.tooltip = null;
- this.tooltipPlacement = null;
- this.value = null;
- this.valueTooltip = null;
- this.valueTooltipPlacement = null;
- this.legend = null;
- }
- }
- class Dragging {
- constructor() {
- this.active = false;
- this.value = 0;
- this.difference = 0;
- this.position = 0;
- this.lowLimit = 0;
- this.highLimit = 0;
- }
- }
- class ModelValues {
- /**
- * @param {?=} x
- * @param {?=} y
- * @return {?}
- */
- static compare(x, y) {
- if (ValueHelper.isNullOrUndefined(x) && ValueHelper.isNullOrUndefined(y)) {
- return false;
- }
- if (ValueHelper.isNullOrUndefined(x) !== ValueHelper.isNullOrUndefined(y)) {
- return false;
- }
- return x.value === y.value && x.highValue === y.highValue;
- }
- }
- class ModelChange extends ModelValues {
- /**
- * @param {?=} x
- * @param {?=} y
- * @return {?}
- */
- static compare(x, y) {
- if (ValueHelper.isNullOrUndefined(x) && ValueHelper.isNullOrUndefined(y)) {
- return false;
- }
- if (ValueHelper.isNullOrUndefined(x) !== ValueHelper.isNullOrUndefined(y)) {
- return false;
- }
- return x.value === y.value &&
- x.highValue === y.highValue &&
- x.forceChange === y.forceChange;
- }
- }
- /** @type {?} */
- const NGX_SLIDER_CONTROL_VALUE_ACCESSOR = {
- provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
- /* tslint:disable-next-line: no-use-before-declare */
- useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_3__["forwardRef"])(() => SliderComponent),
- multi: true,
- };
- class SliderComponent {
- /**
- * @param {?} renderer
- * @param {?} elementRef
- * @param {?} changeDetectionRef
- * @param {?} zone
- */
- constructor(renderer, elementRef, changeDetectionRef, zone) {
- this.renderer = renderer;
- this.elementRef = elementRef;
- this.changeDetectionRef = changeDetectionRef;
- this.zone = zone;
- // Model for low value of slider. For simple slider, this is the only input. For range slider, this is the low value.
- this.value = null;
- // Output for low value slider to support two-way bindings
- this.valueChange = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["EventEmitter"]();
- // Model for high value of slider. Not used in simple slider. For range slider, this is the high value.
- this.highValue = null;
- // Output for high value slider to support two-way bindings
- this.highValueChange = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["EventEmitter"]();
- // An object with all the other options of the slider.
- // Each option can be updated at runtime and the slider will automatically be re-rendered.
- this.options = new Options();
- // Event emitted when user starts interaction with the slider
- this.userChangeStart = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["EventEmitter"]();
- // Event emitted on each change coming from user interaction
- this.userChange = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["EventEmitter"]();
- // Event emitted when user finishes interaction with the slider
- this.userChangeEnd = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["EventEmitter"]();
- this.initHasRun = false;
- this.inputModelChangeSubject = new rxjs__WEBPACK_IMPORTED_MODULE_0__["Subject"]();
- this.inputModelChangeSubscription = null;
- this.outputModelChangeSubject = new rxjs__WEBPACK_IMPORTED_MODULE_0__["Subject"]();
- this.outputModelChangeSubscription = null;
- this.viewLowValue = null;
- this.viewHighValue = null;
- this.viewOptions = new Options();
- this.handleHalfDimension = 0;
- this.maxHandlePosition = 0;
- this.currentTrackingPointer = null;
- this.currentFocusPointer = null;
- this.firstKeyDown = false;
- this.touchId = null;
- this.dragging = new Dragging();
- // Host element class bindings
- this.sliderElementVerticalClass = false;
- this.sliderElementAnimateClass = false;
- this.sliderElementWithLegendClass = false;
- this.sliderElementDisabledAttr = null;
- this.barStyle = {};
- this.minPointerStyle = {};
- this.maxPointerStyle = {};
- this.fullBarTransparentClass = false;
- this.selectionBarDraggableClass = false;
- this.ticksUnderValuesClass = false;
- this.intermediateTicks = false;
- this.ticks = [];
- this.eventListenerHelper = null;
- this.onMoveEventListener = null;
- this.onEndEventListener = null;
- this.moving = false;
- this.resizeObserver = null;
- this.onTouchedCallback = null;
- this.onChangeCallback = null;
- this.eventListenerHelper = new EventListenerHelper(this.renderer);
- }
- /**
- * @param {?} manualRefresh
- * @return {?}
- */
- set manualRefresh(manualRefresh) {
- this.unsubscribeManualRefresh();
- this.manualRefreshSubscription = manualRefresh.subscribe(() => {
- setTimeout(() => this.calculateViewDimensionsAndDetectChanges());
- });
- }
- /**
- * @param {?} triggerFocus
- * @return {?}
- */
- set triggerFocus(triggerFocus) {
- this.unsubscribeTriggerFocus();
- this.triggerFocusSubscription = triggerFocus.subscribe((pointerType) => {
- this.focusPointer(pointerType);
- });
- }
- /**
- * @return {?}
- */
- get range() {
- return !ValueHelper.isNullOrUndefined(this.value) && !ValueHelper.isNullOrUndefined(this.highValue);
- }
- /**
- * @return {?}
- */
- get showTicks() {
- return this.viewOptions.showTicks;
- }
- /**
- * @return {?}
- */
- ngOnInit() {
- this.viewOptions = new Options();
- Object.assign(this.viewOptions, this.options);
- // We need to run these two things first, before the rest of the init in ngAfterViewInit(),
- // because these two settings are set through @HostBinding and Angular change detection
- // mechanism doesn't like them changing in ngAfterViewInit()
- this.updateDisabledState();
- this.updateVerticalState();
- }
- /**
- * @return {?}
- */
- ngAfterViewInit() {
- this.applyOptions();
- this.subscribeInputModelChangeSubject(this.viewOptions.inputEventsInterval);
- this.subscribeOutputModelChangeSubject(this.viewOptions.outputEventsInterval);
- // Once we apply options, we need to normalise model values for the first time
- this.renormaliseModelValues();
- this.viewLowValue = this.modelValueToViewValue(this.value);
- if (this.range) {
- this.viewHighValue = this.modelValueToViewValue(this.highValue);
- }
- else {
- this.viewHighValue = null;
- }
- this.updateVerticalState(); // need to run this again to cover changes to slider elements
- this.manageElementsStyle();
- this.updateDisabledState();
- this.calculateViewDimensions();
- this.addAccessibility();
- this.updateCeilLabel();
- this.updateFloorLabel();
- this.initHandles();
- this.manageEventsBindings();
- this.subscribeResizeObserver();
- this.initHasRun = true;
- // Run change detection manually to resolve some issues when init procedure changes values used in the view
- if (!this.isRefDestroyed()) {
- this.changeDetectionRef.detectChanges();
- }
- }
- /**
- * @param {?} changes
- * @return {?}
- */
- ngOnChanges(changes) {
- // Always apply options first
- if (!ValueHelper.isNullOrUndefined(changes["options"])) {
- this.onChangeOptions();
- }
- // Then value changes
- if (!ValueHelper.isNullOrUndefined(changes["value"]) ||
- !ValueHelper.isNullOrUndefined(changes["highValue"])) {
- this.inputModelChangeSubject.next({
- value: this.value,
- highValue: this.highValue,
- forceChange: false,
- internalChange: false
- });
- }
- }
- /**
- * @return {?}
- */
- ngOnDestroy() {
- this.unbindEvents();
- this.unsubscribeResizeObserver();
- this.unsubscribeInputModelChangeSubject();
- this.unsubscribeOutputModelChangeSubject();
- this.unsubscribeManualRefresh();
- this.unsubscribeTriggerFocus();
- }
- /**
- * @param {?} obj
- * @return {?}
- */
- writeValue(obj) {
- if (obj instanceof Array) {
- this.value = obj[0];
- this.highValue = obj[1];
- }
- else {
- this.value = obj;
- }
- // ngOnChanges() is not called in this instance, so we need to communicate the change manually
- this.inputModelChangeSubject.next({
- value: this.value,
- highValue: this.highValue,
- forceChange: false,
- internalChange: false
- });
- }
- /**
- * @param {?} onChangeCallback
- * @return {?}
- */
- registerOnChange(onChangeCallback) {
- this.onChangeCallback = onChangeCallback;
- }
- /**
- * @param {?} onTouchedCallback
- * @return {?}
- */
- registerOnTouched(onTouchedCallback) {
- this.onTouchedCallback = onTouchedCallback;
- }
- /**
- * @param {?} isDisabled
- * @return {?}
- */
- setDisabledState(isDisabled) {
- this.viewOptions.disabled = isDisabled;
- this.updateDisabledState();
- }
- /**
- * @param {?} event
- * @return {?}
- */
- onResize(event) {
- this.calculateViewDimensionsAndDetectChanges();
- }
- /**
- * @param {?=} interval
- * @return {?}
- */
- subscribeInputModelChangeSubject(interval) {
- this.inputModelChangeSubscription = this.inputModelChangeSubject
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilChanged"])(ModelChange.compare),
- // Hack to reset the status of the distinctUntilChanged() - if a "fake" event comes through with forceChange=true,
- // we forcefully by-pass distinctUntilChanged(), but otherwise drop the event
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["filter"])((modelChange) => !modelChange.forceChange && !modelChange.internalChange), (!ValueHelper.isNullOrUndefined(interval))
- ? Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["throttleTime"])(interval, undefined, { leading: true, trailing: true })
- : Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(() => { }) // no-op
- )
- .subscribe((modelChange) => this.applyInputModelChange(modelChange));
- }
- /**
- * @param {?=} interval
- * @return {?}
- */
- subscribeOutputModelChangeSubject(interval) {
- this.outputModelChangeSubscription = this.outputModelChangeSubject
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilChanged"])(ModelChange.compare), (!ValueHelper.isNullOrUndefined(interval))
- ? Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["throttleTime"])(interval, undefined, { leading: true, trailing: true })
- : Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(() => { }) // no-op
- )
- .subscribe((modelChange) => this.publishOutputModelChange(modelChange));
- }
- /**
- * @return {?}
- */
- subscribeResizeObserver() {
- if (CompatibilityHelper.isResizeObserverAvailable()) {
- this.resizeObserver = new ResizeObserver(() => this.calculateViewDimensionsAndDetectChanges());
- this.resizeObserver.observe(this.elementRef.nativeElement);
- }
- }
- /**
- * @return {?}
- */
- unsubscribeResizeObserver() {
- if (CompatibilityHelper.isResizeObserverAvailable() && this.resizeObserver !== null) {
- this.resizeObserver.disconnect();
- this.resizeObserver = null;
- }
- }
- /**
- * @return {?}
- */
- unsubscribeOnMove() {
- if (!ValueHelper.isNullOrUndefined(this.onMoveEventListener)) {
- this.eventListenerHelper.detachEventListener(this.onMoveEventListener);
- this.onMoveEventListener = null;
- }
- }
- /**
- * @return {?}
- */
- unsubscribeOnEnd() {
- if (!ValueHelper.isNullOrUndefined(this.onEndEventListener)) {
- this.eventListenerHelper.detachEventListener(this.onEndEventListener);
- this.onEndEventListener = null;
- }
- }
- /**
- * @return {?}
- */
- unsubscribeInputModelChangeSubject() {
- if (!ValueHelper.isNullOrUndefined(this.inputModelChangeSubscription)) {
- this.inputModelChangeSubscription.unsubscribe();
- this.inputModelChangeSubscription = null;
- }
- }
- /**
- * @return {?}
- */
- unsubscribeOutputModelChangeSubject() {
- if (!ValueHelper.isNullOrUndefined(this.outputModelChangeSubscription)) {
- this.outputModelChangeSubscription.unsubscribe();
- this.outputModelChangeSubscription = null;
- }
- }
- /**
- * @return {?}
- */
- unsubscribeManualRefresh() {
- if (!ValueHelper.isNullOrUndefined(this.manualRefreshSubscription)) {
- this.manualRefreshSubscription.unsubscribe();
- this.manualRefreshSubscription = null;
- }
- }
- /**
- * @return {?}
- */
- unsubscribeTriggerFocus() {
- if (!ValueHelper.isNullOrUndefined(this.triggerFocusSubscription)) {
- this.triggerFocusSubscription.unsubscribe();
- this.triggerFocusSubscription = null;
- }
- }
- /**
- * @param {?} pointerType
- * @return {?}
- */
- getPointerElement(pointerType) {
- if (pointerType === PointerType.Min) {
- return this.minHandleElement;
- }
- else if (pointerType === PointerType.Max) {
- return this.maxHandleElement;
- }
- return null;
- }
- /**
- * @return {?}
- */
- getCurrentTrackingValue() {
- if (this.currentTrackingPointer === PointerType.Min) {
- return this.viewLowValue;
- }
- else if (this.currentTrackingPointer === PointerType.Max) {
- return this.viewHighValue;
- }
- return null;
- }
- /**
- * @param {?} modelValue
- * @return {?}
- */
- modelValueToViewValue(modelValue) {
- if (ValueHelper.isNullOrUndefined(modelValue)) {
- return NaN;
- }
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.stepsArray) && !this.viewOptions.bindIndexForStepsArray) {
- return ValueHelper.findStepIndex(+modelValue, this.viewOptions.stepsArray);
- }
- return +modelValue;
- }
- /**
- * @param {?} viewValue
- * @return {?}
- */
- viewValueToModelValue(viewValue) {
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.stepsArray) && !this.viewOptions.bindIndexForStepsArray) {
- return this.getStepValue(viewValue);
- }
- return viewValue;
- }
- /**
- * @param {?} sliderValue
- * @return {?}
- */
- getStepValue(sliderValue) {
- /** @type {?} */
- const step = this.viewOptions.stepsArray[sliderValue];
- return (!ValueHelper.isNullOrUndefined(step)) ? step.value : NaN;
- }
- /**
- * @return {?}
- */
- applyViewChange() {
- this.value = this.viewValueToModelValue(this.viewLowValue);
- if (this.range) {
- this.highValue = this.viewValueToModelValue(this.viewHighValue);
- }
- this.outputModelChangeSubject.next({
- value: this.value,
- highValue: this.highValue,
- userEventInitiated: true,
- forceChange: false
- });
- // At this point all changes are applied and outputs are emitted, so we should be done.
- // However, input changes are communicated in different stream and we need to be ready to
- // act on the next input change even if it is exactly the same as last input change.
- // Therefore, we send a special event to reset the stream.
- this.inputModelChangeSubject.next({
- value: this.value,
- highValue: this.highValue,
- forceChange: false,
- internalChange: true
- });
- }
- /**
- * @param {?} modelChange
- * @return {?}
- */
- applyInputModelChange(modelChange) {
- /** @type {?} */
- const normalisedModelChange = this.normaliseModelValues(modelChange);
- /** @type {?} */
- const normalisationChange = !ModelValues.compare(modelChange, normalisedModelChange);
- if (normalisationChange) {
- this.value = normalisedModelChange.value;
- this.highValue = normalisedModelChange.highValue;
- }
- this.viewLowValue = this.modelValueToViewValue(normalisedModelChange.value);
- if (this.range) {
- this.viewHighValue = this.modelValueToViewValue(normalisedModelChange.highValue);
- }
- else {
- this.viewHighValue = null;
- }
- this.updateLowHandle(this.valueToPosition(this.viewLowValue));
- if (this.range) {
- this.updateHighHandle(this.valueToPosition(this.viewHighValue));
- }
- this.updateSelectionBar();
- this.updateTicksScale();
- this.updateAriaAttributes();
- if (this.range) {
- this.updateCombinedLabel();
- }
- // At the end, we need to communicate the model change to the outputs as well
- // Normalisation changes are also always forced out to ensure that subscribers always end up in correct state
- this.outputModelChangeSubject.next({
- value: normalisedModelChange.value,
- highValue: normalisedModelChange.highValue,
- forceChange: normalisationChange,
- userEventInitiated: false
- });
- }
- /**
- * @param {?} modelChange
- * @return {?}
- */
- publishOutputModelChange(modelChange) {
- /** @type {?} */
- const emitOutputs = () => {
- this.valueChange.emit(modelChange.value);
- if (this.range) {
- this.highValueChange.emit(modelChange.highValue);
- }
- if (!ValueHelper.isNullOrUndefined(this.onChangeCallback)) {
- if (this.range) {
- this.onChangeCallback([modelChange.value, modelChange.highValue]);
- }
- else {
- this.onChangeCallback(modelChange.value);
- }
- }
- if (!ValueHelper.isNullOrUndefined(this.onTouchedCallback)) {
- if (this.range) {
- this.onTouchedCallback([modelChange.value, modelChange.highValue]);
- }
- else {
- this.onTouchedCallback(modelChange.value);
- }
- }
- };
- if (modelChange.userEventInitiated) {
- // If this change was initiated by a user event, we can emit outputs in the same tick
- emitOutputs();
- this.userChange.emit(this.getChangeContext());
- }
- else {
- // But, if the change was initated by something else like a change in input bindings,
- // we need to wait until next tick to emit the outputs to keep Angular change detection happy
- setTimeout(() => { emitOutputs(); });
- }
- }
- /**
- * @param {?} input
- * @return {?}
- */
- normaliseModelValues(input) {
- /** @type {?} */
- const normalisedInput = new ModelValues();
- normalisedInput.value = input.value;
- normalisedInput.highValue = input.highValue;
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.stepsArray)) {
- // When using steps array, only round to nearest step in the array
- // No other enforcement can be done, as the step array may be out of order, and that is perfectly fine
- if (this.viewOptions.enforceStepsArray) {
- /** @type {?} */
- const valueIndex = ValueHelper.findStepIndex(normalisedInput.value, this.viewOptions.stepsArray);
- normalisedInput.value = this.viewOptions.stepsArray[valueIndex].value;
- if (this.range) {
- /** @type {?} */
- const highValueIndex = ValueHelper.findStepIndex(normalisedInput.highValue, this.viewOptions.stepsArray);
- normalisedInput.highValue = this.viewOptions.stepsArray[highValueIndex].value;
- }
- }
- return normalisedInput;
- }
- if (this.viewOptions.enforceStep) {
- normalisedInput.value = this.roundStep(normalisedInput.value);
- if (this.range) {
- normalisedInput.highValue = this.roundStep(normalisedInput.highValue);
- }
- }
- if (this.viewOptions.enforceRange) {
- normalisedInput.value = MathHelper.clampToRange(normalisedInput.value, this.viewOptions.floor, this.viewOptions.ceil);
- if (this.range) {
- normalisedInput.highValue = MathHelper.clampToRange(normalisedInput.highValue, this.viewOptions.floor, this.viewOptions.ceil);
- }
- // Make sure that range slider invariant (value <= highValue) is always satisfied
- if (this.range && input.value > input.highValue) {
- // We know that both values are now clamped correctly, they may just be in the wrong order
- // So the easy solution is to swap them... except swapping is sometimes disabled in options, so we make the two values the same
- if (this.viewOptions.noSwitching) {
- normalisedInput.value = normalisedInput.highValue;
- }
- else {
- /** @type {?} */
- const tempValue = input.value;
- normalisedInput.value = input.highValue;
- normalisedInput.highValue = tempValue;
- }
- }
- }
- return normalisedInput;
- }
- /**
- * @return {?}
- */
- renormaliseModelValues() {
- /** @type {?} */
- const previousModelValues = {
- value: this.value,
- highValue: this.highValue
- };
- /** @type {?} */
- const normalisedModelValues = this.normaliseModelValues(previousModelValues);
- if (!ModelValues.compare(normalisedModelValues, previousModelValues)) {
- this.value = normalisedModelValues.value;
- this.highValue = normalisedModelValues.highValue;
- this.outputModelChangeSubject.next({
- value: this.value,
- highValue: this.highValue,
- forceChange: true,
- userEventInitiated: false
- });
- }
- }
- /**
- * @return {?}
- */
- onChangeOptions() {
- if (!this.initHasRun) {
- return;
- }
- /** @type {?} */
- const previousInputEventsInterval = this.viewOptions.inputEventsInterval;
- /** @type {?} */
- const previousOutputEventsInterval = this.viewOptions.outputEventsInterval;
- /** @type {?} */
- const previousOptionsInfluencingEventBindings = this.getOptionsInfluencingEventBindings(this.viewOptions);
- this.applyOptions();
- /** @type {?} */
- const newOptionsInfluencingEventBindings = this.getOptionsInfluencingEventBindings(this.viewOptions);
- /** @type {?} */
- const rebindEvents = !ValueHelper.areArraysEqual(previousOptionsInfluencingEventBindings, newOptionsInfluencingEventBindings);
- if (previousInputEventsInterval !== this.viewOptions.inputEventsInterval) {
- this.unsubscribeInputModelChangeSubject();
- this.subscribeInputModelChangeSubject(this.viewOptions.inputEventsInterval);
- }
- if (previousOutputEventsInterval !== this.viewOptions.outputEventsInterval) {
- this.unsubscribeInputModelChangeSubject();
- this.subscribeInputModelChangeSubject(this.viewOptions.outputEventsInterval);
- }
- // With new options, we need to re-normalise model values if necessary
- this.renormaliseModelValues();
- this.viewLowValue = this.modelValueToViewValue(this.value);
- if (this.range) {
- this.viewHighValue = this.modelValueToViewValue(this.highValue);
- }
- else {
- this.viewHighValue = null;
- }
- this.resetSlider(rebindEvents);
- }
- /**
- * @return {?}
- */
- applyOptions() {
- this.viewOptions = new Options();
- Object.assign(this.viewOptions, this.options);
- this.viewOptions.draggableRange = this.range && this.viewOptions.draggableRange;
- this.viewOptions.draggableRangeOnly = this.range && this.viewOptions.draggableRangeOnly;
- if (this.viewOptions.draggableRangeOnly) {
- this.viewOptions.draggableRange = true;
- }
- this.viewOptions.showTicks = this.viewOptions.showTicks ||
- this.viewOptions.showTicksValues ||
- !ValueHelper.isNullOrUndefined(this.viewOptions.ticksArray);
- if (this.viewOptions.showTicks &&
- (!ValueHelper.isNullOrUndefined(this.viewOptions.tickStep) || !ValueHelper.isNullOrUndefined(this.viewOptions.ticksArray))) {
- this.intermediateTicks = true;
- }
- this.viewOptions.showSelectionBar = this.viewOptions.showSelectionBar ||
- this.viewOptions.showSelectionBarEnd ||
- !ValueHelper.isNullOrUndefined(this.viewOptions.showSelectionBarFromValue);
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.stepsArray)) {
- this.applyStepsArrayOptions();
- }
- else {
- this.applyFloorCeilOptions();
- }
- if (ValueHelper.isNullOrUndefined(this.viewOptions.combineLabels)) {
- this.viewOptions.combineLabels = (minValue, maxValue) => {
- return minValue + ' - ' + maxValue;
- };
- }
- if (this.viewOptions.logScale && this.viewOptions.floor === 0) {
- throw Error('Can\'t use floor=0 with logarithmic scale');
- }
- }
- /**
- * @return {?}
- */
- applyStepsArrayOptions() {
- this.viewOptions.floor = 0;
- this.viewOptions.ceil = this.viewOptions.stepsArray.length - 1;
- this.viewOptions.step = 1;
- if (ValueHelper.isNullOrUndefined(this.viewOptions.translate)) {
- this.viewOptions.translate = (modelValue) => {
- if (this.viewOptions.bindIndexForStepsArray) {
- return String(this.getStepValue(modelValue));
- }
- return String(modelValue);
- };
- }
- }
- /**
- * @return {?}
- */
- applyFloorCeilOptions() {
- if (ValueHelper.isNullOrUndefined(this.viewOptions.step)) {
- this.viewOptions.step = 1;
- }
- else {
- this.viewOptions.step = +this.viewOptions.step;
- if (this.viewOptions.step <= 0) {
- this.viewOptions.step = 1;
- }
- }
- if (ValueHelper.isNullOrUndefined(this.viewOptions.ceil) ||
- ValueHelper.isNullOrUndefined(this.viewOptions.floor)) {
- throw Error('floor and ceil options must be supplied');
- }
- this.viewOptions.ceil = +this.viewOptions.ceil;
- this.viewOptions.floor = +this.viewOptions.floor;
- if (ValueHelper.isNullOrUndefined(this.viewOptions.translate)) {
- this.viewOptions.translate = (value) => String(value);
- }
- }
- /**
- * @param {?=} rebindEvents
- * @return {?}
- */
- resetSlider(rebindEvents = true) {
- this.manageElementsStyle();
- this.addAccessibility();
- this.updateCeilLabel();
- this.updateFloorLabel();
- if (rebindEvents) {
- this.unbindEvents();
- this.manageEventsBindings();
- }
- this.updateDisabledState();
- this.calculateViewDimensions();
- this.refocusPointerIfNeeded();
- }
- /**
- * @param {?} pointerType
- * @return {?}
- */
- focusPointer(pointerType) {
- // If not supplied, use min pointer as default
- if (pointerType !== PointerType.Min && pointerType !== PointerType.Max) {
- pointerType = PointerType.Min;
- }
- if (pointerType === PointerType.Min) {
- this.minHandleElement.focus();
- }
- else if (this.range && pointerType === PointerType.Max) {
- this.maxHandleElement.focus();
- }
- }
- /**
- * @return {?}
- */
- refocusPointerIfNeeded() {
- if (!ValueHelper.isNullOrUndefined(this.currentFocusPointer)) {
- this.onPointerFocus(this.currentFocusPointer);
- /** @type {?} */
- const element = this.getPointerElement(this.currentFocusPointer);
- element.focus();
- }
- }
- /**
- * @return {?}
- */
- manageElementsStyle() {
- this.updateScale();
- this.floorLabelElement.setAlwaysHide(this.viewOptions.showTicksValues || this.viewOptions.hideLimitLabels);
- this.ceilLabelElement.setAlwaysHide(this.viewOptions.showTicksValues || this.viewOptions.hideLimitLabels);
- /** @type {?} */
- const hideLabelsForTicks = this.viewOptions.showTicksValues && !this.intermediateTicks;
- this.minHandleLabelElement.setAlwaysHide(hideLabelsForTicks || this.viewOptions.hidePointerLabels);
- this.maxHandleLabelElement.setAlwaysHide(hideLabelsForTicks || !this.range || this.viewOptions.hidePointerLabels);
- this.combinedLabelElement.setAlwaysHide(hideLabelsForTicks || !this.range || this.viewOptions.hidePointerLabels);
- this.selectionBarElement.setAlwaysHide(!this.range && !this.viewOptions.showSelectionBar);
- this.leftOuterSelectionBarElement.setAlwaysHide(!this.range || !this.viewOptions.showOuterSelectionBars);
- this.rightOuterSelectionBarElement.setAlwaysHide(!this.range || !this.viewOptions.showOuterSelectionBars);
- this.fullBarTransparentClass = this.range && this.viewOptions.showOuterSelectionBars;
- this.selectionBarDraggableClass = this.viewOptions.draggableRange && !this.viewOptions.onlyBindHandles;
- this.ticksUnderValuesClass = this.intermediateTicks && this.options.showTicksValues;
- if (this.sliderElementVerticalClass !== this.viewOptions.vertical) {
- this.updateVerticalState();
- // The above change in host component class will not be applied until the end of this cycle
- // However, functions calculating the slider position expect the slider to be already styled as vertical
- // So as a workaround, we need to reset the slider once again to compute the correct values
- setTimeout(() => { this.resetSlider(); });
- }
- // Changing animate class may interfere with slider reset/initialisation, so we should set it separately,
- // after all is properly set up
- if (this.sliderElementAnimateClass !== this.viewOptions.animate) {
- setTimeout(() => { this.sliderElementAnimateClass = this.viewOptions.animate; });
- }
- }
- /**
- * @return {?}
- */
- manageEventsBindings() {
- if (this.viewOptions.disabled || this.viewOptions.readOnly) {
- this.unbindEvents();
- }
- else {
- this.bindEvents();
- }
- }
- /**
- * @return {?}
- */
- updateDisabledState() {
- this.sliderElementDisabledAttr = this.viewOptions.disabled ? 'disabled' : null;
- }
- /**
- * @return {?}
- */
- updateVerticalState() {
- this.sliderElementVerticalClass = this.viewOptions.vertical;
- for (const element of this.getAllSliderElements()) {
- // This is also called before ngAfterInit, so need to check that view child bindings work
- if (!ValueHelper.isNullOrUndefined(element)) {
- element.setVertical(this.viewOptions.vertical);
- }
- }
- }
- /**
- * @return {?}
- */
- updateScale() {
- for (const element of this.getAllSliderElements()) {
- element.setScale(this.viewOptions.scale);
- }
- }
- /**
- * @return {?}
- */
- getAllSliderElements() {
- return [this.leftOuterSelectionBarElement,
- this.rightOuterSelectionBarElement,
- this.fullBarElement,
- this.selectionBarElement,
- this.minHandleElement,
- this.maxHandleElement,
- this.floorLabelElement,
- this.ceilLabelElement,
- this.minHandleLabelElement,
- this.maxHandleLabelElement,
- this.combinedLabelElement,
- this.ticksElement
- ];
- }
- /**
- * @return {?}
- */
- initHandles() {
- this.updateLowHandle(this.valueToPosition(this.viewLowValue));
- /*
- the order here is important since the selection bar should be
- updated after the high handle but before the combined label
- */
- if (this.range) {
- this.updateHighHandle(this.valueToPosition(this.viewHighValue));
- }
- this.updateSelectionBar();
- if (this.range) {
- this.updateCombinedLabel();
- }
- this.updateTicksScale();
- }
- /**
- * @return {?}
- */
- addAccessibility() {
- this.updateAriaAttributes();
- this.minHandleElement.role = 'slider';
- if (this.viewOptions.keyboardSupport &&
- !(this.viewOptions.readOnly || this.viewOptions.disabled)) {
- this.minHandleElement.tabindex = '0';
- }
- else {
- this.minHandleElement.tabindex = '';
- }
- this.minHandleElement.ariaOrientation = this.viewOptions.vertical ? 'vertical' : 'horizontal';
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.ariaLabel)) {
- this.minHandleElement.ariaLabel = this.viewOptions.ariaLabel;
- }
- else if (!ValueHelper.isNullOrUndefined(this.viewOptions.ariaLabelledBy)) {
- this.minHandleElement.ariaLabelledBy = this.viewOptions.ariaLabelledBy;
- }
- if (this.range) {
- this.maxHandleElement.role = 'slider';
- if (this.viewOptions.keyboardSupport &&
- !(this.viewOptions.readOnly || this.viewOptions.disabled)) {
- this.maxHandleElement.tabindex = '0';
- }
- else {
- this.maxHandleElement.tabindex = '';
- }
- this.maxHandleElement.ariaOrientation = this.viewOptions.vertical ? 'vertical' : 'horizontal';
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.ariaLabelHigh)) {
- this.maxHandleElement.ariaLabel = this.viewOptions.ariaLabelHigh;
- }
- else if (!ValueHelper.isNullOrUndefined(this.viewOptions.ariaLabelledByHigh)) {
- this.maxHandleElement.ariaLabelledBy = this.viewOptions.ariaLabelledByHigh;
- }
- }
- }
- /**
- * @return {?}
- */
- updateAriaAttributes() {
- this.minHandleElement.ariaValueNow = (+this.value).toString();
- this.minHandleElement.ariaValueText = this.viewOptions.translate(+this.value, LabelType.Low);
- this.minHandleElement.ariaValueMin = this.viewOptions.floor.toString();
- this.minHandleElement.ariaValueMax = this.viewOptions.ceil.toString();
- if (this.range) {
- this.maxHandleElement.ariaValueNow = (+this.highValue).toString();
- this.maxHandleElement.ariaValueText = this.viewOptions.translate(+this.highValue, LabelType.High);
- this.maxHandleElement.ariaValueMin = this.viewOptions.floor.toString();
- this.maxHandleElement.ariaValueMax = this.viewOptions.ceil.toString();
- }
- }
- /**
- * @return {?}
- */
- calculateViewDimensions() {
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.handleDimension)) {
- this.minHandleElement.setDimension(this.viewOptions.handleDimension);
- }
- else {
- this.minHandleElement.calculateDimension();
- }
- /** @type {?} */
- const handleWidth = this.minHandleElement.dimension;
- this.handleHalfDimension = handleWidth / 2;
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.barDimension)) {
- this.fullBarElement.setDimension(this.viewOptions.barDimension);
- }
- else {
- this.fullBarElement.calculateDimension();
- }
- this.maxHandlePosition = this.fullBarElement.dimension - handleWidth;
- if (this.initHasRun) {
- this.updateFloorLabel();
- this.updateCeilLabel();
- this.initHandles();
- }
- }
- /**
- * @return {?}
- */
- calculateViewDimensionsAndDetectChanges() {
- this.calculateViewDimensions();
- if (!this.isRefDestroyed()) {
- this.changeDetectionRef.detectChanges();
- }
- }
- /**
- * If the slider reference is already destroyed
- * @return {?} boolean - true if ref is destroyed
- */
- isRefDestroyed() {
- return this.changeDetectionRef['destroyed'];
- }
- /**
- * @return {?}
- */
- updateTicksScale() {
- if (!this.viewOptions.showTicks) {
- setTimeout(() => { this.sliderElementWithLegendClass = false; });
- return;
- }
- /** @type {?} */
- const ticksArray = !ValueHelper.isNullOrUndefined(this.viewOptions.ticksArray)
- ? this.viewOptions.ticksArray
- : this.getTicksArray();
- /** @type {?} */
- const translate = this.viewOptions.vertical ? 'translateY' : 'translateX';
- if (this.viewOptions.rightToLeft) {
- ticksArray.reverse();
- }
- /** @type {?} */
- const tickValueStep = !ValueHelper.isNullOrUndefined(this.viewOptions.tickValueStep) ? this.viewOptions.tickValueStep :
- (!ValueHelper.isNullOrUndefined(this.viewOptions.tickStep) ? this.viewOptions.tickStep : this.viewOptions.step);
- /** @type {?} */
- let hasAtLeastOneLegend = false;
- /** @type {?} */
- const newTicks = ticksArray.map((value) => {
- /** @type {?} */
- let position = this.valueToPosition(value);
- if (this.viewOptions.vertical) {
- position = this.maxHandlePosition - position;
- }
- /** @type {?} */
- const translation = translate + '(' + Math.round(position) + 'px)';
- /** @type {?} */
- const tick = new Tick();
- tick.selected = this.isTickSelected(value);
- tick.style = {
- '-webkit-transform': translation,
- '-moz-transform': translation,
- '-o-transform': translation,
- '-ms-transform': translation,
- transform: translation,
- };
- if (tick.selected && !ValueHelper.isNullOrUndefined(this.viewOptions.getSelectionBarColor)) {
- tick.style['background-color'] = this.getSelectionBarColor();
- }
- if (!tick.selected && !ValueHelper.isNullOrUndefined(this.viewOptions.getTickColor)) {
- tick.style['background-color'] = this.getTickColor(value);
- }
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.ticksTooltip)) {
- tick.tooltip = this.viewOptions.ticksTooltip(value);
- tick.tooltipPlacement = this.viewOptions.vertical ? 'right' : 'top';
- }
- if (this.viewOptions.showTicksValues && !ValueHelper.isNullOrUndefined(tickValueStep) &&
- MathHelper.isModuloWithinPrecisionLimit(value, tickValueStep, this.viewOptions.precisionLimit)) {
- tick.value = this.getDisplayValue(value, LabelType.TickValue);
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.ticksValuesTooltip)) {
- tick.valueTooltip = this.viewOptions.ticksValuesTooltip(value);
- tick.valueTooltipPlacement = this.viewOptions.vertical
- ? 'right'
- : 'top';
- }
- }
- /** @type {?} */
- let legend = null;
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.stepsArray)) {
- /** @type {?} */
- const step = this.viewOptions.stepsArray[value];
- if (!ValueHelper.isNullOrUndefined(step)) {
- legend = step.legend;
- }
- }
- else if (!ValueHelper.isNullOrUndefined(this.viewOptions.getLegend)) {
- legend = this.viewOptions.getLegend(value);
- }
- if (!ValueHelper.isNullOrUndefined(legend)) {
- tick.legend = legend;
- hasAtLeastOneLegend = true;
- }
- return tick;
- });
- setTimeout(() => { this.sliderElementWithLegendClass = hasAtLeastOneLegend; });
- // We should avoid re-creating the ticks array if possible
- // This both improves performance and makes CSS animations work correctly
- if (!ValueHelper.isNullOrUndefined(this.ticks) && this.ticks.length === newTicks.length) {
- for (let i = 0; i < newTicks.length; ++i) {
- Object.assign(this.ticks[i], newTicks[i]);
- }
- }
- else {
- this.ticks = newTicks;
- }
- if (!this.isRefDestroyed()) {
- this.changeDetectionRef.detectChanges();
- }
- }
- /**
- * @return {?}
- */
- getTicksArray() {
- /** @type {?} */
- const step = (!ValueHelper.isNullOrUndefined(this.viewOptions.tickStep)) ? this.viewOptions.tickStep : this.viewOptions.step;
- /** @type {?} */
- const ticksArray = [];
- /** @type {?} */
- const numberOfValues = 1 + Math.floor(MathHelper.roundToPrecisionLimit(Math.abs(this.viewOptions.ceil - this.viewOptions.floor) / step, this.viewOptions.precisionLimit));
- for (let index = 0; index < numberOfValues; ++index) {
- ticksArray.push(MathHelper.roundToPrecisionLimit(this.viewOptions.floor + step * index, this.viewOptions.precisionLimit));
- }
- return ticksArray;
- }
- /**
- * @param {?} value
- * @return {?}
- */
- isTickSelected(value) {
- if (!this.range) {
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.showSelectionBarFromValue)) {
- /** @type {?} */
- const center = this.viewOptions.showSelectionBarFromValue;
- if (this.viewLowValue > center &&
- value >= center &&
- value <= this.viewLowValue) {
- return true;
- }
- else if (this.viewLowValue < center &&
- value <= center &&
- value >= this.viewLowValue) {
- return true;
- }
- }
- else if (this.viewOptions.showSelectionBarEnd) {
- if (value >= this.viewLowValue) {
- return true;
- }
- }
- else if (this.viewOptions.showSelectionBar && value <= this.viewLowValue) {
- return true;
- }
- }
- if (this.range && value >= this.viewLowValue && value <= this.viewHighValue) {
- return true;
- }
- return false;
- }
- /**
- * @return {?}
- */
- updateFloorLabel() {
- if (!this.floorLabelElement.alwaysHide) {
- this.floorLabelElement.setValue(this.getDisplayValue(this.viewOptions.floor, LabelType.Floor));
- this.floorLabelElement.calculateDimension();
- /** @type {?} */
- const position = this.viewOptions.rightToLeft
- ? this.fullBarElement.dimension - this.floorLabelElement.dimension
- : 0;
- this.floorLabelElement.setPosition(position);
- }
- }
- /**
- * @return {?}
- */
- updateCeilLabel() {
- if (!this.ceilLabelElement.alwaysHide) {
- this.ceilLabelElement.setValue(this.getDisplayValue(this.viewOptions.ceil, LabelType.Ceil));
- this.ceilLabelElement.calculateDimension();
- /** @type {?} */
- const position = this.viewOptions.rightToLeft
- ? 0
- : this.fullBarElement.dimension - this.ceilLabelElement.dimension;
- this.ceilLabelElement.setPosition(position);
- }
- }
- /**
- * @param {?} which
- * @param {?} newPos
- * @return {?}
- */
- updateHandles(which, newPos) {
- if (which === PointerType.Min) {
- this.updateLowHandle(newPos);
- }
- else if (which === PointerType.Max) {
- this.updateHighHandle(newPos);
- }
- this.updateSelectionBar();
- this.updateTicksScale();
- if (this.range) {
- this.updateCombinedLabel();
- }
- }
- /**
- * @param {?} labelType
- * @param {?} newPos
- * @return {?}
- */
- getHandleLabelPos(labelType, newPos) {
- /** @type {?} */
- const labelDimension = (labelType === PointerType.Min)
- ? this.minHandleLabelElement.dimension
- : this.maxHandleLabelElement.dimension;
- /** @type {?} */
- const nearHandlePos = newPos - labelDimension / 2 + this.handleHalfDimension;
- /** @type {?} */
- const endOfBarPos = this.fullBarElement.dimension - labelDimension;
- if (!this.viewOptions.boundPointerLabels) {
- return nearHandlePos;
- }
- if ((this.viewOptions.rightToLeft && labelType === PointerType.Min) ||
- (!this.viewOptions.rightToLeft && labelType === PointerType.Max)) {
- return Math.min(nearHandlePos, endOfBarPos);
- }
- else {
- return Math.min(Math.max(nearHandlePos, 0), endOfBarPos);
- }
- }
- /**
- * @param {?} newPos
- * @return {?}
- */
- updateLowHandle(newPos) {
- this.minHandleElement.setPosition(newPos);
- this.minHandleLabelElement.setValue(this.getDisplayValue(this.viewLowValue, LabelType.Low));
- this.minHandleLabelElement.setPosition(this.getHandleLabelPos(PointerType.Min, newPos));
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.getPointerColor)) {
- this.minPointerStyle = {
- backgroundColor: this.getPointerColor(PointerType.Min),
- };
- }
- if (this.viewOptions.autoHideLimitLabels) {
- this.updateFloorAndCeilLabelsVisibility();
- }
- }
- /**
- * @param {?} newPos
- * @return {?}
- */
- updateHighHandle(newPos) {
- this.maxHandleElement.setPosition(newPos);
- this.maxHandleLabelElement.setValue(this.getDisplayValue(this.viewHighValue, LabelType.High));
- this.maxHandleLabelElement.setPosition(this.getHandleLabelPos(PointerType.Max, newPos));
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.getPointerColor)) {
- this.maxPointerStyle = {
- backgroundColor: this.getPointerColor(PointerType.Max),
- };
- }
- if (this.viewOptions.autoHideLimitLabels) {
- this.updateFloorAndCeilLabelsVisibility();
- }
- }
- /**
- * @return {?}
- */
- updateFloorAndCeilLabelsVisibility() {
- // Show based only on hideLimitLabels if pointer labels are hidden
- if (this.viewOptions.hidePointerLabels) {
- return;
- }
- /** @type {?} */
- let floorLabelHidden = false;
- /** @type {?} */
- let ceilLabelHidden = false;
- /** @type {?} */
- const isMinLabelAtFloor = this.isLabelBelowFloorLabel(this.minHandleLabelElement);
- /** @type {?} */
- const isMinLabelAtCeil = this.isLabelAboveCeilLabel(this.minHandleLabelElement);
- /** @type {?} */
- const isMaxLabelAtCeil = this.isLabelAboveCeilLabel(this.maxHandleLabelElement);
- /** @type {?} */
- const isCombinedLabelAtFloor = this.isLabelBelowFloorLabel(this.combinedLabelElement);
- /** @type {?} */
- const isCombinedLabelAtCeil = this.isLabelAboveCeilLabel(this.combinedLabelElement);
- if (isMinLabelAtFloor) {
- floorLabelHidden = true;
- this.floorLabelElement.hide();
- }
- else {
- floorLabelHidden = false;
- this.floorLabelElement.show();
- }
- if (isMinLabelAtCeil) {
- ceilLabelHidden = true;
- this.ceilLabelElement.hide();
- }
- else {
- ceilLabelHidden = false;
- this.ceilLabelElement.show();
- }
- if (this.range) {
- /** @type {?} */
- const hideCeil = this.combinedLabelElement.isVisible() ? isCombinedLabelAtCeil : isMaxLabelAtCeil;
- /** @type {?} */
- const hideFloor = this.combinedLabelElement.isVisible() ? isCombinedLabelAtFloor : isMinLabelAtFloor;
- if (hideCeil) {
- this.ceilLabelElement.hide();
- }
- else if (!ceilLabelHidden) {
- this.ceilLabelElement.show();
- }
- // Hide or show floor label
- if (hideFloor) {
- this.floorLabelElement.hide();
- }
- else if (!floorLabelHidden) {
- this.floorLabelElement.show();
- }
- }
- }
- /**
- * @param {?} label
- * @return {?}
- */
- isLabelBelowFloorLabel(label) {
- /** @type {?} */
- const pos = label.position;
- /** @type {?} */
- const dim = label.dimension;
- /** @type {?} */
- const floorPos = this.floorLabelElement.position;
- /** @type {?} */
- const floorDim = this.floorLabelElement.dimension;
- return this.viewOptions.rightToLeft
- ? pos + dim >= floorPos - 2
- : pos <= floorPos + floorDim + 2;
- }
- /**
- * @param {?} label
- * @return {?}
- */
- isLabelAboveCeilLabel(label) {
- /** @type {?} */
- const pos = label.position;
- /** @type {?} */
- const dim = label.dimension;
- /** @type {?} */
- const ceilPos = this.ceilLabelElement.position;
- /** @type {?} */
- const ceilDim = this.ceilLabelElement.dimension;
- return this.viewOptions.rightToLeft
- ? pos <= ceilPos + ceilDim + 2
- : pos + dim >= ceilPos - 2;
- }
- /**
- * @return {?}
- */
- updateSelectionBar() {
- /** @type {?} */
- let position = 0;
- /** @type {?} */
- let dimension = 0;
- /** @type {?} */
- const isSelectionBarFromRight = this.viewOptions.rightToLeft
- ? !this.viewOptions.showSelectionBarEnd
- : this.viewOptions.showSelectionBarEnd;
- /** @type {?} */
- const positionForRange = this.viewOptions.rightToLeft
- ? this.maxHandleElement.position + this.handleHalfDimension
- : this.minHandleElement.position + this.handleHalfDimension;
- if (this.range) {
- dimension = Math.abs(this.maxHandleElement.position - this.minHandleElement.position);
- position = positionForRange;
- }
- else {
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.showSelectionBarFromValue)) {
- /** @type {?} */
- const center = this.viewOptions.showSelectionBarFromValue;
- /** @type {?} */
- const centerPosition = this.valueToPosition(center);
- /** @type {?} */
- const isModelGreaterThanCenter = this.viewOptions.rightToLeft
- ? this.viewLowValue <= center
- : this.viewLowValue > center;
- if (isModelGreaterThanCenter) {
- dimension = this.minHandleElement.position - centerPosition;
- position = centerPosition + this.handleHalfDimension;
- }
- else {
- dimension = centerPosition - this.minHandleElement.position;
- position = this.minHandleElement.position + this.handleHalfDimension;
- }
- }
- else if (isSelectionBarFromRight) {
- dimension = Math.ceil(Math.abs(this.maxHandlePosition - this.minHandleElement.position) + this.handleHalfDimension);
- position = Math.floor(this.minHandleElement.position + this.handleHalfDimension);
- }
- else {
- dimension = this.minHandleElement.position + this.handleHalfDimension;
- position = 0;
- }
- }
- this.selectionBarElement.setDimension(dimension);
- this.selectionBarElement.setPosition(position);
- if (this.range && this.viewOptions.showOuterSelectionBars) {
- if (this.viewOptions.rightToLeft) {
- this.rightOuterSelectionBarElement.setDimension(position);
- this.rightOuterSelectionBarElement.setPosition(0);
- this.fullBarElement.calculateDimension();
- this.leftOuterSelectionBarElement.setDimension(this.fullBarElement.dimension - (position + dimension));
- this.leftOuterSelectionBarElement.setPosition(position + dimension);
- }
- else {
- this.leftOuterSelectionBarElement.setDimension(position);
- this.leftOuterSelectionBarElement.setPosition(0);
- this.fullBarElement.calculateDimension();
- this.rightOuterSelectionBarElement.setDimension(this.fullBarElement.dimension - (position + dimension));
- this.rightOuterSelectionBarElement.setPosition(position + dimension);
- }
- }
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.getSelectionBarColor)) {
- /** @type {?} */
- const color = this.getSelectionBarColor();
- this.barStyle = {
- backgroundColor: color,
- };
- }
- else if (!ValueHelper.isNullOrUndefined(this.viewOptions.selectionBarGradient)) {
- /** @type {?} */
- const offset = (!ValueHelper.isNullOrUndefined(this.viewOptions.showSelectionBarFromValue))
- ? this.valueToPosition(this.viewOptions.showSelectionBarFromValue)
- : 0;
- /** @type {?} */
- const reversed = (offset - position > 0 && !isSelectionBarFromRight) || (offset - position <= 0 && isSelectionBarFromRight);
- /** @type {?} */
- const direction = this.viewOptions.vertical
- ? reversed ? 'bottom' : 'top'
- : reversed ? 'left' : 'right';
- this.barStyle = {
- backgroundImage: 'linear-gradient(to ' +
- direction +
- ', ' +
- this.viewOptions.selectionBarGradient.from +
- ' 0%,' +
- this.viewOptions.selectionBarGradient.to +
- ' 100%)',
- };
- if (this.viewOptions.vertical) {
- this.barStyle.backgroundPosition =
- 'center ' +
- (offset +
- dimension +
- position +
- (reversed ? -this.handleHalfDimension : 0)) +
- 'px';
- this.barStyle.backgroundSize =
- '100% ' + (this.fullBarElement.dimension - this.handleHalfDimension) + 'px';
- }
- else {
- this.barStyle.backgroundPosition =
- offset -
- position +
- (reversed ? this.handleHalfDimension : 0) +
- 'px center';
- this.barStyle.backgroundSize =
- this.fullBarElement.dimension - this.handleHalfDimension + 'px 100%';
- }
- }
- }
- /**
- * @return {?}
- */
- getSelectionBarColor() {
- if (this.range) {
- return this.viewOptions.getSelectionBarColor(this.value, this.highValue);
- }
- return this.viewOptions.getSelectionBarColor(this.value);
- }
- /**
- * @param {?} pointerType
- * @return {?}
- */
- getPointerColor(pointerType) {
- if (pointerType === PointerType.Max) {
- return this.viewOptions.getPointerColor(this.highValue, pointerType);
- }
- return this.viewOptions.getPointerColor(this.value, pointerType);
- }
- /**
- * @param {?} value
- * @return {?}
- */
- getTickColor(value) {
- return this.viewOptions.getTickColor(value);
- }
- /**
- * @return {?}
- */
- updateCombinedLabel() {
- /** @type {?} */
- let isLabelOverlap = null;
- if (this.viewOptions.rightToLeft) {
- isLabelOverlap =
- this.minHandleLabelElement.position - this.minHandleLabelElement.dimension - 10 <= this.maxHandleLabelElement.position;
- }
- else {
- isLabelOverlap =
- this.minHandleLabelElement.position + this.minHandleLabelElement.dimension + 10 >= this.maxHandleLabelElement.position;
- }
- if (isLabelOverlap) {
- /** @type {?} */
- const lowDisplayValue = this.getDisplayValue(this.viewLowValue, LabelType.Low);
- /** @type {?} */
- const highDisplayValue = this.getDisplayValue(this.viewHighValue, LabelType.High);
- /** @type {?} */
- const combinedLabelValue = this.viewOptions.rightToLeft
- ? this.viewOptions.combineLabels(highDisplayValue, lowDisplayValue)
- : this.viewOptions.combineLabels(lowDisplayValue, highDisplayValue);
- this.combinedLabelElement.setValue(combinedLabelValue);
- /** @type {?} */
- const pos = this.viewOptions.boundPointerLabels
- ? Math.min(Math.max(this.selectionBarElement.position +
- this.selectionBarElement.dimension / 2 -
- this.combinedLabelElement.dimension / 2, 0), this.fullBarElement.dimension - this.combinedLabelElement.dimension)
- : this.selectionBarElement.position + this.selectionBarElement.dimension / 2 - this.combinedLabelElement.dimension / 2;
- this.combinedLabelElement.setPosition(pos);
- this.minHandleLabelElement.hide();
- this.maxHandleLabelElement.hide();
- this.combinedLabelElement.show();
- }
- else {
- this.updateHighHandle(this.valueToPosition(this.viewHighValue));
- this.updateLowHandle(this.valueToPosition(this.viewLowValue));
- this.maxHandleLabelElement.show();
- this.minHandleLabelElement.show();
- this.combinedLabelElement.hide();
- }
- if (this.viewOptions.autoHideLimitLabels) {
- this.updateFloorAndCeilLabelsVisibility();
- }
- }
- /**
- * @param {?} value
- * @param {?} which
- * @return {?}
- */
- getDisplayValue(value, which) {
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.stepsArray) && !this.viewOptions.bindIndexForStepsArray) {
- value = this.getStepValue(value);
- }
- return this.viewOptions.translate(value, which);
- }
- /**
- * @param {?} value
- * @param {?=} customStep
- * @return {?}
- */
- roundStep(value, customStep) {
- /** @type {?} */
- const step = !ValueHelper.isNullOrUndefined(customStep) ? customStep : this.viewOptions.step;
- /** @type {?} */
- let steppedDifference = MathHelper.roundToPrecisionLimit((value - this.viewOptions.floor) / step, this.viewOptions.precisionLimit);
- steppedDifference = Math.round(steppedDifference) * step;
- return MathHelper.roundToPrecisionLimit(this.viewOptions.floor + steppedDifference, this.viewOptions.precisionLimit);
- }
- /**
- * @param {?} val
- * @return {?}
- */
- valueToPosition(val) {
- /** @type {?} */
- let fn = ValueHelper.linearValueToPosition;
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.customValueToPosition)) {
- fn = this.viewOptions.customValueToPosition;
- }
- else if (this.viewOptions.logScale) {
- fn = ValueHelper.logValueToPosition;
- }
- val = MathHelper.clampToRange(val, this.viewOptions.floor, this.viewOptions.ceil);
- /** @type {?} */
- let percent = fn(val, this.viewOptions.floor, this.viewOptions.ceil);
- if (ValueHelper.isNullOrUndefined(percent)) {
- percent = 0;
- }
- if (this.viewOptions.rightToLeft) {
- percent = 1 - percent;
- }
- return percent * this.maxHandlePosition;
- }
- /**
- * @param {?} position
- * @return {?}
- */
- positionToValue(position) {
- /** @type {?} */
- let percent = position / this.maxHandlePosition;
- if (this.viewOptions.rightToLeft) {
- percent = 1 - percent;
- }
- /** @type {?} */
- let fn = ValueHelper.linearPositionToValue;
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.customPositionToValue)) {
- fn = this.viewOptions.customPositionToValue;
- }
- else if (this.viewOptions.logScale) {
- fn = ValueHelper.logPositionToValue;
- }
- /** @type {?} */
- const value = fn(percent, this.viewOptions.floor, this.viewOptions.ceil);
- return !ValueHelper.isNullOrUndefined(value) ? value : 0;
- }
- /**
- * @param {?} event
- * @param {?=} targetTouchId
- * @return {?}
- */
- getEventXY(event, targetTouchId) {
- if (event instanceof MouseEvent) {
- return this.viewOptions.vertical ? event.clientY : event.clientX;
- }
- /** @type {?} */
- let touchIndex = 0;
- /** @type {?} */
- const touches = event.touches;
- if (!ValueHelper.isNullOrUndefined(targetTouchId)) {
- for (let i = 0; i < touches.length; i++) {
- if (touches[i].identifier === targetTouchId) {
- touchIndex = i;
- break;
- }
- }
- }
- // Return the target touch or if the target touch was not found in the event
- // returns the coordinates of the first touch
- return this.viewOptions.vertical ? touches[touchIndex].clientY : touches[touchIndex].clientX;
- }
- /**
- * @param {?} event
- * @param {?=} targetTouchId
- * @return {?}
- */
- getEventPosition(event, targetTouchId) {
- /** @type {?} */
- const sliderElementBoundingRect = this.elementRef.nativeElement.getBoundingClientRect();
- /** @type {?} */
- const sliderPos = this.viewOptions.vertical ?
- sliderElementBoundingRect.bottom : sliderElementBoundingRect.left;
- /** @type {?} */
- let eventPos = 0;
- if (this.viewOptions.vertical) {
- eventPos = -this.getEventXY(event, targetTouchId) + sliderPos;
- }
- else {
- eventPos = this.getEventXY(event, targetTouchId) - sliderPos;
- }
- return eventPos * this.viewOptions.scale - this.handleHalfDimension;
- }
- /**
- * @param {?} event
- * @return {?}
- */
- getNearestHandle(event) {
- if (!this.range) {
- return PointerType.Min;
- }
- /** @type {?} */
- const position = this.getEventPosition(event);
- /** @type {?} */
- const distanceMin = Math.abs(position - this.minHandleElement.position);
- /** @type {?} */
- const distanceMax = Math.abs(position - this.maxHandleElement.position);
- if (distanceMin < distanceMax) {
- return PointerType.Min;
- }
- else if (distanceMin > distanceMax) {
- return PointerType.Max;
- }
- else if (!this.viewOptions.rightToLeft) {
- // if event is at the same distance from min/max then if it's at left of minH, we return minH else maxH
- return position < this.minHandleElement.position ? PointerType.Min : PointerType.Max;
- }
- // reverse in rtl
- return position > this.minHandleElement.position ? PointerType.Min : PointerType.Max;
- }
- /**
- * @return {?}
- */
- bindEvents() {
- /** @type {?} */
- const draggableRange = this.viewOptions.draggableRange;
- if (!this.viewOptions.onlyBindHandles) {
- this.selectionBarElement.on('mousedown', (event) => this.onBarStart(null, draggableRange, event, true, true, true));
- }
- if (this.viewOptions.draggableRangeOnly) {
- this.minHandleElement.on('mousedown', (event) => this.onBarStart(PointerType.Min, draggableRange, event, true, true));
- this.maxHandleElement.on('mousedown', (event) => this.onBarStart(PointerType.Max, draggableRange, event, true, true));
- }
- else {
- this.minHandleElement.on('mousedown', (event) => this.onStart(PointerType.Min, event, true, true));
- if (this.range) {
- this.maxHandleElement.on('mousedown', (event) => this.onStart(PointerType.Max, event, true, true));
- }
- if (!this.viewOptions.onlyBindHandles) {
- this.fullBarElement.on('mousedown', (event) => this.onStart(null, event, true, true, true));
- this.ticksElement.on('mousedown', (event) => this.onStart(null, event, true, true, true, true));
- }
- }
- if (!this.viewOptions.onlyBindHandles) {
- this.selectionBarElement.onPassive('touchstart', (event) => this.onBarStart(null, draggableRange, event, true, true, true));
- }
- if (this.viewOptions.draggableRangeOnly) {
- this.minHandleElement.onPassive('touchstart', (event) => this.onBarStart(PointerType.Min, draggableRange, event, true, true));
- this.maxHandleElement.onPassive('touchstart', (event) => this.onBarStart(PointerType.Max, draggableRange, event, true, true));
- }
- else {
- this.minHandleElement.onPassive('touchstart', (event) => this.onStart(PointerType.Min, event, true, true));
- if (this.range) {
- this.maxHandleElement.onPassive('touchstart', (event) => this.onStart(PointerType.Max, event, true, true));
- }
- if (!this.viewOptions.onlyBindHandles) {
- this.fullBarElement.onPassive('touchstart', (event) => this.onStart(null, event, true, true, true));
- this.ticksElement.onPassive('touchstart', (event) => this.onStart(null, event, false, false, true, true));
- }
- }
- if (this.viewOptions.keyboardSupport) {
- this.minHandleElement.on('focus', () => this.onPointerFocus(PointerType.Min));
- if (this.range) {
- this.maxHandleElement.on('focus', () => this.onPointerFocus(PointerType.Max));
- }
- }
- }
- /**
- * @param {?} options
- * @return {?}
- */
- getOptionsInfluencingEventBindings(options) {
- return [
- options.disabled,
- options.readOnly,
- options.draggableRange,
- options.draggableRangeOnly,
- options.onlyBindHandles,
- options.keyboardSupport
- ];
- }
- /**
- * @return {?}
- */
- unbindEvents() {
- this.unsubscribeOnMove();
- this.unsubscribeOnEnd();
- for (const element of this.getAllSliderElements()) {
- if (!ValueHelper.isNullOrUndefined(element)) {
- element.off();
- }
- }
- }
- /**
- * @param {?} pointerType
- * @param {?} draggableRange
- * @param {?} event
- * @param {?} bindMove
- * @param {?} bindEnd
- * @param {?=} simulateImmediateMove
- * @param {?=} simulateImmediateEnd
- * @return {?}
- */
- onBarStart(pointerType, draggableRange, event, bindMove, bindEnd, simulateImmediateMove, simulateImmediateEnd) {
- if (draggableRange) {
- this.onDragStart(pointerType, event, bindMove, bindEnd);
- }
- else {
- this.onStart(pointerType, event, bindMove, bindEnd, simulateImmediateMove, simulateImmediateEnd);
- }
- }
- /**
- * @param {?} pointerType
- * @param {?} event
- * @param {?} bindMove
- * @param {?} bindEnd
- * @param {?=} simulateImmediateMove
- * @param {?=} simulateImmediateEnd
- * @return {?}
- */
- onStart(pointerType, event, bindMove, bindEnd, simulateImmediateMove, simulateImmediateEnd) {
- event.stopPropagation();
- // Only call preventDefault() when handling non-passive events (passive events don't need it)
- if (!CompatibilityHelper.isTouchEvent(event) || !detect_passive_events__WEBPACK_IMPORTED_MODULE_2___default.a.hasSupport) {
- event.preventDefault();
- }
- this.moving = false;
- // We have to do this in case the HTML where the sliders are on
- // have been animated into view.
- this.calculateViewDimensions();
- if (ValueHelper.isNullOrUndefined(pointerType)) {
- pointerType = this.getNearestHandle(event);
- }
- this.currentTrackingPointer = pointerType;
- /** @type {?} */
- const pointerElement = this.getPointerElement(pointerType);
- pointerElement.active = true;
- if (this.viewOptions.keyboardSupport) {
- pointerElement.focus();
- }
- if (bindMove) {
- this.unsubscribeOnMove();
- /** @type {?} */
- const onMoveCallback = (e) => this.dragging.active ? this.onDragMove(e) : this.onMove(e);
- if (CompatibilityHelper.isTouchEvent(event)) {
- this.onMoveEventListener = this.eventListenerHelper.attachPassiveEventListener(document, 'touchmove', onMoveCallback, this.viewOptions.touchEventsInterval);
- }
- else {
- this.onMoveEventListener = this.eventListenerHelper.attachEventListener(document, 'mousemove', onMoveCallback, this.viewOptions.mouseEventsInterval);
- }
- }
- if (bindEnd) {
- this.unsubscribeOnEnd();
- /** @type {?} */
- const onEndCallback = (e) => this.onEnd(e);
- if (CompatibilityHelper.isTouchEvent(event)) {
- this.onEndEventListener = this.eventListenerHelper.attachPassiveEventListener(document, 'touchend', onEndCallback);
- }
- else {
- this.onEndEventListener = this.eventListenerHelper.attachEventListener(document, 'mouseup', onEndCallback);
- }
- }
- this.userChangeStart.emit(this.getChangeContext());
- if (CompatibilityHelper.isTouchEvent(event) && !ValueHelper.isNullOrUndefined((/** @type {?} */ (event)).changedTouches)) {
- // Store the touch identifier
- if (ValueHelper.isNullOrUndefined(this.touchId)) {
- this.touchId = (/** @type {?} */ (event)).changedTouches[0].identifier;
- }
- }
- // Click events, either with mouse or touch gesture are weird. Sometimes they result in full
- // start, move, end sequence, and sometimes, they don't - they only invoke mousedown
- // As a workaround, we simulate the first move event and the end event if it's necessary
- if (simulateImmediateMove) {
- this.onMove(event, true);
- }
- if (simulateImmediateEnd) {
- this.onEnd(event);
- }
- }
- /**
- * @param {?} event
- * @param {?=} fromTick
- * @return {?}
- */
- onMove(event, fromTick) {
- /** @type {?} */
- let touchForThisSlider = null;
- if (CompatibilityHelper.isTouchEvent(event)) {
- /** @type {?} */
- const changedTouches = (/** @type {?} */ (event)).changedTouches;
- for (let i = 0; i < changedTouches.length; i++) {
- if (changedTouches[i].identifier === this.touchId) {
- touchForThisSlider = changedTouches[i];
- break;
- }
- }
- if (ValueHelper.isNullOrUndefined(touchForThisSlider)) {
- return;
- }
- }
- if (this.viewOptions.animate && !this.viewOptions.animateOnMove) {
- if (this.moving) {
- this.sliderElementAnimateClass = false;
- }
- }
- this.moving = true;
- /** @type {?} */
- const newPos = !ValueHelper.isNullOrUndefined(touchForThisSlider)
- ? this.getEventPosition(event, touchForThisSlider.identifier)
- : this.getEventPosition(event);
- /** @type {?} */
- let newValue;
- /** @type {?} */
- const ceilValue = this.viewOptions.rightToLeft
- ? this.viewOptions.floor
- : this.viewOptions.ceil;
- /** @type {?} */
- const floorValue = this.viewOptions.rightToLeft ? this.viewOptions.ceil : this.viewOptions.floor;
- if (newPos <= 0) {
- newValue = floorValue;
- }
- else if (newPos >= this.maxHandlePosition) {
- newValue = ceilValue;
- }
- else {
- newValue = this.positionToValue(newPos);
- if (fromTick && !ValueHelper.isNullOrUndefined(this.viewOptions.tickStep)) {
- newValue = this.roundStep(newValue, this.viewOptions.tickStep);
- }
- else {
- newValue = this.roundStep(newValue);
- }
- }
- this.positionTrackingHandle(newValue);
- }
- /**
- * @param {?} event
- * @return {?}
- */
- onEnd(event) {
- if (CompatibilityHelper.isTouchEvent(event)) {
- /** @type {?} */
- const changedTouches = (/** @type {?} */ (event)).changedTouches;
- if (changedTouches[0].identifier !== this.touchId) {
- return;
- }
- }
- this.moving = false;
- if (this.viewOptions.animate) {
- this.sliderElementAnimateClass = true;
- }
- this.touchId = null;
- if (!this.viewOptions.keyboardSupport) {
- this.minHandleElement.active = false;
- this.maxHandleElement.active = false;
- this.currentTrackingPointer = null;
- }
- this.dragging.active = false;
- this.unsubscribeOnMove();
- this.unsubscribeOnEnd();
- this.userChangeEnd.emit(this.getChangeContext());
- }
- /**
- * @param {?} pointerType
- * @return {?}
- */
- onPointerFocus(pointerType) {
- /** @type {?} */
- const pointerElement = this.getPointerElement(pointerType);
- pointerElement.on('blur', () => this.onPointerBlur(pointerElement));
- pointerElement.on('keydown', (event) => this.onKeyboardEvent(event));
- pointerElement.on('keyup', () => this.onKeyUp());
- pointerElement.active = true;
- this.currentTrackingPointer = pointerType;
- this.currentFocusPointer = pointerType;
- this.firstKeyDown = true;
- }
- /**
- * @return {?}
- */
- onKeyUp() {
- this.firstKeyDown = true;
- this.userChangeEnd.emit(this.getChangeContext());
- }
- /**
- * @param {?} pointer
- * @return {?}
- */
- onPointerBlur(pointer) {
- pointer.off('blur');
- pointer.off('keydown');
- pointer.off('keyup');
- pointer.active = false;
- if (ValueHelper.isNullOrUndefined(this.touchId)) {
- this.currentTrackingPointer = null;
- this.currentFocusPointer = null;
- }
- }
- /**
- * @param {?} currentValue
- * @return {?}
- */
- getKeyActions(currentValue) {
- /** @type {?} */
- const valueRange = this.viewOptions.ceil - this.viewOptions.floor;
- /** @type {?} */
- let increaseStep = currentValue + this.viewOptions.step;
- /** @type {?} */
- let decreaseStep = currentValue - this.viewOptions.step;
- /** @type {?} */
- let increasePage = currentValue + valueRange / 10;
- /** @type {?} */
- let decreasePage = currentValue - valueRange / 10;
- if (this.viewOptions.reversedControls) {
- increaseStep = currentValue - this.viewOptions.step;
- decreaseStep = currentValue + this.viewOptions.step;
- increasePage = currentValue - valueRange / 10;
- decreasePage = currentValue + valueRange / 10;
- }
- /** @type {?} */
- const actions = {
- UP: increaseStep,
- DOWN: decreaseStep,
- LEFT: decreaseStep,
- RIGHT: increaseStep,
- PAGEUP: increasePage,
- PAGEDOWN: decreasePage,
- HOME: this.viewOptions.reversedControls ? this.viewOptions.ceil : this.viewOptions.floor,
- END: this.viewOptions.reversedControls ? this.viewOptions.floor : this.viewOptions.ceil,
- };
- // right to left means swapping right and left arrows
- if (this.viewOptions.rightToLeft) {
- actions["LEFT"] = increaseStep;
- actions["RIGHT"] = decreaseStep;
- // right to left and vertical means we also swap up and down
- if (this.viewOptions.vertical) {
- actions["UP"] = decreaseStep;
- actions["DOWN"] = increaseStep;
- }
- }
- return actions;
- }
- /**
- * @param {?} event
- * @return {?}
- */
- onKeyboardEvent(event) {
- /** @type {?} */
- const currentValue = this.getCurrentTrackingValue();
- /** @type {?} */
- const keyCode = !ValueHelper.isNullOrUndefined(event.keyCode)
- ? event.keyCode
- : event.which;
- /** @type {?} */
- const keys = {
- 38: 'UP',
- 40: 'DOWN',
- 37: 'LEFT',
- 39: 'RIGHT',
- 33: 'PAGEUP',
- 34: 'PAGEDOWN',
- 36: 'HOME',
- 35: 'END',
- };
- /** @type {?} */
- const actions = this.getKeyActions(currentValue);
- /** @type {?} */
- const key = keys[keyCode];
- /** @type {?} */
- const action = actions[key];
- if (ValueHelper.isNullOrUndefined(action) || ValueHelper.isNullOrUndefined(this.currentTrackingPointer)) {
- return;
- }
- event.preventDefault();
- if (this.firstKeyDown) {
- this.firstKeyDown = false;
- this.userChangeStart.emit(this.getChangeContext());
- }
- /** @type {?} */
- const actionValue = MathHelper.clampToRange(action, this.viewOptions.floor, this.viewOptions.ceil);
- /** @type {?} */
- const newValue = this.roundStep(actionValue);
- if (!this.viewOptions.draggableRangeOnly) {
- this.positionTrackingHandle(newValue);
- }
- else {
- /** @type {?} */
- const difference = this.viewHighValue - this.viewLowValue;
- /** @type {?} */
- let newMinValue;
- /** @type {?} */
- let newMaxValue;
- if (this.currentTrackingPointer === PointerType.Min) {
- newMinValue = newValue;
- newMaxValue = newValue + difference;
- if (newMaxValue > this.viewOptions.ceil) {
- newMaxValue = this.viewOptions.ceil;
- newMinValue = newMaxValue - difference;
- }
- }
- else if (this.currentTrackingPointer === PointerType.Max) {
- newMaxValue = newValue;
- newMinValue = newValue - difference;
- if (newMinValue < this.viewOptions.floor) {
- newMinValue = this.viewOptions.floor;
- newMaxValue = newMinValue + difference;
- }
- }
- this.positionTrackingBar(newMinValue, newMaxValue);
- }
- }
- /**
- * @param {?} pointerType
- * @param {?} event
- * @param {?} bindMove
- * @param {?} bindEnd
- * @return {?}
- */
- onDragStart(pointerType, event, bindMove, bindEnd) {
- /** @type {?} */
- const position = this.getEventPosition(event);
- this.dragging = new Dragging();
- this.dragging.active = true;
- this.dragging.value = this.positionToValue(position);
- this.dragging.difference = this.viewHighValue - this.viewLowValue;
- this.dragging.lowLimit = this.viewOptions.rightToLeft
- ? this.minHandleElement.position - position
- : position - this.minHandleElement.position;
- this.dragging.highLimit = this.viewOptions.rightToLeft
- ? position - this.maxHandleElement.position
- : this.maxHandleElement.position - position;
- this.onStart(pointerType, event, bindMove, bindEnd);
- }
- /**
- * Get min value depending on whether the newPos is outOfBounds above or below the bar and rightToLeft
- * @param {?} newPos
- * @param {?} outOfBounds
- * @param {?} isAbove
- * @return {?}
- */
- getMinValue(newPos, outOfBounds, isAbove) {
- /** @type {?} */
- const isRTL = this.viewOptions.rightToLeft;
- /** @type {?} */
- let value = null;
- if (outOfBounds) {
- if (isAbove) {
- value = isRTL
- ? this.viewOptions.floor
- : this.viewOptions.ceil - this.dragging.difference;
- }
- else {
- value = isRTL
- ? this.viewOptions.ceil - this.dragging.difference
- : this.viewOptions.floor;
- }
- }
- else {
- value = isRTL
- ? this.positionToValue(newPos + this.dragging.lowLimit)
- : this.positionToValue(newPos - this.dragging.lowLimit);
- }
- return this.roundStep(value);
- }
- /**
- * Get max value depending on whether the newPos is outOfBounds above or below the bar and rightToLeft
- * @param {?} newPos
- * @param {?} outOfBounds
- * @param {?} isAbove
- * @return {?}
- */
- getMaxValue(newPos, outOfBounds, isAbove) {
- /** @type {?} */
- const isRTL = this.viewOptions.rightToLeft;
- /** @type {?} */
- let value = null;
- if (outOfBounds) {
- if (isAbove) {
- value = isRTL
- ? this.viewOptions.floor + this.dragging.difference
- : this.viewOptions.ceil;
- }
- else {
- value = isRTL
- ? this.viewOptions.ceil
- : this.viewOptions.floor + this.dragging.difference;
- }
- }
- else {
- if (isRTL) {
- value =
- this.positionToValue(newPos + this.dragging.lowLimit) +
- this.dragging.difference;
- }
- else {
- value =
- this.positionToValue(newPos - this.dragging.lowLimit) +
- this.dragging.difference;
- }
- }
- return this.roundStep(value);
- }
- /**
- * @param {?=} event
- * @return {?}
- */
- onDragMove(event) {
- /** @type {?} */
- const newPos = this.getEventPosition(event);
- if (this.viewOptions.animate && !this.viewOptions.animateOnMove) {
- if (this.moving) {
- this.sliderElementAnimateClass = false;
- }
- }
- this.moving = true;
- /** @type {?} */
- let ceilLimit;
- /** @type {?} */
- let floorLimit;
- /** @type {?} */
- let floorHandleElement;
- /** @type {?} */
- let ceilHandleElement;
- if (this.viewOptions.rightToLeft) {
- ceilLimit = this.dragging.lowLimit;
- floorLimit = this.dragging.highLimit;
- floorHandleElement = this.maxHandleElement;
- ceilHandleElement = this.minHandleElement;
- }
- else {
- ceilLimit = this.dragging.highLimit;
- floorLimit = this.dragging.lowLimit;
- floorHandleElement = this.minHandleElement;
- ceilHandleElement = this.maxHandleElement;
- }
- /** @type {?} */
- const isUnderFloorLimit = (newPos <= floorLimit);
- /** @type {?} */
- const isOverCeilLimit = (newPos >= this.maxHandlePosition - ceilLimit);
- /** @type {?} */
- let newMinValue;
- /** @type {?} */
- let newMaxValue;
- if (isUnderFloorLimit) {
- if (floorHandleElement.position === 0) {
- return;
- }
- newMinValue = this.getMinValue(newPos, true, false);
- newMaxValue = this.getMaxValue(newPos, true, false);
- }
- else if (isOverCeilLimit) {
- if (ceilHandleElement.position === this.maxHandlePosition) {
- return;
- }
- newMaxValue = this.getMaxValue(newPos, true, true);
- newMinValue = this.getMinValue(newPos, true, true);
- }
- else {
- newMinValue = this.getMinValue(newPos, false, false);
- newMaxValue = this.getMaxValue(newPos, false, false);
- }
- this.positionTrackingBar(newMinValue, newMaxValue);
- }
- /**
- * @param {?} newMinValue
- * @param {?} newMaxValue
- * @return {?}
- */
- positionTrackingBar(newMinValue, newMaxValue) {
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.minLimit) &&
- newMinValue < this.viewOptions.minLimit) {
- newMinValue = this.viewOptions.minLimit;
- newMaxValue = MathHelper.roundToPrecisionLimit(newMinValue + this.dragging.difference, this.viewOptions.precisionLimit);
- }
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.maxLimit) &&
- newMaxValue > this.viewOptions.maxLimit) {
- newMaxValue = this.viewOptions.maxLimit;
- newMinValue = MathHelper.roundToPrecisionLimit(newMaxValue - this.dragging.difference, this.viewOptions.precisionLimit);
- }
- this.viewLowValue = newMinValue;
- this.viewHighValue = newMaxValue;
- this.applyViewChange();
- this.updateHandles(PointerType.Min, this.valueToPosition(newMinValue));
- this.updateHandles(PointerType.Max, this.valueToPosition(newMaxValue));
- }
- /**
- * @param {?} newValue
- * @return {?}
- */
- positionTrackingHandle(newValue) {
- newValue = this.applyMinMaxLimit(newValue);
- if (this.range) {
- if (this.viewOptions.pushRange) {
- newValue = this.applyPushRange(newValue);
- }
- else {
- if (this.viewOptions.noSwitching) {
- if (this.currentTrackingPointer === PointerType.Min &&
- newValue > this.viewHighValue) {
- newValue = this.applyMinMaxRange(this.viewHighValue);
- }
- else if (this.currentTrackingPointer === PointerType.Max &&
- newValue < this.viewLowValue) {
- newValue = this.applyMinMaxRange(this.viewLowValue);
- }
- }
- newValue = this.applyMinMaxRange(newValue);
- /* This is to check if we need to switch the min and max handles */
- if (this.currentTrackingPointer === PointerType.Min && newValue > this.viewHighValue) {
- this.viewLowValue = this.viewHighValue;
- this.applyViewChange();
- this.updateHandles(PointerType.Min, this.maxHandleElement.position);
- this.updateAriaAttributes();
- this.currentTrackingPointer = PointerType.Max;
- this.minHandleElement.active = false;
- this.maxHandleElement.active = true;
- if (this.viewOptions.keyboardSupport) {
- this.maxHandleElement.focus();
- }
- }
- else if (this.currentTrackingPointer === PointerType.Max &&
- newValue < this.viewLowValue) {
- this.viewHighValue = this.viewLowValue;
- this.applyViewChange();
- this.updateHandles(PointerType.Max, this.minHandleElement.position);
- this.updateAriaAttributes();
- this.currentTrackingPointer = PointerType.Min;
- this.maxHandleElement.active = false;
- this.minHandleElement.active = true;
- if (this.viewOptions.keyboardSupport) {
- this.minHandleElement.focus();
- }
- }
- }
- }
- if (this.getCurrentTrackingValue() !== newValue) {
- if (this.currentTrackingPointer === PointerType.Min) {
- this.viewLowValue = newValue;
- this.applyViewChange();
- }
- else if (this.currentTrackingPointer === PointerType.Max) {
- this.viewHighValue = newValue;
- this.applyViewChange();
- }
- this.updateHandles(this.currentTrackingPointer, this.valueToPosition(newValue));
- this.updateAriaAttributes();
- }
- }
- /**
- * @param {?} newValue
- * @return {?}
- */
- applyMinMaxLimit(newValue) {
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.minLimit) && newValue < this.viewOptions.minLimit) {
- return this.viewOptions.minLimit;
- }
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.maxLimit) && newValue > this.viewOptions.maxLimit) {
- return this.viewOptions.maxLimit;
- }
- return newValue;
- }
- /**
- * @param {?} newValue
- * @return {?}
- */
- applyMinMaxRange(newValue) {
- /** @type {?} */
- const oppositeValue = (this.currentTrackingPointer === PointerType.Min)
- ? this.viewHighValue
- : this.viewLowValue;
- /** @type {?} */
- const difference = Math.abs(newValue - oppositeValue);
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.minRange)) {
- if (difference < this.viewOptions.minRange) {
- if (this.currentTrackingPointer === PointerType.Min) {
- return MathHelper.roundToPrecisionLimit(this.viewHighValue - this.viewOptions.minRange, this.viewOptions.precisionLimit);
- }
- else if (this.currentTrackingPointer === PointerType.Max) {
- return MathHelper.roundToPrecisionLimit(this.viewLowValue + this.viewOptions.minRange, this.viewOptions.precisionLimit);
- }
- }
- }
- if (!ValueHelper.isNullOrUndefined(this.viewOptions.maxRange)) {
- if (difference > this.viewOptions.maxRange) {
- if (this.currentTrackingPointer === PointerType.Min) {
- return MathHelper.roundToPrecisionLimit(this.viewHighValue - this.viewOptions.maxRange, this.viewOptions.precisionLimit);
- }
- else if (this.currentTrackingPointer === PointerType.Max) {
- return MathHelper.roundToPrecisionLimit(this.viewLowValue + this.viewOptions.maxRange, this.viewOptions.precisionLimit);
- }
- }
- }
- return newValue;
- }
- /**
- * @param {?} newValue
- * @return {?}
- */
- applyPushRange(newValue) {
- /** @type {?} */
- const difference = (this.currentTrackingPointer === PointerType.Min)
- ? this.viewHighValue - newValue
- : newValue - this.viewLowValue;
- /** @type {?} */
- const minRange = (!ValueHelper.isNullOrUndefined(this.viewOptions.minRange))
- ? this.viewOptions.minRange
- : this.viewOptions.step;
- /** @type {?} */
- const maxRange = this.viewOptions.maxRange;
- // if smaller than minRange
- if (difference < minRange) {
- if (this.currentTrackingPointer === PointerType.Min) {
- this.viewHighValue = MathHelper.roundToPrecisionLimit(Math.min(newValue + minRange, this.viewOptions.ceil), this.viewOptions.precisionLimit);
- newValue = MathHelper.roundToPrecisionLimit(this.viewHighValue - minRange, this.viewOptions.precisionLimit);
- this.applyViewChange();
- this.updateHandles(PointerType.Max, this.valueToPosition(this.viewHighValue));
- }
- else if (this.currentTrackingPointer === PointerType.Max) {
- this.viewLowValue = MathHelper.roundToPrecisionLimit(Math.max(newValue - minRange, this.viewOptions.floor), this.viewOptions.precisionLimit);
- newValue = MathHelper.roundToPrecisionLimit(this.viewLowValue + minRange, this.viewOptions.precisionLimit);
- this.applyViewChange();
- this.updateHandles(PointerType.Min, this.valueToPosition(this.viewLowValue));
- }
- this.updateAriaAttributes();
- }
- else if (!ValueHelper.isNullOrUndefined(maxRange) && difference > maxRange) {
- // if greater than maxRange
- if (this.currentTrackingPointer === PointerType.Min) {
- this.viewHighValue = MathHelper.roundToPrecisionLimit(newValue + maxRange, this.viewOptions.precisionLimit);
- this.applyViewChange();
- this.updateHandles(PointerType.Max, this.valueToPosition(this.viewHighValue));
- }
- else if (this.currentTrackingPointer === PointerType.Max) {
- this.viewLowValue = MathHelper.roundToPrecisionLimit(newValue - maxRange, this.viewOptions.precisionLimit);
- this.applyViewChange();
- this.updateHandles(PointerType.Min, this.valueToPosition(this.viewLowValue));
- }
- this.updateAriaAttributes();
- }
- return newValue;
- }
- /**
- * @return {?}
- */
- getChangeContext() {
- /** @type {?} */
- const changeContext = new ChangeContext();
- changeContext.pointerType = this.currentTrackingPointer;
- changeContext.value = +this.value;
- if (this.range) {
- changeContext.highValue = +this.highValue;
- }
- return changeContext;
- }
- }
- SliderComponent.ɵfac = function SliderComponent_Factory(t) { return new (t || SliderComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["NgZone"])); };
- SliderComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({ type: SliderComponent, selectors: [["ngx-slider"]], contentQueries: function SliderComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵcontentQuery"](dirIndex, _c0, true);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.tooltipTemplate = _t.first);
- } }, viewQuery: function SliderComponent_Query(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](_c1, true, SliderElementDirective);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](_c2, true, SliderElementDirective);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](_c3, true, SliderElementDirective);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](_c4, true, SliderElementDirective);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](_c5, true, SliderHandleDirective);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](_c6, true, SliderHandleDirective);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](_c7, true, SliderLabelDirective);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](_c8, true, SliderLabelDirective);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](_c9, true, SliderLabelDirective);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](_c10, true, SliderLabelDirective);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](_c11, true, SliderLabelDirective);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](_c12, true, SliderElementDirective);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.leftOuterSelectionBarElement = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.rightOuterSelectionBarElement = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.fullBarElement = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.selectionBarElement = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.minHandleElement = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.maxHandleElement = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.floorLabelElement = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.ceilLabelElement = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.minHandleLabelElement = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.maxHandleLabelElement = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.combinedLabelElement = _t.first);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.ticksElement = _t.first);
- } }, hostAttrs: [1, "ngx-slider"], hostVars: 7, hostBindings: function SliderComponent_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("resize", function SliderComponent_resize_HostBindingHandler($event) { return ctx.onResize($event); }, false, _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresolveWindow"]);
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵattribute"]("disabled", ctx.sliderElementDisabledAttr);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵclassProp"]("vertical", ctx.sliderElementVerticalClass)("animate", ctx.sliderElementAnimateClass)("with-legend", ctx.sliderElementWithLegendClass);
- } }, inputs: { value: "value", highValue: "highValue", options: "options", manualRefresh: "manualRefresh", triggerFocus: "triggerFocus" }, outputs: { valueChange: "valueChange", highValueChange: "highValueChange", userChangeStart: "userChangeStart", userChange: "userChange", userChangeEnd: "userChangeEnd" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵProvidersFeature"]([NGX_SLIDER_CONTROL_VALUE_ACCESSOR]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵNgOnChangesFeature"]], decls: 29, vars: 13, consts: [["ngxSliderElement", "", 1, "ngx-slider-span", "ngx-slider-bar-wrapper", "ngx-slider-left-out-selection"], ["leftOuterSelectionBar", ""], [1, "ngx-slider-span", "ngx-slider-bar"], ["ngxSliderElement", "", 1, "ngx-slider-span", "ngx-slider-bar-wrapper", "ngx-slider-right-out-selection"], ["rightOuterSelectionBar", ""], ["ngxSliderElement", "", 1, "ngx-slider-span", "ngx-slider-bar-wrapper", "ngx-slider-full-bar"], ["fullBar", ""], ["ngxSliderElement", "", 1, "ngx-slider-span", "ngx-slider-bar-wrapper", "ngx-slider-selection-bar"], ["selectionBar", ""], [1, "ngx-slider-span", "ngx-slider-bar", "ngx-slider-selection", 3, "ngStyle"], ["ngxSliderHandle", "", 1, "ngx-slider-span", "ngx-slider-pointer", "ngx-slider-pointer-min", 3, "ngStyle"], ["minHandle", ""], ["ngxSliderHandle", "", 1, "ngx-slider-span", "ngx-slider-pointer", "ngx-slider-pointer-max", 3, "ngStyle"], ["maxHandle", ""], ["ngxSliderLabel", "", 1, "ngx-slider-span", "ngx-slider-bubble", "ngx-slider-limit", "ngx-slider-floor"], ["floorLabel", ""], ["ngxSliderLabel", "", 1, "ngx-slider-span", "ngx-slider-bubble", "ngx-slider-limit", "ngx-slider-ceil"], ["ceilLabel", ""], ["ngxSliderLabel", "", 1, "ngx-slider-span", "ngx-slider-bubble", "ngx-slider-model-value"], ["minHandleLabel", ""], ["ngxSliderLabel", "", 1, "ngx-slider-span", "ngx-slider-bubble", "ngx-slider-model-high"], ["maxHandleLabel", ""], ["ngxSliderLabel", "", 1, "ngx-slider-span", "ngx-slider-bubble", "ngx-slider-combined"], ["combinedLabel", ""], ["ngxSliderElement", "", 1, "ngx-slider-ticks", 3, "hidden"], ["ticksElement", ""], ["class", "ngx-slider-tick", 3, "ngClass", "ngStyle", 4, "ngFor", "ngForOf"], [1, "ngx-slider-tick", 3, "ngClass", "ngStyle"], [3, "template", "tooltip", "placement"], ["class", "ngx-slider-span ngx-slider-tick-value", 3, "template", "tooltip", "placement", "content", 4, "ngIf"], ["class", "ngx-slider-span ngx-slider-tick-legend", 3, "innerHTML", 4, "ngIf"], [1, "ngx-slider-span", "ngx-slider-tick-value", 3, "template", "tooltip", "placement", "content"], [1, "ngx-slider-span", "ngx-slider-tick-legend", 3, "innerHTML"]], template: function SliderComponent_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "span", 0, 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](2, "span", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](3, "span", 3, 4);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](5, "span", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](6, "span", 5, 6);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](8, "span", 2);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](9, "span", 7, 8);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](11, "span", 9);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](12, "span", 10, 11);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](14, "span", 12, 13);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](16, "span", 14, 15);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](18, "span", 16, 17);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](20, "span", 18, 19);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](22, "span", 20, 21);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](24, "span", 22, 23);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](26, "span", 24, 25);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](28, SliderComponent_span_28_Template, 4, 9, "span", 26);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](6);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵclassProp"]("ngx-slider-transparent", ctx.fullBarTransparentClass);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵclassProp"]("ngx-slider-draggable", ctx.selectionBarDraggableClass);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngStyle", ctx.barStyle);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngStyle", ctx.minPointerStyle);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵstyleProp"]("display", ctx.range ? "inherit" : "none");
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngStyle", ctx.maxPointerStyle);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](12);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵclassProp"]("ngx-slider-ticks-values-under", ctx.ticksUnderValuesClass);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("hidden", !ctx.showTicks);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngForOf", ctx.ticks);
- } }, directives: function () { return [SliderElementDirective, _angular_common__WEBPACK_IMPORTED_MODULE_5__["NgStyle"], SliderHandleDirective, SliderLabelDirective, _angular_common__WEBPACK_IMPORTED_MODULE_5__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_5__["NgClass"], TooltipWrapperComponent, _angular_common__WEBPACK_IMPORTED_MODULE_5__["NgIf"]]; }, styles: [".ngx-slider{display:inline-block;position:relative;height:4px;width:100%;margin:35px 0 15px;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;touch-action:pan-y} .ngx-slider.with-legend{margin-bottom:40px} .ngx-slider[disabled]{cursor:not-allowed} .ngx-slider[disabled] .ngx-slider-pointer{cursor:not-allowed;background-color:#d8e0f3} .ngx-slider[disabled] .ngx-slider-draggable{cursor:not-allowed} .ngx-slider[disabled] .ngx-slider-selection{background:#8b91a2} .ngx-slider[disabled] .ngx-slider-tick{cursor:not-allowed} .ngx-slider[disabled] .ngx-slider-tick.ngx-slider-selected{background:#8b91a2} .ngx-slider .ngx-slider-span{white-space:nowrap;position:absolute;display:inline-block} .ngx-slider .ngx-slider-base{width:100%;height:100%;padding:0} .ngx-slider .ngx-slider-bar-wrapper{left:0;box-sizing:border-box;margin-top:-16px;padding-top:16px;width:100%;height:32px;z-index:1} .ngx-slider .ngx-slider-draggable{cursor:move} .ngx-slider .ngx-slider-bar{left:0;width:100%;height:4px;z-index:1;background:#d8e0f3;border-radius:2px} .ngx-slider .ngx-slider-bar-wrapper.ngx-slider-transparent .ngx-slider-bar{background:0 0} .ngx-slider .ngx-slider-bar-wrapper.ngx-slider-left-out-selection .ngx-slider-bar{background:#df002d} .ngx-slider .ngx-slider-bar-wrapper.ngx-slider-right-out-selection .ngx-slider-bar{background:#03a688} .ngx-slider .ngx-slider-selection{z-index:2;background:#0db9f0;border-radius:2px} .ngx-slider .ngx-slider-pointer{cursor:pointer;width:32px;height:32px;top:-14px;background-color:#0db9f0;z-index:3;border-radius:16px} .ngx-slider .ngx-slider-pointer:after{content:'';width:8px;height:8px;position:absolute;top:12px;left:12px;border-radius:4px;background:#fff} .ngx-slider .ngx-slider-pointer:hover:after{background-color:#fff} .ngx-slider .ngx-slider-pointer.ngx-slider-active{z-index:4} .ngx-slider .ngx-slider-pointer.ngx-slider-active:after{background-color:#451aff} .ngx-slider .ngx-slider-bubble{cursor:default;bottom:16px;padding:1px 3px;color:#55637d;font-size:16px} .ngx-slider .ngx-slider-bubble.ngx-slider-limit{color:#55637d} .ngx-slider .ngx-slider-ticks{box-sizing:border-box;width:100%;height:0;position:absolute;left:0;top:-3px;margin:0;z-index:1;list-style:none} .ngx-slider .ngx-slider-ticks-values-under .ngx-slider-tick-value{top:auto;bottom:-36px} .ngx-slider .ngx-slider-tick{text-align:center;cursor:pointer;width:10px;height:10px;background:#d8e0f3;border-radius:50%;position:absolute;top:0;left:0;margin-left:11px} .ngx-slider .ngx-slider-tick.ngx-slider-selected{background:#0db9f0} .ngx-slider .ngx-slider-tick-value{position:absolute;top:-34px;-webkit-transform:translate(-50%,0);transform:translate(-50%,0)} .ngx-slider .ngx-slider-tick-legend{position:absolute;top:24px;-webkit-transform:translate(-50%,0);transform:translate(-50%,0);max-width:50px;white-space:normal} .ngx-slider.vertical{position:relative;width:4px;height:100%;margin:0 20px;padding:0;vertical-align:baseline;touch-action:pan-x} .ngx-slider.vertical .ngx-slider-base{width:100%;height:100%;padding:0} .ngx-slider.vertical .ngx-slider-bar-wrapper{top:auto;left:0;margin:0 0 0 -16px;padding:0 0 0 16px;height:100%;width:32px} .ngx-slider.vertical .ngx-slider-bar{bottom:0;left:auto;width:4px;height:100%} .ngx-slider.vertical .ngx-slider-pointer{left:-14px!important;top:auto;bottom:0} .ngx-slider.vertical .ngx-slider-bubble{left:16px!important;bottom:0} .ngx-slider.vertical .ngx-slider-ticks{height:100%;width:0;left:-3px;top:0;z-index:1} .ngx-slider.vertical .ngx-slider-tick{vertical-align:middle;margin-left:auto;margin-top:11px} .ngx-slider.vertical .ngx-slider-tick-value{left:24px;top:auto;-webkit-transform:translate(0,-28%);transform:translate(0,-28%)} .ngx-slider.vertical .ngx-slider-tick-legend{top:auto;right:24px;-webkit-transform:translate(0,-28%);transform:translate(0,-28%);max-width:none;white-space:nowrap} .ngx-slider.vertical .ngx-slider-ticks-values-under .ngx-slider-tick-value{bottom:auto;left:auto;right:24px} .ngx-slider *{transition:none} .ngx-slider.animate .ngx-slider-bar-wrapper{transition:.3s linear} .ngx-slider.animate .ngx-slider-selection{transition:background-color .3s linear} .ngx-slider.animate .ngx-slider-pointer{transition:.3s linear} .ngx-slider.animate .ngx-slider-bubble{transition:.3s linear} .ngx-slider.animate .ngx-slider-bubble.ngx-slider-limit{transition:opacity .3s linear} .ngx-slider.animate .ngx-slider-bubble.ngx-slider-combined{transition:opacity .3s linear} .ngx-slider.animate .ngx-slider-tick{transition:background-color .3s linear}"] });
- /** @nocollapse */
- SliderComponent.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["NgZone"] }
- ];
- SliderComponent.propDecorators = {
- value: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"] }],
- valueChange: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Output"] }],
- highValue: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"] }],
- highValueChange: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Output"] }],
- options: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"] }],
- userChangeStart: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Output"] }],
- userChange: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Output"] }],
- userChangeEnd: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Output"] }],
- manualRefresh: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"] }],
- triggerFocus: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"] }],
- leftOuterSelectionBarElement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"], args: ['leftOuterSelectionBar', { read: SliderElementDirective },] }],
- rightOuterSelectionBarElement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"], args: ['rightOuterSelectionBar', { read: SliderElementDirective },] }],
- fullBarElement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"], args: ['fullBar', { read: SliderElementDirective },] }],
- selectionBarElement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"], args: ['selectionBar', { read: SliderElementDirective },] }],
- minHandleElement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"], args: ['minHandle', { read: SliderHandleDirective },] }],
- maxHandleElement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"], args: ['maxHandle', { read: SliderHandleDirective },] }],
- floorLabelElement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"], args: ['floorLabel', { read: SliderLabelDirective },] }],
- ceilLabelElement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"], args: ['ceilLabel', { read: SliderLabelDirective },] }],
- minHandleLabelElement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"], args: ['minHandleLabel', { read: SliderLabelDirective },] }],
- maxHandleLabelElement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"], args: ['maxHandleLabel', { read: SliderLabelDirective },] }],
- combinedLabelElement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"], args: ['combinedLabel', { read: SliderLabelDirective },] }],
- ticksElement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"], args: ['ticksElement', { read: SliderElementDirective },] }],
- tooltipTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChild"], args: ['tooltipTemplate',] }],
- sliderElementVerticalClass: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['class.vertical',] }],
- sliderElementAnimateClass: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['class.animate',] }],
- sliderElementWithLegendClass: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['class.with-legend',] }],
- sliderElementDisabledAttr: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"], args: ['attr.disabled',] }],
- onResize: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostListener"], args: ['window:resize', ['$event'],] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](SliderComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Component"],
- args: [{
- selector: 'ngx-slider',
- template: `<!-- // 0 Left selection bar outside two handles -->
- <span ngxSliderElement #leftOuterSelectionBar class="ngx-slider-span ngx-slider-bar-wrapper ngx-slider-left-out-selection">
- <span class="ngx-slider-span ngx-slider-bar"></span>
- </span>
- <!-- // 1 Right selection bar outside two handles -->
- <span ngxSliderElement #rightOuterSelectionBar class="ngx-slider-span ngx-slider-bar-wrapper ngx-slider-right-out-selection">
- <span class="ngx-slider-span ngx-slider-bar"></span>
- </span>
- <!-- // 2 The whole slider bar -->
- <span ngxSliderElement #fullBar [class.ngx-slider-transparent]="fullBarTransparentClass" class="ngx-slider-span ngx-slider-bar-wrapper ngx-slider-full-bar">
- <span class="ngx-slider-span ngx-slider-bar"></span>
- </span>
- <!-- // 3 Selection bar between two handles -->
- <span ngxSliderElement #selectionBar [class.ngx-slider-draggable]="selectionBarDraggableClass" class="ngx-slider-span ngx-slider-bar-wrapper ngx-slider-selection-bar">
- <span class="ngx-slider-span ngx-slider-bar ngx-slider-selection" [ngStyle]="barStyle"></span>
- </span>
- <!-- // 4 Low slider handle -->
- <span ngxSliderHandle #minHandle class="ngx-slider-span ngx-slider-pointer ngx-slider-pointer-min" [ngStyle]=minPointerStyle></span>
- <!-- // 5 High slider handle -->
- <span ngxSliderHandle #maxHandle [style.display]="range ? 'inherit' : 'none'" class="ngx-slider-span ngx-slider-pointer ngx-slider-pointer-max" [ngStyle]=maxPointerStyle></span>
- <!-- // 6 Floor label -->
- <span ngxSliderLabel #floorLabel class="ngx-slider-span ngx-slider-bubble ngx-slider-limit ngx-slider-floor"></span>
- <!-- // 7 Ceiling label -->
- <span ngxSliderLabel #ceilLabel class="ngx-slider-span ngx-slider-bubble ngx-slider-limit ngx-slider-ceil"></span>
- <!-- // 8 Label above the low slider handle -->
- <span ngxSliderLabel #minHandleLabel class="ngx-slider-span ngx-slider-bubble ngx-slider-model-value"></span>
- <!-- // 9 Label above the high slider handle -->
- <span ngxSliderLabel #maxHandleLabel class="ngx-slider-span ngx-slider-bubble ngx-slider-model-high"></span>
- <!-- // 10 Combined range label when the slider handles are close ex. 15 - 17 -->
- <span ngxSliderLabel #combinedLabel class="ngx-slider-span ngx-slider-bubble ngx-slider-combined"></span>
- <!-- // 11 The ticks -->
- <span ngxSliderElement #ticksElement [hidden]="!showTicks" [class.ngx-slider-ticks-values-under]="ticksUnderValuesClass" class="ngx-slider-ticks">
- <span *ngFor="let t of ticks" class="ngx-slider-tick" [ngClass]="{'ngx-slider-selected': t.selected}" [ngStyle]="t.style">
- <ngx-slider-tooltip-wrapper [template]="tooltipTemplate" [tooltip]="t.tooltip" [placement]="t.tooltipPlacement"></ngx-slider-tooltip-wrapper>
- <ngx-slider-tooltip-wrapper *ngIf="t.value != null" class="ngx-slider-span ngx-slider-tick-value"
- [template]="tooltipTemplate" [tooltip]="t.valueTooltip" [placement]="t.valueTooltipPlacement" [content]="t.value"></ngx-slider-tooltip-wrapper>
- <span *ngIf="t.legend != null" class="ngx-slider-span ngx-slider-tick-legend" [innerHTML]="t.legend"></span>
- </span>
- </span>`,
- styles: [`::ng-deep .ngx-slider{display:inline-block;position:relative;height:4px;width:100%;margin:35px 0 15px;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;touch-action:pan-y}::ng-deep .ngx-slider.with-legend{margin-bottom:40px}::ng-deep .ngx-slider[disabled]{cursor:not-allowed}::ng-deep .ngx-slider[disabled] .ngx-slider-pointer{cursor:not-allowed;background-color:#d8e0f3}::ng-deep .ngx-slider[disabled] .ngx-slider-draggable{cursor:not-allowed}::ng-deep .ngx-slider[disabled] .ngx-slider-selection{background:#8b91a2}::ng-deep .ngx-slider[disabled] .ngx-slider-tick{cursor:not-allowed}::ng-deep .ngx-slider[disabled] .ngx-slider-tick.ngx-slider-selected{background:#8b91a2}::ng-deep .ngx-slider .ngx-slider-span{white-space:nowrap;position:absolute;display:inline-block}::ng-deep .ngx-slider .ngx-slider-base{width:100%;height:100%;padding:0}::ng-deep .ngx-slider .ngx-slider-bar-wrapper{left:0;box-sizing:border-box;margin-top:-16px;padding-top:16px;width:100%;height:32px;z-index:1}::ng-deep .ngx-slider .ngx-slider-draggable{cursor:move}::ng-deep .ngx-slider .ngx-slider-bar{left:0;width:100%;height:4px;z-index:1;background:#d8e0f3;border-radius:2px}::ng-deep .ngx-slider .ngx-slider-bar-wrapper.ngx-slider-transparent .ngx-slider-bar{background:0 0}::ng-deep .ngx-slider .ngx-slider-bar-wrapper.ngx-slider-left-out-selection .ngx-slider-bar{background:#df002d}::ng-deep .ngx-slider .ngx-slider-bar-wrapper.ngx-slider-right-out-selection .ngx-slider-bar{background:#03a688}::ng-deep .ngx-slider .ngx-slider-selection{z-index:2;background:#0db9f0;border-radius:2px}::ng-deep .ngx-slider .ngx-slider-pointer{cursor:pointer;width:32px;height:32px;top:-14px;background-color:#0db9f0;z-index:3;border-radius:16px}::ng-deep .ngx-slider .ngx-slider-pointer:after{content:'';width:8px;height:8px;position:absolute;top:12px;left:12px;border-radius:4px;background:#fff}::ng-deep .ngx-slider .ngx-slider-pointer:hover:after{background-color:#fff}::ng-deep .ngx-slider .ngx-slider-pointer.ngx-slider-active{z-index:4}::ng-deep .ngx-slider .ngx-slider-pointer.ngx-slider-active:after{background-color:#451aff}::ng-deep .ngx-slider .ngx-slider-bubble{cursor:default;bottom:16px;padding:1px 3px;color:#55637d;font-size:16px}::ng-deep .ngx-slider .ngx-slider-bubble.ngx-slider-limit{color:#55637d}::ng-deep .ngx-slider .ngx-slider-ticks{box-sizing:border-box;width:100%;height:0;position:absolute;left:0;top:-3px;margin:0;z-index:1;list-style:none}::ng-deep .ngx-slider .ngx-slider-ticks-values-under .ngx-slider-tick-value{top:auto;bottom:-36px}::ng-deep .ngx-slider .ngx-slider-tick{text-align:center;cursor:pointer;width:10px;height:10px;background:#d8e0f3;border-radius:50%;position:absolute;top:0;left:0;margin-left:11px}::ng-deep .ngx-slider .ngx-slider-tick.ngx-slider-selected{background:#0db9f0}::ng-deep .ngx-slider .ngx-slider-tick-value{position:absolute;top:-34px;-webkit-transform:translate(-50%,0);transform:translate(-50%,0)}::ng-deep .ngx-slider .ngx-slider-tick-legend{position:absolute;top:24px;-webkit-transform:translate(-50%,0);transform:translate(-50%,0);max-width:50px;white-space:normal}::ng-deep .ngx-slider.vertical{position:relative;width:4px;height:100%;margin:0 20px;padding:0;vertical-align:baseline;touch-action:pan-x}::ng-deep .ngx-slider.vertical .ngx-slider-base{width:100%;height:100%;padding:0}::ng-deep .ngx-slider.vertical .ngx-slider-bar-wrapper{top:auto;left:0;margin:0 0 0 -16px;padding:0 0 0 16px;height:100%;width:32px}::ng-deep .ngx-slider.vertical .ngx-slider-bar{bottom:0;left:auto;width:4px;height:100%}::ng-deep .ngx-slider.vertical .ngx-slider-pointer{left:-14px!important;top:auto;bottom:0}::ng-deep .ngx-slider.vertical .ngx-slider-bubble{left:16px!important;bottom:0}::ng-deep .ngx-slider.vertical .ngx-slider-ticks{height:100%;width:0;left:-3px;top:0;z-index:1}::ng-deep .ngx-slider.vertical .ngx-slider-tick{vertical-align:middle;margin-left:auto;margin-top:11px}::ng-deep .ngx-slider.vertical .ngx-slider-tick-value{left:24px;top:auto;-webkit-transform:translate(0,-28%);transform:translate(0,-28%)}::ng-deep .ngx-slider.vertical .ngx-slider-tick-legend{top:auto;right:24px;-webkit-transform:translate(0,-28%);transform:translate(0,-28%);max-width:none;white-space:nowrap}::ng-deep .ngx-slider.vertical .ngx-slider-ticks-values-under .ngx-slider-tick-value{bottom:auto;left:auto;right:24px}::ng-deep .ngx-slider *{transition:none}::ng-deep .ngx-slider.animate .ngx-slider-bar-wrapper{transition:.3s linear}::ng-deep .ngx-slider.animate .ngx-slider-selection{transition:background-color .3s linear}::ng-deep .ngx-slider.animate .ngx-slider-pointer{transition:.3s linear}::ng-deep .ngx-slider.animate .ngx-slider-bubble{transition:.3s linear}::ng-deep .ngx-slider.animate .ngx-slider-bubble.ngx-slider-limit{transition:opacity .3s linear}::ng-deep .ngx-slider.animate .ngx-slider-bubble.ngx-slider-combined{transition:opacity .3s linear}::ng-deep .ngx-slider.animate .ngx-slider-tick{transition:background-color .3s linear}`],
- host: { class: 'ngx-slider' },
- providers: [NGX_SLIDER_CONTROL_VALUE_ACCESSOR]
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["NgZone"] }]; }, { value: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
- }], valueChange: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Output"]
- }], highValue: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
- }], highValueChange: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Output"]
- }], options: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
- }], userChangeStart: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Output"]
- }], userChange: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Output"]
- }], userChangeEnd: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Output"]
- }], sliderElementVerticalClass: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['class.vertical']
- }], sliderElementAnimateClass: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['class.animate']
- }], sliderElementWithLegendClass: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['class.with-legend']
- }], sliderElementDisabledAttr: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostBinding"],
- args: ['attr.disabled']
- }], manualRefresh: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
- }], triggerFocus: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
- }],
- /**
- * @param {?} event
- * @return {?}
- */
- onResize: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["HostListener"],
- args: ['window:resize', ['$event']]
- }], leftOuterSelectionBarElement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
- args: ['leftOuterSelectionBar', { read: SliderElementDirective }]
- }], rightOuterSelectionBarElement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
- args: ['rightOuterSelectionBar', { read: SliderElementDirective }]
- }], fullBarElement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
- args: ['fullBar', { read: SliderElementDirective }]
- }], selectionBarElement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
- args: ['selectionBar', { read: SliderElementDirective }]
- }], minHandleElement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
- args: ['minHandle', { read: SliderHandleDirective }]
- }], maxHandleElement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
- args: ['maxHandle', { read: SliderHandleDirective }]
- }], floorLabelElement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
- args: ['floorLabel', { read: SliderLabelDirective }]
- }], ceilLabelElement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
- args: ['ceilLabel', { read: SliderLabelDirective }]
- }], minHandleLabelElement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
- args: ['minHandleLabel', { read: SliderLabelDirective }]
- }], maxHandleLabelElement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
- args: ['maxHandleLabel', { read: SliderLabelDirective }]
- }], combinedLabelElement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
- args: ['combinedLabel', { read: SliderLabelDirective }]
- }], ticksElement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
- args: ['ticksElement', { read: SliderElementDirective }]
- }], tooltipTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChild"],
- args: ['tooltipTemplate']
- }] }); })();
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
- */
- class TooltipWrapperComponent {
- }
- TooltipWrapperComponent.ɵfac = function TooltipWrapperComponent_Factory(t) { return new (t || TooltipWrapperComponent)(); };
- TooltipWrapperComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({ type: TooltipWrapperComponent, selectors: [["ngx-slider-tooltip-wrapper"]], inputs: { template: "template", tooltip: "tooltip", placement: "placement", content: "content" }, decls: 2, vars: 2, consts: [[4, "ngIf"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "ngx-slider-inner-tooltip"]], template: function TooltipWrapperComponent_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](0, TooltipWrapperComponent_ng_container_0_Template, 2, 6, "ng-container", 0);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](1, TooltipWrapperComponent_ng_container_1_Template, 3, 3, "ng-container", 0);
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx.template);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);
- _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", !ctx.template);
- } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_5__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_5__["NgTemplateOutlet"]], styles: [".ngx-slider-inner-tooltip[_ngcontent-%COMP%]{height:100%}"] });
- TooltipWrapperComponent.propDecorators = {
- template: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"] }],
- tooltip: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"] }],
- placement: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"] }],
- content: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](TooltipWrapperComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Component"],
- args: [{
- selector: 'ngx-slider-tooltip-wrapper',
- template: `<ng-container *ngIf="template">
- <ng-template *ngTemplateOutlet="template; context: {tooltip: tooltip, placement: placement, content: content}"></ng-template>
- </ng-container>
- <ng-container *ngIf="!template">
- <div class="ngx-slider-inner-tooltip" [attr.title]="tooltip" [attr.data-tooltip-placement]="placement">
- {{content}}
- </div>
- </ng-container>`,
- styles: [`.ngx-slider-inner-tooltip{height:100%}`]
- }]
- }], null, { template: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
- }], tooltip: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
- }], placement: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
- }], content: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
- }] }); })();
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
- */
- /**
- * NgxSlider module
- *
- * The module exports the slider component
- */
- class NgxSliderModule {
- }
- NgxSliderModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineNgModule"]({ type: NgxSliderModule });
- NgxSliderModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjector"]({ factory: function NgxSliderModule_Factory(t) { return new (t || NgxSliderModule)(); }, imports: [[
- _angular_common__WEBPACK_IMPORTED_MODULE_5__["CommonModule"]
- ]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵsetNgModuleScope"](NgxSliderModule, { declarations: function () { return [SliderComponent, SliderElementDirective, SliderHandleDirective, SliderLabelDirective, TooltipWrapperComponent]; }, imports: function () { return [_angular_common__WEBPACK_IMPORTED_MODULE_5__["CommonModule"]]; }, exports: function () { return [SliderComponent]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](NgxSliderModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["NgModule"],
- args: [{
- imports: [
- _angular_common__WEBPACK_IMPORTED_MODULE_5__["CommonModule"]
- ],
- declarations: [
- SliderComponent,
- SliderElementDirective,
- SliderHandleDirective,
- SliderLabelDirective,
- TooltipWrapperComponent
- ],
- exports: [
- SliderComponent
- ]
- }]
- }], null, null); })();
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
- */
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
- */
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1zbGlkZXItbmd4LXNsaWRlci5qcyIsInNvdXJjZXMiOlsiQGFuZ3VsYXItc2xpZGVyL25neC1zbGlkZXIvb3B0aW9ucy50cyIsIkBhbmd1bGFyLXNsaWRlci9uZ3gtc2xpZGVyL3BvaW50ZXItdHlwZS50cyIsIkBhbmd1bGFyLXNsaWRlci9uZ3gtc2xpZGVyL2NoYW5nZS1jb250ZXh0LnRzIiwiQGFuZ3VsYXItc2xpZGVyL25neC1zbGlkZXIvdmFsdWUtaGVscGVyLnRzIiwiQGFuZ3VsYXItc2xpZGVyL25neC1zbGlkZXIvY29tcGF0aWJpbGl0eS1oZWxwZXIudHMiLCJAYW5ndWxhci1zbGlkZXIvbmd4LXNsaWRlci9tYXRoLWhlbHBlci50cyIsIkBhbmd1bGFyLXNsaWRlci9uZ3gtc2xpZGVyL2V2ZW50LWxpc3RlbmVyLnRzIiwiQGFuZ3VsYXItc2xpZGVyL25neC1zbGlkZXIvZXZlbnQtbGlzdGVuZXItaGVscGVyLnRzIiwiQGFuZ3VsYXItc2xpZGVyL25neC1zbGlkZXIvc2xpZGVyLWVsZW1lbnQuZGlyZWN0aXZlLnRzIiwiQGFuZ3VsYXItc2xpZGVyL25neC1zbGlkZXIvc2xpZGVyLWhhbmRsZS5kaXJlY3RpdmUudHMiLCJAYW5ndWxhci1zbGlkZXIvbmd4LXNsaWRlci9zbGlkZXItbGFiZWwuZGlyZWN0aXZlLnRzIiwiQGFuZ3VsYXItc2xpZGVyL25neC1zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC50cyIsIkBhbmd1bGFyLXNsaWRlci9uZ3gtc2xpZGVyL3Rvb2x0aXAtd3JhcHBlci5jb21wb25lbnQudHMiLCJAYW5ndWxhci1zbGlkZXIvbmd4LXNsaWRlci9zbGlkZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7a0JBS0UsTUFBRzs7c0JBRUgsT0FBSTs7S0FFSixRQUFLO3FCQUVMO0dBQUk7Y0FFSixZQUFTO3dCQVJUO0FBQUc7R0FFSCxJQUFJO1lBRUosS0FBSztrQkFFTCxJQUFJO3FCQUVKLFNBQVM7O1VBNkJYOzs7UUFHbUIsQ0FBQzs7K0NBSUYsSUFBSTs7cUJBSUosQ0FBQzs7OzsyREFLRyxJQUFJOzs7Ozt1QkFLSixJQUFJOzs7Ozs7O0tBTUYsS0FBSzs7cURBSVAsSUFBSTs7OztPQUlKLElBQUk7OztrQ0FJUSxJQUFJOzs7Ozs7d0JBT0ksSUFBSTs7Ozs7Ozs7O2NBUVosSUFBSTs7Ozs7Ozs7Ozs7OztJQTNGcEMsTUFBRztBQUNMO0FBQ0UsSUFBQSxPQUFJO0FBQ047QUFDRSxJQUFBLFFBQUs7VUFnR2lDLElBQUksZEEvRjVDO0FBQ0UsSUFBQSxPQUFJO0FBQ047QUFDRSxJQUFBLFlBQVM7QUFDVjtBQUVBLG9CQVhDLEdBQUc7K0JBdUdnQywvQkF0RzVCLG9CQUNQLElBQUk7QUFxR29DLEFBcEdoQyxvQkFDUixLQUFLO0FBQ0ksb0JBQ1QsSUFBSTtBQUNJLG9CQUNSLFNBQVM7QUFHRTtBQUFJO0FBQWtCO0FBMEJuQztBQUFnQjtBQUNIO0lBcUVnQixLQUFLLFRBckVUO0FBQ0s7QUFHbkI7QUFBWSxxQkFGSixDQUFDO0FBQ3BCO0FBQ1c7UUFxRXNCLEtBQUssYkFwRXRCO0FBQ0k7QUFFYixvQkFGVyxJQUFJO0FBQ3RCO0FBQ1c7a0JBb0VvQixLQUFLLHZCQW5FcEI7QUFDSTtBQUVWLG9CQUZRLENBQUM7QUFDbkI7QUFDVztjQW1FdUIsS0FBSyxuQkFsRXZCO0FBQ087QUFDSTtBQUVqQix3QkFGWSxJQUFJO0FBQzFCO0FBQ1c7NEJBa0U0QixJQUFJLGhDQWpFM0I7QUFDTztBQUNJO0FBRWpCLHdCQUZZLElBQUk7QUFDMUI7QUFDVztzQ0FpRTBCLEtBQUssM0NBaEUxQjs2REFtRWdCLEtBQUssbEVBbEVkO0FBQ087QUFHNUI7Y0FpRTRCLEtBQUssbkJBakVyQix5QkFGVSxLQUFLO0FBQzdCO0FBQ1c7OERBb0V1QixJQUFJLGxFQW5FdEI7QUFDSTtBQUVqQix3QkFGbUIsSUFBSTtBQUMxQjs2Q0FvRXVCLEtBQUssbERBbkVqQjtBQUNLO0FBQ0k7U0FvRUcsS0FBSyxkQWxFekIsd0JBRm1CLElBQUk7QUFDMUI7QUFDVztBQUNLO0FBQ0U7QUFBWSx5QkFBSSxJQUFJO0FBQ3RDO2dCQW1FaUMsRUFBRSxsQkFsRXhCO0FBQ0s7QUFDSztNQW9FWSxFQUFFLFJBbkVUO0FBRXhCO0FBQStCO0FBQVksNkJBQUgsSUFBSTtBQUM5QztBQUNXO3NCQW1Fc0IsR0FBRyx6QkFsRXBCO0FBQ007QUFDTTtnREFvRU0sR0FBRyxuREFuRUg7QUFFNUI7QUFFSjtBQUFZLHlCQUZvQixJQUFJO1VBb0VkLFZBbkV4QjtHQW1FNkIsSEFsRWxCOzZFQXFFbUIsS0FBSyxsRkFwRW5CO0FBQ007eUZBdUVBLElBQUksN0ZBdEVFO0FBRWxCO0FBQThCO0FBRWxCO01Bc0VLLElBQUksVkFwRTdCO0FBQVksMEJBRjBCLElBQUk7QUFDNUM7QUFDVztBQUNFO0FBQVksc0NBQVksS0FBSztBQUMxQzttRUF1RTBCLElBQUksdkVBdEVuQjtBQUNLO0FBQ0k7QUFBWSw4QkFBSCxLQUFLO0FBQ2xDO2dFQXVFNkMsSUFBSSxwRUF0RXRDO0FBQ0s7QUFDSTtBQUFZLGtDQUFDLEtBQUs7QUFDdEM7R0FzRW1ELElBQUksUEFyRTVDO0FBQ0U7QUFBWSxnQ0FBTSxLQUFLO0FBQ3BDO0FBQ1c7QUFDRTtTQXNFVSxLQUFLLGRBdEVILG1DQUFTLEtBQUs7QUFDdkM7QUFDVztBQUNJO0FBQ0k7QUFBWSx5Q0FBUSxJQUFJO0FBQzNDO0FBQ1c7QUFDSTtBQUNJO1lBc0V3RCxJQUFJLGhCQXRFaEQsc0NBQU0sS0FBSztBQUMxQztBQUNXO0FBQ0U7b0NBc0VnQyxwQ0F0RXBCLGlDQUFPLEtBQUs7QUFzRVksQUFyRWpEO0FBQ1c7QUFDQztBQUFZLCtCQUFNLEtBQUs7QUFDbkM7QUFDVztBQUNFO0FBQVksbUNBQVMsSUFBSTtBQUN0QztBQUNXO0FBQ0U7QUFBWSx3QkFBRixLQUFLO0FBQzVCO0FBQ1c7QUFDRTtBQUFZLHdCQUFGLEtBQUs7QUFDNUI7QUFDVztBQUNLO0FBQ0c7MEJBK0R1RCxJQUFJLDlCQS9EL0MsbUNBQUUsRUFBRTtBQUNuQztBQUNXO0FBQ0s7QUFDRztBQUFZLG1DQUFFLEVBQUU7QUFDbkM7QUFDVzthQW1FbUIsSUFBSSxqQkFsRWxCO0FBQ0c7QUFBWSxtQ0FBRSxHQUFHO0FBQ3BDO3NGQW9FbUIsQ0FBQyx2RkFuRVQ7QUFDSztBQUNHO0FBQVksb0NBQUcsR0FBRztBQUNyQztBQUNXO0FBQ0U7QUFBWSx5QkFBRCxLQUFLO0FBQzdCO0VBa0UwQixJQUFJLE5BakVuQjtBQUNFO0FBQVksK0JBQUssS0FBSztBQUNuQztBQUVLO0FBQ1Esd0JBQVMsSUFBSTtBQUMxQjt1RkFnRTJCLHZGQTlEdEI7RUE4RDBCLEZBN0RsQiw2QkFBYyxJQUFJO0FBQy9CO0FBQ1c7QUFDSztBQUNPO0FBQ0k7QUFFckIsMEJBRm9CLElBQUk7QUFDOUI7QUFDVzt5REEyRHFCLElBQUksN0RBMURwQjtBQUNJO0FBQVksNEJBQWEsSUFBSTtBQUNqRDtBQUNXO0FBQ0U7cUJBeURhLEtBQUssMUJBekROLGtDQUEwQixJQUFJO0FBQ3ZEO0FBQ1c7b0NBMERtQixLQUFLLHpDQXpEbkI7QUFDTztBQUNJO0FBRW5CLHdCQUZlLEtBQUs7QUFDNUI7K0RBMEQwQixLQUFLLHBFQXpEcEI7QUFDSztBQUNPO0FBQ087b0RBZ0VDLEtBQUssekRBL0RDO0FBRXpCO0FBQXFDO0FBQVksb0NBQWMsSUFBSTtBQUMvRTtJQStEaUMsSUFBSSxSQTlEMUI7QUFDRTtBQUFZLDRCQUFvQixJQUFJO0lBZ0UxQixLQUFLLFRBL0Q1QjtBQUNXO0FBQ0s7QUFDTztBQUNPO29CQWdFc0IsSUFBSSx4QkEvRG5CO0FBQ087QUFDTztBQUNJO21CQWlFSCxJQUFJLHZCQWpFVywrQkFBTyxJQUFJO0FBQzlFO0FBQ1c7QUFDSztBQUNPO0FBRWI7QUFDUztHQStEUyxFQUFFLExBOURWO0FBRUU7QUFFUDtBQUFZLCtCQUZHLElBQUk7QUFDbEM7c0ZBK0RzRCxJQUFJLDFGQTlEL0M7QUFDSztBQUNJO0FBRVgscUJBRlUsQ0FBQztVQStERyxWQTlEdkI7RUE4RDJCLEZBN0RoQjswR0FpRWlCLDFHQWhFWjtDQWdFZ0IsREEvRFQ7QUFDSTtBQUVyQiwyQkFGb0IsSUFBSTtBQUM5QjttRUFnRTJCLElBQUksdkVBL0RwQjtBQUNLO3lDQWtFZ0IsSUFBSSw3Q0FqRWI7QUFDSTtBQUV0Qiw0QkFGc0IsSUFBSTtBQUMvQjttQ0FrRTZCLElBQUksdkNBakV0QjttR0FvRWUsSUFBSSx2R0FuRWQ7cUVBc0VNLElBQUksekVBckVIO0FBQ0k7QUFFM0IsaUNBRmdDLElBQUk7Q0F1RVIsS0FBSyxOQXRFakM7R0F1RUMsSEF0RVU7QUFDRTtBQUFZLDJCQUFDLEtBQUs7QUFDL0I7Y0NsUEUsTUFBRyw4QkFFSCxNQUFHLHhERGlQTTtBQUNFO1dDcFBYLEdBQUcsZERvUG9CLCtCQUFLLEtBQUs7V0NsUGpDLFhEbVBGO0VDblBLLEZEb1BNO3FFRXZQWCx1QkFJQyw1RkZvUGU7QUFDSTtBQUFZLDJCQUFOLEtBQUs7QUFDL0I7QUFDVztBQUNLOzZCR3pQaEIsN0JIMFB1QjtBQUVYO0FBQ0s7MEJHNVBmLDFCSDZQbUI7R0c3UFosaUJBQWlCLENBQUMsS0FBVSwxQkgrUGhCO09HOVBqQixQSGdRUztFR2hRRixLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxuQ0hnUW5CLGdDQUZNLEtBQUs7QUc5UFksQ0FBQyxNQUM5QyxQSDhQSDtBQUNXO1VHN1BULFZIOFBXO0tHOVBKLGNBQWMsQ0FBQyxNQUFhLEVBQUUsTUFBYSxsQ0g4UDNCLGtDQUFRLElBQUk7TUc3UGpDLElBQUksVkg4UFI7SUc5UGMsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxjQUNuQyxPQUFPLEtBQUssQ0FBQyxVQUNkLHBFSDZQTTtJRzNQUCxLQUFLLFRINFBHO0NHNVBDLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLDlCSDRQMUIsd0JBQUQsS0FBSztDRzVQd0IsREg2UHBEO0dHNVBNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxrQkFDM0IsT0FBTyxLQUFLLENBQUMsY0FDZCw3RUgyUEk7UUcxUE4sU0FFRCxPQUFPLElBQUksQ0FBQyxNQUNiLG5DSHdQYTtxRkd0UGQsT0FBTyxxQkFBcUIsQ0FBQyxHQUFXLHJISHVQbkI7QUd2UHFCLE1BQWMsRUFBRSxSSHdQakM7RUd4UCtDLHFDQUN0RSx2Q0h1UG1DLHFDQUFhLElBQUk7RUd2UDlDLEtBQUssR0FBVyxWSHdQMUI7SUd4UGdDLEdBQUcsTUFBTSxDQUFDLFNBQ3RDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUMvQiwzREh1UFE7QUFDSzttQ0d0UGQsT0FBTyxrQkFBa0IsQ0FBQyxHQUFXLEVBQUUsTUFBYyxFQUFFLE1BQWMsWUFDbkUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsaEhIc1BEO0VHclBuQixNQUFNLEdBQUcsWEhzUGM7R0d0UFYsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsU0FDMUIsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLDFDSHFQa0IscUNBQWEsSUFBSTtBR3JQbEMsTUFBTSxDQUFDLENBQUMsUkhzUDlCOzhCR3JQSSxNQUFNLEtBQUssR0FBVyw1Q0hzUGY7QUd0UHFCLEdBQUcsTUFBTSxDQUFDLFNBQ3RDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUMvQix2REhxUGE7QUFDTztBQUNJO0dHclB6QixPQUFPLHFCQUFxQixDQUFDLGhDSHVQekIsOEJBRnNCLEVBQUU7S0dyUGdCLEVBQUUsUEhzUGhEO0NHdFA4RCxFQUFFLE1BQWMsWUFDMUUsT0FBTyxPQUFPLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLDFESHNQOUI7S0d0UG9DLENBQUMsTUFDN0MsWkhzUGE7QUFDSTtrQ0dyUGxCLE9BQU8sekNIcVB1QixvQ0FBc0IsSUFBSTtBQUMxRDtLR3RQMkIsQ0FBQyxPQUFlLEVBQUUsTUFBYyxFQUFFLE1BQWMsWUFDdkUsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsU0FDMUIsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsdEdIcVBuQjtBQUNFO3FCR3JQVCxNQUFNLDNCSHFQZSx5QkFBRixJQUFJO0NHclBaLEdBQVcsT0FBTyxYSHNQakM7R0d0UHFDLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsU0FDM0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQ3hCLG5FSHFQUTtBQUNLO1FHcFBkLFJIcVBrQjtHR3JQWCxhQUFhLENBQUMsVUFBa0IsRUFBRSw3QkhxUFgsOEJBQUosSUFBSTtHR3JQNkMsSEhzUDdFOzRCR3JQSSxNQUFNLFdBQVcsR0FBYSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBMEIsS0FBYSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyw1R0hzUGpIO0FBQ0U7cUJHclBULElBQUksekJIcVBpQiw2QkFBRSxJQUFJO1FHclBMLEdBQVcsWEhzUHJDO0FHdFBzQyxDQUFDLFNBQ25DLEtBQUssSUFBSSxLQUFLLEdBQVcsQ0FBQyxFQUFFLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLGNBQzlELElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLFdBQVcsQ0FBQyx2SEhxUGxDO2lCR3JQb0QsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRywzQ0hzUHpFO09HdFBvRixDQUFDLFJIdVBqRjtjR3ZQbUcsQ0FBQyxFQUFFLGtCQUNsSCxuQ0hzUHdCLGtDQUFBLElBQUk7QUFDcEM7Q0d2UDBCLEdBQUcsS0FBSyxDQUFDLGNBQzVCLFVBQ0YsU0FFRCxPQUFPLGtCQUFrQixDQUFDLE1BQzNCLEVBQ0YsN0VIa1BVO0FBQ0U7QUFBWSwrQkFBSSxJQUFJO0FBQ2pDO3VFSTFTQSx2RUoyU1c7QUFDRTtBQUFZLDRCQUFDLElBQUk7QUFDOUI7QUFDVztBQUNFO0FBQVksdUJBQUgsSUFBSTtHSTdTakIsT0FBTyxWSjhTaEI7VUk5UzRCLENBQUMsS0FBVSxZQUNuQyxJQUFJLG1CQUFDLE1BQWEsR0FBRSw1REo4U2I7S0k5U3VCLEtBQUssVkorUzFCO09JL1NtQyxFQUFFLGNBQzVDLE9BQU8sS0FBSyxuQ0o4U08sNkJBQUcsS0FBSztBQUNqQztBQUNJLENBREg7QUFDRDtFSWhUOEIsRkpnVDdCO1FJaFR1QyxDQUFDLFVBQ3BDLFNBRUQsNUJKNlNDO0NJN1NNLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLDdCSjZTQTtBQUFrRTtBQUFJO0FBQXNCO01JelMxSCxPQUFPLGJKeVN5STtBQUF1QixJQ3ZUOUssTUFBRztHR2NvQyxhQUNyQyxPQUFPLHZCSGRYO0FBQ0UsSUFBQSxNQUFHO0FBQ0o7R0dZVyxNQUFhLEdBQUUsY0FBYyxLQUFLLC9CSFg1Qyx3QkFKQSxHQUFHO0VHZWtELENBQUMsUUFFdkQsWEhoQlEsd0JBQ1AsR0FBRztBQUVHO0FBQUM7QUFBSTtBQUFrQztBQUFrRTtvQklOakgscEJIQ0E7QUFBc0IsQ0FJckI7QUFDRDtBQUFDO0FBQUk7QUFBa0M7QUFBa0U7RUdKdkcsRkhJMkc7S0dKcEcscUJBQXFCLENBQUMsS0FBYSxFQUFFLGNBQXNCLFlBQ2hFLE9BQU8sbkVIR3NHO0NHSG5HLERIR3VLO0VHSGxLLENBQUMsV0FBVyxDQUFDLGZGQ2hDO0FBQW9CO0NFRDBCLENBQUMsQ0FBRSxDQUFDLE1BQy9DLFZGQ0Y7QUFBd0I7QUFBbUI7QUFDMUMsSUFEQSxPQUFPLGlCQUFpQixDQUFDLEtBQVU7MkNFQ25DLE9BQU8sbERGRGdDLFFBQ3JDLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQ2pELEtBQUc7QUFDSDtVRUZxQyxDQUFDLEtBQWEsRUFBRSxNQUFjLHhCRkc1RDtDRUg4RCxjQUFzQixmRkczRDtBQUF5QjtBQUM5QztBRUhQLE1BQU0sS0FBSyxHQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLDNDRkdwQyxJQURqQixPQUFPLGNBQWMsQ0FBQyxNQUFhLEVBQUUsTUFBYTtBRUZJLFNBQ3BELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksNUNGQ2lCLFFBQ3BELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFO0VFRkcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMseEJGR2xFLFlBQU0sT0FBTyxLQUFLLENBQUM7R0VIb0QsR0FBRyxORkkxRSxTQUFLO0VFSjJFLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsTUFDbEcsN0JGSUgsUUFDSSxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwRCxZQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNuQyxnQkFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQixhQUFPO0dFTkwsSEZPRixTQUFLO0FFUEksWUFBWSxDQUFDLEtBQWEsRUFBRSxwQkZRckMsUUFDSSxPQUFPLElBQUksQ0FBQztJRVRrQyxKRlVsRCxLQUFHO0FFVmlELElBQVksSkZXaEU7UUVWSSxPQUFPLElBQUksQ0FBQyxwQkZXVDtDRVhZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLHhCRldiO0NFWGUsSUFBSSxDQUFDLENBQUMsTUFDL0MsRUFDRixmRlNxRDtBQUF5QjtBQUNuRTtBQUFRLElBRGxCLE9BQU8scUJBQXFCLENBQUMsR0FBVyxFQUFFLE1BQWMsRUFBRSxNQUFjO2lCR3RCMUUsakJIc0I4RTtBQUM3RCxRQUFiLE1BQU0sS0FBSyxHQUFXLE1BQU0sR0FBRyxNQUFNLENBQUM7b0JHdEJwQixJQUFJLHhCSHVCMUIsUUFBSSxPQUFPLENBQUMsR0FBRyxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDbEMsS0FBRztHR3ZCd0IsSUFBSSxQSHdCL0I7QUFDTzthR3hCOEIsSUFBSSxqQkh3Qlo7QUFBeUI7Q0d2QnJCLElBQUksU0FDcEMsZEhzQjhFO0FBQ2hFO0FBQVEsSUFEckIsT0FBTyxrQkFBa0IsQ0FBQyxHQUFXLEVBQUUsTUFBYyxFQUFFLE1BQWM7QUFBSSxRQUN2RSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztlSTdCeEIsZko4QkEsUUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QixRQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlCO21CSXRCQSxuQkpzQnlCLFFBQXJCLE1BQU0sS0FBSyxHQUFXLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDMUMsUUFBSSxPQUFPLENBQUMsR0FBRyxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDbEMsS0FBRztBQUNIO0VJeEJFLFlBQW9CLFFBQW1CLHRCSnlCbEM7UUl6QmUsYUFBUSxHQUFSLHhCSnlCVztPSXpCSCxDQUFXLE1BQ3RDLGRKd0J1RDtBQUF5QjtBQUN2RTtBQUFRLElBRGxCLE9BQU8scUJBQXFCLENBQUMsT0FBZSxFQUFFLE1BQWMsRUFBRSxNQUFjO0FBQUksUUFDOUUsT0FBTyxPQUFPLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxLQUFHO01JeEJNLE5KeUJUO3dCSXpCbUMsQ0FBQyx6QkowQjdCO1lJMUIrQyxFQUFFLFNBQWlCLHZCSjBCeEM7QUkxQjBDLFFBQThCLEVBQ25HLFZKeUJvRDtDSXpCM0IsREp5Qm9EO0FBQ3BFO0FBQVEsSUFEckIsT0FBTyxrQkFBa0IsQ0FBQyxPQUFlLEVBQUUsTUFBYyxFQUFFLE1BQWM7QUl2QnZFLElBQUksbUJBQW1CLENBQUMsVUFBVSxsQ0p1QnlDLFFBQzNFLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lJeEJhLElBQUksRUFBRSxjQUMzQyxPQUFPLC9CSndCYixRQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FJeEJiLENBQUMsbUJBQW1CLENBQUMsckJKeUJ0QztTSXpCbUQsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUMsbERKeUJuRSxRQUFyQixNQUFNLEtBQUssR0FBVyxPQUFPLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBSXhCMUQsQUp5QkwsUUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7RUl0QnZCLEZKdUJKLEtBQUc7RUl2Qk8sRkp3QlY7RUl4QmtCLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUMsekJKeUJqRDtLSXhCSCxRQUFRLENBQUMsU0FBUyxHQUFHLDFCSndCVztNSXhCRixDQUFDLFNBQy9CLGhCSnVCNkQ7S0l2QnJELENBQUMsTkp1QnVFO0lJdkJqRSxHQUFHLElBQUksT0FBTyxFQUFTLENBQUMsckJKd0J4QyxJQURELE9BQU8sYUFBYSxDQUFDLFVBQWtCLEVBQUUsVUFBa0M7SUlyQnpFLE1BQU0sVkpxQnVFO0NJckJ2RCxHQUEyQixDQUFDLEtBQVksbUJBQzVELFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQzdCLENBQUMsU0FDRiw3RUptQmEsUUFBYixNQUFNLFdBQVcsR0FBYSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBMEIsS0FBYSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztDSW5CM0csQ0FBQyxnQkFBZ0IsQ0FBQyxuQkpvQm5DO0dJcEI0QyxFQUFFLGdCQUFnQixFQUFFLEVBQUMsT0FBTyxFQUFFLGxDSnFCbEQsUUFBcEIsSUFBSSxrQkFBa0IsR0FBVyxDQUFDLENBQUM7RUlyQnVDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsU0FFN0YsUUFBUSxDQUFDLGdCQUFnQixHQUFHLDNESm9CaEMsUUFBSSxLQUFLLElBQUksS0FBSyxHQUFXLENBQUMsRUFBRSxLQUFLLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTthSW5COUQsYUFBYSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsVUFDakcsQ0FBQywxSEptQk4sWUFBTSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7Q0lqQnRILFFBQVEsQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLENBQUMseENKa0IzQyxnQkFBUSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7RUlsQmMsRkptQmpELGFBQU87RUlsQkEsSUFBSSxDQUFDLENBQUMsQ0FBQyxUSm1CZCxTQUFLO1VJbkJvQixDQUFDLGlCQUFpQixDQUFDLDdCSm9CNUMsUUFDSSxPQUFPLGtCQUFrQixDQUFDO0FBQzlCLEtBQUc7QUFDSCxDQUFDO0FBQ0Q7Q0l4QjRELENBQUMsRkp3QjVEO2NJdkJTLFlBQVksQ0FBQywzQkp1QmxCO1NJdkJrQyxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLHhESnVCOUM7QUFBa0U7Q0l0Qi9GLERKc0JtRztBSXRCaEcsQ0FBQyxTQUFRLENBQUMsbUJBQ2hCLGNBQ0EsU0FBUyxDQUFDLENBQUMsS0FBWSw1REpvQm1GO0FBQXFFO01JbkI5SyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsdEJIcEN4QjtJR3FDTyxDQUFDLENBQUMsTkhyQ21CO09HdUN4QixPQUFPLFFBQVEsQ0FBQyw4RUFHWCxyR0h6Q1I7VUd5QzJCLENBQUMsWEh6Q2tGO0FHeUN0RCxZQUNyRCxJQUFJLENBQUMsakJIekNjO0FBQW1CO0NHeUN0QixDQUFDLGlCQUFpQixDQUFDLHBCSHpDVyxJQUF6QyxPQUFPLFlBQVksQ0FBQyxLQUFVO0FHeUNhLENBQUMsa0JBQWtCLENBQUMsRUFBRSxjQUNwRSxhQUFhLENBQUMsbERIMUN1QixRQUN2QyxJQUFJLG1CQUFDLE1BQWEsR0FBRSxVQUFVLEtBQUssU0FBUyxFQUFFO0FHeUNaLENBQUMsV0FBVyxFQUFFLENBQUMsYUFDL0MsYUFBYSxDQUFDLDFDSHpDcEIsWUFBTSxPQUFPLEtBQUssWUFBWSxVQUFVLENBQUM7QUFDekMsU0FBSztFR3dDaUMsR0FBRyxJQUFJLENBQUMsVUFDekMsU0FFRCxJQUFJLENBQUMsbENIMUNULFFBQ0ksT0FBTyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQztDR3lDbkIsQ0FBQyxGSHhDckI7QUFFQztLR3NDcUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsY0FDeEQsM0NIdkNHO1dHdUNVLENBQUMsTUFBTSxsQkh0Q25CO0FHc0NvQixBSHRDRDtBR3NDUyxFQUFFLENBQUMsYUFDaEMsYUFBYSxDQUFDLE1BQU0sR0FBRyx2Q0h2Q0ssSUFBekIsT0FBTyx5QkFBeUI7RUd1Q1IsQ0FBQyxVQUM3QixTQUVELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLHZFSDFDUCxRQUMxQyxPQUFPLG1CQUFDLE1BQWEsR0FBRSxjQUFjLEtBQUssU0FBUyxDQUFDO0FBQ3hEO0FBRUEsQ0FEQztBQUNEO0FBQUM7Q0dzQ29FLENBQUMsRUFBRSxjQUNsRSxhQUFhLENBQUMsaENIdkNmO2NHdUMrQixFQUFFLENBQUMsYUFDakMsYUFBYSxDQUFDLGdCQUFnQixHQUFHLC9ESHhDQTtDR3dDSSxDQUFDLEZIeEM2RDtBQUFJO0lHeUN4RyxKSHpDNEc7QUFBc0M7QUNwQnZKO0FBQW1CO0FBQ2xCO0FBQXdCO0FBQWlDO0FBQzNDO29CRThETixtQkFBbUIsQ0FBQyxhQUFrQixFQUFFLHZERjlEMUIsSUFBckIsT0FBTyxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsY0FBc0I7TUU4REYsRUFBRSxRQUE4QixFQUM1RixnQkFBeUIsbENGL0R5QyxRQUNwRSxPQUFPLEVBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBRSxDQUFDO0FBQ2xELEtBQUc7QUFDSDtJRTZESSxNQUFNLFFBQVEsR0FBa0IsckJGNUQ3QjtDRTREaUMsYUFBYSxFQUFFLENBQUMsakJGNUR6QjtDRTZEM0IsUUFBUSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsaENGN0RxQjtRRThEcEQsUUFBUSxDQUFDLGpCRjlENEU7SUU4RHRFLEdBQUcsUEY3RGxCO0dFNkRzQixPQUFPLEVBQVMsQ0FBQyxrQ0FFdkMsTUFBTSxnQkFBZ0IsR0FBMkIseEVGL0R6QyxJQURWLE9BQU8sNEJBQTRCLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBRSxjQUFzQjtBRWdFckMsS0FBWSxtQkFDNUQseEJGakV5RjtPRWlFakYsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQzdCLENBQUMsU0FFRiwvQ0ZuRVksUUFBWixNQUFNLEtBQUssR0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0VFbUU1QyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxTQUU3RixRQUFRLENBQUMsekdGcEViLFFBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDckcsS0FBRztBQUNIO0dFa0UrQixHQUFHLFFBQVEsQ0FBQyxNQUFNLHJCRmpFMUM7V0VrRUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxsQkZsRWlCO0tFa0VOLENBQUMsTkZsRTZCO0FFa0VaLENBQUMsZ0JBQWdCLENBQUMsbEJGakUzRDtBQUFtQjtPRWtFVCxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsdENGbEVkLElBRDNCLE9BQU8sWUFBWSxDQUFDLEtBQWEsRUFBRSxLQUFhLEVBQUUsSUFBWTtDRW1FWixFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsZUFDM0UscERGcEV3RCxRQUNoRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUVtRW5DLENBQUMsREZsRWhCLEtBQUc7QUFDSCxDQUFDO0FBQ0Q7Q0VnRXdCLENBQUMsRkZoRXhCO2lCRWlFTSxjQUNBLC9CRmxFRjtNRWtFVyxDQUFDLENBQUMsS0FBWSxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUVyRCxPQUFPLFFBQVEsQ0FBQyxqRUZwRW1CO0FBQWtFO0dFc0V4RyxIRHBGRDtBQUFzQjtBQUNULHlCQUFTLElBQUk7QUFDMUIsc0JBQTJCLElBQUk7WUVKL0IsWkZLQSxrQ0FBcUMsSUFBSTtBQUN6QyxnQ0FBaUMsSUFBSTtBQUNyQztBQUNJLENBREg7QUFDRDtBQUFDO0FBQUk7NEJFK0NILFlBQXNCLE9BQW1CLEVBQVksUUFBbUIsRUFBWSwzREYvQy9DO0FBQWtFO0FDUHpHO0dDc0QySCxZQUFuRyxZQUFPLEdBQVAsT0FBTyxDQUFZLFNBQVksYUFBUSxHQUFSLFFBQVEsQ0FBVyxTQUFZLGpGRHREbEY7QUFFTztTQ29ENkYsR0FBbEIsWkQ1Q3RGO0VDNEN3RyxDQUFtQixIRDVDL0Y7cUJDRkUsQ0FBQyx0QkRHOUI7QUFBMkI7ZUNFRyxDQUFDLGhCREZJLElBQWxDLFlBQW9CLFFBQW1CO2lCQ09SLEtBQUssdEJETnRDLFFBRHNCLGFBQVEsR0FBUixRQUFRLENBQVc7QUFBQyxLQUN2QztBQUNIO0NDVStCLEtBQUssd0JBS1QsQ0FBQywvQkRkckI7d0JDb0JhLENBQUMsekJEcEJrQjt5QkN1QmhCLHpCRHZCNEM7T0N1Qm5DLHNCQUdmLEVBQUUsL0JEMUIyRTtBQUN2RTtBQzRCSixFQUFFLEZENUJxQjtrQkMrQnZCLEVBQUUsdUJBR0gsRUFBRSxnQ0FHd0IsRUFBRSwvRURwQzlDLElBRlMsMEJBQTBCLENBQUMsYUFBa0IsRUFBRSxTQUFpQixFQUFFLFFBQThCLEVBQ25HLGdCQUF5QjtFQ3dDM0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHBFRHhDbkM7R0N5Q2hDLHdDQS9DRCxJQUFJLC9DRE9rRCxRQUNwRCxJQUFJLG1CQUFtQixDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7QUNSbkMsYUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFDdkIsd0NBR0QsSUFBSSxTQUFTLDlGRElmLFlBQU0sT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQ0h4RixSRElKLFNBQUs7S0NKTSxJQUFJLENBQUMsVUFBVSxDQUFDLHJCREszQjtFQ0pHLHdDQUdELDFDREVzQixRQUNwQixNQUFNLFFBQVEsR0FBa0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztBQ0hsRCxVQUFVLGFBQ1osT0FBTyxJQUFJLENBQUMsbkNER2hCLFFBQUksUUFBUSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7TUNIUixDQUFDLE1BQ3pCLGJER0gsUUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxFQUFTLENBQUM7WUNBekMsSUFBSSxRQUFRLHhCRENkO1lDQUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQ3ZCLHhDREFxQixRQUFwQixNQUFNLGdCQUFnQixHQUEyQixDQUFDLEtBQVk7a0NDR2hFLElBQUksdENESG1FLFlBQ25FLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VDRXZCLEZERFgsU0FBSyxDQUFDO0lDRUYsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQ3BCLCtEQTJCRCw1RkQ3QkYsUUFBSSxhQUFhLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztDQzZCbEYsQ0FBQyxJQUFhLFlBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLDFDRDdCNUIsUUFDSSxRQUFRLENBQUMsZ0JBQWdCLEdBQUc7T0M2QjVCLElBQUksSUFBSSxFQUFFLGNBQ1IsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFDNUIsY0FBTSxjQUNMLElBQUksQ0FBQyxyR0RoQzZCLFlBQ2xDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO0FDK0JqRixHQUFHLEhEOUJ4QixTQUFLLENBQUM7Q0M4QjJCLENBQUMsVUFDN0IsTUFDRixsQkQvQkgsUUFDSSxRQUFRLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxDQUFDLE1BQU07SUNnQy9DLElBQUksYUFDRixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxNQUNsQiw1Q0RqQ0gsYUFBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQztlQ21DM0QsSUFBSSxhQUNGLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUNuQixPQUFPLFVBQ1IscEZEckNMLGNBQVUsWUFBWSxDQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO0VDdUNqRixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxNQUNsQix6QkR2Q0gsY0FBVSxHQUFHLENBQUMsU0FBUSxDQUFDO0FBQ3ZCLFNBQU87aUJDd0NMLFNBQVMsMUJEdkNYLGFBQU8sU0FBUyxDQUFDLENBQUMsS0FBWTtHQ3dDMUIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLHhCRHZDekIsWUFBUSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0N3Q2xCLFREdkNOLFNBQU8sQ0FBQyxDQUFDO0lDdUNJLEtBQUssQ0FBQyxVQUNkLHBCRHZDTCxRQUNJLE9BQU8sUUFBUSxDQUFDO0lDdUNoQixKRHRDSjtLQ3NDVyxMRHBDVjtDQ29DYyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsTUFDM0IsdEJEckNNO0FBQWdDO0FBQW1COzhCQ3VDMUQsOUJEdENELElBRFEsbUJBQW1CLENBQUMsYUFBNEI7QUN1QzVDLENBQUMsUUFBaUIsWUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FDMUIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLDVFRHpDcUMsUUFDekQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsRUFBRTtVQ3lDcEUsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsYUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyx0RER6Q3RCLFlBQU0sYUFBYSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lDMENoRCxjQUFNLGNBQ0wsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsakREMUN2QixZQUFNLGFBQWEsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7U0MyQ3hDLFREMUNOLFNBQUs7R0MwQ0ssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFVBQ2xCLE1BQ0YsaENEM0NILFFBQ0ksSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUU7NEJDNEM1RCxRQUFRLENBQUMsS0FBYSwxQ0QzQ3hCLFlBQU0sYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQzRDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFDckIsbkNENUNILFlBQU0sYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbEMsU0FBSzs4Q0M4Q0gsV0FBVyxDQUFDLEdBQVcsWUFDckIsSUFBSSw3RUQ5Q1IsUUFDSSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO0dDNkM1RCxDQUFDLFNBQVMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyw3Q0Q1Q3RELFlBQU0sYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Q0M0Q2lCLEVBQUUsY0FDcEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHpDRDVDOUIsWUFBTSxhQUFhLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0VDNENGLEVBQUUsQ0FBQyxMRDNDN0MsU0FBSztLQzRDQSxMRDNDTDtBQUVDO0FDMkNHLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQ3JCLDlCRDVDSztFQzRDRCxJQUFJLENBQUMsU0FBUyxFQUFFLGxCRDVDaUI7SUM2Q25DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLHZCRDdDNEM7Q0M2Q3ZDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQ3RDLHhCRDlDMkY7RUM4Q3JGLGNBQ0wsaEJEOUMwQjtDQzhDdEIsQ0FBQyxJQUFJLE5EN0NkO0NDNkNpQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUNwQyxNQUNGLHhDRC9DTSxJQUZBLG1CQUFtQixDQUFDLGFBQWtCLEVBQUUsU0FBaUIsRUFBRSxRQUE4QixFQUM1RixnQkFBeUI7QUNtRDdCLGtCQUFrQixsQkRuRGU7K0JDb0QvQixNQUFNLEdBQUcsR0FBZSwzQ0RuRGxCLFFBQU4sTUFBTSxRQUFRLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7Q0NtRHhCLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxTQUNyRCxJQUFJLHZDRG5EUixRQUFJLFFBQVEsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0dDbUR2QixDQUFDLFFBQVEsRUFBRSxjQUNqQixJQUFJLENBQUMsakNEbkRYLFFBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBUyxDQUFDO0VDbUR0QixHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsdkJEbEQxQztDQ2tENkMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQ3ZELGNBQU0seENEbERhLFFBQXBCLE1BQU0sZ0JBQWdCLEdBQTJCLENBQUMsS0FBWTtRQ21ENUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsdkNEbkRvQyxZQUNuRSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztDQ2tETSxDQUFDLElBQUksSUFBSSxWRGpEakQsU0FBSyxDQUFDO0dDaUQrQyxDQUFDLEtBQUssQ0FBQyxVQUN2RCxNQUNGLDhEQUdELFlBQVksQ0FBQyxyR0RyRGYsUUFDSSxRQUFRLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0VDb0R2RSxZQUN0QixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG5ERHBEekMsUUFDSSxRQUFRLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxDQUFDLE1BQU07V0NtRE0sRUFBRSxFQUFFLGNBQ3JELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxwRURuRDdDLGFBQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUM7U0NvRHhELFNBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsU0FDdEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLGNBQ2xCLElBQUksQ0FBQyx4RkR2RFgsY0FBWSxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUM7R0N1RHRFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsN0JEdEQzQyxjQUFZLEdBQUcsQ0FBQyxTQUFRLENBQUM7Q0N1RHBCLEREdERMLFNBQU87S0NzREksY0FDTCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLHZERHREMUMsYUFBTyxTQUFTLENBQUMsQ0FBQyxLQUFZLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FDdURwRCxNQUNGLGREdkRILFFBQ0ksT0FBTyxRQUFRLENBQUM7QUFDcEI7QUFFQSxDQURDO0FBQ0Q7QUFBQztnQkNxREMsaEJEckRHO0dDcURrQixhQUNuQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGxERHREQztBQUFrRTtDQ3NEOUMsRUFBRSxDQUFDLE1BQzNELFZBOUlIO0FBQStCO0FBQVE7QUFBMEI7QUFBMkI7QUFDN0Q7SUErSTdCLEVBQUUsQ0FBQyxTQUFpQixFQUFFLFFBQThCLEVBQUUsZ0JBQXlCLDVDQS9JMUMsSUFzRHJDLFlBQXNCLE9BQW1CLEVBQVksUUFBbUIsRUFBWSxrQkFBcUM7d0JBMEZ2SCxNQUFNLDlCQXpGVixRQUR3QixZQUFPLEdBQVAsT0FBTyxDQUFZO01BMEZ6QixHQUFrQixJQUFJLENBQUMsbUJBQW1CLGpDQTFGaEIsUUFBVyxhQUFRLEdBQVIsUUFBUSxDQUFXO0FBMEZiLG1CQUFtQixDQUMxRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxoREEzRnlDLFFBQVcsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtHQTJGaEYsRUFBRSxRQUFRLEVBQUUsZkEzRnFFLHlCQTlDOUYsQ0FBQztHQXlJd0MsQ0FBQyxDQUFDLFNBQ3JFLElBQUksQ0FBQyxuQkF6SVQsMEJBSStCLENBQUM7SUFxSVQsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFDcEMsMUJBcklILDJCQUlpQyxLQUFLO0FBQ3RDLHlCQUkrQixLQUFLO0FBQ3BDLHNCQUkyQixDQUFDO0FBQzVCLHVCQUtvQixDQUFDO0FBQ3JCLDBCQUV1QixTQUFTO0dBZ0g5QixTQUFTLENBQUMsU0FBaUIsdEJBL0c3QixvQkFFaUIsRUFBRTtBQTZHWSxRQUE4QixFQUFFLFZBNUcvRCxzQkFFbUIsRUFBRTtBQTBHbUUsQUF6R3hGLHNCQUVtQixFQUFFO1dBd0dqQixNQUFNLGpCQXZHVixxQkFFa0IsRUFBRTtBQXFHRixHQUFrQixJQUFJLENBQUMsbUJBQW1CLENBQUMsNUJBcEc3RCw4QkFFNEMsRUFBRTtvQkFrR3lDLENBQ2pGLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsdEVBbEd2RCxRQUVJLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN0RSxLQUFHO0tBK0ZvRSxDQUFDLENBQUMsUEE5RnpFO1FBK0ZJLElBQUksQ0FBQyxiQTlGRjtBQUFtQjtBQThGSCxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxoQkE5RkwsSUFqRGhDLElBQUksUUFBUTtDQWdKWCxEQWhKZ0IsUUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDMUIsS0FBRztBQUNIO0FBQ087TUE4SUwsTkE5SXdCO0NBOElyQixDQUFDLFNBQWtCLFhBN0l4QixJQUFFLElBQUksU0FBUzswQkE4SVgsSUFBSSw5QkE5SVksUUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzNCLEtBQUc7T0E0SW9CLFBBM0l2QjtBQTJJeUMsQUExSWxDO0FBQW1CO09BMkl0QixJQUFJLFhBM0kwQixJQUNoQyxJQUFJLFVBQVU7S0EwSVMsQ0FBa0IsU0FDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxoQ0EzSUEsUUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQzVCLEtBQUc7QUFDSDtFQXdJc0MsQ0FBQyxTQUFTLENBQUMsRUFBRSxmQXZJNUM7QUFBbUI7RUF3SXBCLGVBQWUsR0FBRyxwQkF4SVUsSUFDaEMsSUFBSSxRQUFRO0dBdUljLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLDNCQXZJakMsUUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7Q0FzSThDLERBckl4RSxLQUFHO0FBcUkwRSxLQUFLLENBQUMsTkFwSW5GO09Bb0k0RixLQUFLLFpBbkkxRjtFQW1JbUcsQ0FBQyxDQUFDLEpBbklsRjtTQW9JcEIsVEFuSUYsSUFBRixJQUFJLEtBQUs7UUFtSVksR0FBRyxJQUFJLENBQUMsaEJBbklmLFFBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBa0lzQixDQUFDLEhBakk5QyxLQUFHO0dBaUlpRCxDQUFDLENBQUMsTEFoSXREO0VBZ0kwRSxLQUFLLEtBQUssQ0FBQyxTQUFTLHRCQS9IdkY7SUErSDRGLFNBQVMsQ0FBQyxDQUFDLGZBL0hoRjtNQWdJekIsTkEvSFk7WUErSE4sWkE3SFYsSUFzQkMsYUFBYSxDQUFDLElBQWE7QUF3R3ZCLGVBQWUsR0FBRyxFQUFFLENBQUMsckJBeEdNLFFBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0NBd0d0QixpQkFBaUIsbEJBdkd2QixRQUFJLElBQUksSUFBSSxFQUFFO0NBdUdZLElBQUksQ0FBQyxjQUFjLENBQUMsVUFDekMsL0JBdkdMLFlBQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7QUF5RzdCLEtBQUssTEF4R1QsU0FBSztDQXdHVSxRQUFRLElBQUksYkF4R3JCLGFBQUs7ZUF3R2lDLEVBQUUsY0FDeEMsSUFBSSxDQUFDLHBDQXhHWCxZQUFNLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0FBQ2xDLFNBQUs7SUF1R3lCLENBQUMsTEF0Ry9CLEtBQUc7QUFDSDtVQXFHa0QsQ0FBQyxYQXBHNUM7QUFvR29ELENBQUMsQ0FBQyxGQW5HcEQ7SUFvR0osSkFwR1ksSUFEZixJQUFJO0FBdUdGLElBQUksQ0FBQyxjQUFjLEdBQUcsdEJBdkdmLFFBQ1AsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDckIsS0FBRztLQXFHc0MsQ0FBQyxOQXBHMUM7SUFxR0csSkFwR0k7QUFDRTtBQUFRLElBRGYsSUFBSTtJQXNHSSxjQUFjLGxCQXRHYixRQUNQLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtBQXNHckIsT0FBTyxXQUFXLENBQUMsbkJBckd2QixZQUFNLE9BQU87QUFDYixTQUFLO01Bb0dtQyxDQUFDLElBQUksQ0FBQyxaQW5HOUMsUUFDSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztJQWtHMkMsQ0FBQyxMQWpHakUsS0FBRztHQWlHa0UsSUFBSSxQQWhHekU7QUFnRzBFLGtCQUFrQixsQkEvRnJGO0FBK0ZzRixBQTlGNUY7R0E4RnVHLENBQUMsQ0FBQyxMQTlGakcsSUFEUCxTQUFTO0FBQUssUUFDWixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7ZUE1RXhCLFNBQVMseEJBNkVWLFlBQU0sT0FBTyxLQUFLLENBQUM7T0E3RVIsUEE4RVgsU0FBSztlQTdFSCxRQUFRLEVBQUUsekJBOEVaLFFBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQztBQUM5QixLQUFHO0lBL0U2QixKQWdGaEM7VUEvRUMsVkFnRk07QUFBMkI7QUFDdEI7QUFBUSxJQURsQixXQUFXLENBQUMsUUFBaUI7Z0JBdkZYLFVBQVUsMUJBdUZLLFFBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO09BeEZFLFNBQVMsaEJBeUZ6QyxRQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtFQXpGZ0MsaUJBQWlCLG5CQTBGekUsWUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNyQixZQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFNBQUs7QUFBQyxhQUFLO09BMURSLFdBQVcsU0FBQywzQkEyRGYsWUFBTSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztZQTNETyxaQTREOUIsWUFBTSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN2QixTQUFLO0lBMURGLEpBMkRILEtBQUc7QUFDSDtDQTVEYyxTQUFDLFZBNkRSO0lBN0QwQixKQTZERjtBQUNmO0dBM0RiLFdBQVcsZEEyRFUsSUFEdEIsUUFBUSxDQUFDLEtBQWE7Q0ExRFQsWUFBWSxiQTBEQyxRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QixLQUFHO01BekRBLE5BMERIO1NBMURjLFNBQUMsbEJBMkRSO1VBM0RzQixWQTJEQTtBQUFtQjtXQXhEN0MsV0FBVyx0QkF3RDBDLElBQ3RELFdBQVcsQ0FBQyxHQUFXO1FBekRWLGNBQWMsMkJBRzFCLFdBQVcsNURBc0RlLFFBQ3pCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUU7S0F2RDNDLGFBQWEsbEJBd0Q1QixZQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM3QyxTQUFLO0FBQ0wsUUFDSSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN6QixRQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtjQzdHeEIsMkJBTW1DLHpDRHdHbkMsWUFBTSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FDeEdBLEFEeUczQyxTQUFLO1lDekc0RCxaRHlHM0QsYUFBSztBQUNYLFlBQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6QyxTQUFLO0FBQ0wsS0FBRztBQUNIO0FBQ087QUFBbUI7V0MzRXhCLFlBQVksdkJEMkVvQixJQUNoQyxrQkFBa0I7R0M1RWEsRUFBRSxRQUFtQixFQUFFLGZENEUvQjtRQzVFb0UsWUFDekYsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsN0NENEVWLFFBQWYsTUFBTSxHQUFHLEdBQWUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7YUM1RVYsQ0FBQyxDQUFDLGZENkVqRCxRQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtTQy9HSCxLQUFLLHNCQUdSLEVBQUUsMEJBR0UsRUFBRSxsRUQwR3ZCLFlBQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVELFNBQUs7QUFBQyxhQUFLO09DeEdpQixFQUFFLDJCQUdSLEVBQUUsdENEc0d4QixZQUFNLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztHQ25HakMsRUFBRSxMRG9HN0IsU0FBSztBQUNMLEtBQUc7QUFDSDtXQ25HeUIsRUFBRSxiRG9HcEI7QUFBc0I7R0NqR0gsRUFBRSxMRGlHb0I7QUFBUSxJQUN0RCxZQUFZLENBQUMsR0FBVztHQy9GRCxFQUFFLDhCQUdGLEVBQUUsT0FReEIsNUNEb0YyQixRQUMxQixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFO21CQzNGekQsS0FBSyxhQUNILElBQUksQ0FBQyxPQUFPLENBQUMsbEREMkZqQixZQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM3QyxTQUFLO0NDNUZ5QixDQUFDLEtBQUssRUFBRSxDQUFDLE1BQ3BDLGhCRDRGSCxRQUNJLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQzFCLFFBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO09DbEl2QixTQUFTLFNBQUMsa0JBQ1QsM0NEa0lGLFlBQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQ2xJakMsRUFBRSxIRG1JWixTQUFLO1lDbkkwQixaRG1JekIsYUFBSztXQ2xJVixYRG1JRCxZQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUMsU0FBSztBQUNMLEtBQUc7QUFDSDtBQUNPO01DNUlhLE5ENElNO1FDNUlJLGdCQUFFLHhCRDRJRSxJQUFoQyxxQkFBcUI7R0M1SWtCLGdCQUFlLGlCQUFpQixwQ0Q0STdDLFFBQ3hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztBQUM5RCxLQUFHO0FBQ0g7dUJDeElHLHZCRHlJSTtNQ3pJTyxTQUFDLGZEeUlvQjthQ3pJSyxiRHlJc0I7R0N0STNELFdBQVcsZER1SVA7SUN2SVEsSkR1SVc7T0N2SUEsOEJBR3ZCLHJDRG9JK0IsSUFEaEMsRUFBRSxDQUFDLFNBQWlCLEVBQUUsUUFBOEIsRUFBRSxnQkFBeUI7QUNuSW5FLFNBQUMsZUFBZSx4QkRtSXVEO29DQ2hJbEYsV0FBVyxTQUFDLHVCQUF1QiwrQkFHbkMsV0FBVyxTQUFDLGxJRDhISSxRQUFmLE1BQU0sUUFBUSxHQUFrQixJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQzFFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztTQy9IekMsVERnSWhDLFFBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Q0M3SHBDLEREOEhILEtBQUc7TUM5SFcsTkQrSGQ7T0MvSGUsUERnSVI7Q0NoSThCLEREZ0lGO1FDN0hoQyxXQUFXLFNBQUMsNUJENkgrQztZQzdIM0IsWkQ4SG5DO0FBQW1CO29CQzNIaEIsV0FBVyxTQUFDLHhDRDJIWSxJQUR6QixTQUFTLENBQUMsU0FBaUIsRUFBRSxRQUE4QixFQUFFLGdCQUF5QjtNQzFIcEQsTkQwSHdEO2VDdkh6RixXQUFXLFNBQUMsb0JBQW9CLGtDQUdoQyxXQUFXLFNBQUMsb0JBQW9CLGpJRHFIaEIsUUFBZixNQUFNLFFBQVEsR0FBa0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDBCQUEwQixDQUNqRixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDekUsUUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN2QyxLQUFHO0FBQ0g7QUFDTztlRTVKUCxmRjZKRTtBQUFtQjtjRXRKYSxkRnNKTCxJQUQzQixHQUFHLENBQUMsU0FBa0I7RUVySmtCLHNCQUFzQix4QkZxSnBDO0FBQ1QsUUFBZixJQUFJLGVBQWUsQ0FBa0I7QUFDekM7QUFBeUIsUUFBckIsSUFBSSxpQkFBaUIsQ0FBa0I7MkJFakp6QyxZQUFZLE9BQW1CLEVBQUUsUUFBbUIseERGa0p0RCxRQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEVBQUU7Q0VsSkssa0JBQXFDLFlBQ3pGLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUMsdUJBTnRCLG5HRndKM0IsWUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFvQixLQUFLLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUM7R0V4SjdFLE9BTzVCLHdDQU5ELElBQUksS0FBSyxhQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUNwQixqR0ZzSkgsWUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQW9CLEtBQUssS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQztBQUM5RyxTQUFLO0FBQUMsYUFBSztBQUNYLFlBQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztBRWxKekIsUUFBUSxDQUFDLEtBQWEscUNBQ3BCLG5ERmtKSixZQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7RUVsSnRDLEZGbUpSLFNBQUs7WUVuSnVCLEdBQVksS0FBSyxDQUFDLFNBRTFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxsREZrSnhCLFFBQ0ksS0FBSyxNQUFNLFFBQVEsSUFBSSxpQkFBaUIsRUFBRTtlRWxKckMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMseERGbUpsRCxZQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRRWxKcEQsUkZtSlQsU0FBSztFRW5KUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0saENGb0ozQyxRQUNJLElBQUksQ0FBQyxjQUFjLEdBQUcsZUFBZSxDQUFDO0FBQzFDLEtBQUc7QUVySk8sSUFBSSxDQUFDLExGc0pmO0VFdEpvQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksakJGdUo1QjtFRXZKZ0MsQ0FBQyxIRnVKZDtJRXZKdUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLGRGdUp6QixJQUF4QixjQUFjO0tFdEpsQixvQkFBb0IsR0FBRyxJQUFJLENBQUMsVUFDN0IsU0FFRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyw1R0ZrSkYsUUFDekIsT0FBTyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzFHO0FFcEp3QyxBRnNKeEM7Q0V0SjJDLEtBQUssQ0FBQyxnRkFHN0MsSUFBSSxvQkFBb0IsRUFBRSxjQUN4QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxVQUMzQixNQUNGLG1EQTlCRixTQUFTLFNBQUMsa0JBQ1QsOU1GQUQsU0FBUyxTQUFDLGtCQUNULFFBQVEsRUFBRSxvQkFBb0IsY0FDL0I7R0VGUyxFQUFFLGtCQUFrQixjQUM3QixzRkFOc0MsVUFBVSxnQkFBRSxTQUFTLGdCQUFuRCxpQkFBaUI7OEVDQTFCLHlEQXlEc0IsS0FBSyx1QkFDWjtDQUFFLFVIbERYO2NHbURjLElBQUksbEJIbkRqQjtpQ0dvRHNCLElBQUksckNIcERQO1lHcURSLElBQUksaEJIbkRuQixZQVZpQixVQUFVO29CRzhETCxJQUFJLHhCSDlESyxZQUFGLFNBQVM7QUFBSSxZQUFXLGlCQUFpQjtBQUFHO0dHK0QxQyxJQUFJLHdCQUNuQixJQUFJLG5DSGhFd0Q7RUdpRTlFLENBRUQsMkRBQ29CLDlESG5FRyxzQkFpQ3BCLFdBQVcsU0FBQyxlQUFlO0dHa0NMLHVCQUNQLENBQUMsNEJBQ0ksQ0FBQyx4REhuQ25CLHlCQUVGLFdBQVcsU0FBQyxrQkFBa0I7WUdrQ1osQ0FBQywwQkFDRCxDQUFDLHhDSGxDakIsbUJBRUYsV0FBVyxTQUFDLFlBQVk7U0dpQ0wsQ0FBQyxTQUN0QixDQUVELHBCSG5DSyxxQkFFRixXQUFXLFNBQUMsY0FBYzsyREdxQ3BCLDNESHBDSixxQkFFRixXQUFXLFNBQUMsY0FBYztJR2tDYixPQUFPLENBQUMsQ0FBZSxFQUFFLENBQWUsWUFDcEQsSUFBSSxXQUFXLENBQUMsNUNIbENmLG9CQUVGLFdBQVcsU0FBQyxhQUFhO0VHZ0NTLEZIL0JqQztBRytCa0MsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQ3hFLE9BQU8sS0FBSyxDQUFDLFVBQ2Q7S0FDRCxJQUFJLFdBQVcsQ0FBQzthQUFpQixDQUFDLENBQUMsQ0FBQztJQUFLLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtLQUN6RSxPQUFPO0VBQUssQ0FBQyxVQUNkLFNBQ0QsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBRTdELENBRUQsaUJBQWtCLFNBQVEsV0FBVzs7O0VBSzVCLE9BQU8sT0FBTyxDQUFDLENBQWUsRUFBRSxDQUFlO01BQ3BELElBQUksV0FBVyxDQUFDO1FBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDO0tBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUU7R0FDeEUsT0FBTyxLQUFLLENBQUMsVUFDZDtJQUNELElBQUksV0FBVyxDQUFDO0lBQWlCLENBQUMsQ0FBQyxDQUFDLEtBQUs7QUFBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFO01BQ3pFLE9BQU8sS0FBSyxDQUFDLFVBQ2Q7R0FDRCxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUs7QUFBQyxDQUFDLEtBQUssZ0JBQ25CLENBQUMsQ0FBQztFQUFTLEtBQUssQ0FBQyxDQUFDLFNBQVMsZ0JBQzNCO0FBQUMsQ0FBQyxXQUFXLEtBQUssQ0FBQyxDQUFDO1FBQVcsQ0FBQyxRQUUxQztJQVVELE1BQU07U0FBaUMsR0FBUSxNQUM3QyxFSHBFSTtBQUFDO0dHb0VFLEhIcEVEO0NHb0VHLGlCQUFpQixsQkhwRWhCO2dER3NFVixXQUFXLEVBQUUsN0RIcEVRO0FBQ2M7Q0dtRVosQ0FBQyxNQUFNLGVBQWUsQ0FBQyxNQUM5QyxLQUFLLEVBQUUsSUFBSSxHQUNaLENBQUMsQ0FnREYsOUNGMUtBLDJCQU1tQyxTQUFRLHNCQUFzQjtBQUNqRTtBQUFRO0FBQTBCO0FBQ2Y7QUFHbkI7bURFOFY2QixuREY5VnJCLElBOEJOLFlBQVksT0FBbUIsRUFBRSxRQUFtQixFQUFFLGtCQUFxQztFRWdVN0MsRUFDMUIsWUFDQSxvQkFDQSxnQkFITyxwREYvVDdCLFFBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztXRStUWixHQUFSLFFBQVEsQ0FBVyx2QkY5VGhELHNCQW5Db0IsS0FBSztHRWtXSCxlQUFVLEdBQVYsckJGald0QixvQkFFaUIsRUFBRTtPRStWYSxVQUNWLGpCRi9WdEIsd0JBRXFCLEVBQUU7WUU2VmlCLEdBQWxCLGtCQUFrQixqQ0Y1VnhDLCtCQUU0QixFQUFFO1FFMlZSLFNBQUksR0FBSixJQUFJLHhCRjFWMUIseUJBRXNCLEVBQUU7QUFDeEIsOEJBRTJCLEVBQUU7QUFDN0IsNEJBRXlCLEVBQUU7QUFDM0IsNkJBRTBCLEVBQUU7QUFDNUIsNEJBRXlCLEVBQUU7YUU2SUYsSUFBSSxqQkY1STdCLDRCQUV5QixFQUFFO0FBQzNCLEtBT0c7QUFDSDtBQUNNO0FBQW1CO0FBQVEsSUFSL0IsS0FBSzswQkUySXNDLElBQUksWUFBWSwxQ0YzSWpELFFBQ1IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7QUUwSXdCLEFGekkvRCxLQUFHO0FBQ0g7bUlFNEk2QixJQUFJLHFHQUdnQixJQUFJLFlBQVksRUFBRSw3TUZwTGxFLFNBQVMsU0FBQyxrQkFDVCxRQUFRLEVBQUUsbUJBQW1CLGNBQzlCO3VMRXVMMkIsSUFBSSxPQUFPLEVBQUU7MkVBSWUsSUFBSSxZQUFZLEVBQUUsaUdBSXZCLElBQUksWUFBWSxFQUFFLHVHQUlmLElBQUk7SUFBWSxFQUFFLDRCQTRCeEMsS0FBSzttQkFJMEIsSUFBSSxPQUFPLEVBQW9CLDBCRmxPeEY7QUFBQztBRW1PZ0QsSUFBSSwwQ0FJTSw5Q0Z2T3ZDO0dFdU8yQyxPQUFPLEVBQXFCLFpGdE81RixZQVBlLFVBQVU7QUFBSSxZQUFGLFNBQVM7UUU4T2UsSUFBSSxaRjlPZixZQUFXLGlCQUFpQjtBQUFHO09FaVAzQyxJQUFJLFhGalAwQztDRW1QN0MsSUFBSSw2QkFFTCxJQUFJLE9BQU8sRUFBRSwvQ0ZwUHhCLHFCQU1uQixXQUFXLFNBQUMseUJBQXlCO1dFaVBBLENBQUMsbUNBRUgsQ0FBQyxoREZsUGxDLG1CQUVGLFdBQVcsU0FBQyxXQUFXOytCRW1Qc0IsSUFBSSxuQ0ZsUC9DLHVCQUVGLFdBQVcsU0FBQyxlQUFlO09Fa1BlLElBQUksOEJBRWYsS0FBSyx5QkFFWCxJQUFJLDNFRnJQM0IsOEJBRUYsV0FBVyxTQUFDLHVCQUF1QjtxQkVxUFAsSUFBSSxRQUFRLEVBQUUsbkNGcFB4Qyx3QkFFRixXQUFXLFNBQUMsaUJBQWlCO2tERTRTZSxLQUFLLHZERjNTL0MsNkJBRUYsV0FBVyxTQUFDLHNCQUFzQjtvQkUyU1MsS0FBSyw4Q0FFRix2RUY1UzVDLDJCQUVGLFdBQVcsU0FBQyxvQkFBb0I7RUUwU21CLDJDQUVULElBQUksMEJBR3hCLDNFRjlTcEIsNEJBRUYsV0FBVyxTQUFDLHFCQUFxQjtDRTRTVCxpQ0FDSyxFQUFFLGlDQUNGLEVBQUUsdkVGN1M3QiwyQkFFRixXQUFXLFNBQUMsb0JBQW9CO3NDRTRTUyxLQUFLLDNDRjNTNUMsMkJBRUYsV0FBVyxTQUFDLG9CQUFvQjtBQUMvQjtXRXlTMkMsS0FBSyx1Q0FDVixLQUFLO2VBU1IsS0FBSzs7Q0FFbkIsRUFBRSxxQ0FHMEIsSUFBSTs7b0JBQ1YsSUFBSSxvQ0FDTCxJQUFJLHdCQUV0QixLQUFLLGdDQUdVLElBQUk7d0JBR0ssSUFBSTsrQkFDTCxJQUFJLFVBT25EO0dBQUksQ0FBQztFQUFtQixHQUFHLElBQUksbUJBQW1CLENBQUM7RUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7R0FqS3BFLElBQWEsYUFBYSxDQUFDLGFBQWlDO1VBQzFELElBQUksQ0FBQztPQUF3QixFQUFFLENBQUMsU0FFaEMsSUFBSSxDQUFDO2tCQUF5QixHQUFHLGFBQWEsQ0FBQztBQUFTLENBQUMsb0JBQ3ZEO0tBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQzt5QkFBdUMsRUFBRSxDQUFDLENBQUM7Q0FDbEUsQ0FBQyxDQUFDLE1BQ0o7O2tCQUlELElBQWEsWUFBWSxDQUFDO0lBQWdDLFlBQ3hELElBQUksQ0FBQztlQUF1QixFQUFFLENBQUMsU0FFL0I7QUFBSSxDQUFDLHdCQUF3QixHQUFHLFlBQVk7QUFBQyxTQUFTLENBQUMsQ0FBQyxXQUF3QjtXQUM5RSxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQVcsQ0FBQyxDQUFDLFVBQ2hDLENBQUMsQ0FBQyxNQUNKOztFQUdVLEtBQUssYUFDZCxPQUFPLENBQUM7UUFBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FBSSxDQUFDLFdBQVcsQ0FBQztFQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztzQ0FnSDNGO01BQVMsYUFDbEIsQ0Y5U0U7QUFBQztBQUFDO0FFOFNHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLDNCRjlTMUI7dUNFOFVILFFBQVEsYUFDYixJQUFJLENBQUMsakVGN1VPO0FBSUc7TUV5VUMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDLFNBQ2pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG5ERG5YdkIsMEJBT2tDLFNBQVEsc0JBQXNCO0VDNFc5QixFQUFFLEpEM1dwQztBQzJXd0MsQ0FBQyxPQUFPLENBQUMsQ0FBQyxWRDNXMUM7QUFDUDtBQUNHO0FBR1E7QUFBUSxJQUFsQixZQUFZLE9BQW1CLEVBQUUsUUFBbUIsRUFBRSxrQkFBcUM7QUFDN0YsUUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2pELHNCQVAyQixJQUFJO0FBQy9CLEtBTUc7QUFDSDtBQUNPO0FBQW1CO01DdVd0QixJQUFJLENBQUMsWER0V1QsSUFURSxJQUFJLEtBQUs7WUMrV2lCLEVBQUUsQ0FBQyxTQUMzQix4QkRoWFksUUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7QUMrV2YsQ0FBQyxERDlXVCxLQUFHO0FBQ0g7TUM2VzRCLEVBQUUsQ0FBQyxURDVXeEI7QUFBd0I7QUFBbUI7SUNnWHpDLGVBQWUsbkJEaFhrQyxJQUl4RCxRQUFRLENBQUMsS0FBYTtVQzZXcEIsSUFBSSxDQUFDLGZEN1dtQjtFQzZXUCxFQUFFLENBQUMsU0FFcEIsSUFBSSxDQUFDLG5CRDlXVSxRQUFmLElBQUksb0JBQW9CLEdBQVksS0FBSyxDQUFDO1NDOFdMLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQywzQkQ3VzNELFFBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO2NDNFdzRCxDQUFDLENBQUMsU0FDNUUsSUFBSSxDQUFDLDlCRDVXVCxhQUFTLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0tDNFdSLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLDdDRDNXbEYsZ0JBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU07QUFDM0MsaUJBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTttQkM2V3ZELElBQUksQ0FBQyx4QkQ1V1QsWUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUM7S0M0V0gsRUFBRSxDQUFDLFJEM1dsQyxTQUFLO09DNldELElBQUksQ0FBQyxZQUFZLEdBQUcsM0JENVd4QixRQUNJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0VDMldJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQzNELElBQUksbEREM1dSLFFBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQzJXckMsQ0FBQyxLQUFLLEVBQUUsY0FDZCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyx0RUQzV3REO0dDMlcwRCxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQ2pFLHpCRDFXRixRQUFDLElBQUksb0JBQW9CLEVBQUU7R0MwV25CLGNBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyx0Q0QxVzNCLFlBQU0sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7R0MwV0QsQ0FBQyxKRHpXaEMsU0FBSztJQzBXQSxKRHpXTCxLQUFHO0FBQ0g7S0MwV0ksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsdUVBQzNCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQzNCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQzNCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLFNBQy9CLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQ3hCLElBQUksQ0FBQyw3TUQ5WVIsU0FBUyxTQUFDLGtCQUNULFFBQVEsRUFBRSxrQkFBa0IsY0FDN0I7YUM0WXVCLEVBQUUsQ0FBQyxTQUN2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxTQUN4QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsU0FDbkIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsU0FFNUIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsU0FFL0IsSUFBSSxDQUFDLEtEbFpIO0lDa1phLEdBQUcsSUFBSSxDQUFDLFpEbFpwQjtBQUFtQjtBQUNyQixZQVJrQyxVQUFVO0FBQUksWUFBRixTQUFTO3FCQzRaeEQsSUFBSSxDQUFDLElBQUksQ0FBQywvQkQ1WmtELFlBQXZELGlCQUFpQjtBQUFHO1VDNFpELEVBQUUsRUFBRSxjQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLENBQUMsVUFDekM7Ozs2QkFJSSxXQUFXLENBQUM7R0FBc0I7c0NBRXZDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsT0FBTyxZQUFTLEVBQUUsY0FDbkQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLFFEcmFFO0FBQUM7QUNzYTNCLEFEdGE0QjtBQUFJO0NDeWFqQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sVUFBTyxyRER6YWtCO0dDMGEvRCxIRHphNEM7QUN5YTNDLFdBQVcsQ0FBQyxaQTFhckI7Z0JBMGFzQyxDQUFDLGpCQXphbkM7SUF5YTBDLGNBQVcsRUFBRSxwQkF2YTFELHdCQXNEcUIsS0FBSztHQWtYckIsSUFBSSxDQUFDLFJBalhYLHFCQUFlLEVBQUU7TUFpWGlCLENBQUMsSUFBSSxDQUFDLFpBaFh4Qyx1QkFBb0IsSUFBSTtDQWlYaEIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLGtCQUNqQixwQ0FqWFIsZ0NBQTZCLElBQUk7T0FpWGhCLEVBQUUsSUFBSSxDQUFDLFNBQVMsdkJBaFhqQyxxQkFBa0IsSUFBSTtjQWlYZCxXQUFXLEVBQUUsS0FBSyxoQ0FoWDFCLDRCQUF5QixJQUFJO2dCQWlYckIsY0FBYyxFQUFFLEtBQUssckNBaFg3QixxQ0FBa0MsSUFBSTtRQWlYL0IsQ0FBQyxDQUFDLFVBQ0oscEJBalhMLHNCQUFtQixJQUFJO0FBQ3ZCO0FBRUcsQ0FGRjtBQUVEO2FBa1hTLGJBalhUO0lBaVhvQixhQUNoQixJQUFJLENBQUMsdEJBbFhXLHNCQUFBLEtBQUs7S0FrWEosRUFBRSxDQUFDLFNBRXBCLElBQUksQ0FBQyx0QkFuWFQscUJBQWtCLENBQUM7dUJBbVhlLEVBQUUsQ0FBQywxQkFsWHJDLDBCQUF1QixDQUFDO01BbVhwQixJQUFJLENBQUMsWEFsWFQsd0JBQXFCLENBQUM7a0JBa1hxQixFQUFFLENBQUMsckJBalg5Qyx3QkFBcUIsQ0FBQztHQWtYbEIsSUFBSSxDQUFDLFJBalhULHlCQUFzQixDQUFDO0FBQ3ZCO0FBRUcsQ0FGRjtPQWdYMkMsRUFBRSxDQUFDLFNBQzNDLG5CQS9XSjtHQStXUSxDQUFDLEpBOVdUO29CQThXaUMscEJBOVd6QjtDQThXMkIsQ0FBQyxTQUNoQyxJQUFJLENBQUMsaEJBOVdHO2tCQThXb0IsbEJBNVdyQjtDQTRXdUIsQ0FBQyxGQTVXTDtBQUFRLElBQTdCLE9BQU8sT0FBTyxDQUFDLENBQWUsRUFBRSxDQUFlO21DQWdYL0MsVUFBVSxDQUFDLEdBQVEsWUFDeEIsSUFBSSxHQUFHLFlBQVksaEZBalhxQyxRQUN4RCxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUU7Q0FnWGxELEVBQUUsY0FDeEIsSUFBSSxDQUFDLHRCQWhYWCxZQUFNLE9BQU8sS0FBSyxDQUFDO0NBZ1hILEdBQUcsR0FBRyxDQUFDLENBQUMsVEEvV3hCLFNBQUs7QUErV29CLENBQUMsYUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFDekIsY0FBTSxjQUNMLElBQUksQ0FBQyxqRkFqWFgsUUFBSSxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUU7Q0FpWC9ELEdBQUcsR0FBRyxDQUFDLFVBQ2xCLGxCQWpYTCxZQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLFNBQUs7QUFDTCxRQUFJLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUM5RDtBQUVBLENBREM7bUJBZ1hHLElBQUksQ0FBQyx4QkE5V1QsaUJBQWtCLFNBQVEsV0FBVztPQThXTCxQQTdXaEM7QUE2V2lDLElBQUksQ0FBQyxjQUNoQyxuQkE5V0U7R0E4V0csRUFBRSxJQUFJLENBQUMsS0FBSyxmQTlXTTtRQStXdkIsU0FBUyxqQkEvV21DO0FBK1dqQyxJQUFJLENBQUMsTEEvVytDO01BK1d0QyxjQUN6QixwQkEvV0QsSUFHSSxPQUFPLE9BQU8sQ0FBQyxDQUFlLEVBQUUsQ0FBZTtJQTRXdkMsRUFBRSxLQUFLLGNBQ2xCLGNBQWMsRUFBRSxLQUFLLFVBQ3RCLENBQUMsQ0FBQywxREE5V3FELFFBQ3hELElBQUksV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM5RSxZQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLFNBQUs7bUJBK1dJLGdCQUFnQixDQUFDLGdCQUFxQixZQUMzQyxJQUFJLENBQUMsckVBL1dULFFBQUksSUFBSSxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEtBQUssV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFO0FBK1d0RCxHQUFHLGdCQUFnQixDQUFDLHBCQTlXN0MsWUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixTQUFLO0FBQ0wsUUFBSSxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUs7NEJBZ1hyQiw1QkEvV1QsWUFBVyxDQUFDLENBQUMsU0FBUyxLQUFLLENBQUMsQ0FBQyxTQUFTO0VBK1daLENBQUMsaUJBQXNCLFlBQzdDLElBQUksQ0FBQyxyQ0EvV1QsWUFBVyxDQUFDLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUM7QUFDM0M7QUFFQSxDQURDO0NBNld5QixHQUFHLEpBNVc3QjtJQTRXOEMsQ0FBQyxMQW5XL0MsTUFBTSxpQ0FBaUMsR0FBUTtBQUMvQyxJQUFFLE9BQU8sRUFBRSxpQkFBaUI7SUFzV25CLGdCQUFnQixDQUFDLFVBQW1CLFlBQ3pDLElBQUksQ0FBQyxoREF0V1Q7Q0FzV29CLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxTQUN2QyxJQUFJLENBQUMsdENBdFdQLElBQUEsV0FBVyxFQUFFLFVBQVUsQ0FBQyxNQUFNLGVBQWUsQ0FBQztLQXNXcEIsRUFBRSxDQUFDLFJBclcvQixJQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxDQUFDO0FBZ0RGO0FBQXdCOzBCQXdUZiwxQkF4VHVCO09Bd1RmLENBQUMsS0FBVSxZQUN4Qix6QkF6VHVEO0FBeVRuRCxDQUFDLERBelQrRTtHQXlUeEMsRUFBRSxDQUFDLE1BQ2hELFpBelRjO0FBQXVCO2lEQTJUOUIsakRBM1RzQyxnQkE4TG5CLFFBQW1CLEVBQzFCLFlBQ0Esb0JBQ0E7ZUEwSG9CLENBQUMsUUFBaUIseEJBMUg5QixRQUhELGFBQVEsR0FBUixRQUFRLENBQVc7RUE4SDVDLElBQUksQ0FBQyw0QkFBNEIsbkNBOUhZLFFBQzNCLGVBQVUsR0FBVixVQUFVO0FBNkhRLElBQUksQ0FBQyx1QkFBdUIsY0FDL0QsSUFBSSxDQUNILC9DQS9INEIsUUFDWix1QkFBa0IsR0FBbEIsa0JBQWtCO2FBOEhkLENBQUMsV0FBVyx6QkE5SEksUUFDcEIsU0FBSSxHQUFKLElBQUk7QUE2SGEsT0FBTyxDQUFDLFJBN0huQjtBQUtWLHFCQXBNTyxJQUFJO0FBQzdCO1FBOFRNLE1BQU0sQ0FBQyxDQUFDLFdBQTZCLEtBQUssQ0FBQyxXQUFXLENBQUMsN0NBN1R2RCwyQkFDdUMsSUFBSSxZQUFZLEVBQUU7U0E0VFMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFDbEcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsZ0JBQ25DLHBHQTdUWjtBQTZUd0IsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEVBQUUseEJBM1QzQyx5QkFDd0IsSUFBSTtBQTBUc0IsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLGVBQ25FLEdBQUcsQ0FBQyxTQUFRLENBQUMsdERBMVR6QjtLQTJUSyxjQUNBLFNBQVMsQ0FBQyxDQUFDLFdBQTZCLEtBQUssSUFBSSxsREEzVGhELCtCQUMyQyxJQUFJLFlBQVksRUFBRTtBQTBUWixxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLHBDQXpUM0Y7K0NBNFRVLGlDQUFpQyxDQUFDLFFBQWlCLHpGQTFUeEQ7RUEyVEQsSUFBSSxDQUFDLDZCQUE2QixwQ0F6VHRDLHVCQUE0QixJQUFJLE9BQU8sRUFBRTtDQXlUQSxJQUFJLENBQUMsd0JBQXdCLGNBQy9ELElBQUksQ0FDSCxvQkFBb0IsckVBMVQ1QjtBQTBUNkIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUN6QyxDQUFDLENBQUMsV0FBVyxDQUFDLHBDQXpUakIsK0JBQ21ELElBQUksWUFBWSxFQUFFO0VBd1RuQyxDQUFDLFFBQVEsQ0FBQyxnQkFDckMsWUFBWSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsRUFBRSxoRUF4VGhEO0VBd1R1RCxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsZUFDbkUsR0FBRyw3Q0F2VFYsMEJBQzhDLElBQUksWUFBWSxFQUFFO0FBc1RyRCxTQUFRLENBQUMsbUJBQ2xCLGNBQ0EsU0FBUyxDQUFDLENBQUMsV0FBOEIsS0FBSyx0RUF2VHJEO0VBdVR5RCxDQUFDLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsMUNBclQ1Riw2QkFDaUQsSUFBSSxZQUFZLEVBQUU7QUFDeEUsMEJBMkJnQyxLQUFLO01BMlIzQix1QkFBdUIsYUFDN0IsSUFBSSw5Q0EzUlIsdUNBRytELElBQUksT0FBTyxFQUFvQjtXQXdSbkUsQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLHpDQXZSekQsNENBQXVELElBQUk7S0F3UnJELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsTUFBWSxwREF2UjNELHdDQUdpRSxJQUFJLE9BQU8sRUFBcUI7Q0FvUmxDLENBQUMsdUNBQXVDLEVBQUUsQ0FBQyxDQUFDLDdDQW5SM0csNkNBQXdELElBQUk7T0FvUnRELElBQUksQ0FBQyxjQUFjLENBQUMsM0JBblIxQiw0QkFFaUMsSUFBSTtBQWlSSixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsaENBaFJqRSw2QkFDa0MsSUFBSTtPQWdSakMsUEEvUUwsMkJBQ2lDLElBQUksT0FBTyxFQUFFO1dBaVJwQyx5QkFBeUIscENBaFJuQyxtQ0FFd0MsQ0FBQztXQStRckMsSUFBSSxtQkFBbUIsQ0FBQyxuQ0E5UTVCLGlDQUNzQyxDQUFDO3dCQTZRYyxFQUFFLElBQUksSUFBSSxDQUFDLG5DQTVRaEUsc0NBRWdELElBQUk7S0EwUTBCLEtBQUssSUFBSSxFQUFFLGNBQ25GLElBQUksQ0FBQyxuQ0ExUVgsbUNBQzZDLElBQUk7UUF5UXhCLENBQUMsVUFBVSxFQUFFLENBQUMsdEJBeFF2Qyw0QkFDa0MsS0FBSztBQXdRakMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsM0JBdlFqQyx1QkFDNEIsSUFBSTtRQXVRM0IsUkF0UUwsd0JBQytCLElBQUksUUFBUSxFQUFFO2NBd1FuQyxpQkFBaUIsL0JBdlEzQjtLQXdRSSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyw3Q0FyUW5DLDBDQXNEc0MsS0FBSztlQStNVyxDQUFDLEVBQUUsY0FDNUQsSUFBSSxDQUFDLHJDQS9NWCx5Q0FDOEMsS0FBSztRQThNckIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsbENBN014RCw0Q0FDaUQsS0FBSztFQTRNcUIsQ0FBQyxDQUFDLGFBQ3ZFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyw1Q0E1TWpDLHlDQUM2QyxJQUFJO0NBMk1aLENBQUMsVUFDakMsWkEzTUwsd0JBRXlCLEVBQUU7OEJBNE1qQiw5QkEzTVYsK0JBQWdDLEVBQUU7V0EyTVIsYUFDdEIsSUFBSSxDQUFDLDdCQTNNVCwrQkFBZ0MsRUFBRTtLQTJNZCxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyw3QkExTTVDLHVDQUE0QyxLQUFLO0NBME1hLENBQUMsRUFBRSxjQUMzRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsM0NBMU0vQiwwQ0FBK0MsS0FBSzthQTBNRixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLHZDQXpNNUUscUNBQTBDLEtBQUs7UUEwTXpDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsdkNBek1yQyxpQ0FRdUMsS0FBSztTQWtNdkMsVEFqTUwscUJBQ3lCLEVBQUU7OEJBbU1qQiw5QkFsTVYsbUNBRXFELElBQUk7dUJBZ01iLGFBQ3hDLElBQUkseENBaE1SLG1DQUErQyxJQUFJO0FBZ00xQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLG5DQS9MNUMsa0NBQThDLElBQUk7dUJBK0xzQixDQUFDLEVBQUUsMUJBOUwzRSxzQkFDNEIsS0FBSztXQThMM0IsSUFBSSxDQUFDLGhCQTdMWCw4QkFFMkMsSUFBSTtRQTJMUixDQUFDLFdBQVcsRUFBRSxDQUFDLGFBQ2hELHBDQTNMTixpQ0FFb0QsSUFBSTtDQXlMOUMsQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLHJDQXhMOUMsZ0NBQW1ELElBQUk7QUF3TFIsVUFDMUMsOENBR0sseERBM0xWLFFBTUksSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3RFO0FBRUM7RUFrTDRDLGFBQ3pDLElBQUksQ0FBQyxXQUFXLC9CQW5MWDtBQW1MWSxpQkFBaUIsQ0FBQyxsQkFsTHBCO0dBa0x3QixDQUFDLEpBakxsQzt5QkFpTCtELENBQUMsRUFBRSw1QkFqTDFELElBdEtoQixJQUFhLGFBQWEsQ0FBQyxhQUFpQztHQXdWeEQsSUFBSSxDQUFDLDZCQUE2QixDQUFDLHRDQXZWekMsUUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQXVWZ0IsRUFBRSxDQUFDLGFBQ2pELElBQUksQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUMsbEVBdlZoRCxRQUNJLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO0dBdVZ4RCw4Q0FHSyx3QkFBd0IsekVBelZsQyxZQUFNLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxDQUFDLENBQUM7UUEwVm5FLFJBelZKLFNBQUssQ0FBQyxDQUFDO0FBeVZDLENBQUMsREF4VlQsS0FBRztNQXdWaUIsQ0FBQyxQQXZWckI7Z0JBdVZzQyxDQUFDLElBQUksQ0FBQyx0QkF0VnJDO2dCQXNWOEQsQ0FBQyxqQkF0VmhDO0FBc1ZrQyxBQXJWeEQ7TUFzVlYsSUFBSSxDQUFDLHlCQUF5QixwQ0F0VlosSUFDdEIsSUFBYSxZQUFZLENBQUMsWUFBZ0M7QUFxVnZCLFdBQVcsRUFBRSxDQUFDLGFBQzdDLElBQUksQ0FBQyxoQ0FyVlgsUUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztpQkFxVkMsR0FBRyxJQUFJLENBQUMsVUFDdkMsOENBR0ssakZBeFZWLFFBQ0ksSUFBSSxDQUFDLHdCQUF3QixHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUF3QjtzQkF1Vm5ELGFBQzdCLElBQUksQ0FBQyx4Q0F2VlQsWUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BdVZqQixDQUFDLFJBdFZyQixTQUFLLENBQUMsQ0FBQztBQUNQLEtBQUc7T0FxVm1DLFBBcFZ0QztBQW9WdUMsSUFBSSxDQUFDLExBblZyQztBQUFtQjtFQW1WMEMsQ0FBQyxFQUFFLExBblZyQyxRQUNyQixLQUFLO0NBbVZaLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxhQUM1QyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFVBQ3RDLHpHQXJWa0IsUUFDbkIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hHO0FBRUM7QUFBUTtBQUFtQjtBQUFRLFFBNkd2QixTQUFTO1NBdU9aLGlCQUFpQixDQUFDLFdBQXdCLHRDQXZPekIsUUFDdkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztBQUN0QztDQXNPSSxJQUFJLExBcE9QO1FBb09rQixLQUFLLGJBcE9mO0tBb08wQixDQUFDLE5BcE9SO0NBb09XLEVBQUUsSEFwT0wsSUE2QjNCLFFBQVE7QUF3TVgsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFDOUIsdkNBek1pQixRQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7V0F3TTFCLElBQUksV0FBVyxLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUUsaERBdk1oRCxRQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7T0F3TTVDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQzlCLFNBQ0QsT0FBTyxJQUFJLENBQUMsbkVBek1oQjthQTRNVSx1QkFBdUIsYUFDN0IsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssckZBM01yQztBQTJNZ0QsQ0FBQyxHQUFHLEVBQUUsY0FDbkQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQzFCLHZEQTVNRTtBQTRNSSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsL0JBM00vQixRQUFQLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0FBMk1nQixXQUFXLENBQUMsR0FBRyxFQUFFLGNBQzFELC9CQTNNTixRQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0VBMk1sQixGQTFNYjtBQTBNaUIsQ0FBQyxEQXhNakI7TUF3TThCLENBQUMsVUFDM0IsakJBek1JO09BME1MLFBBMU13QjtNQTBNakIsSUFBSSxDQUFDLFhBek1ULElBQUUsZUFBZTtBQUFLLFFBQ3pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztpQ0EyTWQscUJBQXFCLENBQUMsVUFBa0IsWUFDOUMsSUFBSSxqRkEzTVIsUUFDSSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO09BME03RCxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUFFLGNBQzdDLE9BQU8sR0FBRyxDQUFDLFVBQ1osU0FFRCxuRkE3TUosUUFBSSxJQUFJLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBNk0xRSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxqRkE1TXpGO2dCQTRNK0csRUFBRSxjQUMzRyxoQ0EzTUgsUUFBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztBQTJNckIsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxuRUExTWhGLFFBQ0ksSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBeU1rQixVQUM1RSxTQUNELG5CQTFNSixRQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQTBNVCxDQUFDLFVBQVUsQ0FBQyxaQXpNdkIsWUFBTSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0E0TTVELFRBM01WLFNBQUs7QUFBQyxhQUFLO0tBMk1vQixDQUFDLFNBQWlCLFlBQzdDLElBQUksQ0FBQyxoQ0EzTVQsWUFBTSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQTJNWixDQUFDLExBMU1yQixTQUFLO1lBME1pQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLHZGQXpNakgsUUFDSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztHQXlNekIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLDVCQXhNL0IsUUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztDQXdNUyxDQUFDLENBQUMsVUFDckMsU0FDRCxPQUFPLDdCQXpNWCxRQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0VBeU1YLENBQUMsSEF4TXJCLFFBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDbkMsUUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztNQTBNbEIsWUFBWSxDQUFDLFdBQW1CLDlCQXpNMUMsUUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDM0IsUUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztFQXlNeEIsTUFBTSxJQUFJLEdBQXlCLElBQUksQ0FBQyxwQkF4TTVDLFFBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0dBd01nQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyw1QkF2TWhGLFFBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7QUF3TTVCLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyx2Q0F2TTNDLFFBQ0ksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7R0FzTVksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLHpCQXJNckUsUUFDSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzt1Q0F1TWpCLGVBQWUsYUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGhIQXZNakQ7UUF1TTZELENBQUMsQ0FBQyxTQUMzRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsbkNBdE1qQixRQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUU7V0F1TTFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGpDQXRNNUIsWUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLENBQUM7Q0FzTUcsQ0FBQyxJQUFJLENBQUMsUEFyTXZELFNBQUs7QUFDTDtJQW9Nb0UsQ0FBQyxDQUFDLE5BbE1yRTtRQW1NSSxTQUVELElBQUksQ0FBQyx0QkFyTUE7QUFDQztDQW9NdUIsQ0FBQyxJQUFJLENBQUMsUEFwTVY7YUFxTXZCLEtBQUssRUFBRSxJQUFJLENBQUMsekJBck1tQixJQUE1QixXQUFXLENBQUMsT0FBc0I7R0FxTXBCLGNBQ2pCLFNBQVMsRUFBRSxJQUFJLENBQUMsakNBdE15QjtJQXNNaEIsY0FDekIsa0JBQWtCLEVBQUUsSUFBSSxjQUN4Qix4REF2TTBCLFFBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsT0FBTyxZQUFTLEVBQUU7Q0FzTXhDLEVBQUUsS0FBSyxVQUNuQixDQUFDLENBQUMscEJBdE1QLFlBQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQzdCLFNBQUs7QUFDTDtBQUVHLFFBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLFVBQU87QUFDckQsWUFBUSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLGNBQVcsRUFBRTtBQUMzRCxZQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUM7QUFDeEMsZ0JBQVEsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO0FBQ3pCLGdCQUFRLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztBQUNqQyxnQkFBUSxXQUFXLEVBQUUsS0FBSzthQW1NdEIsSUFBSSxDQUFDLGxCQWxNVCxnQkFBUSxjQUFjLEVBQUUsS0FBSztHQWtNRyxDQUFDLElBQUksQ0FBQyxUQWpNdEMsYUFBTyxDQUFDLENBQUM7T0FrTUgsUEFqTU4sU0FBSztFQWlNTSxFQUFFLEpBaE1iO0VBZ01pQixDQUFDLEhBOUxqQjtBQThMc0IsY0FDakIsZEEvTEc7SUErTE0sRUFBRSxOQTlMZDtFQThMa0IsQ0FBQyxTQUFTLFpBOUxwQixJQUFGLFdBQVc7TUErTGQsV0FBVyxFQUFFLEtBQUsseEJBL0xDLFFBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQStMbEIsY0FBYyxFQUFFLElBQUksVUFDckIsQ0FBQyxDQUFDLHpDQS9MUCxRQUNJLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0FBQ3JDLFFBQUksSUFBSSxDQUFDLGtDQUFrQyxFQUFFLENBQUM7d0JBaU1wQyxxQkFBcUIsQ0FBQyw5Q0FoTWhDLFFBQUksSUFBSSxDQUFDLG1DQUFtQyxFQUFFLENBQUM7S0FnTWMsTEEvTDdELFFBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7Q0FnTWhDLE1BQU0scUJBQXFCLEdBQWdCLElBQUksQ0FBQyxwQ0EvTHBELFFBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDbkM7QUFFQztFQTRMdUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxoQkE1TDdFO0FBQXNCO0FBQ2pCO0NBOExWLE1BQU0sUEE5TFksSUFBYixVQUFVLENBQUMsR0FBUTtJQThMQyxHQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyw1QkE5TDlCLFFBQzVCLElBQUksR0FBRyxZQUFZLEtBQUssRUFBRTtHQTZMMkMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLDVCQTVMbEcsWUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQTZMdEIsSUFBSSxtQkFBbUIsRUFBRSw3QkE1TDdCLFlBQU0sSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUE2THhCLE5BNUxOLFNBQUs7QUE0TEssQ0FBQyxLQUFLLEdBQUcsVEE1TGIsYUFBSztlQTRMNkIsQ0FBQyxLQUFLLENBQUMsdEJBM0wvQyxZQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0tBNExqQixJQUFJLFRBM0xWLFNBQUs7QUEyTE0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxVQUNsRCxTQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHhGQTdMN0I7TUE2TGtELENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMscENBM0w3RSxRQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUM7Q0E0TGxDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxqQkEzTHBCLFlBQU0sS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO0FBNExqQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQywxQkEzTGhDLFlBQU0sU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1FBMkxzQixDQUFDLHFCQUFxQixDQUFDLC9CQTFMNUUsWUFBTSxXQUFXLEVBQUUsS0FBSztRQTBMNkQsQ0FBQyxDQUFDLFVBQ2xGLHBCQTFMTCxZQUFNLGNBQWMsRUFBRSxLQUFLO0FBMExoQixBQXpMWCxTQUFLLENBQUMsQ0FBQztFQTBMRCxGQXpMTjtBQXlMVSxDQUFDLERBdkxWO01BdUx1QixHQUFHLElBQUksQ0FBQyxVQUMzQixTQUVELGpDQTFMSztFQTBMRCxDQUFDLGVBQWUsbEJBekxoQjtBQXlMaUIsSUFBSSxDQUFDLExBekxIO1lBeUxrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGpDQXpML0IsSUFBMUIsZ0JBQWdCLENBQUMsZ0JBQXFCO0NBMEwzQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsY0FDZCxJQUFJLENBQUMscENBM0x3QyxRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7RUEwTGxCLENBQUMsSEF6TDVCO0NBeUxnQyxDQUFDLEZBdkxoQztTQXVMK0MsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQywvQkF2TDdEO0tBd0xKLFNBQ0QsSUFBSSxsQkF4TEM7QUF3TEEsQUF4TG1CO1VBd0xELEVBQUUsQ0FBQyxTQUMxQixJQUFJLENBQUMsM0JBekwyQixJQUEzQixpQkFBaUIsQ0FBQyxpQkFBc0I7QUF5THhCLEVBQUUsQ0FBQyxTQUN4QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxTQUM1QixqREEzTGlELFFBQ2pELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztDQTBMdkMsSUFBSSxMQXpMWjtBQXlMYSxLQUFLLEVBQUUsUEF2TG5CO2FBd0xLLElBQUksQ0FBQyxsQkF4TEY7UUF3THFCLEVBQUUsQ0FBQyxYQXZML0I7RUF3TEcsRkF4TGdCO0FBQVEsSUFBcEIsZ0JBQWdCLENBQUMsVUFBbUI7QUFBSSxRQUM3QyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDM0MsUUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUMvQjtBQUVDO0FBQVE7QUFBd0I7QUFDMUI7QUFBUSxJQUFOLFFBQVEsQ0FBQyxLQUFVO0NBc0x4QixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGNBQ2pDLEtBQUssdkRBdkxxQixRQUM1QixJQUFJLENBQUMsdUNBQXVDLEVBQUUsQ0FBQztDQXNMdEMsREFyTGIsS0FBRztBQUNIO1FBb0xrQyxDQUFDLEtBQUssZEFuTGpDO0FBb0xELFNBQVMsRUFBRSxYQXBMa0I7QUFBbUI7S0FvTGhCLENBQUMsU0FBUyxjQUMxQyxXQUFXLEVBQUUsMUNBckwyQyxJQUFwRCxnQ0FBZ0MsQ0FBQyxRQUFpQjtZQXFMdEIsY0FDaEMsa0JBQWtCLEVBQUUsS0FBSyxVQUMxQixDQUFDLENBQUMsL0RBdkx5RCxRQUM1RCxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QjtBQUNwRSxhQUFLLElBQUksQ0FDSCxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO0lBd0xyQyx3QkFBd0IsQ0FBQyxXQUE4QixxQ0FDN0QsTUFBTSxXQUFXLEdBQWUsb0JBQzlCLElBQUksQ0FBQywxSEF6TFY7VUF5THFCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxhQUN6QyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsa0JBQ2QsbEZBMUxMO0FBMExTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsY0FDbEQsYUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLG5JQTVMNUQsUUFBQyxNQUFNLENBQUMsQ0FBQyxXQUE2QixLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFDbEcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7Z0JBNEx2QyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsc0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsN0VBNUxqQyxjQUFZLFlBQVksQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUM7S0E0TG5DLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLHJDQTNMNUUsY0FBWSxHQUFHLENBQUMsU0FBUSxDQUFDO0FBQ3pCLFNBQUs7T0EyTEksc0JBQU0sc0JBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHpFQTNMaEMsYUFBSyxTQUFTLENBQUMsQ0FBQyxXQUE2QixLQUFLLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0VBMkxoRCxDQUFDLEhBMUw1QztFQTBMaUQsQ0FBQyxDQUFDLEpBeExsRDtjQXlMUSxkQXpMQTtBQTBMRixhQUNELElBQUksQ0FBQyxsQkEzTDBCO0FBQW1CO0VBMkxsQyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLDlDQTNMRixJQUF0RCxpQ0FBaUMsQ0FBQyxRQUFpQjtjQTRMckQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLHNCQUNkLElBQUksQ0FBQyxpQkFBaUIsMUVBN0xpQyxRQUM3RCxJQUFJLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QjtBQTRMckMsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGtCQUNwRSxzQkFBTSxwRkE1TGYsYUFBTyxJQUFJLENBQ0gsb0JBQW9CLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUN6QyxDQUFDLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztFQTJMdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxrQkFDM0MsY0FDRiw1RUE1TFAsY0FBWSxZQUFZLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO0dBNkwxRSxDQUFDLFNBRUYsSUFBSSxXQUFXLENBQUMsN0JBOUxwQixjQUFZLEdBQUcsQ0FBQyxTQUFRLENBQUM7U0E4TGEsVEE3THRDLFNBQU87Q0E2TGlDLERBNUx4QyxhQUFPLFNBQVMsQ0FBQyxDQUFDLFdBQThCLEtBQUssSUFBSSxDQUFDLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDakc7QUFFQztjQTJMSyxkQTNMRztNQTJMUSxOQTNMVztBQTJMVCxDQUFDLGFBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyw5QkE1TGMsSUFBMUIsdUJBQXVCO0VBNExQLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxVQUMvQyxjQUFNLHBEQTdMMkIsUUFDbEMsSUFBSSxtQkFBbUIsQ0FBQyx5QkFBeUIsRUFBRSxFQUFFO0FBQ3pELFlBQU0sSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxNQUFZLElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxDQUFDLENBQUM7QUFDM0csWUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2pFLFNBQUs7QUFDTDtBQUVDO0dBeUxLLFVBQVUsQ0FBQyxkQXpMUjtHQXlMZ0IsSEF6TEc7TUF5TFEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQ3RDLHZCQTFMK0IsSUFBMUIseUJBQXlCOzJEQTZMekIsb0JBQW9CLENBQUMsS0FBa0IsckZBN0xULFFBQ3BDLElBQUksbUJBQW1CLENBQUMseUJBQXlCLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTsyQkE2THJGLE1BQU0sakNBNUxWLFlBQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztFQTRMZCxHQUFnQixJQUFJLFdBQVcsRUFBRSxDQUFDLFNBQ3ZELGhDQTVMSixZQUFNLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO09BNExkLENBQUMsUkEzTHBCLFNBQUs7R0EyTG9CLEhBMUx6QjtBQTBMNEIsS0FBSyxDQUFDLE5BeExqQztHQXdMc0MsQ0FBQyxTQUNwQyxiQXpMSztBQUFtQjtDQXlMVCxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMscEJBekxGLElBQTFCLGlCQUFpQjtHQXlMb0IsQ0FBQyxTQUU1QyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsakVBM0x4QixRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO0dBMExBLENBQUMsRUFBRSxOQXpMckUsWUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDN0UsWUFBTSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFBbUI7QUFBUSxJQUExQixnQkFBZ0I7U0F1THBCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxqREF2TGYsUUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRTs2QkF1THpELE1BQU0sVUFBVSxHQUFXLFdBQVcsQ0FBQyxhQUFhLENBQUMsMUVBdEw3RCxZQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztNQXNMQSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLDNDQXJMakgsWUFBTSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLFNBQUs7QUFDTDtBQW9MUSxBQWxMUDtPQWtMc0IsQ0FBQyxLQUFLLEdBQUcsaEJBbEx2QjtDQWtMMkIsQ0FBQyxGQWxMVDtLQWtMb0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLG5DQWxMMUMsSUFBMUIsa0NBQWtDO1NBb0xwQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsekJBcEx5QixRQUM3QyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFO0dBb0xqRSxNQUFNLGNBQWMsR0FBVyxXQUFXLENBQUMsYUFBYSxDQUFDLHBEQW5MbkUsWUFBTSxJQUFJLENBQUMsNEJBQTRCLENBQUMsV0FBVyxFQUFFLENBQUM7TUFtTDRCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsL0NBbEwzSCxZQUFNLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7QUFDL0MsU0FBSztJQWtMSyxKQWpMVjtBQUVDO0tBK0t3QixDQUFDLFNBQVMsR0FBRyxsQkEvSzdCO0dBK0tpQyxDQUFDLEpBL0tmO09BK0swQixDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUMsekNBL0twRCxJQUExQixtQ0FBbUM7ZUFnTHBDLGNBQ0YsYUFFRCxPQUFPLGVBQWUsQ0FBQyxVQUN4QiwzRUFwTDZDLFFBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEVBQUU7RUFxTHhFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsY0FDaEMsbERBckxOLFlBQU0sSUFBSSxDQUFDLDZCQUE2QixDQUFDLFdBQVcsRUFBRSxDQUFDO0dBcUxsQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxsREFwTHBFLFlBQU0sSUFBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQztRQXFMMUMsUkFwTE4sU0FBSztFQW9MSyxGQW5MVjtBQW1MYyxDQUFDLEtBQUssTkFqTG5CO0FBaUxxQixrQkFDZCxsQkFsTEM7QUFBbUI7TUFrTEwsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHhCQWxMTCxJQUExQix3QkFBd0I7QUFrTGdCLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGNBQ3ZFLFVBQ0YsU0FFRCxJQUFJLElBQUksQ0FBQyx0RUF0TDBCLFFBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQUU7R0FxTGhELENBQUMsWUFBWSxFQUFFLGNBQ2pDLGVBQWUsQ0FBQyxLQUFLLEdBQUcseERBckw5QixZQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQXFMWCxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxsREFwTGxGLFlBQU0sSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQztBQUM1QyxTQUFLO0FBbUx3RixDQUFDLERBbEw5RjtBQWtMbUcsRUFBRSxJQUFJLENBQUMsUEFoTHpHO1VBZ0xvSCxDQUFDLElBQUksQ0FBQyxDQUFDLGpCQWhMbkg7QUFBbUI7R0FrTHRCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxuQkFsTGMsSUFBMUIsdUJBQXVCO0tBbUx6QixlQUFlLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLHpFQW5MdEMsUUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsRUFBRTtLQWtMYyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsdERBakx0SSxZQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztXQWtMM0MsWEFqTFAsWUFBTSxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO0FBQzNDLFNBQUs7QUFDTDtBQUVDO0FBQVE7Y0FnTEgsSUFBSSxsQkFoTDZCO0dBZ0x6QixDQUFDLEpBaEwyQztDQWdMdEMsSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUscENBaExXLElBQXhELGlCQUFpQixDQUFDLFdBQXdCO0FBQUksUUFDcEQsSUFBSSxXQUFXLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUN6QyxZQUFNLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0FBQ25DLFNBQUs7QUFBQyxhQUFLLElBQUksV0FBVyxLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFDaEQsWUFBTSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztBQUNuQyxTQUFLO0FBQ0wsUUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQjtBQUVDO0FBQVE7QUFBbUI7R0EwS3BCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyx4QkExS08sSUFBMUIsdUJBQXVCO0dBMEtPLEVBQUUsc0JBQ2hDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsbkRBM0tJLFFBQ2xDLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUU7R0EwS1IsQ0FBQyxTQUFTLENBQUMsa0JBQ25ELGhDQTFLVCxZQUFNLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztBQUMvQixTQUFLO01BeUtVLDJEQUNMLGpFQTFLSixhQUFLLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUU7R0EwS2hELFNBQVMsR0FBVyxLQUFLLENBQUMsS0FBSyxDQUFDLDNCQXpLaEQsWUFBTSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7U0EwS3RCLFRBektWLFNBQUs7Y0F5S29CLENBQUMsS0FBSyxwQkF4Sy9CLFFBQUksT0FBTyxJQUFJLENBQUM7RUF3S2tCLEZBdktsQztDQXVLdUMsQ0FBQyxGQXJLdkM7R0FxS2dELENBQUMscUJBQ3hDLHpCQXRLRDtXQXNLZ0IsQ0FBQyxaQXRLWTtFQXNLSCxHQUFHLExBdEttQjtNQXNLVixDQUFDLGtCQUN2QyxjQUNGLHZDQXZLSixJQURPLHFCQUFxQixDQUFDLFVBQWtCO1NBeUs3QyxTQUVELE9BQU8sZUFBZSxDQUFDLHpDQTNLMkIsUUFDbEQsSUFBSSxXQUFXLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDbkQsWUFBTSxPQUFPLEdBQUcsQ0FBQztNQTRLUCxOQTNLVixTQUFLO2tCQTJLMkIsc0NBQzVCLE1BQU0sbUJBQW1CLEdBQWdCLGNBQ3ZDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxuSEE1S3ZCLFFBQ0ksSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRTtVQTRLM0csU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLFVBQzFCLENBQUMsa0NBQ0YsTUFBTSx0RkE3S1YsWUFBTSxPQUFPLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNqRixTQUFLO1NBNEswQixHQUFnQixJQUFJLENBQUMsakJBM0twRCxRQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDdkI7R0EwS3dFLENBQUMsSkF4S3hFO2VBd0syRixDQUFDLENBQUMsU0FDMUYsMUJBektLO0VBeUtELENBQUMsV0FBVyxDQUFDLGZBektnQjtHQXlLVCxDQUFDLEpBeksyQjtpQkF5S04sRUFBRSxtQkFBbUIsdENBeEtwRSxJQURPLHFCQUFxQixDQUFDLFNBQWlCO0FBeUt1QixFQUFFLGNBQ3BFLElBQUksQ0FBQyxLQUFLLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLGFBQ3pDLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsU0FBUyx0SEEzS0QsUUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRTtBQTBLMUQsYUFFakQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxoREEzS3pDLFlBQU0sT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFDLFNBQUs7T0EyS0csS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLHhCQTFLekIsUUFBSSxPQUFPLFNBQVMsQ0FBQztBQUNyQjtBQUVDO0VBd0tPLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUywzQkF4S3hCO2VBeUtELGZBeksrQjtPQXlLcEIsUEF4S2Y7Q0F3S2lCLElBQUksa0JBQ2pCLHZCQXpLSSxJQURGLFlBQVksQ0FBQyxXQUFtQjtTQTBLaEIsRUFBRSxLQUFLLGhCQTFLYTtLQTJLdkMsQ0FBQyxDQUFDLFVBQ0osakJBM0tZLFFBQWIsTUFBTSxJQUFJLEdBQXlCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBOEt0RSxlQUFlLGFBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGNBQ3BCLE9BQU8sdkVBL0tiLFFBQUksT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3JFO0NBK0tLLERBN0tKO0FBQVE7QUFBbUI7QUErS3hCLE1BQU0sTkE5S1YsSUFEVSxlQUFlO1NBK0tZLEdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxqREEvS3ZELFFBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztlQStLM0QsTUFBTSxyQkE5S1YsUUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7dUJBOEtrQixHQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsaEVBN0t2RixZQUFNLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN0RSxTQUFLO1dBOEtELE1BQU0sakJBN0tWLFFBQ0ksSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQztXQTRLVSxHQUFjLElBQUksQ0FBQyxuQkEzS3BFLFlBQU0sS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO3NCQTJLK0UsQ0FBQyxJQUFJLENBQUMsNUJBMUs1RyxZQUFNLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztBQTBLd0YsQ0FBQyxDQUFDLFNBRXJILElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQywvQkEzS3hCLFlBQU0sa0JBQWtCLEVBQUUsSUFBSTsyQkE2SzFCLDNCQTVLSixZQUFNLFdBQVcsRUFBRSxLQUFLO0VBNEtkLEZBM0tWLFNBQUssQ0FBQyxDQUFDO3dCQTJLcUMsR0FBYyxJQUFJLENBQUMsa0NBQWtDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLHJGQTFLcEg7dUJBNktJLE1BQU0sWUFBWSxHQUFZLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyx4RUEzSzNEO2FBMktrRyxFQUFFLGtDQUFrQyxDQUFDLENBQUMsU0FFdkksSUFBSSwyQkFBMkIsM0ZBNUs1QjtHQTRLaUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxjQUN4RSxJQUFJLENBQUMsNURBNUtBOzJCQTRLa0MsRUFBRSxDQUFDLGFBQzFDLDNDQTVLUyxRQUFYLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUM7R0E0SzVCLENBQUMsSkEzS1gsWUFBTSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7S0EyS29CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyx2QkExSzdELFlBQU0sU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO0dBMEtpRCxDQUFDLENBQUMsVUFDN0UsU0FFRCxJQUFJLDVCQTVLUixZQUFNLFdBQVcsRUFBRSxLQUFLO3dCQTRLWSxLQUFLLDdCQTNLekMsWUFBTSxjQUFjLEVBQUUsSUFBSTtBQTJLbUIsQ0FBQyxEQTFLOUMsU0FBSyxDQUFDLENBQUM7QUEwS2tELENBQUMsREF6SzFEO0FBRUM7T0F1SzZFLEVBQUUsY0FDMUUsSUFBSSxDQUFDLDVCQXhLRjtBQUE4QjtBQUN4QjtLQXVLOEIsRUFBRSxDQUFDLGFBQzFDLElBQUksQ0FBQywxQkF4S1ksSUFBYixxQkFBcUIsQ0FBQyxXQUE2QjtpQkF3S2xCLENBQUMsSUFBSSxDQUFDLHZCQXhLZ0I7U0F3S0wsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLFVBQzlFLDFDQXhLYyxRQUFmLE1BQU0scUJBQXFCLEdBQWdCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN0RjsyQkEwS0ksSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsU0FFOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsM0ZBM0tMLFFBQ3BCLE1BQU0sbUJBQW1CLEdBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO2tCQTBLaEQsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsL0JBeksvRCxRQUFJLElBQUksbUJBQW1CLEVBQUU7S0EwS3pCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxjQUNkLElBQUksQ0FBQyxhQUFhLHJEQTFLeEIsWUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQztFQTBLcEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUNqRSx2REExS0wsWUFBTSxJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDLFNBQVMsQ0FBQztPQTBLNUMsUEF6S1gsU0FBSztXQTBLQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUMzQixTQUVELElBQUksQ0FBQyxXQUFXLENBQUMsekVBNUtyQixRQUNJLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBMksvQyxDQUFDLENBQUMsRkExS25DLFFBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO3NCQThLVixZQUFZLGFBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQyxTQUNqQyx6RkEvS0osWUFBTSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztDQStLN0UsQ0FBQyxNQUFNLENBQUMsVEE5S2xCLFNBQUs7R0E4S2lCLENBQUMsSkE5S2pCLGFBQUs7QUE4S3VCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBRTlDLElBQUksQ0FBQyw5QkEvS1QsWUFBTSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztFQStLWixDQUFDLEhBOUtyQixTQUFLO09BOEs4QixHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FDaEYsSUFBSSxDQUFDLHRFQTlLVCxRQUNJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztVQTZLOUMsQ0FBQyxYQTVLckIsUUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7R0E0S21CLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLFNBQ3hGLElBQUksSUFBSSxDQUFDLDFFQTVLYixZQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBNEs5QyxDQUFDLFRBM0t6QixTQUFLO2lCQTJLc0MsRUFBRSxjQUN2QyxqQ0EzS04sUUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztFQTJLcEIsQ0FBQyxXQUFXLENBQUMsY0FBYyxHQUFHLGhDQTFLeEMsUUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztHQTBLZ0IsQ0FBQyxVQUN4QyxTQUVELElBQUksQ0FBQyw1QkE1S1QsUUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztFQTRLWixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMscEJBM0t0QyxRQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtLQTJLNkIsQ0FBQyxTQUFTLGdCQUNyRCxJQUFJLENBQUMscENBM0tYLFlBQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7T0EyS1gsQ0FBQyxSQTFLdkIsU0FBSzthQTBLaUMsZ0JBQ2hDLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsN0VBMUt0RDtDQTBLZ0UsQ0FBQyxDQUFDLFNBQzlELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLGlCQUMxQixDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxwSEExSzlEO0VBMEtrRSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsdENBektsRyxRQUFILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUM7SUF5SzZFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxjQUM3SCxJQUFJLENBQUMsdENBektYLFlBQU0sS0FBSyxFQUFFLHFCQUFxQixDQUFDLEtBQUs7T0F5S1osR0FBRyxJQUFJLENBQUMsVUFDL0IsU0FFRCxJQUFJLENBQUMsV0FBVyxDQUFDLG5EQTNLckIsWUFBTSxTQUFTLEVBQUUscUJBQXFCLENBQUMsU0FBUztXQTJLWCxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsL0JBMUt6RCxZQUFNLFdBQVcsRUFBRSxtQkFBbUI7Q0EwS21DLGdCQUNuRSxJQUFJLENBQUMsV0FBVyxDQUFDLGxDQTFLdkIsWUFBTSxrQkFBa0IsRUFBRSxLQUFLO0FBQy9CLFNBQUssQ0FBQyxDQUFDO0dBeUttQyxIQXhLMUM7QUFFQztLQXVLSyxDQUFDLFdBQVcsQ0FBQyxsQkF2S1Y7S0F1SzJCLENBQUMsSUFBSSxDQUFDLFhBdktIO0dBdUtjLENBQUMsSkF2S0k7cUJBdUtxQixDQUFDLENBQUMsU0FFN0UsSUFBSSxDQUFDLHJDQXpLeUQsSUFDeEQsd0JBQXdCLENBQUMsV0FBOEI7SUF3SzdDLENBQUMsaUJBQWlCLENBQUMsdkJBeEs4QjtFQXdLMUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsNUJBdktsRCxRQUFmLE1BQU0sV0FBVyxHQUFlO01Bd0s5QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxVQUMvQiw5Q0F6S3VDLFlBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQXdLcEMsY0FDTCxJQUFJLENBQUMsekJBeEtYLFlBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQXdLVSxFQUFFLENBQUMsVUFDOUIsU0FFRCxJQUFJLFdBQVcsQ0FBQyx0REExS3BCLGdCQUFRLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQTBLcEIsQ0FBQyxJQUFJLENBQUMsWEF6SzNDLGFBQU87UUF5SytDLENBQUMsYUFBYSxDQUFDLEVBQUUsY0FDakUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEdBQUcseEVBekt2QyxZQUNNLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7QUF3S3pCLFFBQWdCLEVBQUUsUUFBZ0IsbEJBdksxRSxnQkFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7T0F3S2hCLE9BQU8sUUFBUSxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUMsY0FDcEMsQ0FBQyxVQUNILFNBRUQsSUFBSSxJQUFJLENBQUMsckZBM0tiLG9CQUFVLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0EyS3BELENBQUMsVkExS3pCLGlCQUFTO0FBMEt3QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsckJBMUs1QyxxQkFBSztHQTBLNEMsS0FBSyxDQUFDLEVBQUUsY0FDN0QsTUFBTSxLQUFLLENBQUMsckNBMUtsQixvQkFBVSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25ELGlCQUFTO0FBeUtvRCxDQUFDLENBQUMsVUFDMUQsWkF6S0wsYUFBTzs0Q0E0S0csc0JBQXNCLGxFQTNLaEMsWUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO0tBNEs5RCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsaENBM0svQixnQkFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7T0E0S3BCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FDL0QsSUFBSSxDQUFDLHBGQTVLVCxvQkFBVSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO09BNEt6RCxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsakJBM0s5QixpQkFBUztRQTZLTCxJQUFJLFpBN0tFLHFCQUFLO0FBNktJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxjQUM3RCw5REE3S04sb0JBQVUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztHQTZLMUMsQ0FBQyxXQUFXLENBQUMsaEJBNUt2QixpQkFBUztPQTRLdUIsR0FBRyxDQUFDLFhBM0twQyxhQUFPO09BMksrQyxQQTFLdEQsU0FBSyxDQUFDO21CQTJLRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMseENBMUs3QixRQUNJLElBQUksV0FBVyxDQUFDLGtCQUFrQixFQUFFO2dCQXlLVyxFQUFFLHNCQUMzQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsckZBekt2RDtLQTBLUyxpQkFDRCx0QkExS0YsWUFBQSxXQUFXLEVBQUUsQ0FBQztFQTBLTCxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsY0FDM0IsQ0FBQyxVQUNILDlDQTNLTCxZQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7QUFDcEQsU0FBSztBQUFDLGFBQUs7UUE2S0QscUJBQXFCLGFBQzNCLElBQUksV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxqR0E3SzNEO0FBNks0RCxFQUFFLGNBQ3hELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUMzQixjQUFNLGNBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyx6R0EvS3pCO0dBK0s2QixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFDL0MsSUFBSSxJQUFJLENBQUMsM0NBL0tILFlBQU4sVUFBVSxDQUFDLFFBQVEsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUErS2pCLENBQUMsSUFBSSxUQTlLL0IsU0FBSztHQThLOEIsQ0FBQyxKQTdLcEM7QUE2S3NDLEFBM0tyQztVQTRLTyxJQUFJLENBQUMsZkE1S0o7RUE0S2UsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFpBNUtEO09BNkszQixQQTdLOEM7QUFBUSxJQUFsRCxvQkFBb0IsQ0FBQyxLQUFrQjtBQUFJO0FBQ3pDLFFBQVIsTUFBTSxlQUFlLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7QUFDM0QsUUFBSSxlQUFlLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDeEMsUUFBSSxlQUFlLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDaEQsUUFDSSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDckU7QUFDTTtBQUNNLFlBQU4sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFO0FBQzlDO0FBQWlDLGdCQUF6QixNQUFNLFVBQVUsR0FBVyxXQUFXLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNqSCxnQkFBUSxlQUFlLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM5RSxnQkFDUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDeEI7QUFBcUMsb0JBQTNCLE1BQU0sY0FBYyxHQUFXLFdBQVcsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzNILG9CQUFVLGVBQWUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3hGLGlCQUFTO0FBQ1QsYUFBTztBQUNQLFlBQ00sT0FBTyxlQUFlLENBQUM7QUFDN0IsU0FBSztBQUNMLFFBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRTtBQUN0QyxZQUFNLGVBQWUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEUsWUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDdEIsZ0JBQVEsZUFBZSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5RSxhQUFPO0FBQ1AsU0FBSztBQUNMLFFBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRTtBQUN2QyxZQUFNLGVBQWUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUgsWUFDTSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDdEIsZ0JBQVEsZUFBZSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0SSxhQUFPO0FBQ1A7QUFFSyxZQUFDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUU7QUFDdkQ7QUFDUTtBQUNRLGdCQUFSLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7QUFDMUMsb0JBQVUsZUFBZSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDO0FBQzVELGlCQUFTO0FBQUMscUJBQUs7QUFDZjtBQUFxQyxvQkFBM0IsTUFBTSxTQUFTLEdBQVcsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUNoRCxvQkFBVSxlQUFlLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDbEQsb0JBQVUsZUFBZSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDaEQsaUJBQVM7QUFDVCxhQUFPO0FBQ1AsU0FBSztBQUNMLFFBQ0ksT0FBTyxlQUFlLENBQUM7QUFDM0I7QUFFQztBQUFRO0FBQW1CO0FBQVEsSUFBMUIsc0JBQXNCO0FBQUs7QUFDbEIsUUFBZixNQUFNLG1CQUFtQixHQUFnQjtBQUM3QyxZQUFNLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztBQUN2QixZQUFNLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztBQUMvQixTQUFLLENBQUM7QUFDTjtBQUF5QixRQUFyQixNQUFNLHFCQUFxQixHQUFnQixJQUFJLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUM5RixRQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLG1CQUFtQixDQUFDLEVBQUU7QUFDMUUsWUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQztBQUMvQyxZQUFNLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsU0FBUyxDQUFDO0FBQ3ZELFlBQ00sSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQztBQUN6QyxnQkFBUSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7QUFDekIsZ0JBQVEsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO0FBQ2pDLGdCQUFRLFdBQVcsRUFBRSxJQUFJO0FBQ3pCLGdCQUFRLGtCQUFrQixFQUFFLEtBQUs7QUFDakMsYUFBTyxDQUFDLENBQUM7QUFDVCxTQUFLO0FBQ0w7QUFFQztBQUFRO0FBQW1CO0FBQzVCLElBRFUsZUFBZTtBQUFLLFFBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQzFCLFlBQU0sT0FBTztBQUNiLFNBQUs7QUFDTDtBQUN3QixRQUFwQixNQUFNLDJCQUEyQixHQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUM7QUFDckY7QUFBeUIsUUFBckIsTUFBTSw0QkFBNEIsR0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDO0FBQ3ZGO0FBQ3dCLFFBQXBCLE1BQU0sdUNBQXVDLEdBQWMsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN6SCxRQUNJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN4QjtBQUN3QixRQUFwQixNQUFNLGtDQUFrQyxHQUFjLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDcEg7QUFBeUIsUUFFckIsTUFBTSxZQUFZLEdBQVksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLHVDQUF1QyxFQUFFLGtDQUFrQyxDQUFDLENBQUM7QUFDM0ksUUFDSSxJQUFJLDJCQUEyQixLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUU7QUFDOUUsWUFBTSxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQztBQUNoRCxZQUFNLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDbEYsU0FBSztBQUNMLFFBQ0ksSUFBSSw0QkFBNEIsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixFQUFFO0FBQ2hGLFlBQU0sSUFBSSxDQUFDLGtDQUFrQyxFQUFFLENBQUM7QUFDaEQsWUFBTSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ25GLFNBQUs7QUFDTDtBQUVHLFFBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7QUFDbEMsUUFDSSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0QsUUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDcEIsWUFBTSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdEUsU0FBSztBQUFDLGFBQUs7QUFDWCxZQUFNLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLFNBQUs7QUFDTCxRQUNJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbkM7QUFFQztBQUFRO0FBQW1CO0FBQVEsSUFDMUIsWUFBWTtBQUFLLFFBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNyQyxRQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEQsUUFDSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO0FBQ3BGLFFBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUM7QUFDNUYsUUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEVBQUU7QUFDN0MsWUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDN0MsU0FBSztBQUNMLFFBQ0ksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTO0FBQzNELFlBQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlO0FBQ3RDLFlBQU0sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNsRSxRQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTO0FBQ2xDLGFBQVEsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUU7QUFDbkksWUFBTSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLFNBQUs7QUFDTCxRQUNJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0I7QUFDekUsWUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQjtBQUMxQyxZQUFNLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUNqRixRQUNJLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUNyRSxZQUFNLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0FBQ3BDLFNBQUs7QUFBQyxhQUFLO0FBQ1gsWUFBTSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztBQUNuQyxTQUFLO0FBQ0wsUUFDSSxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxFQUFFO0FBQ3ZFLFlBQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxRQUFnQixFQUFFLFFBQWdCO0FBQU8sZ0JBQ3pFLE9BQU8sUUFBUSxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUM7QUFDM0MsYUFBTyxDQUFDO0FBQ1IsU0FBSztBQUNMLFFBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDbkUsWUFBTSxNQUFNLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0FBQy9ELFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFBbUI7QUFBUSxJQUExQixzQkFBc0I7QUFBSyxRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDL0IsUUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ25FLFFBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLFFBQ0ksSUFBSSxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUNuRSxZQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLENBQUMsVUFBa0I7QUFBTyxnQkFDckQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFO0FBQ3JELG9CQUFVLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUN2RCxpQkFBUztBQUNULGdCQUFRLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2xDLGFBQU8sQ0FBQztBQUNSLFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFBbUI7QUFBUSxJQUExQixxQkFBcUI7QUFBSyxRQUNoQyxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzlELFlBQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLFNBQUs7QUFBQyxhQUFLO0FBQ1gsWUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0FBQ3JELFlBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUU7O0FBRXRDLGFBQU07U0FDRCxUQUFMLFNBQUs7UUFFRCxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxoRUFENUQsUUFDSSxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNwRCxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxuRUFBL0QsWUFBUSxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN6RCxNQUFNLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLG5FQUE3RCxZQUFNLE1BQU0sS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7U0FDeEQsVEFBTCxTQUFLO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx2REFBbkQsUUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsekRBQXJELFFBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUVqRCxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLHZFQURuRSxRQUNJLElBQUksV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDN0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFhLEtBQWEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGxFQUE1RSxZQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBYSxLQUFhLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2RSxUQUFMLFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFDYTtBQUFtQjtJQUEvQixXQUFXLENBQUMsZUFBd0IsSUFBSSxuQ0FBRCxJQUF2QyxXQUFXLENBQUMsZUFBd0IsSUFBSTtRQUM5QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxuQ0FEdUIsUUFDbEQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsaENBQTVCLFFBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLC9CQUEzQixRQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxoQ0FBNUIsUUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLFlBQVksRUFBRSwxQkFBdEIsUUFBSSxJQUFJLFlBQVksRUFBRTtZQUNoQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsaENBQTFCLFlBQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLHhDQUFsQyxZQUFNLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQzdCLFRBQUwsU0FBSztRQUNELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLG5DQUEvQixRQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLHZDQUFuQyxRQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLHRDQUFsQyxRQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0FBQ2xDO0FBRUM7QUFBUTtBQUE4QjtBQUN0QjtJQUFQLFlBQVksQ0FBQyxXQUF3Qiw1QkFBdEIsSUFBZixZQUFZLENBQUMsV0FBd0I7QUFBSTtRQUUvQyxJQUFJLFdBQVcsS0FBSyxXQUFXLENBQUMsR0FBRyxJQUFJLFdBQVcsS0FBSyxXQUFXLENBQUMsR0FBRyxFQUFFLGhGQUQzQixRQUM3QyxJQUFJLFdBQVcsS0FBSyxXQUFXLENBQUMsR0FBRyxJQUFJLFdBQVcsS0FBSyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ3RFLFdBQVcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLDFDQUFwQyxZQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDO1NBQy9CLFRBQUwsU0FBSztRQUVELElBQUksV0FBVyxLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUUsN0NBRHpDLFFBQ0ksSUFBSSxXQUFXLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUMsMUNBQXBDLFlBQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1NBQy9CLFRBQUwsU0FBSzthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxXQUFXLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRSxoRUFBeEQsYUFBSyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksV0FBVyxLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDeEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDLDFDQUFwQyxZQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUMvQixUQUFMLFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFBbUI7SUFBbEIsc0JBQXNCLDFCQUFJLElBQTFCLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLHRFQUQ3QixRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQzVELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsMURBQXBELFlBQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUNwRDtZQUFNLE1BQU0sT0FBTyxHQUEwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsN0VBQWpFLFlBQXZCLE1BQU0sT0FBTyxHQUEwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDeEYsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLDVCQUF0QixZQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNqQixUQUFMLFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFBbUI7SUFDbEIsbUJBQW1CLHZCQURPLElBQzFCLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsM0JBRFcsUUFDOUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRW5CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxuSEFEL0csUUFDSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDM0csSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLGxIQUE5RyxRQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUM5RztRQUNJLE1BQU0sa0JBQWtCLEdBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsL0ZBQTVFLFFBQXBCLE1BQU0sa0JBQWtCLEdBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDaEcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsM0dBQXZHLFFBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbkcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLDFIQUF0SCxRQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNsSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsekhBQXJILFFBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLGxHQUE5RixRQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFGLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLGpIQUE3RyxRQUFJLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3pHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLGxIQUE5RyxRQUFJLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRTFHLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsN0ZBRHpGLFFBQ0ksSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQztRQUNyRixJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQywvR0FBM0csUUFBSSxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztRQUN2RyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLDVGQUF4RixRQUFJLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7UUFFcEYsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsM0VBRHZFLFFBQ0ksSUFBSSxJQUFJLENBQUMsMEJBQTBCLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7WUFDakUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsdkNBQWpDLFlBQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDakM7QUFDTTtBQUNNO1lBQ04sVUFBVSxDQUFDLFFBQWMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLHREQUFwQyxZQUFaLFVBQVUsQ0FBQyxRQUFjLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNqRCxUQUFMLFNBQUs7QUFDTDtBQUVHO1FBQ0MsSUFBSSxJQUFJLENBQUMseUJBQXlCLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsekVBQTlELFFBQUgsSUFBSSxJQUFJLENBQUMseUJBQXlCLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUU7WUFDL0QsVUFBVSxDQUFDLFFBQWMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLDdGQUE3RixZQUFNLFVBQVUsQ0FBQyxRQUFjLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN4RixUQUFMLFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFBbUI7SUFDbEIsb0JBQW9CLHhCQURNLElBQzFCLG9CQUFvQjtRQUMxQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLHBFQUQ3QixRQUMvQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO1lBQzFELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxoQ0FBMUIsWUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckIsVEFBTCxTQUFLO2FBQU0sYkFBTCxhQUFLO1lBQ0wsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLDlCQUF4QixZQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQixUQUFMLFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFBbUI7SUFDbEIsbUJBQW1CLHZCQURPLElBQzFCLG1CQUFtQjtRQUN6QixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyx2RkFEakQsUUFDOUIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDbkY7QUFFQztBQUFRO0FBQW1CO0lBQ2xCLG1CQUFtQix2QkFETyxJQUMxQixtQkFBbUI7UUFDekIsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLHBFQUQ5QixRQUM5QixJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDNUQsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSwzREFBdkQsUUFBSSxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFO0FBQ3ZEO1lBQ00sSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRSx6REFBN0MsWUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMzQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsL0RBQXZELGdCQUFRLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNoRCxiQUFQLGFBQU87U0FDRixUQUFMLFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFBbUI7SUFBbEIsV0FBVyxmQUNqQixJQURNLFdBQVc7UUFDakIsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSwzREFEN0IsUUFDdEIsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRTtZQUNqRCxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsckRBQS9DLFlBQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFDLFRBQUwsU0FBSztBQUNMO0FBRUM7QUFBUTtBQUFtQjtJQUFsQixvQkFBb0IseEJBQU0sSUFBMUIsb0JBQW9CO1FBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLGpEQURWLFFBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEJBQTRCO1lBQ3ZDLElBQUksQ0FBQyw2QkFBNkIsOUNBQXhDLFlBQU0sSUFBSSxDQUFDLDZCQUE2QjtZQUNsQyxJQUFJLENBQUMsY0FBYywvQkFBekIsWUFBTSxJQUFJLENBQUMsY0FBYztZQUNuQixJQUFJLENBQUMsbUJBQW1CLHBDQUE5QixZQUFNLElBQUksQ0FBQyxtQkFBbUI7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQixqQ0FBM0IsWUFBTSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsakNBQTNCLFlBQU0sSUFBSSxDQUFDLGdCQUFnQjtZQUNyQixJQUFJLENBQUMsaUJBQWlCLGxDQUE1QixZQUFNLElBQUksQ0FBQyxpQkFBaUI7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQixqQ0FBM0IsWUFBTSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3JCLElBQUksQ0FBQyxxQkFBcUIsdENBQWhDLFlBQU0sSUFBSSxDQUFDLHFCQUFxQjtZQUMxQixJQUFJLENBQUMscUJBQXFCLHRDQUFoQyxZQUFNLElBQUksQ0FBQyxxQkFBcUI7WUFDMUIsSUFBSSxDQUFDLG9CQUFvQixyQ0FBL0IsWUFBTSxJQUFJLENBQUMsb0JBQW9CO1lBQ3pCLElBQUksQ0FBQyxZQUFZLDdCQUF2QixZQUFNLElBQUksQ0FBQyxZQUFZO1NBQ2xCLENBQUMsVkFBTixTQUFLLENBQUM7QUFDTjtBQUVDO0FBQVE7QUFBbUI7SUFFbEIsV0FBVyxmQUZlLElBRTFCLFdBQVc7UUFDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLHRFQUR4QyxRQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDbEU7QUFFRztBQUNRO0FBRUU7UUFBVCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUseEJBQ2YsUUFERCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyw1RUFBdEUsWUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUNqRSxUQUFMLFNBQUs7UUFFRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxsQ0FEOUIsUUFDSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUxQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUseEJBRHBCLFFBQ0ksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsdkNBQWpDLFlBQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7U0FDNUIsVEFBTCxTQUFLO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsaENBRDVCLFFBQ0ksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDNUI7QUFFQztBQUFRO0FBQW1CO0lBQ2xCLGdCQUFnQixwQkFEVSxJQUMxQixnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMscENBREQsUUFDM0IsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsOUNBRDFDLFFBQ0ksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7UUFFdEMsSUFBSyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsNUNBRHpDLFFBQ0ksSUFBSyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWU7WUFDbkMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFHLHZFQUFsRSxZQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRztZQUM1RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxqREFBM0MsWUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztTQUN0QyxUQUFMLFNBQUs7YUFBTSxiQUFMLGFBQUs7WUFDTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxoREFBMUMsWUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztTQUNyQyxUQUFMLFNBQUs7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxZQUFZLENBQUMsdEdBRGxHLFFBQ0ksSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsWUFBWSxDQUFDO1FBRTlGLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSx4RUFEcEUsUUFDSSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyx6RUFBbkUsWUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO1NBQzlELFRBQUwsU0FBSzthQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxsRkFBMUUsYUFBSyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDMUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxuRkFBN0UsWUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO1NBQ3hFLFRBQUwsU0FBSztRQUVELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSx4QkFEcEIsUUFDSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxsREFBNUMsWUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztZQUV0QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxoREFEMUMsWUFDTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZTtnQkFDbEMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLDNFQUFuRSxnQkFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLHJEQUE3QyxnQkFBUSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQzthQUN0QyxiQUFQLGFBQU87aUJBQU0sakJBQUwsaUJBQUs7Z0JBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMscERBQTVDLGdCQUFRLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO2FBQ3JDLGJBQVAsYUFBTztZQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLFlBQVksQ0FBQywxR0FEcEcsWUFDTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxZQUFZLENBQUM7WUFFOUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxFQUFFLGhGQUQxRSxZQUNNLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDbEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxqRkFBekUsZ0JBQVEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQzthQUNsRSxiQUFQLGFBQU87aUJBQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsMUZBQTlFLGlCQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO2dCQUM5RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsM0ZBQW5GLGdCQUFRLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQzthQUM1RSxiQUFQLGFBQU87U0FDRixUQUFMLFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFBbUI7SUFDbEIsb0JBQW9CLHhCQURNLElBQzFCLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLHRFQUQvQixRQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQzlELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxyR0FBakcsUUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQywvRUFBM0UsUUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsOUVBQTFFLFFBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUV0RSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUseEJBRHBCLFFBQ0ksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyw5RUFBeEUsWUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyw5R0FBeEcsWUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxuRkFBN0UsWUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsbEZBQTVFLFlBQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUN2RSxUQUFMLFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFBbUI7SUFFbEIsdUJBQXVCLDNCQUZHLElBRTFCLHVCQUF1QjtRQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsOUVBRHBDLFFBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUNwRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUMsakZBQTNFLFlBQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3RFLFRBQUwsU0FBSzthQUFNLGJBQUwsYUFBSztZQUNMLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLHZEQUFqRCxZQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzVDLFRBQUwsU0FBSztBQUNMO1FBQ0ksTUFBTSxXQUFXLEdBQVcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyw1REFBeEMsUUFBcEIsTUFBTSxXQUFXLEdBQVcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztRQUU1RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQyxuREFEL0MsUUFDSSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEVBQUUsM0VBRHZFLFFBQ0ksSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ2pFLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsNUVBQXRFLFlBQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNqRSxUQUFMLFNBQUs7YUFBTSxiQUFMLGFBQUs7WUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLENBQUMsckRBQS9DLFlBQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzFDLFRBQUwsU0FBSztRQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsN0VBRHpFLFFBQ0ksSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQztRQUVyRSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsN0JBRHpCLFFBQ0ksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLHBDQUE5QixZQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxuQ0FBN0IsWUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLC9CQUF6QixZQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQixUQUFMLFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFBbUI7SUFBbEIsdUNBQXVDLDNDQUFiLElBQTFCLHVDQUF1QztRQUM3QyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyx2Q0FEbUIsUUFDbEQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxwQ0FBaEMsUUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxwREFBOUMsWUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUMsVEFBSixTQUFJO0FBQ0o7QUFFQztBQUNFO0FBQ0U7QUFFRDtJQUFNLGNBQWMsbEJBQVosSUFBRixjQUFjO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDLHBEQURuQixRQUN6QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNoRDtBQUVDO0FBQVE7QUFBbUI7SUFDbEIsZ0JBQWdCLHBCQUFyQixJQUFLLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsekNBRE4sUUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFO1lBQy9CLFVBQVUsQ0FBQyxRQUFRLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsN0VBQXZFLFlBQU0sVUFBVSxDQUFDLFFBQVEsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRSxPQUFPLG5CQUFiLFlBQU0sT0FBTztTQUNSLFRBQUwsU0FBSztBQUNMO1FBQ0ksTUFBTSxVQUFVLEdBQWEsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsdEZBQXBFLFFBQXBCLE1BQU0sVUFBVSxHQUFhLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO2NBQ3BGLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSx6Q0FBbkMsY0FBUSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVU7Y0FDM0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLG5DQUE3QixjQUFRLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUM3QjtRQUFJLE1BQU0sU0FBUyxHQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLFlBQVksR0FBRyxZQUFZLENBQUMsbEZBQTdELFFBQXJCLE1BQU0sU0FBUyxHQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLFlBQVksR0FBRyxZQUFZLENBQUM7UUFFbEYsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSwxQ0FEdEMsUUFDSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQ2hDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxqQ0FBM0IsWUFBTSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDdEIsVEFBTCxTQUFLO0FBQ0w7UUFDSSxNQUFNLGFBQWEsR0FBVyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSw3SEFBekcsUUFBcEIsTUFBTSxhQUFhLEdBQVcsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWE7YUFDeEgsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLDVIQUF4SCxhQUFTLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4SDtRQUNJLElBQUksbUJBQW1CLEdBQVksS0FBSyxDQUFDLHhDQUFyQixRQUFwQixJQUFJLG1CQUFtQixHQUFZLEtBQUssQ0FBQztBQUM3QztRQUNJLE1BQU0sUUFBUSxHQUFXLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFhLDlDQUFsQyxRQUFwQixNQUFNLFFBQVEsR0FBVyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBYTtBQUFPO1lBQzNELElBQUksUUFBUSxHQUFXLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsdkRBQWxDLFlBQWpCLElBQUksUUFBUSxHQUFXLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFbkQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSwzQ0FEckMsWUFDTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO2dCQUM3QixRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyw3REFBckQsZ0JBQVEsUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUM7YUFDOUMsYkFBUCxhQUFPO0FBQ1A7WUFDTSxNQUFNLFdBQVcsR0FBVyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLC9FQUFyRCxZQUF0QixNQUFNLFdBQVcsR0FBVyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pGO1lBQU0sTUFBTSxJQUFJLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxwQ0FBUCxZQUF2QixNQUFNLElBQUksR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyx2REFBakQsWUFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyx6QkFBbkIsWUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHO2dCQUNYLG1CQUFtQixFQUFFLFdBQVcsaERBQXhDLGdCQUFRLG1CQUFtQixFQUFFLFdBQVc7Z0JBQ2hDLGdCQUFnQixFQUFFLFdBQVcsN0NBQXJDLGdCQUFRLGdCQUFnQixFQUFFLFdBQVc7Z0JBQzdCLGNBQWMsRUFBRSxXQUFXLDNDQUFuQyxnQkFBUSxjQUFjLEVBQUUsV0FBVztnQkFDM0IsZUFBZSxFQUFFLFdBQVcsNUNBQXBDLGdCQUFRLGVBQWUsRUFBRSxXQUFXO2dCQUM1QixTQUFTLEVBQUUsV0FBVyx0Q0FBOUIsZ0JBQVEsU0FBUyxFQUFFLFdBQVc7YUFDdkIsQ0FBQyxkQUFSLGFBQU8sQ0FBQztZQUNGLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLEVBQUUseEdBQWxHLFlBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsRUFBRTtnQkFDMUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLDdFQUFyRSxnQkFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7YUFDOUQsYkFBUCxhQUFPO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRSxqR0FBM0YsWUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUNuRixJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQywxRUFBbEUsZ0JBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDM0QsYkFBUCxhQUFPO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLC9FQUF6RSxZQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDakUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxwRUFBNUQsZ0JBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLE9BQU8sR0FBRyxLQUFLLENBQUMscEZBQTVFLGdCQUFRLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxPQUFPLEdBQUcsS0FBSyxDQUFDO2FBQ3JFLGJBQVAsYUFBTztZQUNELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLGpHQUEzRixZQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDO2dCQUNqRixVQUFVLENBQUMsNEJBQTRCLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLGhIQUExRyxnQkFBVSxVQUFVLENBQUMsNEJBQTRCLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUNsRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyw5RUFBdEUsZ0JBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLHpGQUFqRixnQkFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsRUFBRTtvQkFDdkUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLG5GQUF6RSxvQkFBVSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQy9ELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsMUVBQWhFLG9CQUFVLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVE7MEJBQ2xELE9BQU8sakNBQXJCLDBCQUFjLE9BQU87MEJBQ1AsS0FBSyxDQUFDLGhDQUFwQiwwQkFBYyxLQUFLLENBQUM7aUJBQ1gsakJBQVQsaUJBQVM7YUFDRixiQUFQLGFBQU87QUFDUDtZQUNNLElBQUksTUFBTSxHQUFXLElBQUksQ0FBQyw5QkFBSixZQUF0QixJQUFJLE1BQU0sR0FBVyxJQUFJLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLDdFQUF2RSxZQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUN2RTtnQkFBUSxNQUFNLElBQUksR0FBeUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsaEVBQTdDLGdCQUF6QixNQUFNLElBQUksR0FBeUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsMURBQWxELGdCQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3hDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLHpDQUEvQixvQkFBVSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztpQkFDdEIsakJBQVQsaUJBQVM7YUFDRixiQUFQLGFBQU87aUJBQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLGpGQUFyRSxpQkFBSyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ3JFLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQywzREFBbkQsZ0JBQVEsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzVDLGJBQVAsYUFBTztZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUUseERBQWxELFlBQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsckNBQTdCLGdCQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2dCQUNyQixtQkFBbUIsR0FBRyxJQUFJLENBQUMsM0NBQW5DLGdCQUFRLG1CQUFtQixHQUFHLElBQUksQ0FBQzthQUM1QixiQUFQLGFBQU87WUFFRCxPQUFPLElBQUksQ0FBQyx4QkFEbEIsWUFDTSxPQUFPLElBQUksQ0FBQztTQUNiLENBQUMsQ0FBQyxYQUFQLFNBQUssQ0FBQyxDQUFDO1FBRUgsVUFBVSxDQUFDLFFBQVEsSUFBSSxDQUFDLDRCQUE0QixHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDLHZGQURuRixRQUNJLFVBQVUsQ0FBQyxRQUFRLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuRjtBQUVHO1FBQ0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLE1BQU0sRUFBRSxqR0FBdEYsUUFBSCxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQ3ZGLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBSSxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLHREQUF6RCxZQUFNLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBSSxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUNqRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMURBQWxELGdCQUFRLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMzQyxiQUFQLGFBQU87U0FDRixUQUFMLFNBQUs7YUFBTSxiQUFMLGFBQUs7WUFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxsQ0FBNUIsWUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztTQUN2QixUQUFMLFNBQUs7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLHBDQURoQyxRQUNJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxDQUFDLHBEQUE5QyxZQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN6QyxUQUFMLFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFBbUI7SUFBbEIsYUFBYSxqQkFBYSxJQUExQixhQUFhO0FBQUs7UUFDeEIsTUFBTSxJQUFJLEdBQVcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLHJJQUExSCxRQUFYLE1BQU0sSUFBSSxHQUFXLENBQUMsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztBQUN6STtRQUFJLE1BQU0sVUFBVSxHQUFhLEVBQUUsQ0FBQyw5QkFBWCxRQUFyQixNQUFNLFVBQVUsR0FBYSxFQUFFLENBQUM7QUFDcEM7UUFDSSxNQUFNLGNBQWMsR0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQzVFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLEVBQy9ELElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUNoQyxDQUFDLENBQUMsbExBSGlCLFFBQXBCLE1BQU0sY0FBYyxHQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FDNUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksRUFDL0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQ2hDLENBQUMsQ0FBQztRQUNILEtBQUssSUFBSSxLQUFLLEdBQVcsQ0FBQyxFQUFFLEtBQUssR0FBRyxjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsN0RBQWpFLFFBQUksS0FBSyxJQUFJLEtBQUssR0FBVyxDQUFDLEVBQUUsS0FBSyxHQUFHLGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRTtZQUMzRCxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyx0SUFBaEksWUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztTQUMzSCxUQUFMLFNBQUs7UUFFRCxPQUFPLFVBQVUsQ0FBQywxQkFEdEIsUUFDSSxPQUFPLFVBQVUsQ0FBQztBQUN0QjtBQUVDO0FBQVE7QUFBd0I7QUFDaEM7SUFEUyxjQUFjLENBQUMsS0FBYSx4QkFDN0IsSUFEQyxjQUFjLENBQUMsS0FBYTtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSx6QkFEcUIsUUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZixJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsRUFBRSw1RkFBdEYsWUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsRUFBRTtBQUN0RjtnQkFBUSxNQUFNLE1BQU0sR0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLDFFQUF6QyxnQkFBekIsTUFBTSxNQUFNLEdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQztnQkFDbEUsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sOUNBQXRDLGdCQUFRLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNO29CQUMxQixLQUFLLElBQUksTUFBTSxuQ0FBM0Isb0JBQVksS0FBSyxJQUFJLE1BQU07b0JBQ2YsS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsaERBQXhDLG9CQUFZLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUM5QixPQUFPLElBQUksQ0FBQyxoQ0FBdEIsb0JBQVUsT0FBTyxJQUFJLENBQUM7aUJBQ2IsakJBQVQsaUJBQVM7cUJBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sbkRBQW5DLHFCQUFLLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNO29CQUMxQixLQUFLLElBQUksTUFBTSxuQ0FBbEMsb0JBQW1CLEtBQUssSUFBSSxNQUFNO29CQUNmLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLGhEQUEvQyxvQkFBbUIsS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7b0JBQ3JDLE9BQU8sSUFBSSxDQUFDLGhDQUF0QixvQkFBVSxPQUFPLElBQUksQ0FBQztpQkFDYixqQkFBVCxpQkFBUzthQUNGLGJBQVAsYUFBTztpQkFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsM0RBQS9DLGlCQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRTtnQkFDL0MsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxoREFBeEMsZ0JBQVEsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtvQkFDOUIsT0FBTyxJQUFJLENBQUMsaENBQXRCLG9CQUFVLE9BQU8sSUFBSSxDQUFDO2lCQUNiLGpCQUFULGlCQUFTO2FBQ0YsYkFBUCxhQUFPO2lCQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSx0RkFBMUUsaUJBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUMxRSxPQUFPLElBQUksQ0FBQyw1QkFBcEIsZ0JBQVEsT0FBTyxJQUFJLENBQUM7YUFDYixiQUFQLGFBQU87U0FDRixUQUFMLFNBQUs7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsckZBRGpGLFFBQ0ksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzNFLE9BQU8sSUFBSSxDQUFDLHhCQUFsQixZQUFNLE9BQU8sSUFBSSxDQUFDO1NBQ2IsVEFBTCxTQUFLO1FBRUQsT0FBTyxLQUFLLENBQUMsckJBRGpCLFFBQ0ksT0FBTyxLQUFLLENBQUM7QUFDakI7QUFFQztBQUFRO0FBQW1CO0lBQ2xCLGdCQUFnQixwQkFEVSxJQUMxQixnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsaERBRGIsUUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUU7WUFDdEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLDNHQUFyRyxZQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMvRixJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyx4REFBbEQsWUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUNsRDtZQUFNLE1BQU0sUUFBUSxHQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyx6REFBOUIsWUFBdkIsTUFBTSxRQUFRLEdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXO2tCQUNqRCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxsRkFBMUUsa0JBQVUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVM7a0JBQ2hFLENBQUMsQ0FBQyxwQkFBWixrQkFBVSxDQUFDLENBQUM7WUFDTixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLHpEQUFuRCxZQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDOUMsVEFBTCxTQUFLO0FBQ0w7QUFFQztBQUFRO0FBQW1CO0lBQ2xCLGVBQWUsbkJBRFcsSUFDMUIsZUFBZTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSwvQ0FEYixRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRTtZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMseEdBQWxHLFlBQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzVGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLHZEQUFqRCxZQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0FBQ2pEO1lBQU0sTUFBTSxRQUFRLEdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLHpEQUE5QixZQUF2QixNQUFNLFFBQVEsR0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVc7a0JBQ2pELENBQUMsbkJBQVgsa0JBQVUsQ0FBQztrQkFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGxGQUExRSxrQkFBVSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMseERBQWxELFlBQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM3QyxUQUFMLFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFBd0I7QUFDdEI7QUFBbUI7SUFBcEIsYUFBYSxDQUFDLEtBQWtCLEVBQUUsTUFBYywvQkFBcEIsSUFBNUIsYUFBYSxDQUFDLEtBQWtCLEVBQUUsTUFBYztRQUN0RCxJQUFJLEtBQUssS0FBSyxXQUFXLENBQUMsR0FBRyxFQUFFLHZDQUQyQixRQUMxRCxJQUFJLEtBQUssS0FBSyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsekNBQW5DLFlBQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM5QixUQUFMLFNBQUs7YUFBTSxJQUFJLEtBQUssS0FBSyxXQUFXLENBQUMsR0FBRyxFQUFFLDVDQUFwQyxhQUFLLElBQUksS0FBSyxLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLDFDQUFwQyxZQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQixUQUFMLFNBQUs7UUFFRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxsQ0FEOUIsUUFDSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxoQ0FBNUIsUUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUseEJBQXBCLFFBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsdkNBQWpDLFlBQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7U0FDNUIsVEFBTCxTQUFLO0FBQ0w7QUFFQztBQUFRO0FBQTRCO0FBQXlCO0FBQW1CO0lBQ3ZFLGlCQUFpQixDQUFDLFNBQXNCLEVBQUUsTUFBYyx2Q0FBakUsSUFBUyxpQkFBaUIsQ0FBQyxTQUFzQixFQUFFLE1BQWM7QUFBSTtRQUNsRSxNQUFNLGNBQWMsR0FBVyxDQUFDLFNBQVMsS0FBSyxXQUFXLENBQUMsR0FBRyw3REFBaEQsUUFBYixNQUFNLGNBQWMsR0FBVyxDQUFDLFNBQVMsS0FBSyxXQUFXLENBQUMsR0FBRztjQUN6RCxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxsREFBNUMsY0FBUSxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUztjQUNwQyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLG5EQUE3QyxjQUFRLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7QUFDN0M7UUFBSSxNQUFNLGFBQWEsR0FBVyxNQUFNLEdBQUcsY0FBYyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsckZBQWhFLFFBQXJCLE1BQU0sYUFBYSxHQUFXLE1BQU0sR0FBRyxjQUFjLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztBQUN6RjtRQUFJLE1BQU0sV0FBVyxHQUFXLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQywzRUFBdEQsUUFBckIsTUFBTSxXQUFXLEdBQVcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDO1FBRTNFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLGxEQUQ5QyxRQUNJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFO1lBQ3hDLE9BQU8sYUFBYSxDQUFDLGpDQUEzQixZQUFNLE9BQU8sYUFBYSxDQUFDO1NBQ3RCLFRBQUwsU0FBSztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsSUFBSSxTQUFTLEtBQUssV0FBVyxDQUFDLEdBQUcsMUVBRHRFLFFBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLFNBQVMsS0FBSyxXQUFXLENBQUMsR0FBRzthQUM5RCxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLFNBQVMsS0FBSyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsOUVBQXpFLGFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsSUFBSSxTQUFTLEtBQUssV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ25FLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUMseERBQWxELFlBQU0sT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUM3QyxUQUFMLFNBQUs7YUFBTSxiQUFMLGFBQUs7WUFDTCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsckVBQS9ELFlBQU0sT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQzFELFRBQUwsU0FBSztBQUNMO0FBRUM7QUFBUTtBQUF5QjtBQUM5QjtJQUFNLGVBQWUsQ0FBQyxNQUFjLDFCQUE1QixJQUFGLGVBQWUsQ0FBQyxNQUFjO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsbERBREYsUUFDeEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxwR0FBaEcsUUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsaEdBQTVGLFFBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRXhGLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSw5RUFEMUUsUUFDSSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDcEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxuQ0FBN0IsWUFBTSxJQUFJLENBQUMsZUFBZSxHQUFHO2dCQUNyQixlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLHRFQUE5RCxnQkFBUSxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO2FBQ3ZELENBQUMsZEFBUixhQUFPLENBQUM7U0FDSCxUQUFMLFNBQUs7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsbERBRDlDLFFBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFO1lBQ3hDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDLHREQUFoRCxZQUFNLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1NBQzNDLFRBQUwsU0FBSztBQUNMO0FBRUM7QUFBUTtBQUF5QjtBQUMvQjtJQUFPLGdCQUFnQixDQUFDLE1BQWMsM0JBQTlCLElBQUQsZ0JBQWdCLENBQUMsTUFBYztRQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGxEQURELFFBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsdEdBQWxHLFFBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLGhHQUE1RixRQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUV4RixJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsOUVBRDFFLFFBQ0ksSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ3BFLElBQUksQ0FBQyxlQUFlLEdBQUcsbkNBQTdCLFlBQU0sSUFBSSxDQUFDLGVBQWUsR0FBRztnQkFDckIsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyx0RUFBOUQsZ0JBQVEsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQzthQUN2RCxDQUFDLGRBQVIsYUFBTyxDQUFDO1NBQ0gsVEFBTCxTQUFLO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLGxEQUE5QyxRQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRTtZQUN4QyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQyx0REFBaEQsWUFBTSxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQztTQUMzQyxUQUFMLFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFBbUI7SUFDbEIsa0NBQWtDLHRDQUEzQyxJQUFTLGtDQUFrQztBQUFLO1FBRTdDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxoREFEeUIsUUFDakUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFO1lBQ3RDLE9BQU8sbkJBQWIsWUFBTSxPQUFPO1NBQ1IsVEFBTCxTQUFLO0FBQ0w7UUFBSSxJQUFJLGdCQUFnQixHQUFZLEtBQUssQ0FBQyxyQ0FBakIsUUFBckIsSUFBSSxnQkFBZ0IsR0FBWSxLQUFLLENBQUM7QUFDMUM7UUFBSSxJQUFJLGVBQWUsR0FBWSxLQUFLLENBQUMscENBQWhCLFFBQXJCLElBQUksZUFBZSxHQUFZLEtBQUssQ0FBQztBQUN6QztRQUFJLE1BQU0saUJBQWlCLEdBQVksSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLDFGQUF0RSxRQUFyQixNQUFNLGlCQUFpQixHQUFZLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUMvRjtRQUFJLE1BQU0sZ0JBQWdCLEdBQVksSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLHhGQUFwRSxRQUFyQixNQUFNLGdCQUFnQixHQUFZLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUM3RjtRQUFJLE1BQU0sZ0JBQWdCLEdBQVksSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLHhGQUFwRSxRQUFyQixNQUFNLGdCQUFnQixHQUFZLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUM3RjtRQUFJLE1BQU0sc0JBQXNCLEdBQVksSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLDlGQUExRSxRQUFyQixNQUFNLHNCQUFzQixHQUFZLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNuRztRQUFJLE1BQU0scUJBQXFCLEdBQVksSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLDVGQUF4RSxRQUFyQixNQUFNLHFCQUFxQixHQUFZLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUU3RixJQUFJLGlCQUFpQixFQUFFLC9CQUQzQixRQUNJLElBQUksaUJBQWlCLEVBQUU7WUFDckIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHBDQUE5QixZQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsMUNBQXBDLFlBQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1NBQy9CLFRBQUwsU0FBSzthQUFNLGJBQUwsYUFBSztZQUNMLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxyQ0FBL0IsWUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLDFDQUFwQyxZQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUMvQixUQUFMLFNBQUs7UUFFRCxJQUFJLGdCQUFnQixFQUFFLDlCQUQxQixRQUNJLElBQUksZ0JBQWdCLEVBQUU7WUFDcEIsZUFBZSxHQUFHLElBQUksQ0FBQyxuQ0FBN0IsWUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyx6Q0FBbkMsWUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDOUIsVEFBTCxTQUFLO2FBQU0sYkFBTCxhQUFLO1lBQ0wsZUFBZSxHQUFHLEtBQUssQ0FBQyxwQ0FBOUIsWUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyx6Q0FBbkMsWUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDOUIsVEFBTCxTQUFLO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLHhCQURwQixRQUNJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNwQjtZQUFNLE1BQU0sUUFBUSxHQUFZLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQyw5R0FBcEYsWUFBdkIsTUFBTSxRQUFRLEdBQVksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxHQUFHLHFCQUFxQixHQUFHLGdCQUFnQixDQUFDO0FBQ2pIO1lBQU0sTUFBTSxTQUFTLEdBQVksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxHQUFHLHNCQUFzQixHQUFHLGlCQUFpQixDQUFDLGpIQUF2RixZQUF2QixNQUFNLFNBQVMsR0FBWSxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLEdBQUcsc0JBQXNCLEdBQUcsaUJBQWlCLENBQUM7WUFFOUcsSUFBSSxRQUFRLEVBQUUsMUJBRHBCLFlBQ00sSUFBSSxRQUFRLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLDdDQUFyQyxnQkFBUSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDOUIsYkFBUCxhQUFPO2lCQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsdkNBQTNCLGlCQUFLLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyw3Q0FBckMsZ0JBQVEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO2FBQzlCLGJBQVAsYUFBTztBQUNQO1lBRU0sSUFBSSxTQUFTLEVBQUUsM0JBQWhCLFlBQUMsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLDlDQUF0QyxnQkFBUSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDL0IsYkFBUCxhQUFPO2lCQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSx4Q0FBNUIsaUJBQUssSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsOUNBQXRDLGdCQUFRLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUMvQixiQUFQLGFBQU87U0FDRixUQUFMLFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFBd0I7QUFBbUI7SUFBMUMsc0JBQXNCLENBQUMsS0FBMkIsaENBQUEsSUFBbEQsc0JBQXNCLENBQUMsS0FBMkI7QUFBSTtRQUM1RCxNQUFNLEdBQUcsR0FBVyxLQUFLLENBQUMsUUFBUSxDQUFDLG5DQUF2QixRQUFaLE1BQU0sR0FBRyxHQUFXLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDdkM7UUFBSSxNQUFNLEdBQUcsR0FBVyxLQUFLLENBQUMsU0FBUyxDQUFDLHBDQUFmLFFBQXJCLE1BQU0sR0FBRyxHQUFXLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDeEM7UUFBSSxNQUFNLFFBQVEsR0FBVyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLHpEQUFwQyxRQUFyQixNQUFNLFFBQVEsR0FBVyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDO0FBQzdEO1FBQUksTUFBTSxRQUFRLEdBQVcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQywxREFBckMsUUFBckIsTUFBTSxRQUFRLEdBQVcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQztRQUMxRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVywzQ0FBdkMsUUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVztjQUMvQixHQUFHLEdBQUcsR0FBRyxJQUFJLFFBQVEsR0FBRyxDQUFDLHZDQUFqQyxjQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksUUFBUSxHQUFHLENBQUM7Y0FDekIsR0FBRyxJQUFJLFFBQVEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLDdDQUF2QyxjQUFRLEdBQUcsSUFBSSxRQUFRLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN2QztBQUVDO0FBQVE7QUFBd0I7QUFBbUI7SUFBMUMscUJBQXFCLENBQUMsS0FBMkIsL0JBQUMsSUFBbEQscUJBQXFCLENBQUMsS0FBMkI7QUFBSTtRQUMzRCxNQUFNLEdBQUcsR0FBVyxLQUFLLENBQUMsUUFBUSxDQUFDLG5DQUF2QixRQUFaLE1BQU0sR0FBRyxHQUFXLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDdkM7UUFBSSxNQUFNLEdBQUcsR0FBVyxLQUFLLENBQUMsU0FBUyxDQUFDLHBDQUFmLFFBQXJCLE1BQU0sR0FBRyxHQUFXLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDeEM7UUFBSSxNQUFNLE9BQU8sR0FBVyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLHZEQUFsQyxRQUFyQixNQUFNLE9BQU8sR0FBVyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO0FBQzNEO1FBQUksTUFBTSxPQUFPLEdBQVcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyx4REFBbkMsUUFBckIsTUFBTSxPQUFPLEdBQVcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztRQUN4RCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVywzQ0FBdkMsUUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVztjQUMvQixHQUFHLElBQUksT0FBTyxHQUFHLE9BQU8sR0FBRyxDQUFDLDFDQUFwQyxjQUFRLEdBQUcsSUFBSSxPQUFPLEdBQUcsT0FBTyxHQUFHLENBQUM7Y0FDNUIsR0FBRyxHQUFHLEdBQUcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLHZDQUFqQyxjQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNqQztBQUVDO0FBQVE7QUFBbUI7SUFDbEIsa0JBQWtCLHRCQURRLElBQzFCLGtCQUFrQjtBQUFLO1FBQzdCLElBQUksUUFBUSxHQUFXLENBQUMsQ0FBQyx6QkFBVixRQUFmLElBQUksUUFBUSxHQUFXLENBQUMsQ0FBQztBQUM3QjtRQUFJLElBQUksU0FBUyxHQUFXLENBQUMsQ0FBQywxQkFBTCxRQUFyQixJQUFJLFNBQVMsR0FBVyxDQUFDLENBQUM7QUFDOUI7UUFBSSxNQUFNLHVCQUF1QixHQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxwRUFBaEQsUUFBckIsTUFBTSx1QkFBdUIsR0FBWSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVc7Y0FDL0QsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixuREFBL0MsY0FBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CO2NBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsbkRBQS9DLGNBQVUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQztBQUMvQztRQUFJLE1BQU0sZ0JBQWdCLEdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLDdEQUF4QyxRQUFyQixNQUFNLGdCQUFnQixHQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVztjQUN2RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsdkVBQW5FLGNBQVUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CO2NBQ3pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHhFQUFwRSxjQUFVLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBRWhFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSx4QkFEcEIsUUFDSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxsR0FBNUYsWUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0RixRQUFRLEdBQUcsZ0JBQWdCLENBQUMseENBQWxDLFlBQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDO1NBQzdCLFRBQUwsU0FBSzthQUFNLGJBQUwsYUFBSztZQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLDVGQUF0RixZQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFO0FBQ3RGO2dCQUFRLE1BQU0sTUFBTSxHQUFXLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsMUVBQXpDLGdCQUF6QixNQUFNLE1BQU0sR0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDO0FBQzFFO2dCQUFRLE1BQU0sY0FBYyxHQUFXLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMscEVBQW5DLGdCQUF6QixNQUFNLGNBQWMsR0FBVyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BFO2dCQUFRLE1BQU0sd0JBQXdCLEdBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLDdFQUE3QyxnQkFBekIsTUFBTSx3QkFBd0IsR0FBWSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVc7c0JBQ2hFLElBQUksQ0FBQyxZQUFZLElBQUksTUFBTSxqREFBekMsc0JBQWMsSUFBSSxDQUFDLFlBQVksSUFBSSxNQUFNO3NCQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxqREFBekMsc0JBQWMsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7Z0JBQ2pDLElBQUksd0JBQXdCLEVBQUUsOUNBQXRDLGdCQUFRLElBQUksd0JBQXdCLEVBQUU7b0JBQzVCLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQyxoRkFBdEUsb0JBQVUsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO29CQUM1RCxRQUFRLEdBQUcsY0FBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx6RUFBL0Qsb0JBQVUsUUFBUSxHQUFHLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7aUJBQ3RELGpCQUFULGlCQUFTO3FCQUFNLHJCQUFMLHFCQUFLO29CQUNMLFNBQVMsR0FBRyxjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxoRkFBdEUsb0JBQVUsU0FBUyxHQUFHLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO29CQUM1RCxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsekZBQS9FLG9CQUFVLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztpQkFDdEUsakJBQVQsaUJBQVM7YUFDRixiQUFQLGFBQU87aUJBQU0sSUFBSSx1QkFBdUIsRUFBRSw5Q0FBbEMsaUJBQUssSUFBSSx1QkFBdUIsRUFBRTtnQkFDbEMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLHBJQUE1SCxnQkFBUSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3BILFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsakdBQXpGLGdCQUFRLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDbEYsYkFBUCxhQUFPO2lCQUFNLGpCQUFMLGlCQUFLO2dCQUNMLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx0RkFBOUUsZ0JBQVEsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO2dCQUN0RSxRQUFRLEdBQUcsQ0FBQyxDQUFDLDdCQUFyQixnQkFBUSxRQUFRLEdBQUcsQ0FBQyxDQUFDO2FBQ2QsYkFBUCxhQUFPO1NBQ0YsVEFBTCxTQUFLO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyx6REFBckQsUUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsdkRBQW5ELFFBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxuRUFBL0QsUUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRTtZQUN6RCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLDlDQUF4QyxZQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsMUVBQWxFLGdCQUFRLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsbEVBQTFELGdCQUFRLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyx6REFBakQsZ0JBQVEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsNEJBQTRCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLHZIQUEvRyxnQkFBUSxJQUFJLENBQUMsNEJBQTRCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUN2RyxJQUFJLENBQUMsNEJBQTRCLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxwRkFBNUUsZ0JBQVEsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUM7YUFDckUsYkFBUCxhQUFPO2lCQUFNLGpCQUFMLGlCQUFLO2dCQUNMLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsekVBQWpFLGdCQUFRLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3pELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsakVBQXpELGdCQUFRLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyx6REFBakQsZ0JBQVEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsNkJBQTZCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLHhIQUFoSCxnQkFBUSxJQUFJLENBQUMsNkJBQTZCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUN4RyxJQUFJLENBQUMsNkJBQTZCLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxyRkFBN0UsZ0JBQVEsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUM7YUFDdEUsYkFBUCxhQUFPO1NBQ0YsVEFBTCxTQUFLO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsbkZBQS9FLFFBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7QUFDL0U7WUFBTSxNQUFNLEtBQUssR0FBVyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyx0REFBM0IsWUFBdkIsTUFBTSxLQUFLLEdBQVcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLFFBQVEsR0FBRyw1QkFBdEIsWUFBTSxJQUFJLENBQUMsUUFBUSxHQUFHO2dCQUNkLGVBQWUsRUFBRSxLQUFLLHRDQUE5QixnQkFBUSxlQUFlLEVBQUUsS0FBSzthQUN2QixDQUFDLGRBQVIsYUFBTyxDQUFDO1NBQ0gsVEFBTCxTQUFLO2FBQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLEVBQUUseEZBQWhGLGFBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7QUFDdEY7WUFBTSxNQUFNLE1BQU0sR0FBVyxDQUFDLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsdEdBQTNFLFlBQXZCLE1BQU0sTUFBTSxHQUFXLENBQUMsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQztrQkFDMUYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLGxGQUE5RSxrQkFBYyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUM7a0JBQ2hFLENBQUMsQ0FBQyxwQkFBaEIsa0JBQWMsQ0FBQyxDQUFDO0FBQ2hCO1lBQU0sTUFBTSxRQUFRLEdBQVksQ0FBQyxNQUFNLEdBQUcsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLHVCQUF1QixNQUFNLE1BQU0sR0FBRyxRQUFRLElBQUksQ0FBQyxJQUFJLHVCQUF1QixDQUFDLENBQUMseElBQTlHLFlBQXZCLE1BQU0sUUFBUSxHQUFZLENBQUMsTUFBTSxHQUFHLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsTUFBTSxNQUFNLEdBQUcsUUFBUSxJQUFJLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxDQUFDO0FBQzNJO1lBQU0sTUFBTSxTQUFTLEdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLHZEQUE1QixZQUF2QixNQUFNLFNBQVMsR0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVE7a0JBQzdDLFFBQVEsR0FBRyxRQUFRLEdBQUcsS0FBSyw3Q0FBdkMsa0JBQVksUUFBUSxHQUFHLFFBQVEsR0FBRyxLQUFLO2tCQUMzQixRQUFRLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQyw5Q0FBeEMsa0JBQVksUUFBUSxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUM7WUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyw1QkFBdEIsWUFBTSxJQUFJLENBQUMsUUFBUSxHQUFHO2dCQUNkLGVBQWUsRUFDYixxQkFBcUIsdERBRC9CLGdCQUFRLGVBQWUsRUFDYixxQkFBcUI7b0JBQ3JCLFNBQVMsN0JBQW5CLG9CQUFVLFNBQVM7b0JBQ1QsSUFBSSx4QkFBZCxvQkFBVSxJQUFJO29CQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsSUFBSSw5REFBcEQsb0JBQVUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJO29CQUMxQyxNQUFNLDFCQUFoQixvQkFBVSxNQUFNO29CQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsRUFBRSw1REFBbEQsb0JBQVUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO29CQUN4QyxRQUFRLDVCQUFsQixvQkFBVSxRQUFRO2FBQ1gsQ0FBQyxkQUFSLGFBQU8sQ0FBQztZQUNGLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsM0NBQXJDLFlBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsaERBQXhDLGdCQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCO29CQUM5QixTQUFTLDdCQUFuQixvQkFBVSxTQUFTO3lCQUNSLE1BQU0sL0JBQWpCLHlCQUFXLE1BQU07NEJBQ0wsU0FBUyxyQ0FBckIsNEJBQVksU0FBUzs0QkFDVCxRQUFRLHBDQUFwQiw0QkFBWSxRQUFROzZCQUNQLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQyx2RUFBdkQsNkJBQWEsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUM3QyxJQUFJLENBQUMsN0JBQWYsd0JBQVUsSUFBSSxDQUFDO2dCQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyw1Q0FBcEMsZ0JBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjO29CQUMxQixPQUFPLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxDQUFDLGhHQUF0RixvQkFBVSxPQUFPLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQy9FLGJBQVAsYUFBTztpQkFBTSxqQkFBTCxpQkFBSztnQkFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixoREFBeEMsZ0JBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0I7b0JBQzlCLE1BQU0sMUJBQWhCLG9CQUFVLE1BQU07d0JBQ04sUUFBUSxoQ0FBbEIsd0JBQVUsUUFBUTt5QkFDUCxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxqRUFBbkQseUJBQVcsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7d0JBQ3pDLFdBQVcsQ0FBQyxwQ0FBdEIsd0JBQVUsV0FBVyxDQUFDO2dCQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyw1Q0FBcEMsZ0JBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjO29CQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDLHpGQUEvRSxvQkFBVSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDO2FBQ3hFLGJBQVAsYUFBTztTQUNGLFRBQUwsU0FBSztBQUNMO0FBRUM7QUFBUTtBQUFtQjtJQUNsQixvQkFBb0IseEJBRE0sSUFDMUIsb0JBQW9CO1FBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSx4QkFEZSxRQUMvQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQzFDLElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FDZixDQUFDLHJGQUhSLFlBQU0sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUMxQyxJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FBQyxTQUFTLENBQ2YsQ0FBQztTQUNILFRBQUwsU0FBSztRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsakVBQTdELFFBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3RDtBQUVDO0FBQVE7QUFBOEI7QUFBbUI7SUFDaEQsZUFBZSxDQUFDLFdBQXdCLC9CQURnQixJQUN4RCxlQUFlLENBQUMsV0FBd0I7UUFDOUMsSUFBSSxXQUFXLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRSw3Q0FEYSxRQUNsRCxJQUFJLFdBQVcsS0FBSyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQ3JDLElBQUksQ0FBQyxTQUFTLEVBQ2QsV0FBVyxDQUNaLENBQUMsakZBSFIsWUFBTSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUNyQyxJQUFJLENBQUMsU0FBUyxFQUNkLFdBQVcsQ0FDWixDQUFDO1NBQ0gsVEFBTCxTQUFLO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FDckMsSUFBSSxDQUFDLEtBQUssRUFDVixXQUFXLENBQ1osQ0FBQyx6RUFITixRQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQ3JDLElBQUksQ0FBQyxLQUFLLEVBQ1YsV0FBVyxDQUNaLENBQUM7QUFDTjtBQUVDO0FBQVE7QUFBd0I7QUFBbUI7SUFDMUMsWUFBWSxDQUFDLEtBQWEsdEJBRHdCLElBQ2xELFlBQVksQ0FBQyxLQUFhO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMscERBRFIsUUFDcEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRDtBQUVDO0FBQVE7QUFBbUI7SUFDbEIsbUJBQW1CLHZCQURPLElBQzFCLG1CQUFtQjtBQUFLO1FBQzlCLElBQUksY0FBYyxHQUFZLElBQUksQ0FBQyxsQ0FBcEIsUUFBZixJQUFJLGNBQWMsR0FBWSxJQUFJLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSwxQ0FBdEMsUUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQ2hDLGNBQWMsMUJBQXBCLFlBQU0sY0FBYztnQkFDWixJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsdklBQS9ILGdCQUFRLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztTQUMxSCxUQUFMLFNBQUs7YUFBTSxiQUFMLGFBQUs7WUFDTCxjQUFjLDFCQUFwQixZQUFNLGNBQWM7Z0JBQ1osSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLHZJQUEvSCxnQkFBUSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7U0FDMUgsVEFBTCxTQUFLO1FBRUQsSUFBSSxjQUFjLEVBQUUsNUJBRHhCLFFBQ0ksSUFBSSxjQUFjLEVBQUU7QUFDeEI7WUFBTSxNQUFNLGVBQWUsR0FBVyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLDNGQUFoRSxZQUF2QixNQUFNLGVBQWUsR0FBVyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdGO1lBQU0sTUFBTSxnQkFBZ0IsR0FBVyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLDlGQUFuRSxZQUF2QixNQUFNLGdCQUFnQixHQUFXLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEc7WUFBTSxNQUFNLGtCQUFrQixHQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxuRUFBeEMsWUFBdkIsTUFBTSxrQkFBa0IsR0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVc7a0JBQzNELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxuRkFBM0Usa0JBQVUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDO2tCQUNqRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxwRkFBNUUsa0JBQVUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFFdEUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLG5FQUQ3RCxZQUNNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUM3RDtZQUFNLE1BQU0sR0FBRyxHQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLDNEQUFoQyxZQUF2QixNQUFNLEdBQUcsR0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQjtrQkFDbkQsSUFBSSxDQUFDLEdBQUcsQ0FDTixJQUFJLENBQUMsR0FBRyxDQUNOLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLHJFQUYvQyxrQkFBVSxJQUFJLENBQUMsR0FBRyxDQUNOLElBQUksQ0FBQyxHQUFHLENBQ04sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVE7b0JBQy9CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEdBQUcsQ0FBQywxREFBdEQsb0JBQWdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEdBQUcsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQ3pDLENBQUMsQ0FDRixFQUNELElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQ3BFLHJJQUpYLG9CQUFnQixJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxHQUFHLENBQUMsRUFDekMsQ0FBQyxDQUNGLEVBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FDcEU7a0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyx2SUFBL0gsa0JBQVUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUV6SCxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLHZEQURqRCxZQUNNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDLDlDQUF4QyxZQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLENBQUMsOUNBQXhDLFlBQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyw3Q0FBdkMsWUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbEMsVEFBTCxTQUFLO2FBQU0sYkFBTCxhQUFLO1lBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsNUVBQXRFLFlBQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLDFFQUFwRSxZQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLENBQUMsOUNBQXhDLFlBQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyw5Q0FBeEMsWUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxDQUFDLDdDQUF2QyxZQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNsQyxUQUFMLFNBQUs7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsbERBQTlDLFFBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFO1lBQ3hDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDLHREQUFoRCxZQUFNLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1NBQzNDLFRBQUwsU0FBSztBQUNMO0FBRUM7QUFBUTtBQUF3QjtBQUF3QjtBQUFtQjtJQUNsRSxlQUFlLENBQUMsS0FBYSxFQUFFLEtBQWdCLGhDQUQyQixJQUMxRSxlQUFlLENBQUMsS0FBYSxFQUFFLEtBQWdCO1FBQ3JELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUUsckhBRHBELFFBQ3pELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUU7WUFDM0csS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsN0NBQXZDLFlBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEMsVEFBTCxTQUFLO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMseERBQXBELFFBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEQ7QUFFQztBQUFRO0FBQXdCO0FBQzNCO0FBQW1CO0lBQWYsU0FBUyxDQUFDLEtBQWEsRUFBRSxVQUFtQiwvQkFBckIsSUFBdkIsU0FBUyxDQUFDLEtBQWEsRUFBRSxVQUFtQjtBQUFJO1FBQ3RELE1BQU0sSUFBSSxHQUFXLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxyR0FBeEYsUUFBYixNQUFNLElBQUksR0FBVyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7QUFDekc7UUFBSSxJQUFJLGlCQUFpQixHQUFXLFVBQVUsQ0FBQyxxQkFBcUIsQ0FDOUQsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsM0lBRHZELFFBQXJCLElBQUksaUJBQWlCLEdBQVcsVUFBVSxDQUFDLHFCQUFxQixDQUM5RCxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1RSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDLGpFQUE3RCxRQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDekQsT0FBTyxVQUFVLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyw3SEFBekgsUUFBSSxPQUFPLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3pIO0FBRUM7QUFBUTtBQUFzQjtBQUNwQjtJQUFELGVBQWUsQ0FBQyxHQUFXLHZCQUFsQixJQUFULGVBQWUsQ0FBQyxHQUFXO0FBQUk7UUFDckMsSUFBSSxFQUFFLEdBQTZCLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxuREFBeEQsUUFBYixJQUFJLEVBQUUsR0FBNkIsV0FBVyxDQUFDLHFCQUFxQixDQUFDO1FBQ3JFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLHBGQUFoRixRQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1lBQzFFLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLHhEQUFsRCxZQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDO1NBQzdDLFRBQUwsU0FBSzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsNUNBQXBDLGFBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtZQUNwQyxFQUFFLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixDQUFDLGhEQUExQyxZQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsa0JBQWtCLENBQUM7U0FDckMsVEFBTCxTQUFLO1FBRUQsR0FBRyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsMUZBRHRGLFFBQ0ksR0FBRyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEY7UUFBSSxJQUFJLE9BQU8sR0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsN0VBQXhELFFBQXJCLElBQUksT0FBTyxHQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RSxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxwREFBaEQsUUFBSSxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMxQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLHhCQUFsQixZQUFNLE9BQU8sR0FBRyxDQUFDLENBQUM7U0FDYixUQUFMLFNBQUs7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLDFDQUF0QyxRQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7WUFDaEMsT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsbENBQTVCLFlBQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7U0FDdkIsVEFBTCxTQUFLO1FBQ0QsT0FBTyxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGhEQUE1QyxRQUFJLE9BQU8sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztBQUM1QztBQUVDO0FBQVE7QUFBMkI7QUFDcEI7SUFBTixlQUFlLENBQUMsUUFBZ0IsNUJBQWxCLElBQWQsZUFBZSxDQUFDLFFBQWdCO0FBQUk7UUFDMUMsSUFBSSxPQUFPLEdBQVcsUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx4REFBM0MsUUFBYixJQUFJLE9BQU8sR0FBVyxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ3hELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsMUNBQXRDLFFBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRTtZQUNoQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxsQ0FBNUIsWUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQztTQUN2QixUQUFMLFNBQUs7QUFDTDtRQUFJLElBQUksRUFBRSxHQUE0QixXQUFXLENBQUMscUJBQXFCLENBQUMsbkRBQS9DLFFBQXJCLElBQUksRUFBRSxHQUE0QixXQUFXLENBQUMscUJBQXFCLENBQUM7UUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLEVBQUUscEZBQWhGLFFBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLEVBQUU7WUFDMUUsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMseERBQWxELFlBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUM7U0FDN0MsVEFBTCxTQUFLO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSw1Q0FBcEMsYUFBSyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO1lBQ3BDLEVBQUUsR0FBRyxXQUFXLENBQUMsa0JBQWtCLENBQUMsaERBQTFDLFlBQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztTQUNyQyxUQUFMLFNBQUs7QUFDTDtRQUFJLE1BQU0sS0FBSyxHQUFXLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxqRkFBNUQsUUFBckIsTUFBTSxLQUFLLEdBQVcsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pGLE9BQU8sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxqRUFBN0QsUUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDN0Q7QUFFQztBQUFRO0FBQXdCO0FBQ3JCO0FBQW1CO0lBQXJCLFVBQVUsQ0FBQyxLQUE0QixFQUFFLGFBQXNCLG5DQUFsQyxJQUE3QixVQUFVLENBQUMsS0FBNEIsRUFBRSxhQUFzQjtRQUNyRSxJQUFJLEtBQUssWUFBWSxVQUFVLEVBQUUsekNBRHdDLFFBQ3pFLElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRTtZQUMvQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyw3RUFBdkUsWUFBTSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUNsRSxUQUFMLFNBQUs7QUFDTDtRQUNJLElBQUksVUFBVSxHQUFXLENBQUMsQ0FBQywzQkFBUCxRQUFwQixJQUFJLFVBQVUsR0FBVyxDQUFDLENBQUM7QUFDL0I7UUFBSSxNQUFNLE9BQU8sR0FBYyxLQUFLLENBQUMsT0FBTyxDQUFDLHRDQUFwQixRQUFyQixNQUFNLE9BQU8sR0FBYyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEVBQUUsM0RBQXZELFFBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUNqRCxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxyREFBdkQsWUFBTSxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0MsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLGFBQWEsRUFBRSw3REFBckQsZ0JBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLGFBQWEsRUFBRTtvQkFDM0MsVUFBVSxHQUFHLENBQUMsQ0FBQyxuQ0FBekIsb0JBQVUsVUFBVSxHQUFHLENBQUMsQ0FBQztvQkFDZixNQUFNLDFCQUFoQixvQkFBVSxNQUFNO2lCQUNQLGpCQUFULGlCQUFTO2FBQ0YsYkFBUCxhQUFPO1NBQ0YsVEFBTCxTQUFLO0FBQ0w7QUFFRztRQUNDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLHJHQUExRixRQUFILE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ2pHO0FBRUM7QUFBUTtBQUF3QjtBQUFpQztBQUFtQjtJQUMzRSxnQkFBZ0IsQ0FBQyxLQUE0QixFQUFFLGFBQXNCLHpDQUE1RSxJQUFPLGdCQUFnQixDQUFDLEtBQTRCLEVBQUUsYUFBc0I7QUFBSTtRQUMvRSxNQUFNLHlCQUF5QixHQUFlLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsaEdBQXZGLFFBQWIsTUFBTSx5QkFBeUIsR0FBZSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3hHO1FBQ0ksTUFBTSxTQUFTLEdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLG5EQUEvQixRQUFwQixNQUFNLFNBQVMsR0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVE7WUFDakQseUJBQXlCLENBQUMsTUFBTSxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyw5RUFBeEUsWUFBTSx5QkFBeUIsQ0FBQyxNQUFNLEdBQUcseUJBQXlCLENBQUMsSUFBSSxDQUFDO0FBQ3hFO1FBQUksSUFBSSxRQUFRLEdBQVcsQ0FBQyxDQUFDLHpCQUFKLFFBQXJCLElBQUksUUFBUSxHQUFXLENBQUMsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLHZDQUFuQyxRQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7WUFDN0IsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLEdBQUcsU0FBUyxDQUFDLDFFQUFwRSxZQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxHQUFHLFNBQVMsQ0FBQztTQUMvRCxUQUFMLFNBQUs7YUFBTSxiQUFMLGFBQUs7WUFDTCxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLEdBQUcsU0FBUyxDQUFDLHpFQUFuRSxZQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsR0FBRyxTQUFTLENBQUM7U0FDOUQsVEFBTCxTQUFLO1FBQ0QsT0FBTyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDVFQUF4RSxRQUFJLE9BQU8sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztBQUN4RTtBQUVDO0FBQVE7QUFBd0I7QUFDckI7SUFBRixnQkFBZ0IsQ0FBQyxLQUE0QiwxQkFBbkMsSUFBVixnQkFBZ0IsQ0FBQyxLQUE0QjtRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSx6QkFEc0MsUUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZixPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsbkNBQTdCLFlBQU0sT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDO1NBQ3hCLFRBQUwsU0FBSztBQUNMO1FBQ0ksTUFBTSxRQUFRLEdBQVcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLHREQUFsQyxRQUFwQixNQUFNLFFBQVEsR0FBVyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUQ7UUFBSSxNQUFNLFdBQVcsR0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsaEZBQTNELFFBQXJCLE1BQU0sV0FBVyxHQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNwRjtRQUFJLE1BQU0sV0FBVyxHQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxoRkFBM0QsUUFBckIsTUFBTSxXQUFXLEdBQVcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWhGLElBQUksV0FBVyxHQUFHLFdBQVcsRUFBRSx2Q0FEbkMsUUFDSSxJQUFJLFdBQVcsR0FBRyxXQUFXLEVBQUU7WUFDN0IsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLG5DQUE3QixZQUFNLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQztTQUN4QixUQUFMLFNBQUs7YUFBTSxJQUFJLFdBQVcsR0FBRyxXQUFXLEVBQUUsNUNBQXBDLGFBQUssSUFBSSxXQUFXLEdBQUcsV0FBVyxFQUFFO1lBQ3BDLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxuQ0FBN0IsWUFBTSxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUM7U0FDeEIsVEFBTCxTQUFLO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLGhEQUF4QyxhQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRTtBQUM5QztZQUNNLE9BQU8sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLGpHQUFyRixZQUFBLE9BQU8sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDO1NBQ3RGLFRBQUwsU0FBSztBQUNMO1FBQ0ksT0FBTyxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsN0ZBQXJGLFFBQUEsT0FBTyxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUM7QUFDekY7QUFFQztBQUFRO0FBQW1CO0lBQ2xCLFVBQVUsZEFEZ0IsSUFDMUIsVUFBVTtBQUFLO1FBQ3JCLE1BQU0sY0FBYyxHQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLC9EQUFqRCxRQUFmLE1BQU0sY0FBYyxHQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO1FBRWhFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSwvQ0FEM0MsUUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUU7WUFDckMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQ3JDLENBQUMsS0FBaUIsS0FBVyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQzVGLENBQUMsaElBRlIsWUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFDckMsQ0FBQyxLQUFpQixLQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDNUYsQ0FBQztTQUNILFRBQUwsU0FBSztRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxqREFEN0MsUUFDSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQ2xDLENBQUMsS0FBaUIsS0FBVyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQ2pHLENBQUMsbElBRlIsWUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFDbEMsQ0FBQyxLQUFpQixLQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDakcsQ0FBQztZQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUNsQyxDQUFDLEtBQWlCLEtBQVcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUNqRyxDQUFDLGxJQUZSLFlBQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQ2xDLENBQUMsS0FBaUIsS0FBVyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQ2pHLENBQUM7U0FDSCxUQUFMLFNBQUs7YUFBTSxiQUFMLGFBQUs7WUFDTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFDbEMsQ0FBQyxLQUFpQixLQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUM5RSxDQUFDLC9HQUZSLFlBQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQ2xDLENBQUMsS0FBaUIsS0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDOUUsQ0FBQztZQUVGLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSw1QkFEdEIsWUFDTSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQ2xDLENBQUMsS0FBaUIsS0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDOUUsQ0FBQyxuSEFGVixnQkFBUSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFDbEMsQ0FBQyxLQUFpQixLQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUM5RSxDQUFDO2FBQ0gsYkFBUCxhQUFPO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLG5EQUE3QyxZQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRTtnQkFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUNoQyxDQUFDLEtBQWlCLEtBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQ3pFLENBQUMsNUdBRlYsZ0JBQVEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUNoQyxDQUFDLEtBQWlCLEtBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQ3pFLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUM5QixDQUFDLEtBQWlCLEtBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUMvRSxDQUFDLGhIQUZWLGdCQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFDOUIsQ0FBQyxLQUFpQixLQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDL0UsQ0FBQzthQUNILGJBQVAsYUFBTztTQUNGLFRBQUwsU0FBSztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSwvQ0FEM0MsUUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUU7WUFDckMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQzdDLENBQUMsS0FBaUIsS0FBVyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQzVGLENBQUMseElBRlIsWUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLFlBQVksRUFDN0MsQ0FBQyxLQUFpQixLQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDNUYsQ0FBQztTQUNILFRBQUwsU0FBSztRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxqREFBN0MsUUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQzFDLENBQUMsS0FBaUIsS0FBVyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQ2pHLENBQUMsMUlBRlIsWUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFlBQVksRUFDMUMsQ0FBQyxLQUFpQixLQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDakcsQ0FBQztZQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUMxQyxDQUFDLEtBQWlCLEtBQVcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUNqRyxDQUFDLDFJQUZSLFlBQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQzFDLENBQUMsS0FBaUIsS0FBVyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQ2pHLENBQUM7U0FDSCxUQUFMLFNBQUs7YUFBTSxiQUFMLGFBQUs7WUFDTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFlBQVksRUFDMUMsQ0FBQyxLQUFpQixLQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUM5RSxDQUFDLHZIQUZSLFlBQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQzFDLENBQUMsS0FBaUIsS0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDOUUsQ0FBQztZQUNGLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSw1QkFBdEIsWUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQzFDLENBQUMsS0FBaUIsS0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDOUUsQ0FBQywzSEFGVixnQkFBUSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFlBQVksRUFDMUMsQ0FBQyxLQUFpQixLQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUM5RSxDQUFDO2FBQ0gsYkFBUCxhQUFPO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLG5EQUE3QyxZQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRTtnQkFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUN4QyxDQUFDLEtBQWlCLEtBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQ3pFLENBQUMscEhBRlYsZ0JBQVEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUN4QyxDQUFDLEtBQWlCLEtBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQ3pFLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUN0QyxDQUFDLEtBQWlCLEtBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUNqRixDQUFDLDFIQUZWLGdCQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFlBQVksRUFDdEMsQ0FBQyxLQUFpQixLQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDakYsQ0FBQzthQUNILGJBQVAsYUFBTztTQUNGLFRBQUwsU0FBSztRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsOUNBRDFDLFFBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRTtZQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFZLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsMUZBQTFGLFlBQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBWSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSw1QkFBdEIsWUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBWSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLDlGQUE1RixnQkFBUSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFZLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDckYsYkFBUCxhQUFPO1NBQ0YsVEFBTCxTQUFLO0FBQ0w7QUFFQztBQUFRO0FBQTBCO0FBQW1CO0lBQTVDLGtDQUFrQyxDQUFDLE9BQWdCLDlDQUFDLElBQXBELGtDQUFrQyxDQUFDLE9BQWdCO1FBQ3pELE9BQU8sZkFEc0QsUUFDN0QsT0FBTztZQUNMLE9BQU8sQ0FBQyxRQUFRLDVCQUF0QixZQUFNLE9BQU8sQ0FBQyxRQUFRO1lBQ2hCLE9BQU8sQ0FBQyxRQUFRLDVCQUF0QixZQUFNLE9BQU8sQ0FBQyxRQUFRO1lBQ2hCLE9BQU8sQ0FBQyxjQUFjLGxDQUE1QixZQUFNLE9BQU8sQ0FBQyxjQUFjO1lBQ3RCLE9BQU8sQ0FBQyxrQkFBa0IsdENBQWhDLFlBQU0sT0FBTyxDQUFDLGtCQUFrQjtZQUMxQixPQUFPLENBQUMsZUFBZSxuQ0FBN0IsWUFBTSxPQUFPLENBQUMsZUFBZTtZQUN2QixPQUFPLENBQUMsZUFBZSxuQ0FBN0IsWUFBTSxPQUFPLENBQUMsZUFBZTtTQUN4QixDQUFDLFZBQU4sU0FBSyxDQUFDO0FBQ047QUFFQztBQUFRO0FBQW1CO0lBQ2xCLFlBQVksaEJBRGMsSUFDMUIsWUFBWTtRQUNsQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxqQ0FERixRQUN2QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxoQ0FBNUIsUUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUV4QixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLDNEQUR2RCxRQUNJLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUU7WUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRSx6REFBbkQsWUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMzQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsOUJBQXRCLGdCQUFRLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNmLGJBQVAsYUFBTztTQUNGLFRBQUwsU0FBSztBQUNMO0FBRUM7QUFBUTtBQUE4QjtBQUFpQztBQUF3QjtBQUMzRTtBQUEwQjtBQUF5QztBQUMxRTtBQUNQO0lBSEcsVUFBVSxDQUFDLFdBQXdCLEVBQUUsY0FBdUIsRUFBRSxLQUE0QixFQUNoRyxRQUFpQixFQUFFLE9BQWdCLEVBQUUscUJBQStCLEVBQUUsb0JBQThCLGpIQUV6RixJQUhMLFVBQVUsQ0FBQyxXQUF3QixFQUFFLGNBQXVCLEVBQUUsS0FBNEIsRUFDaEcsUUFBaUIsRUFBRSxPQUFnQixFQUFFLHFCQUErQixFQUFFLG9CQUE4QjtRQUNwRyxJQUFJLGNBQWMsRUFBRSw1QkFEb0YsUUFDeEcsSUFBSSxjQUFjLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxwRUFBOUQsWUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3pELFRBQUwsU0FBSzthQUFNLGJBQUwsYUFBSztZQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixDQUFDLENBQUMsN0dBQXZHLFlBQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztTQUNsRyxUQUFMLFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFDRztBQUF3QjtBQUEyQjtBQUNoRDtBQUF5QztBQUF3QztBQUFtQjtJQUR6RyxPQUFPLENBQUMsV0FBd0IsRUFBRSxLQUE0QixFQUNsRSxRQUFpQixFQUFFLE9BQWdCLEVBQUUscUJBQStCLEVBQUUsb0JBQThCLDlGQUNuRyxJQUZHLE9BQU8sQ0FBQyxXQUF3QixFQUFFLEtBQTRCLEVBQ2xFLFFBQWlCLEVBQUUsT0FBZ0IsRUFBRSxxQkFBK0IsRUFBRSxvQkFBOEI7UUFDdEcsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDLGhDQURrRixRQUMxRyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDNUI7UUFDSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLHpGQUFqRixRQUFBLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUU7WUFDL0UsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLG5DQUE3QixZQUFNLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN4QixUQUFMLFNBQUs7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyw1QkFEeEIsUUFDSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN4QjtBQUVHO1FBQ0MsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsdkNBQTVCLFFBQUgsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFFL0IsSUFBSSxXQUFXLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEVBQUUseERBRHBELFFBQ0ksSUFBSSxXQUFXLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDOUMsV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyx2REFBakQsWUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVDLFRBQUwsU0FBSztRQUVELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxXQUFXLENBQUMsbERBRDlDLFFBQ0ksSUFBSSxDQUFDLHNCQUFzQixHQUFHLFdBQVcsQ0FBQztBQUM5QztRQUNJLE1BQU0sY0FBYyxHQUEwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUMsbkVBQTlELFFBQXBCLE1BQU0sY0FBYyxHQUEwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEYsY0FBYyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsckNBQWpDLFFBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFFN0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSw5Q0FEMUMsUUFDSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFO1lBQ3BDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxuQ0FBN0IsWUFBTSxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDeEIsVEFBTCxTQUFLO1FBRUQsSUFBSSxRQUFRLEVBQUUsdEJBRGxCLFFBQ0ksSUFBSSxRQUFRLEVBQUU7WUFDWixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxyQ0FBL0IsWUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQUMvQjtZQUNNLE1BQU0sY0FBYyxHQUNsQixDQUFDLENBQXdCLEtBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLHJHQUQzRSxZQUF0QixNQUFNLGNBQWMsR0FDbEIsQ0FBQyxDQUF3QixLQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVqRyxJQUFJLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSx6REFEbkQsWUFDTSxJQUFJLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQywwQkFBMEIsQ0FDNUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLDVLQUR2RixnQkFBUSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDBCQUEwQixDQUM1RSxRQUFRLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDaEYsYkFBUCxhQUFPO2lCQUFNLGpCQUFMLGlCQUFLO2dCQUNMLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQ3JFLFFBQVEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxyS0FEdkYsZ0JBQVEsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FDckUsUUFBUSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQ2hGLGJBQVAsYUFBTztTQUNGLFRBQUwsU0FBSztRQUVELElBQUksT0FBTyxFQUFFLHJCQURqQixRQUNJLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMscENBQTlCLFlBQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDOUI7WUFDTSxNQUFNLGFBQWEsR0FDakIsQ0FBQyxDQUF3QixLQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsdkRBRDlCLFlBQXRCLE1BQU0sYUFBYSxHQUNqQixDQUFDLENBQXdCLEtBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVwRCxJQUFJLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSx6REFEbkQsWUFDTSxJQUFJLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDLG5JQUEzSCxnQkFBUSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDBCQUEwQixDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7YUFDcEgsYkFBUCxhQUFPO2lCQUFNLGpCQUFMLGlCQUFLO2dCQUNMLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQywzSEFBbkgsZ0JBQVEsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2FBQzVHLGJBQVAsYUFBTztTQUNGLFRBQUwsU0FBSztRQUVELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsM0RBRHZELFFBQ0ksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUVuRCxJQUFJLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBQyxLQUFtQixHQUFFLGNBQWMsQ0FBQyxFQUFFLGxJQUR6SCxRQUNJLElBQUksbUJBQW1CLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLG1CQUFDLEtBQW1CLEdBQUUsY0FBYyxDQUFDLEVBQUU7QUFDekg7WUFDTSxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsN0RBQWpELFlBQUEsSUFBSSxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsT0FBTyxHQUFHLG1CQUFDLEtBQW1CLEdBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyx2RkFBMUUsZ0JBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxtQkFBQyxLQUFtQixHQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7YUFDbkUsYkFBUCxhQUFPO1NBQ0YsVEFBTCxTQUFLO0FBQ0w7QUFFRztBQUNJO1FBQ0gsSUFBSSxxQkFBcUIsRUFBRSxuQ0FBcEIsUUFBUCxJQUFJLHFCQUFxQixFQUFFO1lBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLHJDQUEvQixZQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzFCLFRBQUwsU0FBSztRQUVELElBQUksb0JBQW9CLEVBQUUsbENBRDlCLFFBQ0ksSUFBSSxvQkFBb0IsRUFBRTtZQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLDlCQUF4QixZQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbkIsVEFBTCxTQUFLO0FBQ0w7QUFFQztBQUFRO0FBQ0Y7QUFBNEI7QUFBbUI7SUFBNUMsTUFBTSxDQUFDLEtBQTRCLEVBQUUsUUFBa0IsMUJBQUgsSUFBcEQsTUFBTSxDQUFDLEtBQTRCLEVBQUUsUUFBa0I7QUFBSTtRQUNqRSxJQUFJLGtCQUFrQixHQUFVLElBQUksQ0FBQyx0Q0FBdEIsUUFBZixJQUFJLGtCQUFrQixHQUFVLElBQUksQ0FBQztRQUVyQyxJQUFJLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxyREFEakQsUUFDSSxJQUFJLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNqRDtZQUFNLE1BQU0sY0FBYyxHQUFjLG1CQUFDLEtBQW1CLEdBQUUsY0FBYyxDQUFDLDdFQUFoRCxZQUF2QixNQUFNLGNBQWMsR0FBYyxtQkFBQyxLQUFtQixHQUFFLGNBQWMsQ0FBQztZQUN2RSxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSw1REFBOUQsWUFBTSxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdEQsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsbkVBQTNELGdCQUFRLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNqRCxrQkFBa0IsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsM0RBQWpELG9CQUFVLGtCQUFrQixHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdkMsTUFBTSwxQkFBaEIsb0JBQVUsTUFBTTtpQkFDUCxqQkFBVCxpQkFBUzthQUNGLGJBQVAsYUFBTztZQUVELElBQUksV0FBVyxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLEVBQUUsbkVBRDdELFlBQ00sSUFBSSxXQUFXLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsRUFBRTtnQkFDckQsT0FBTyx2QkFBZixnQkFBUSxPQUFPO2FBQ1IsYkFBUCxhQUFPO1NBQ0YsVEFBTCxTQUFLO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLHpFQURyRSxRQUNJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRTtZQUMvRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsN0JBQXZCLFlBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNmLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUMsdkRBQS9DLGdCQUFRLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUM7YUFDeEMsYkFBUCxhQUFPO1NBQ0YsVEFBTCxTQUFLO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsM0JBRHZCLFFBQ0ksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdkI7UUFDSSxNQUFNLE1BQU0sR0FBVyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyx6RUFBckQsUUFBcEIsTUFBTSxNQUFNLEdBQVcsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUM7Y0FDckUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsekVBQW5FLGNBQVEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxVQUFVLENBQUM7Y0FDM0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLDNDQUFyQyxjQUFRLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQztRQUFJLElBQUksUUFBUSxDQUFTLHJCQUFBLFFBQXJCLElBQUksUUFBUSxDQUFTO0FBQ3pCO1FBQUksTUFBTSxTQUFTLEdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLHREQUFqQyxRQUFyQixNQUFNLFNBQVMsR0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVc7Y0FDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLHBDQUFoQyxjQUFVLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSztjQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxwQ0FBaEMsY0FBVSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztBQUNoQztRQUFJLE1BQU0sVUFBVSxHQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLHpHQUFwRixRQUFyQixNQUFNLFVBQVUsR0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUV6RyxJQUFJLE1BQU0sSUFBSSxDQUFDLEVBQUUsekJBRHJCLFFBQ0ksSUFBSSxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ2YsUUFBUSxHQUFHLFVBQVUsQ0FBQyxsQ0FBNUIsWUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDO1NBQ3ZCLFRBQUwsU0FBSzthQUFNLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxuREFBM0MsYUFBSyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDM0MsUUFBUSxHQUFHLFNBQVMsQ0FBQyxqQ0FBM0IsWUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDO1NBQ3RCLFRBQUwsU0FBSzthQUFNLGJBQUwsYUFBSztZQUNMLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLHBEQUE5QyxZQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hDLElBQUksUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsdkZBQWpGLFlBQU0sSUFBSSxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDekUsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsL0VBQXZFLGdCQUFRLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2hFLGJBQVAsYUFBTztpQkFBTSxqQkFBTCxpQkFBSztnQkFDTCxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxwREFBNUMsZ0JBQVEsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDckMsYkFBUCxhQUFPO1NBQ0YsVEFBTCxTQUFLO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDLDlDQUExQyxRQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxQztBQUVDO0FBQVE7QUFBd0I7QUFBbUI7SUFBMUMsS0FBSyxDQUFDLEtBQTRCLGZBQ3RDLElBREksS0FBSyxDQUFDLEtBQTRCO1FBQ3hDLElBQUksbUJBQW1CLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLHJEQURELFFBQzVDLElBQUksbUJBQW1CLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2pEO1lBQU0sTUFBTSxjQUFjLEdBQWMsbUJBQUMsS0FBbUIsR0FBRSxjQUFjLENBQUMsN0VBQWhELFlBQXZCLE1BQU0sY0FBYyxHQUFjLG1CQUFDLEtBQW1CLEdBQUUsY0FBYyxDQUFDO1lBQ3ZFLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLC9EQUF6RCxZQUFNLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNqRCxPQUFPLHZCQUFmLGdCQUFRLE9BQU87YUFDUixiQUFQLGFBQU87U0FDRixUQUFMLFNBQUs7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyw1QkFEeEIsUUFDSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLHRDQUFsQyxRQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUU7WUFDNUIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxsREFBNUMsWUFBTSxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1NBQ3ZDLFRBQUwsU0FBSztRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLDVCQUR4QixRQUNJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXBCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSwvQ0FEM0MsUUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUU7WUFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsakRBQTNDLFlBQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsakRBQTNDLFlBQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDckMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQywvQ0FBekMsWUFBTSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO1NBQ3BDLFRBQUwsU0FBSztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxyQ0FBakMsUUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFFN0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsakNBRDdCLFFBQ0ksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsaENBQTVCLFFBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyx6REFEckQsUUFDSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0FBQ3JEO0FBRUM7QUFBUTtBQUE4QjtBQUFtQjtJQUFoRCxjQUFjLENBQUMsV0FBd0IsOUJBQzFDLElBREcsY0FBYyxDQUFDLFdBQXdCO0FBQUk7UUFDakQsTUFBTSxjQUFjLEdBQTBCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxuRUFBbkUsUUFBZixNQUFNLGNBQWMsR0FBMEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xGLGNBQWMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQVksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLDVFQUE5RSxRQUFJLGNBQWMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQVksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzFFLGNBQWMsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBb0IsS0FBVyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsN0VBQTlGLFFBQUksY0FBYyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFvQixLQUFXLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMxRixjQUFjLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFZLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLHpEQUEzRCxRQUFJLGNBQWMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQVksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdkQsY0FBYyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsckNBQWpDLFFBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFFN0IsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFdBQVcsQ0FBQyxsREFEOUMsUUFDSSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsV0FBVyxDQUFDO1FBQzFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxXQUFXLENBQUMsL0NBQTNDLFFBQUksSUFBSSxDQUFDLG1CQUFtQixHQUFHLFdBQVcsQ0FBQztRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxqQ0FBN0IsUUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUM3QjtBQUVDO0FBQVE7QUFDVDtJQURVLE9BQU8sWEFDVCxJQURFLE9BQU87UUFDYixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxqQ0FEUCxRQUNsQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLHpEQUFyRCxRQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7QUFDckQ7QUFFQztBQUFRO0FBQTBCO0FBQW1CO0lBQTVDLGFBQWEsQ0FBQyxPQUE4Qix6QkFBUSxJQUFwRCxhQUFhLENBQUMsT0FBOEI7UUFDbEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyw1QkFEa0MsUUFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLC9CQUEzQixRQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyw3QkFBekIsUUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLC9CQUEzQixRQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSx6REFBckQsUUFBSSxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQywvQ0FBekMsWUFBTSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO1lBQ25DLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsNUNBQXRDLFlBQU0sSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztTQUNqQyxUQUFMLFNBQUs7QUFDTDtBQUVDO0FBQVE7QUFBK0I7QUFBbUI7SUFBakQsYUFBYSxDQUFDLFlBQW9CLDlCQUF1QixJQUF6RCxhQUFhLENBQUMsWUFBb0I7QUFBSTtRQUM1QyxNQUFNLFVBQVUsR0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQywxRUFBOUUsUUFBSSxNQUFNLFVBQVUsR0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztBQUM5RTtRQUNJLElBQUksWUFBWSxHQUFXLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxoRUFBNUMsUUFBcEIsSUFBSSxZQUFZLEdBQVcsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0FBQ3BFO1FBQUksSUFBSSxZQUFZLEdBQVcsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGhFQUEzQyxRQUFyQixJQUFJLFlBQVksR0FBVyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7QUFDcEU7UUFBSSxJQUFJLFlBQVksR0FBVyxZQUFZLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQywxREFBckMsUUFBckIsSUFBSSxZQUFZLEdBQVcsWUFBWSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDOUQ7UUFBSSxJQUFJLFlBQVksR0FBVyxZQUFZLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQywxREFBckMsUUFBckIsSUFBSSxZQUFZLEdBQVcsWUFBWSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFMUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLC9DQUQzQyxRQUNJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQyxZQUFZLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGhFQUExRCxZQUFNLFlBQVksR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDcEQsWUFBWSxHQUFHLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxoRUFBMUQsWUFBTSxZQUFZLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ3BELFlBQVksR0FBRyxZQUFZLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQywxREFBcEQsWUFBTSxZQUFZLEdBQUcsWUFBWSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDOUMsWUFBWSxHQUFHLFlBQVksR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLDFEQUFwRCxZQUFNLFlBQVksR0FBRyxZQUFZLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQztTQUMvQyxUQUFMLFNBQUs7QUFDTDtRQUVJLE1BQU0sT0FBTyxHQUE0Qix4QkFEckIsUUFDcEIsTUFBTSxPQUFPLEdBQTRCO1lBQ3ZDLEVBQUUsRUFBRSxZQUFZLDVCQUF0QixZQUFNLEVBQUUsRUFBRSxZQUFZO1lBQ2hCLElBQUksRUFBRSxZQUFZLDlCQUF4QixZQUFNLElBQUksRUFBRSxZQUFZO1lBQ2xCLElBQUksRUFBRSxZQUFZLDlCQUF4QixZQUFNLElBQUksRUFBRSxZQUFZO1lBQ2xCLEtBQUssRUFBRSxZQUFZLC9CQUF6QixZQUFNLEtBQUssRUFBRSxZQUFZO1lBQ25CLE1BQU0sRUFBRSxZQUFZLGhDQUExQixZQUFNLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLFFBQVEsRUFBRSxZQUFZLGxDQUE1QixZQUFNLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxwR0FBOUYsWUFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUs7WUFDeEYsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLG5HQUE3RixZQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTtTQUN4RixDQUFDLFZBQU4sU0FBSyxDQUFDO0FBQ047UUFDSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLDFDQUFsQyxRQUFBLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7WUFDaEMsT0FBTyxXQUFRLFlBQVksQ0FBQywzQ0FBbEMsWUFBTSxPQUFPLFdBQVEsWUFBWSxDQUFDO1lBQzVCLE9BQU8sWUFBUyxZQUFZLENBQUMsNUNBQW5DLFlBQU0sT0FBTyxZQUFTLFlBQVksQ0FBQztBQUNuQztZQUNNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsM0NBQS9CLFlBQUEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtnQkFDN0IsT0FBTyxTQUFNLFlBQVksQ0FBQyw3Q0FBbEMsZ0JBQVEsT0FBTyxTQUFNLFlBQVksQ0FBQztnQkFDMUIsT0FBTyxXQUFRLFlBQVksQ0FBQywvQ0FBcEMsZ0JBQVEsT0FBTyxXQUFRLFlBQVksQ0FBQzthQUM3QixiQUFQLGFBQU87U0FDRixUQUFMLFNBQUs7UUFDRCxPQUFPLE9BQU8sQ0FBQyx2QkFBbkIsUUFBSSxPQUFPLE9BQU8sQ0FBQztBQUNuQjtBQUVDO0FBQVE7QUFBd0I7QUFBbUI7SUFBMUMsZUFBZSxDQUFDLEtBQW9CLHpCQUMxQyxJQURNLGVBQWUsQ0FBQyxLQUFvQjtBQUFJO1FBQzlDLE1BQU0sWUFBWSxHQUFXLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLDVEQUE3QyxRQUFmLE1BQU0sWUFBWSxHQUFXLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0FBQ2hFO1FBQUksTUFBTSxPQUFPLEdBQVcsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxyRUFBaEQsUUFBckIsTUFBTSxPQUFPLEdBQVcsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztjQUNqRSxLQUFLLENBQUMsT0FBTywzQkFBckIsY0FBUSxLQUFLLENBQUMsT0FBTztjQUNiLEtBQUssQ0FBQyxLQUFLLENBQUMsMUJBQXBCLGNBQVEsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUNwQjtRQUFJLE1BQU0sSUFBSSxHQUFnQyxyQkFBckIsUUFBckIsTUFBTSxJQUFJLEdBQWdDO1lBQ3RDLEVBQUUsRUFBRSxJQUFJLHBCQUFoQixZQUFRLEVBQUUsRUFBRSxJQUFJO1lBQ1IsRUFBRSxFQUFFLE1BQU0sdEJBQWxCLFlBQVEsRUFBRSxFQUFFLE1BQU07WUFDVixFQUFFLEVBQUUsTUFBTSx0QkFBbEIsWUFBUSxFQUFFLEVBQUUsTUFBTTtZQUNWLEVBQUUsRUFBRSxPQUFPLHZCQUFuQixZQUFRLEVBQUUsRUFBRSxPQUFPO1lBQ1gsRUFBRSxFQUFFLFFBQVEseEJBQXBCLFlBQVEsRUFBRSxFQUFFLFFBQVE7WUFDWixFQUFFLEVBQUUsVUFBVSwxQkFBdEIsWUFBUSxFQUFFLEVBQUUsVUFBVTtZQUNkLEVBQUUsRUFBRSxNQUFNLHRCQUFsQixZQUFRLEVBQUUsRUFBRSxNQUFNO1lBQ1YsRUFBRSxFQUFFLEtBQUssckJBQWpCLFlBQVEsRUFBRSxFQUFFLEtBQUs7U0FDVixDQUFDLFZBQVIsU0FBTyxDQUFDO0FBQ1I7UUFBSSxNQUFNLE9BQU8sR0FBNEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyx6REFBckQsUUFBckIsTUFBTSxPQUFPLEdBQTRCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDOUU7UUFBSSxNQUFNLEdBQUcsR0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsbENBQWIsUUFBckIsTUFBTSxHQUFHLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RDO1FBQUksTUFBTSxNQUFNLEdBQVcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLHBDQUFmLFFBQXJCLE1BQU0sTUFBTSxHQUFXLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwQyxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsakhBRDdHLFFBQ0ksSUFBSSxXQUFXLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO1lBQ3ZHLE9BQU8sbkJBQWIsWUFBTSxPQUFPO1NBQ1IsVEFBTCxTQUFLO1FBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLC9CQUEzQixRQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsL0JBRDNCLFFBQ0ksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLHRDQUFoQyxZQUFNLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsL0RBQXpELFlBQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztTQUNwRCxUQUFMLFNBQUs7QUFDTDtRQUNJLE1BQU0sV0FBVyxHQUFXLFVBQVUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsM0dBQXZGLFFBQXBCLE1BQU0sV0FBVyxHQUFXLFVBQVUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0c7UUFBSSxNQUFNLFFBQVEsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLHJEQUFoQyxRQUFyQixNQUFNLFFBQVEsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLGxEQUE5QyxRQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFO1lBQ3hDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxsREFBNUMsWUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdkMsVEFBTCxTQUFLO2FBQU0sYkFBTCxhQUFLO0FBQ1g7WUFBTSxNQUFNLFVBQVUsR0FBVyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsdEVBQTNDLFlBQXZCLE1BQU0sVUFBVSxHQUFXLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUN4RTtZQUFNLElBQUksV0FBVyxDQUFTLDVCQUFELFlBQXZCLElBQUksV0FBVyxDQUFTO0FBQzlCO1lBQU0sSUFBSSxXQUFXLENBQVMsNUJBQUQsWUFBdkIsSUFBSSxXQUFXLENBQVM7WUFFeEIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRSxqRUFEM0QsWUFDTSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxXQUFXLENBQUMsR0FBRyxFQUFFO2dCQUNuRCxXQUFXLEdBQUcsUUFBUSxDQUFDLHZDQUEvQixnQkFBUSxXQUFXLEdBQUcsUUFBUSxDQUFDO2dCQUN2QixXQUFXLEdBQUcsUUFBUSxHQUFHLFVBQVUsQ0FBQyxwREFBNUMsZ0JBQVEsV0FBVyxHQUFHLFFBQVEsR0FBRyxVQUFVLENBQUM7Z0JBQ3BDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLHpEQUFqRCxnQkFBUSxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRTtvQkFDdkMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLHhEQUE5QyxvQkFBVSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7b0JBQ3BDLFdBQVcsR0FBRyxXQUFXLEdBQUcsVUFBVSxDQUFDLDNEQUFqRCxvQkFBVSxXQUFXLEdBQUcsV0FBVyxHQUFHLFVBQVUsQ0FBQztpQkFDeEMsakJBQVQsaUJBQVM7YUFDRixiQUFQLGFBQU87aUJBQU0sSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRSx0RUFBMUQsaUJBQUssSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRTtnQkFDMUQsV0FBVyxHQUFHLFFBQVEsQ0FBQyx2Q0FBL0IsZ0JBQVEsV0FBVyxHQUFHLFFBQVEsQ0FBQztnQkFDdkIsV0FBVyxHQUFHLFFBQVEsR0FBRyxVQUFVLENBQUMscERBQTVDLGdCQUFRLFdBQVcsR0FBRyxRQUFRLEdBQUcsVUFBVSxDQUFDO2dCQUNwQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSwxREFBbEQsZ0JBQVEsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7b0JBQ3hDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyx6REFBL0Msb0JBQVUsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO29CQUNyQyxXQUFXLEdBQUcsV0FBVyxHQUFHLFVBQVUsQ0FBQywzREFBakQsb0JBQVUsV0FBVyxHQUFHLFdBQVcsR0FBRyxVQUFVLENBQUM7aUJBQ3hDLGpCQUFULGlCQUFTO2FBQ0YsYkFBUCxhQUFPO1lBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQywvREFBekQsWUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3BELFRBQUwsU0FBSztBQUNMO0FBRUM7QUFBUTtBQUE4QjtBQUF3QjtBQUN4QztBQUEwQjtBQUFtQjtJQUExRCxXQUFXLENBQUMsV0FBd0IsRUFBRSxLQUE0QixFQUN4RSxRQUFpQixFQUFFLE9BQWdCLHJEQURxQyxJQUFsRSxXQUFXLENBQUMsV0FBd0IsRUFBRSxLQUE0QixFQUN4RSxRQUFpQixFQUFFLE9BQWdCO0FBQUk7UUFDdkMsTUFBTSxRQUFRLEdBQVcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLHREQUF2QyxRQUFmLE1BQU0sUUFBUSxHQUFXLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUMsdkNBRG5DLFFBQ0ksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxwQ0FBaEMsUUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyw3REFBekQsUUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQywxRUFBdEUsUUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLDdEQUF6RCxRQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVztjQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLFFBQVEsdkRBQW5ELGNBQVUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxRQUFRO2NBQ3pDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLHhEQUFwRCxjQUFVLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO1FBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyw5REFBMUQsUUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVc7Y0FDaEQsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLHZEQUFuRCxjQUFVLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUTtjQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyx4REFBcEQsY0FBVSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUVoRCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLDVEQUR4RCxRQUNJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEQ7QUFFQztBQUFRO0FBQ0Y7QUFBeUI7QUFBOEI7QUFDOUQ7QUFBbUI7SUFEVCxXQUFXLENBQUMsTUFBYyxFQUFFLFdBQW9CLEVBQUUsT0FBZ0IsNUNBQ2pELElBRGpCLFdBQVcsQ0FBQyxNQUFjLEVBQUUsV0FBb0IsRUFBRSxPQUFnQjtBQUFJO1FBQzVFLE1BQU0sS0FBSyxHQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLG5EQUF2QyxRQUFiLE1BQU0sS0FBSyxHQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO0FBQ3hEO1FBQUksSUFBSSxLQUFLLEdBQVcsSUFBSSxDQUFDLHpCQUFKLFFBQXJCLElBQUksS0FBSyxHQUFXLElBQUksQ0FBQztRQUV6QixJQUFJLFdBQVcsRUFBRSx6QkFEckIsUUFDSSxJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksT0FBTyxFQUFFLHpCQUFuQixZQUFNLElBQUksT0FBTyxFQUFFO2dCQUNYLEtBQUssR0FBRyxLQUFLLDdCQUFyQixnQkFBUSxLQUFLLEdBQUcsS0FBSztzQkFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssNUNBQWxDLHNCQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSztzQkFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsdkVBQTdELHNCQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2FBQ3RELGJBQVAsYUFBTztpQkFBTSxqQkFBTCxpQkFBSztnQkFDTCxLQUFLLEdBQUcsS0FBSyw3QkFBckIsZ0JBQVEsS0FBSyxHQUFHLEtBQUs7c0JBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLHRFQUE1RCxzQkFBWSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7c0JBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLDdDQUFuQyxzQkFBWSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQzthQUM1QixiQUFQLGFBQU87U0FDRixUQUFMLFNBQUs7YUFBTSxiQUFMLGFBQUs7WUFDTCxLQUFLLEdBQUcsS0FBSyx6QkFBbkIsWUFBTSxLQUFLLEdBQUcsS0FBSztrQkFDVCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyx2RUFBL0Qsa0JBQVUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7a0JBQ3JELElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMseEVBQWhFLGtCQUFVLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDM0QsVEFBTCxTQUFLO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLHJDQUFqQyxRQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqQztBQUVDO0FBQVE7QUFDRjtBQUF5QjtBQUE4QjtBQUM5RDtBQUFtQjtJQURULFdBQVcsQ0FBQyxNQUFjLEVBQUUsV0FBb0IsRUFBRSxPQUFnQiw1Q0FDakQsSUFEakIsV0FBVyxDQUFDLE1BQWMsRUFBRSxXQUFvQixFQUFFLE9BQWdCO0FBQUk7UUFDNUUsTUFBTSxLQUFLLEdBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsbkRBQXZDLFFBQWIsTUFBTSxLQUFLLEdBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7QUFDeEQ7UUFBSSxJQUFJLEtBQUssR0FBVyxJQUFJLENBQUMsekJBQUosUUFBckIsSUFBSSxLQUFLLEdBQVcsSUFBSSxDQUFDO1FBRXpCLElBQUksV0FBVyxFQUFFLHpCQURyQixRQUNJLElBQUksV0FBVyxFQUFFO1lBQ2YsSUFBSSxPQUFPLEVBQUUsekJBQW5CLFlBQU0sSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsS0FBSyxHQUFHLEtBQUssN0JBQXJCLGdCQUFRLEtBQUssR0FBRyxLQUFLO3NCQUNULElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSx2RUFBN0Qsc0JBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVO3NCQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyw1Q0FBbEMsc0JBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7YUFDM0IsYkFBUCxhQUFPO2lCQUFNLGpCQUFMLGlCQUFLO2dCQUNMLEtBQUssR0FBRyxLQUFLLDdCQUFyQixnQkFBUSxLQUFLLEdBQUcsS0FBSztzQkFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksM0NBQWpDLHNCQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTtzQkFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMseEVBQTlELHNCQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2FBQ3ZELGJBQVAsYUFBTztTQUNGLFRBQUwsU0FBSzthQUFNLGJBQUwsYUFBSztZQUNMLElBQUksS0FBSyxFQUFFLHZCQUFqQixZQUFNLElBQUksS0FBSyxFQUFFO2dCQUNULEtBQUssckJBQWIsZ0JBQVEsS0FBSztvQkFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyx6RUFBL0Qsb0JBQVUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7d0JBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGpEQUFuQyx3QkFBVSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQzthQUM1QixiQUFQLGFBQU87aUJBQU0sakJBQUwsaUJBQUs7Z0JBQ0wsS0FBSyxyQkFBYixnQkFBUSxLQUFLO29CQUNILElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLHpFQUEvRCxvQkFBVSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQzt3QkFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsakRBQW5DLHdCQUFVLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2FBQzVCLGJBQVAsYUFBTztTQUNGLFRBQUwsU0FBSztRQUVELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxyQ0FEakMsUUFDSSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakM7QUFFQztBQUFRO0FBQXlCO0FBQW1CO0lBQTNDLFVBQVUsQ0FBQyxLQUE2QixwQkFDakQsSUFEUyxVQUFVLENBQUMsS0FBNkI7QUFBSTtRQUNsRCxNQUFNLE1BQU0sR0FBVyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMscERBQXJDLFFBQWYsTUFBTSxNQUFNLEdBQVcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSx6RUFEckUsUUFDSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUU7WUFDL0QsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLDdCQUF2QixZQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDZixJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDLHZEQUEvQyxnQkFBUSxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDO2FBQ3hDLGJBQVAsYUFBTztTQUNGLFRBQUwsU0FBSztRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLDNCQUR2QixRQUNJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCO1FBQ0ksSUFBSSxTQUFTLENBR2dDLHRCQUh6QixRQUFwQixJQUFJLFNBQVMsQ0FHZ0M7QUFDakQ7UUFKSSxJQUNJLFVBQVUsQ0FFK0IsdkJBQ3hCLFFBSnJCLElBQ0ksVUFBVSxDQUUrQjtBQUNqRDtRQUpJLElBRUksa0JBQWtCLENBQ3VCLC9CQUN4QixRQUpyQixJQUVJLGtCQUFrQixDQUN1QjtBQUNqRDtRQUpJLElBR0ksaUJBQWlCLENBQXdCLDlCQUN4QixRQUpyQixJQUdJLGlCQUFpQixDQUF3QjtRQUM3QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLDFDQUF0QyxRQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7WUFDaEMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLC9DQUF6QyxZQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUNuQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsakRBQTNDLFlBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQ3JDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx2REFBakQsWUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDM0MsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHREQUFoRCxZQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztTQUMzQyxUQUFMLFNBQUs7YUFBTSxiQUFMLGFBQUs7WUFDTCxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsaERBQTFDLFlBQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQ3BDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxoREFBMUMsWUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDcEMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHZEQUFqRCxZQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUMzQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsdERBQWhELFlBQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1NBQzNDLFRBQUwsU0FBSztBQUNMO1FBQ0ksTUFBTSxpQkFBaUIsSUFBYSxNQUFNLElBQUksVUFBVSxDQUFDLENBQUMsekRBQXRDLFFBQXBCLE1BQU0saUJBQWlCLElBQWEsTUFBTSxJQUFJLFVBQVUsQ0FBQyxDQUFDO0FBQzlEO1FBQUksTUFBTSxlQUFlLElBQWEsTUFBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsQ0FBQywvRUFBM0QsUUFBckIsTUFBTSxlQUFlLElBQWEsTUFBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUNwRjtRQUNJLElBQUksV0FBVyxDQUFTLHhCQUFKLFFBQXBCLElBQUksV0FBVyxDQUFTO0FBQzVCO1FBQUksSUFBSSxXQUFXLENBQVMseEJBQUgsUUFBckIsSUFBSSxXQUFXLENBQVM7UUFDeEIsSUFBSSxpQkFBaUIsRUFBRSwvQkFBM0IsUUFBSSxJQUFJLGlCQUFpQixFQUFFO1lBQ3JCLElBQUksa0JBQWtCLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRSxuREFBN0MsWUFBTSxJQUFJLGtCQUFrQixDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUU7Z0JBQ3JDLE9BQU8sdkJBQWYsZ0JBQVEsT0FBTzthQUNSLGJBQVAsYUFBTztZQUNELFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsaEVBQTFELFlBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRCxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLGhFQUExRCxZQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDckQsVEFBTCxTQUFLO2FBQU0sSUFBSSxlQUFlLEVBQUUsbENBQTFCLGFBQUssSUFBSSxlQUFlLEVBQUU7WUFDMUIsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLGlCQUFpQixFQUFFLHZFQUFqRSxZQUFNLElBQUksaUJBQWlCLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDekQsT0FBTyx2QkFBZixnQkFBUSxPQUFPO2FBQ1IsYkFBUCxhQUFPO1lBQ0QsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQywvREFBekQsWUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25ELFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsL0RBQXpELFlBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNwRCxUQUFMLFNBQUs7YUFBTSxiQUFMLGFBQUs7WUFDTCxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLGpFQUEzRCxZQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckQsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxqRUFBM0QsWUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3RELFRBQUwsU0FBSztRQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsM0RBRHZELFFBQ0ksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN2RDtBQUVDO0FBQVE7QUFBOEI7QUFDekI7QUFBbUI7SUFBdkIsbUJBQW1CLENBQUMsV0FBbUIsRUFBRSxXQUFtQixoREFBN0IsSUFBL0IsbUJBQW1CLENBQUMsV0FBbUIsRUFBRSxXQUFtQjtRQUNsRSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLHJFQURTLFFBQ3RFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFDekQsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLHJEQUFqRCxZQUFRLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtZQUMzQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMscERBQTlDLFlBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1lBQ3hDLFdBQVcsR0FBRyxVQUFVLENBQUMscUJBQXFCLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMscElBQTlILFlBQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUN6SCxUQUFMLFNBQUs7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLHJFQUFqRSxRQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFDekQsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLHJEQUFqRCxZQUFRLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtZQUMzQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMscERBQTlDLFlBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1lBQ3hDLFdBQVcsR0FBRyxVQUFVLENBQUMscUJBQXFCLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMscElBQTlILFlBQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUN6SCxUQUFMLFNBQUs7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyx4Q0FEcEMsUUFDSSxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztRQUNoQyxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyx6Q0FBckMsUUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQztRQUNqQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsL0JBQTNCLFFBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsL0VBQTNFLFFBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLC9FQUEzRSxRQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDM0U7QUFFQztBQUFRO0FBQTJCO0FBQW1CO0lBQzdDLHNCQUFzQixDQUFDLFFBQWdCLG5DQURjLElBQ3JELHNCQUFzQixDQUFDLFFBQWdCO1FBQzdDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsbkRBRE0sUUFDakQsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUseEJBQXBCLFFBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSw1Q0FBdEMsWUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFO2dCQUM5QixRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyx6REFBakQsZ0JBQVEsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDMUMsYkFBUCxhQUFPO2lCQUFNLGpCQUFMLGlCQUFLO2dCQUNMLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsbERBQTFDLGdCQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7b0JBQ2hDLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsQ0FBQyxHQUFHLHZFQUE3RCxvQkFBVSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxXQUFXLENBQUMsR0FBRzt3QkFDL0MsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsdkRBQTdDLHdCQUFjLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFO3dCQUNqQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyw3RUFBakUsd0JBQVksUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7cUJBQ3RELHJCQUFYLHFCQUFXO3lCQUFNLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsQ0FBQyxHQUFHLDVFQUF4RCx5QkFBSyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxXQUFXLENBQUMsR0FBRzt3QkFDL0MsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsdERBQW5ELHdCQUFxQixRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRTt3QkFDdkMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsNUVBQWhFLHdCQUFZLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO3FCQUNyRCxyQkFBWCxxQkFBVztpQkFDRixqQkFBVCxpQkFBUztnQkFDRCxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLDNEQUFuRCxnQkFBUSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25EO2dCQUNRLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsQ0FBQyxHQUFHLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsdEdBQXRGLGdCQUFBLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsQ0FBQyxHQUFHLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQ3BGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQywzREFBakQsb0JBQVUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO29CQUN2QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsM0NBQWpDLG9CQUFVLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyx4RkFBOUUsb0JBQVUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDcEUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsaERBQXRDLG9CQUFVLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsc0JBQXNCLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxsRUFBeEQsb0JBQVUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUM7b0JBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLHpEQUEvQyxvQkFBVSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMseERBQTlDLG9CQUFVLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNwQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLDFEQUFoRCxvQkFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFO3dCQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUMsdERBQTFDLHdCQUFZLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztxQkFDL0IsckJBQVgscUJBQVc7aUJBQ0YsakJBQVQsaUJBQVM7cUJBQU0sSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssV0FBVyxDQUFDLEdBQUcseEVBQXhELHFCQUFLLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsQ0FBQyxHQUFHO29CQUMvQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxsREFBakQsb0JBQW1CLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUN2QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsM0RBQWpELG9CQUFVLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztvQkFDdkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLDNDQUFqQyxvQkFBVSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMseEZBQTlFLG9CQUFVLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3BFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLGhEQUF0QyxvQkFBVSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsbEVBQXhELG9CQUFVLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDO29CQUM5QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyx6REFBL0Msb0JBQVUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLHhEQUE5QyxvQkFBVSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDcEMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSwxREFBaEQsb0JBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRTt3QkFDcEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDLHREQUExQyx3QkFBWSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7cUJBQy9CLHJCQUFYLHFCQUFXO2lCQUNGLGpCQUFULGlCQUFTO2FBQ0YsYkFBUCxhQUFPO1NBQ0YsVEFBTCxTQUFLO1FBRUQsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxRQUFRLEVBQUUsekRBRHJELFFBQ0ksSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxRQUFRLEVBQUU7WUFDL0MsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRSxqRUFBM0QsWUFBTSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxXQUFXLENBQUMsR0FBRyxFQUFFO2dCQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyw3Q0FBckMsZ0JBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyx2Q0FBL0IsZ0JBQVEsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQ3hCLGJBQVAsYUFBTztpQkFBTSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxXQUFXLENBQUMsR0FBRyxFQUFFLHRFQUExRCxpQkFBSyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxXQUFXLENBQUMsR0FBRyxFQUFFO2dCQUMxRCxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyw5Q0FBdEMsZ0JBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyx2Q0FBL0IsZ0JBQVEsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQ3hCLGJBQVAsYUFBTztZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyw1RkFBdEYsWUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMseENBQWxDLFlBQU0sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDN0IsVEFBTCxTQUFLO0FBQ0w7QUFFQztBQUFRO0FBQTJCO0FBQ3BDO0lBRFUsZ0JBQWdCLENBQUMsUUFBZ0IsN0JBQ25DLElBREUsZ0JBQWdCLENBQUMsUUFBZ0I7UUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSwvR0FENUQsUUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtZQUNyRyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLDdDQUF2QyxZQUFNLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7U0FDbEMsVEFBTCxTQUFLO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSwvR0FBM0csUUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO1lBQ3JHLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsN0NBQXZDLFlBQU0sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztTQUNsQyxUQUFMLFNBQUs7UUFDRCxPQUFPLFFBQVEsQ0FBQyx4QkFBcEIsUUFBSSxPQUFPLFFBQVEsQ0FBQztBQUNwQjtBQUVDO0FBQVE7QUFBMkI7QUFDcEM7SUFEVSxnQkFBZ0IsQ0FBQyxRQUFnQiw3QkFDbkMsSUFERSxnQkFBZ0IsQ0FBQyxRQUFnQjtBQUFJO1FBQzNDLE1BQU0sYUFBYSxHQUFXLENBQUMsSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsQ0FBQyxHQUFHLDlFQUFqRSxRQUFiLE1BQU0sYUFBYSxHQUFXLENBQUMsSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsQ0FBQyxHQUFHO2NBQzFFLElBQUksQ0FBQyxhQUFhLGhDQUExQixjQUFRLElBQUksQ0FBQyxhQUFhO2NBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsaENBQTFCLGNBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUMxQjtRQUFJLE1BQU0sVUFBVSxHQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDLDlEQUF6QyxRQUFyQixNQUFNLFVBQVUsR0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsdkVBQW5FLFFBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzdELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLHhEQUFsRCxZQUFNLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO2dCQUMxQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxXQUFXLENBQUMsR0FBRyxFQUFFLHJFQUE3RCxnQkFBUSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxXQUFXLENBQUMsR0FBRyxFQUFFO29CQUNuRCxPQUFPLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsN0lBQW5JLG9CQUFVLE9BQU8sVUFBVSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztpQkFDMUgsakJBQVQsaUJBQVM7cUJBQU0sSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRSwxRUFBMUQscUJBQUssSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRTtvQkFDMUQsT0FBTyxVQUFVLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLDVJQUFsSSxvQkFBVSxPQUFPLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQ3pILGpCQUFULGlCQUFTO2FBQ0YsYkFBUCxhQUFPO1NBQ0YsVEFBTCxTQUFLO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLHZFQUFuRSxRQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM3RCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSx4REFBbEQsWUFBTSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtnQkFDMUMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRSxyRUFBN0QsZ0JBQVEsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRTtvQkFDbkQsT0FBTyxVQUFVLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLDdJQUFuSSxvQkFBVSxPQUFPLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQzFILGpCQUFULGlCQUFTO3FCQUFNLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUUsMUVBQTFELHFCQUFLLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUU7b0JBQzFELE9BQU8sVUFBVSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyw1SUFBbEksb0JBQVUsT0FBTyxVQUFVLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUN6SCxqQkFBVCxpQkFBUzthQUNGLGJBQVAsYUFBTztTQUNGLFRBQUwsU0FBSztRQUNELE9BQU8sUUFBUSxDQUFDLHhCQUFwQixRQUFJLE9BQU8sUUFBUSxDQUFDO0FBQ3BCO0FBRUM7QUFBUTtBQUEyQjtBQUNsQztJQURRLGNBQWMsQ0FBQyxRQUFnQiwzQkFDL0IsSUFEQSxjQUFjLENBQUMsUUFBZ0I7QUFBSTtRQUN6QyxNQUFNLFVBQVUsR0FBVyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxXQUFXLENBQUMsR0FBRywzRUFBOUQsUUFBYixNQUFNLFVBQVUsR0FBVyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxXQUFXLENBQUMsR0FBRztjQUNuRSxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsM0NBQXpDLGNBQVksSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRO2NBQzdCLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLDNDQUF6QyxjQUFZLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQ3pDO1FBQUksTUFBTSxRQUFRLEdBQVcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxuRkFBOUQsUUFBckIsTUFBTSxRQUFRLEdBQVcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztjQUMzRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsdkNBQXJDLGNBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRO2NBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLHBDQUFsQyxjQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0FBQ2xDO1FBQUksTUFBTSxRQUFRLEdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsbkRBQTlCLFFBQXJCLE1BQU0sUUFBUSxHQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO0FBQ3ZEO1FBQ0ksSUFBSSxVQUFVLEdBQUcsUUFBUSxFQUFFLG5DQUEzQixRQUFBLElBQUksVUFBVSxHQUFHLFFBQVEsRUFBRTtZQUN6QixJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxXQUFXLENBQUMsR0FBRyxFQUFFLGpFQUEzRCxZQUFNLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLHFCQUFxQixDQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLDdKQURqRyxnQkFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsQ0FDbkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDekYsUUFBUSxHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLDVIQUFwSCxnQkFBUSxRQUFRLEdBQUcsVUFBVSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzVHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyx2Q0FBL0IsZ0JBQVEsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyw5RkFBdEYsZ0JBQVEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7YUFDL0UsYkFBUCxhQUFPO2lCQUFNLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUUsdEVBQTFELGlCQUFLLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLHFCQUFxQixDQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLDdKQURsRyxnQkFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsQ0FDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDMUYsUUFBUSxHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLDNIQUFuSCxnQkFBUSxRQUFRLEdBQUcsVUFBVSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzNHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyx2Q0FBL0IsZ0JBQVEsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyw3RkFBckYsZ0JBQVEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7YUFDOUUsYkFBUCxhQUFPO1lBQ0QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMseENBQWxDLFlBQU0sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDN0IsVEFBTCxTQUFLO2FBQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxVQUFVLEdBQUcsUUFBUSxFQUFFLHBGQUE1RSxhQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksVUFBVSxHQUFHLFFBQVEsRUFBRTtBQUNsRjtZQUNNLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUUsakVBQXJELFlBQUEsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRTtnQkFDbkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMscUJBQXFCLENBQUMsUUFBUSxHQUFHLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLDVIQUFwSCxnQkFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzVHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyx2Q0FBL0IsZ0JBQVEsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQzNFLENBQUMsOUZBRFYsZ0JBQVEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUMzRSxDQUFDO2FBQ0gsYkFBUCxhQUFPO2lCQUFNLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUUsdEVBQTFELGlCQUFLLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsR0FBRyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQywzSEFBbkgsZ0JBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMscUJBQXFCLENBQUMsUUFBUSxHQUFHLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMzRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsdkNBQS9CLGdCQUFRLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsN0ZBQXJGLGdCQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2FBQzlFLGJBQVAsYUFBTztZQUNELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLHhDQUFsQyxZQUFNLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQzdCLFRBQUwsU0FBSztRQUNELE9BQU8sUUFBUSxDQUFDLHhCQUFwQixRQUFJLE9BQU8sUUFBUSxDQUFDO0FBQ3BCO0FBRUM7QUFBUTtBQUFtQjtJQUFsQixnQkFBZ0IscEJBQVUsSUFBMUIsZ0JBQWdCO0FBQUs7UUFDM0IsTUFBTSxhQUFhLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUMsbERBQW5ELFFBQU4sTUFBTSxhQUFhLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7UUFDekQsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsaEVBQTVELFFBQUksYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDeEQsYUFBYSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsMUNBQXRDLFFBQUksYUFBYSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDbEMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLHhCQUFwQixRQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLHREQUFoRCxZQUFNLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQzNDLFRBQUwsU0FBSztRQUNELE9BQU8sYUFBYSxDQUFDLDdCQUF6QixRQUFJLE9BQU8sYUFBYSxDQUFDO0FBQ3pCO0FBRUE7MkNBOXRFQyxTQUFTLFNBQUMsa0JBQ1QsUUFBUSxFQUFFLFlBQVksa0JBQ3RCLFFBQVEsRUFBRSx0RkFGWCxTQUFTLFNBQUMsa0JBQ1QsUUFBUSxFQUFFLFlBQVksa0JBQ3RCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4R0FzQ0osa0JBQ04sTUFBTSxFQUFFLENBQUMsM0JBREgsa0JBQ04sTUFBTSxFQUFFLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytrQkFBZzZKLENBQUMsa0JBQzE2SixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGtCQUM3QixTQUFTLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQyxjQUMvQyxpRkE5SkMsU0FBUyxnQkFEVCxVQUFVLGdCQU1WLGlCQUFpQixnQkFHakIsTUFBTSw2REF5SkwsS0FBSywrQkFHTCxNQUFNLDZCQUlOLEtBQUssbUNBR0wsTUFBTSwyQkFLTixLQUFLLG1DQUlMLE1BQU0sOEJBSU4sTUFBTSxpQ0FJTixNQUFNLGlDQUtOLEtBQUssZ0NBVUwsS0FBSyxnREFvREwsU0FBUyxTQUFDLHVCQUF1QixFQUFFLEVBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFDLG1EQUlqRSxTQUFTLFNBQUMsd0JBQXdCLEVBQUUsRUFBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUMsb0NBSWxFLFNBQVMsU0FBQyxTQUFTLEVBQUUsRUFBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUMseUNBSW5ELFNBQVMsU0FBQyxjQUFjLEVBQUUsRUFBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUMsc0NBSXhELFNBQVMsU0FBQyxXQUFXLEVBQUUsRUFBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUMsc0NBSXBELFNBQVMsU0FBQyxXQUFXLEVBQUUsRUFBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUMsdUNBSXBELFNBQVMsU0FBQyxZQUFZLEVBQUUsRUFBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUMsc0NBSXBELFNBQVMsU0FBQyxXQUFXLEVBQUUsRUFBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUMsMkNBSW5ELFNBQVMsU0FBQyxnQkFBZ0IsRUFBRSxFQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBQywyQ0FJeEQsU0FBUyxTQUFDLGdCQUFnQixFQUFFLEVBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFDLDBDQUl4RCxTQUFTLFNBQUMsZUFBZSxFQUFFLEVBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFDLGtDQUl2RCxTQUFTLFNBQUMsY0FBYyxFQUFFLEVBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFDLHFDQUl4RCxZQUFZLFNBQUMsaUJBQWlCLGdEQUk5QixXQUFXLFNBQUMsZ0JBQWdCLCtDQUU1QixXQUFXLFNBQUMsZUFBZSxrREFFM0IsV0FBVyxTQUFDLG1CQUFtQiwrQ0FFL0IsV0FBVyxTQUFDLGVBQWUsOEJBNkozQixZQUFZLFNBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDLHNIQ2plM0MscUZBRUMsU0FBUyxTQUFDLGtCQUNULFFBQVEsRUFBRSw0QkFBNEIsa0JBQ3RDLFFBQVEsRUFBRSxzV0FRSSxrQkFDZCxNQUFNLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQyxjQUNuRCwyRUFFRSxLQUFLLDJCQUdMLEtBQUssNkJBR0wsS0FBSywyQkFHTCxLQUFLLG9IQ3pCUiwwRUE0QkEscUVBZkMsUUFBUSxTQUFDLGtCQUNSLE9BQU8sRUFBRSxzQkFDUCxZQUFZLGtCQUNiLGtCQUNELFlBQVksRUFBRSxzQkFDWixlQUFlLHNCQUNmLHNCQUFzQixzQkFDdEIscUJBQXFCLHNCQUNyQixvQkFBb0Isc0JBQ3BCLHVCQUF1QixrQkFDeEIsa0JBQ0QsT0FBTyxFQUFFLHNCQUNQLGVBQWUsa0JBQ2hCLGNBQ0YsdGdJRjJJMDZKLENBQUMsa0JBQzE2SixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGtCQUM3QixTQUFTLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQyxjQUMvQyxpaUlBQ0s7QUFBQztBQUFtQjtBQUF5QyxZQS9KakUsU0FBUztBQUNULFlBRkEsVUFBVTtBQUNWLFlBS0EsaUJBQWlCO0FBQ2pCLFlBRUEsTUFBTTtBQUNOO0FBQUc7QUFFVSxvQkFzSlosS0FBSztBQUNOLDBCQUVDLE1BQU07QUFDUCx3QkFHQyxLQUFLO0FBQ04sOEJBRUMsTUFBTTtBQUNQLHNCQUlDLEtBQUs7QUFDTiw4QkFHQyxNQUFNO0FBQ1AseUJBR0MsTUFBTTtBQUNQLDRCQUdDLE1BQU07QUFDUCw0QkFJQyxLQUFLO0FBQUssMkJBVVYsS0FBSztBQUFLLDJDQW9EVixTQUFTLFNBQUMsdUJBQXVCLEVBQUUsRUFBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUM7QUFDL0QsNENBR0YsU0FBUyxTQUFDLHdCQUF3QixFQUFFLEVBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFDO0FBQ2hFLDZCQUdGLFNBQVMsU0FBQyxTQUFTLEVBQUUsRUFBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUM7QUFDakQsa0NBR0YsU0FBUyxTQUFDLGNBQWMsRUFBRSxFQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBQztBQUN0RCwrQkFHRixTQUFTLFNBQUMsV0FBVyxFQUFFLEVBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFDO0FBQ2xELCtCQUdGLFNBQVMsU0FBQyxXQUFXLEVBQUUsRUFBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUM7QUFDbEQsZ0NBR0YsU0FBUyxTQUFDLFlBQVksRUFBRSxFQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBQztBQUNsRCwrQkFHRixTQUFTLFNBQUMsV0FBVyxFQUFFLEVBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFDO0FBQ2pELG9DQUdGLFNBQVMsU0FBQyxnQkFBZ0IsRUFBRSxFQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBQztBQUN0RCxvQ0FHRixTQUFTLFNBQUMsZ0JBQWdCLEVBQUUsRUFBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUM7QUFDdEQsbUNBR0YsU0FBUyxTQUFDLGVBQWUsRUFBRSxFQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBQztBQUNyRCwyQkFHRixTQUFTLFNBQUMsY0FBYyxFQUFFLEVBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFDO0FBQ3RELDhCQUdGLFlBQVksU0FBQyxpQkFBaUI7QUFDNUIseUNBR0YsV0FBVyxTQUFDLGdCQUFnQjtBQUMxQix3Q0FDRixXQUFXLFNBQUMsZUFBZTtBQUN6QiwyQ0FDRixXQUFXLFNBQUMsbUJBQW1CO0FBQzdCLHdDQUNGLFdBQVcsU0FBQyxlQUFlO0FBQ3pCLHVCQTRKRixZQUFZLFNBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ3ZDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQUM7QUFBQztBQUFJO0FBQ0o7QUFHUztBQ3RlakI7QUFBZ0M7bURBRS9CLFNBQVMsU0FBQyxrQkFDVCxRQUFRLEVBQUU7QUFBNEIsa0JBQ3RDLFFBQVEsRUFBRSxzV0FRSSxrQkFDZCxNQUFNLEVBQUUsQ0FBQztpQkFBd0MsQ0FBQyxjQUNuRDs7Ozs7O3NJQUNLO0FBQUM7QUFFUCx1QkFERyxLQUFLO0FBQ04sc0JBRUMsS0FBSztBQUNOLHdCQUVDLEtBQUs7QUFDTixzQkFFQyxLQUFLO0FBQ1A7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUFDO0FBQUM7QUFBSTtBQUVhO0FBQWtFO0FDNUJ4RjtBQUFJO0FBQW9CO0FBQUc7QUFDQztBQTJCNUI7QUFBd0I7MkNBZnZCLFFBQVEsU0FBQztHQUNSLE9BQU8sRUFBRSxzQkFDUCxZQUFZLGtCQUNiLGtCQUNELFlBQVksRUFBRSxzQkFDWixlQUFlO09BQ2Y7SUFBc0I7V0FDdEIscUJBQXFCLHNCQUNyQixvQkFBb0Isc0JBQ3BCLHVCQUF1QixrQkFDeEIsa0JBQ0QsT0FBTyxFQUFFLHNCQUNQLGVBQWUsa0JBQ2hCLGNBQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFDSztBQUFDO0FBQUM7QUFBSTtBQUNDO0FBQWtFO0FBQUk7QUFBQztBQUFJO0FBQWtDO0FBQWtFO0FBQUk7QUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvaW50ZXJUeXBlIH0gZnJvbSAnLi9wb2ludGVyLXR5cGUnO1xuXG4vKiogTGFiZWwgdHlwZSAqL1xuZXhwb3J0IGVudW0gTGFiZWxUeXBlIHtcbiAgLyoqIExhYmVsIGFib3ZlIGxvdyBwb2ludGVyICovXG4gIExvdyxcbiAgLyoqIExhYmVsIGFib3ZlIGhpZ2ggcG9pbnRlciAqL1xuICBIaWdoLFxuICAvKiogTGFiZWwgZm9yIG1pbmltdW0gc2xpZGVyIHZhbHVlICovXG4gIEZsb29yLFxuICAvKiogTGFiZWwgZm9yIG1heGltdW0gc2xpZGVyIHZhbHVlICovXG4gIENlaWwsXG4gIC8qKiBMYWJlbCBiZWxvdyBsZWdlbmQgdGljayAqL1xuICBUaWNrVmFsdWVcbn1cblxuLyoqIEZ1bmN0aW9uIHRvIHRyYW5zbGF0ZSBsYWJlbCB2YWx1ZSBpbnRvIHRleHQgKi9cbmV4cG9ydCB0eXBlIFRyYW5zbGF0ZUZ1bmN0aW9uID0gKHZhbHVlOiBudW1iZXIsIGxhYmVsOiBMYWJlbFR5cGUpID0+IHN0cmluZztcbi8qKiBGdW5jdGlvbiB0byBjb21iaW5kICovXG5leHBvcnQgdHlwZSBDb21iaW5lTGFiZWxzRnVuY3Rpb24gPSAobWluTGFiZWw6IHN0cmluZywgbWF4TGFiZWw6IHN0cmluZykgPT4gc3RyaW5nO1xuLyoqIEZ1bmN0aW9uIHRvIHByb3ZpZGUgbGVnZW5kICAqL1xuZXhwb3J0IHR5cGUgR2V0TGVnZW5kRnVuY3Rpb24gPSAodmFsdWU6IG51bWJlcikgPT4gc3RyaW5nO1xuXG4vKiogRnVuY3Rpb24gY29udmVydGluZyBzbGlkZXIgdmFsdWUgdG8gc2xpZGVyIHBvc2l0aW9uICovXG5leHBvcnQgdHlwZSBWYWx1ZVRvUG9zaXRpb25GdW5jdGlvbiA9ICh2YWw6IG51bWJlciwgbWluVmFsOiBudW1iZXIsIG1heFZhbDogbnVtYmVyKSA9PiBudW1iZXI7XG5cbi8qKiBGdW5jdGlvbiBjb252ZXJ0aW5nIHNsaWRlciBwb3NpdGlvbiB0byBzbGlkZXIgdmFsdWUgKi9cbmV4cG9ydCB0eXBlIFBvc2l0aW9uVG9WYWx1ZUZ1bmN0aW9uID0gKHBlcmNlbnQ6IG51bWJlciwgbWluVmFsOiBudW1iZXIsIG1heFZhbDogbnVtYmVyKSA9PiBudW1iZXI7XG5cbi8qKlxuICogQ3VzdG9tIHN0ZXAgZGVmaW5pdGlvblxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBjdXN0b20gdmFsdWVzIGFuZCBsZWdlbmQgdmFsdWVzIGZvciBzbGlkZXIgdGlja3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21TdGVwRGVmaW5pdGlvbiB7XG4gIC8qKiBWYWx1ZSAqL1xuICB2YWx1ZTogbnVtYmVyO1xuICAvKiogTGVnZW5kIChsYWJlbCBmb3IgdGhlIHZhbHVlKSAqL1xuICBsZWdlbmQ/OiBzdHJpbmc7XG59XG5cbi8qKiBTbGlkZXIgb3B0aW9ucyAqL1xuZXhwb3J0IGNsYXNzIE9wdGlvbnMge1xuICAvKiogTWluaW11bSB2YWx1ZSBmb3IgYSBzbGlkZXIuXG4gICAgTm90IGFwcGxpY2FibGUgd2hlbiB1c2luZyBzdGVwc0FycmF5LiAqL1xuICBmbG9vcj86IG51bWJlciA9IDA7XG5cbiAgLyoqIE1heGltdW0gdmFsdWUgZm9yIGEgc2xpZGVyLlxuICAgIE5vdCBhcHBsaWNhYmxlIHdoZW4gdXNpbmcgc3RlcHNBcnJheS4gKi9cbiAgY2VpbD86IG51bWJlciA9IG51bGw7XG5cbiAgLyoqIFN0ZXAgYmV0d2VlbiBlYWNoIHZhbHVlLlxuICAgIE5vdCBhcHBsaWNhYmxlIHdoZW4gdXNpbmcgc3RlcHNBcnJheS4gKi9cbiAgc3RlcD86IG51bWJlciA9IDE7XG5cbiAgLyoqIFRoZSBtaW5pbXVtIHJhbmdlIGF1dGhvcml6ZWQgb24gdGhlIHNsaWRlci5cbiAgICBBcHBsaWVzIHRvIHJhbmdlIHNsaWRlciBvbmx5LlxuICAgIFdoZW4gdXNpbmcgc3RlcHNBcnJheSwgZXhwcmVzc2VkIGFzIGluZGV4IGludG8gc3RlcHNBcnJheS4gKi9cbiAgbWluUmFuZ2U/OiBudW1iZXIgPSBudWxsO1xuXG4gIC8qKiBUaGUgbWF4aW11bSByYW5nZSBhdXRob3JpemVkIG9uIHRoZSBzbGlkZXIuXG4gICAgQXBwbGllcyB0byByYW5nZSBzbGlkZXIgb25seS5cbiAgICBXaGVuIHVzaW5nIHN0ZXBzQXJyYXksIGV4cHJlc3NlZCBhcyBpbmRleCBpbnRvIHN0ZXBzQXJyYXkuICovXG4gIG1heFJhbmdlPzogbnVtYmVyID0gbnVsbDtcblxuICAvKiogU2V0IHRvIHRydWUgdG8gaGF2ZSBhIHB1c2ggYmVoYXZpb3IuIFdoZW4gdGhlIG1pbiBoYW5kbGUgZ29lcyBhYm92ZSB0aGUgbWF4LFxuICAgIHRoZSBtYXggaXMgbW92ZWQgYXMgd2VsbCAoYW5kIHZpY2UtdmVyc2EpLiBUaGUgcmFuZ2UgYmV0d2VlbiBtaW4gYW5kIG1heCBpc1xuICAgIGRlZmluZWQgYnkgdGhlIHN0ZXAgb3B0aW9uIChkZWZhdWx0cyB0byAxKSBhbmQgY2FuIGFsc28gYmUgb3ZlcnJpZGVuIGJ5XG4gICAgdGhlIG1pblJhbmdlIG9wdGlvbi4gQXBwbGllcyB0byByYW5nZSBzbGlkZXIgb25seS4gKi9cbiAgcHVzaFJhbmdlPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBUaGUgbWluaW11bSB2YWx1ZSBhdXRob3JpemVkIG9uIHRoZSBzbGlkZXIuXG4gICAgV2hlbiB1c2luZyBzdGVwc0FycmF5LCBleHByZXNzZWQgYXMgaW5kZXggaW50byBzdGVwc0FycmF5LiAqL1xuICBtaW5MaW1pdD86IG51bWJlciA9IG51bGw7XG5cbiAgLyoqIFRoZSBtYXhpbXVtIHZhbHVlIGF1dGhvcml6ZWQgb24gdGhlIHNsaWRlci5cbiAgICBXaGVuIHVzaW5nIHN0ZXBzQXJyYXksIGV4cHJlc3NlZCBhcyBpbmRleCBpbnRvIHN0ZXBzQXJyYXkuICovXG4gIG1heExpbWl0PzogbnVtYmVyID0gbnVsbDtcblxuICAvKiogQ3VzdG9tIHRyYW5zbGF0ZSBmdW5jdGlvbi4gVXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gdHJhbnNsYXRlIHZhbHVlcyBkaXNwbGF5ZWRcbiAgICAgIG9uIHRoZSBzbGlkZXIuICovXG4gIHRyYW5zbGF0ZT86IFRyYW5zbGF0ZUZ1bmN0aW9uID0gbnVsbDtcblxuICAvKiogQ3VzdG9tIGZ1bmN0aW9uIGZvciBjb21iaW5pbmcgb3ZlcmxhcHBpbmcgbGFiZWxzIGluIHJhbmdlIHNsaWRlci5cbiAgICAgIEl0IHRha2VzIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgKGFscmVhZHkgdHJhbnNsYXRlZCB3aXRoIHRyYW5zbGF0ZSBmdWN0aW9uKVxuICAgICAgYW5kIHNob3VsZCByZXR1cm4gaG93IHRoZXNlIHR3byB2YWx1ZXMgc2hvdWxkIGJlIGNvbWJpbmVkLlxuICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgZGVmYXVsdCBmdW5jdGlvbiB3aWxsIGpvaW4gdGhlIHR3byB2YWx1ZXMgd2l0aFxuICAgICAgJyAtICcgYXMgc2VwYXJhdG9yLiAqL1xuICBjb21iaW5lTGFiZWxzPzogQ29tYmluZUxhYmVsc0Z1bmN0aW9uID0gbnVsbDtcblxuICAvKiogVXNlIHRvIGRpc3BsYXkgbGVnZW5kIHVuZGVyIHRpY2tzICh0aHVzLCBpdCBuZWVkcyB0byBiZSB1c2VkIGFsb25nIHdpdGhcbiAgICAgc2hvd1RpY2tzIG9yIHNob3dUaWNrc1ZhbHVlcykuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIGVhY2ggdGlja1xuICAgICB2YWx1ZSBhbmQgcmV0dXJuZWQgY29udGVudCB3aWxsIGJlIGRpc3BsYXllZCB1bmRlciB0aGUgdGljayBhcyBhIGxlZ2VuZC5cbiAgICAgSWYgdGhlIHJldHVybmVkIHZhbHVlIGlzIG51bGwsIHRoZW4gbm8gbGVnZW5kIGlzIGRpc3BsYXllZCB1bmRlclxuICAgICB0aGUgY29ycmVzcG9uZGluZyB0aWNrLllvdSBjYW4gYWxzbyBkaXJlY3RseSBwcm92aWRlIHRoZSBsZWdlbmQgdmFsdWVzXG4gICAgIGluIHRoZSBzdGVwc0FycmF5IG9wdGlvbi4gKi9cbiAgZ2V0TGVnZW5kPzogR2V0TGVnZW5kRnVuY3Rpb24gPSBudWxsO1xuXG4gIC8qKiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IGEgc2xpZGVyIHdpdGggbm9uIGxpbmVhci9udW1iZXIgc3RlcHMuXG4gICAgIEp1c3QgcGFzcyBhbiBhcnJheSB3aXRoIGVhY2ggc2xpZGVyIHZhbHVlIGFuZCB0aGF0J3MgaXQ7IHRoZSBmbG9vciwgY2VpbCBhbmQgc3RlcCBzZXR0aW5nc1xuICAgICBvZiB0aGUgc2xpZGVyIHdpbGwgYmUgY29tcHV0ZWQgYXV0b21hdGljYWxseS5cbiAgICAgQnkgZGVmYXVsdCwgdGhlIHZhbHVlIG1vZGVsIGFuZCB2YWx1ZUhpZ2ggbW9kZWwgdmFsdWVzIHdpbGwgYmUgdGhlIHZhbHVlIG9mIHRoZSBzZWxlY3RlZCBpdGVtXG4gICAgIGluIHRoZSBzdGVwc0FycmF5LlxuICAgICBUaGV5IGNhbiBhbHNvIGJlIGJvdW5kIHRvIHRoZSBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgaXRlbSBieSBzZXR0aW5nIHRoZSBiaW5kSW5kZXhGb3JTdGVwc0FycmF5XG4gICAgIG9wdGlvbiB0byB0cnVlLiAqL1xuICBzdGVwc0FycmF5PzogQ3VzdG9tU3RlcERlZmluaXRpb25bXSA9IG51bGw7XG5cbiAgLyoqIFNldCB0byB0cnVlIHRvIGJpbmQgdGhlIGluZGV4IG9mIHRoZSBzZWxlY3RlZCBpdGVtIHRvIHZhbHVlIG1vZGVsIGFuZCB2YWx1ZUhpZ2ggbW9kZWwuICovXG4gIGJpbmRJbmRleEZvclN0ZXBzQXJyYXk/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFdoZW4gc2V0IHRvIHRydWUgYW5kIHVzaW5nIGEgcmFuZ2Ugc2xpZGVyLCB0aGUgcmFuZ2UgY2FuIGJlIGRyYWdnZWQgYnkgdGhlIHNlbGVjdGlvbiBiYXIuXG4gICAgQXBwbGllcyB0byByYW5nZSBzbGlkZXIgb25seS4gKi9cbiAgZHJhZ2dhYmxlUmFuZ2U/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFNhbWUgYXMgZHJhZ2dhYmxlUmFuZ2UgYnV0IHRoZSBzbGlkZXIgcmFuZ2UgY2FuJ3QgYmUgY2hhbmdlZC5cbiAgICBBcHBsaWVzIHRvIHJhbmdlIHNsaWRlciBvbmx5LiAqL1xuICBkcmFnZ2FibGVSYW5nZU9ubHk/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFNldCB0byB0cnVlIHRvIGFsd2F5cyBzaG93IHRoZSBzZWxlY3Rpb24gYmFyIGJlZm9yZSB0aGUgc2xpZGVyIGhhbmRsZS4gKi9cbiAgc2hvd1NlbGVjdGlvbkJhcj86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogU2V0IHRvIHRydWUgdG8gYWx3YXlzIHNob3cgdGhlIHNlbGVjdGlvbiBiYXIgYWZ0ZXIgdGhlIHNsaWRlciBoYW5kbGUuICovXG4gIHNob3dTZWxlY3Rpb25CYXJFbmQ/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqICBTZXQgYSBudW1iZXIgdG8gZHJhdyB0aGUgc2VsZWN0aW9uIGJhciBiZXR3ZWVuIHRoaXMgdmFsdWUgYW5kIHRoZSBzbGlkZXIgaGFuZGxlLlxuICAgIFdoZW4gdXNpbmcgc3RlcHNBcnJheSwgZXhwcmVzc2VkIGFzIGluZGV4IGludG8gc3RlcHNBcnJheS4gKi9cbiAgc2hvd1NlbGVjdGlvbkJhckZyb21WYWx1ZT86IG51bWJlciA9IG51bGw7XG5cbiAgLyoqICBPbmx5IGZvciByYW5nZSBzbGlkZXIuIFNldCB0byB0cnVlIHRvIHZpc3VhbGl6ZSBpbiBkaWZmZXJlbnQgY29sb3VyIHRoZSBhcmVhc1xuICAgIG9uIHRoZSBsZWZ0L3JpZ2h0ICh0b3AvYm90dG9tIGZvciB2ZXJ0aWNhbCByYW5nZSBzbGlkZXIpIG9mIHNlbGVjdGlvbiBiYXIgYmV0d2VlbiB0aGUgaGFuZGxlcy4gKi9cbiAgc2hvd091dGVyU2VsZWN0aW9uQmFycz86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogU2V0IHRvIHRydWUgdG8gaGlkZSBwb2ludGVyIGxhYmVscyAqL1xuICBoaWRlUG9pbnRlckxhYmVscz86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogU2V0IHRvIHRydWUgdG8gaGlkZSBtaW4gLyBtYXggbGFiZWxzICAqL1xuICBoaWRlTGltaXRMYWJlbHM/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHRoZSBhdXRvLWhpZGluZyBiZWhhdmlvciBvZiB0aGUgbGltaXQgbGFiZWxzLiAqL1xuICBhdXRvSGlkZUxpbWl0TGFiZWxzPzogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqIFNldCB0byB0cnVlIHRvIG1ha2UgdGhlIHNsaWRlciByZWFkLW9ubHkuICovXG4gIHJlYWRPbmx5PzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBTZXQgdG8gdHJ1ZSB0byBkaXNhYmxlIHRoZSBzbGlkZXIuICovXG4gIGRpc2FibGVkPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBUaHJvdHRsZSBpbnRlcnZhbCBmb3IgbW91c2UgZXZlbnRzIGluIG1pbGxpc2Vjb25kcy5cbiAgICogVGhpcyBpcyBwcm92aWRlZCB0byBhdm9pZCBhIGZsb29kIG9mIGV2ZW50cyB3aGVuIG1vdmluZyB0aGUgc2xpZGVyIHdpdGggbW91c2UuICovXG4gIG1vdXNlRXZlbnRzSW50ZXJ2YWw/OiBudW1iZXIgPSA1MDtcblxuICAvKiogVGhyb3R0bGUgaW50ZXJ2YWwgZm9yIHRvdWNoIGV2ZW50cyBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFRoaXMgaXMgcHJvdmlkZWQgdG8gYXZvaWQgYSBmbG9vZCBvZiBldmVudHMgd2hlbiBtb3ZpbmcgdGhlIHNsaWRlciB3aXRoIHRvdWNoIGdlc3R1cmUuICovXG4gIHRvdWNoRXZlbnRzSW50ZXJ2YWw/OiBudW1iZXIgPSA1MDtcblxuICAvKiogVGhyb3R0bGUgaW50ZXJ2YWwgZm9yIGlucHV0IGNoYW5nZXMgKGNoYW5nZXMgdG8gYmluZGluZ3Mgb3IgcmVhY3RpdmUgZm9ybSBpbnB1dHMpXG4gICAqIFRoaXMgaXMgcHJvdmlkZWQgdG8gYXZvaWQgYSBmbG9vZCBvZiBldmVudHMgb24gZnJlcXVlbnQgaW5wdXQgYmluZGluZyBjaGFuZ2VzIGFmZmVjdGluZyBwZXJmb3JtYW5jZS4gKi9cbiAgaW5wdXRFdmVudHNJbnRlcnZhbD86IG51bWJlciA9IDEwMDtcblxuICAvKiogVGhyb3R0bGUgaW50ZXJ2YWwgZm9yIG91dHB1dCBjaGFuZ2VzIChzaWduYWxsaW5nIGNoYW5nZXMgdG8gb3V0cHV0IGJpbmRpbmdzIGFuZCB1c2VyIGNhbGxiYWNrcylcbiAgICogVGhpcyBpcyBwcm92aWRlZCB0byBhdm9pZCBhIGZsb29kIG9mIG91dGdvaW5nIGV2ZW50cyBhZmZlY3RpbmcgQW5ndWxhciBhcHAgcGVyZm9ybWFuY2UuICovXG4gIG91dHB1dEV2ZW50c0ludGVydmFsPzogbnVtYmVyID0gMTAwO1xuXG4gIC8qKiBTZXQgdG8gdHJ1ZSB0byBkaXNwbGF5IGEgdGljayBmb3IgZWFjaCBzdGVwIG9mIHRoZSBzbGlkZXIuICovXG4gIHNob3dUaWNrcz86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogU2V0IHRvIHRydWUgdG8gZGlzcGxheSBhIHRpY2sgYW5kIHRoZSBzdGVwIHZhbHVlIGZvciBlYWNoIHN0ZXAgb2YgdGhlIHNsaWRlci4uICovXG4gIHNob3dUaWNrc1ZhbHVlcz86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiBUaGUgc3RlcCBiZXR3ZWVuIGVhY2ggdGljayB0byBkaXNwbGF5LiBJZiBub3Qgc2V0LCB0aGUgc3RlcCB2YWx1ZSBpcyB1c2VkLlxuICAgIE5vdCB1c2VkIHdoZW4gdGlja3NBcnJheSBpcyBzcGVjaWZpZWQuICovXG4gIHRpY2tTdGVwPzogbnVtYmVyID0gbnVsbDtcblxuICAvKiBUaGUgc3RlcCBiZXR3ZWVuIGRpc3BsYXlpbmcgZWFjaCB0aWNrIHN0ZXAgdmFsdWUuXG4gICAgSWYgbm90IHNldCwgdGhlbiB0aWNrU3RlcCBvciBzdGVwIGlzIHVzZWQsIGRlcGVuZGluZyBvbiB3aGljaCBvbmUgaXMgc2V0LiAqL1xuICB0aWNrVmFsdWVTdGVwPzogbnVtYmVyID0gbnVsbDtcblxuICAvKiogVXNlIHRvIGRpc3BsYXkgdGlja3MgYXQgc3BlY2lmaWMgcG9zaXRpb25zLlxuICAgIFRoZSBhcnJheSBjb250YWlucyB0aGUgaW5kZXggb2YgdGhlIHRpY2tzIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZC5cbiAgICBGb3IgZXhhbXBsZSwgWzAsIDEsIDVdIHdpbGwgZGlzcGxheSBhIHRpY2sgZm9yIHRoZSBmaXJzdCwgc2Vjb25kIGFuZCBzaXh0aCB2YWx1ZXMuICovXG4gIHRpY2tzQXJyYXk/OiBudW1iZXJbXSA9IG51bGw7XG5cbiAgLyoqIFVzZWQgdG8gZGlzcGxheSBhIHRvb2x0aXAgd2hlbiBhIHRpY2sgaXMgaG92ZXJlZC5cbiAgICBTZXQgdG8gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHRvb2x0aXAgY29udGVudCBmb3IgYSBnaXZlbiB2YWx1ZS4gKi9cbiAgdGlja3NUb29sdGlwPzogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZyA9IG51bGw7XG5cbiAgLyoqIFNhbWUgYXMgdGlja3NUb29sdGlwIGJ1dCBmb3IgdGlja3MgdmFsdWVzLiAqL1xuICB0aWNrc1ZhbHVlc1Rvb2x0aXA/OiAodmFsdWU6IG51bWJlcikgPT4gc3RyaW5nID0gbnVsbDtcblxuICAvKiogU2V0IHRvIHRydWUgdG8gZGlzcGxheSB0aGUgc2xpZGVyIHZlcnRpY2FsbHkuXG4gICAgVGhlIHNsaWRlciB3aWxsIHRha2UgdGhlIGZ1bGwgaGVpZ2h0IG9mIGl0cyBwYXJlbnQuXG4gICAgQ2hhbmdpbmcgdGhpcyB2YWx1ZSBhdCBydW50aW1lIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiAqL1xuICB2ZXJ0aWNhbD86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjdXJyZW50IGNvbG9yIG9mIHRoZSBzZWxlY3Rpb24gYmFyLlxuICAgIElmIHlvdXIgY29sb3Igd29uJ3QgY2hhbmdlLCBkb24ndCB1c2UgdGhpcyBvcHRpb24gYnV0IHNldCBpdCB0aHJvdWdoIENTUy5cbiAgICBJZiB0aGUgcmV0dXJuZWQgY29sb3IgZGVwZW5kcyBvbiBhIG1vZGVsIHZhbHVlIChlaXRoZXIgdmFsdWUgb3IgdmFsdWVIaWdoKSxcbiAgICB5b3Ugc2hvdWxkIHVzZSB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi5cbiAgICBJbmRlZWQsIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlcmUgaXMgbm8gY2VydGFpbnR5IHRoYXQgdGhlIG1vZGVsXG4gICAgaGFzIGFscmVhZHkgYmVlbiB1cGRhdGVkLiovXG4gIGdldFNlbGVjdGlvbkJhckNvbG9yPzogKG1pblZhbHVlOiBudW1iZXIsIG1heFZhbHVlPzogbnVtYmVyKSA9PiBzdHJpbmcgPSBudWxsO1xuXG4gIC8qKiBGdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNvbG9yIG9mIGEgdGljay4gc2hvd1RpY2tzIG11c3QgYmUgZW5hYmxlZC4gKi9cbiAgZ2V0VGlja0NvbG9yPzogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZyA9IG51bGw7XG5cbiAgLyoqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY3VycmVudCBjb2xvciBvZiBhIHBvaW50ZXIuXG4gICAgSWYgeW91ciBjb2xvciB3b24ndCBjaGFuZ2UsIGRvbid0IHVzZSB0aGlzIG9wdGlvbiBidXQgc2V0IGl0IHRocm91Z2ggQ1NTLlxuICAgIElmIHRoZSByZXR1cm5lZCBjb2xvciBkZXBlbmRzIG9uIGEgbW9kZWwgdmFsdWUgKGVpdGhlciB2YWx1ZSBvciB2YWx1ZUhpZ2gpLFxuICAgIHlvdSBzaG91bGQgdXNlIHRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLlxuICAgIEluZGVlZCwgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGVyZSBpcyBubyBjZXJ0YWludHkgdGhhdCB0aGUgbW9kZWwgaGFzIGFscmVhZHkgYmVlbiB1cGRhdGVkLlxuICAgIFRvIGhhbmRsZSByYW5nZSBzbGlkZXIgcG9pbnRlcnMgaW5kZXBlbmRlbnRseSwgeW91IHNob3VsZCBldmFsdWF0ZSBwb2ludGVyVHlwZSB3aXRoaW4gdGhlIGdpdmVuXG4gICAgZnVuY3Rpb24gd2hlcmUgXCJtaW5cIiBzdGFuZHMgZm9yIHZhbHVlIG1vZGVsIGFuZCBcIm1heFwiIGZvciB2YWx1ZUhpZ2ggbW9kZWwgdmFsdWVzLiAqL1xuICBnZXRQb2ludGVyQ29sb3I/OiAodmFsdWU6IG51bWJlciwgcG9pbnRlclR5cGU6IFBvaW50ZXJUeXBlKSA9PiBzdHJpbmcgPSBudWxsO1xuXG4gIC8qKiBIYW5kbGVzIGFyZSBmb2N1c2FibGUgKG9uIGNsaWNrIG9yIHdpdGggdGFiKSBhbmQgY2FuIGJlIG1vZGlmaWVkIHVzaW5nIHRoZSBmb2xsb3dpbmcga2V5Ym9hcmQgY29udHJvbHM6XG4gICAgTGVmdC9ib3R0b20gYXJyb3dzOiAtMVxuICAgIFJpZ2h0L3RvcCBhcnJvd3M6ICsxXG4gICAgUGFnZS1kb3duOiAtMTAlXG4gICAgUGFnZS11cDogKzEwJVxuICAgIEhvbWU6IG1pbmltdW0gdmFsdWVcbiAgICBFbmQ6IG1heGltdW0gdmFsdWVcbiAgICovXG4gIGtleWJvYXJkU3VwcG9ydD86IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKiBJZiB5b3UgZGlzcGxheSB0aGUgc2xpZGVyIGluIGFuIGVsZW1lbnQgdGhhdCB1c2VzIHRyYW5zZm9ybTogc2NhbGUoMC41KSwgc2V0IHRoZSBzY2FsZSB2YWx1ZSB0byAyXG4gICAgc28gdGhhdCB0aGUgc2xpZGVyIGlzIHJlbmRlcmVkIHByb3Blcmx5IGFuZCB0aGUgZXZlbnRzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4gKi9cbiAgc2NhbGU/OiBudW1iZXIgPSAxO1xuXG4gIC8qKiBTZXQgdG8gdHJ1ZSB0byBmb3JjZSB0aGUgdmFsdWUocykgdG8gYmUgcm91bmRlZCB0byB0aGUgc3RlcCwgZXZlbiB3aGVuIG1vZGlmaWVkIGZyb20gdGhlIG91dHNpZGUuXG4gICAgV2hlbiBzZXQgdG8gZmFsc2UsIGlmIHRoZSBtb2RlbCB2YWx1ZXMgYXJlIG1vZGlmaWVkIGZyb20gb3V0c2lkZSB0aGUgc2xpZGVyLCB0aGV5IGFyZSBub3Qgcm91bmRlZFxuICAgIGFuZCBjYW4gYmUgYmV0d2VlbiB0d28gc3RlcHMuICovXG4gIGVuZm9yY2VTdGVwPzogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqIFNldCB0byB0cnVlIHRvIGZvcmNlIHRoZSB2YWx1ZShzKSB0byBiZSBub3JtYWxpc2VkIHRvIGFsbG93ZWQgcmFuZ2UgKGZsb29yIHRvIGNlaWwpLCBldmVuIHdoZW4gbW9kaWZpZWQgZnJvbSB0aGUgb3V0c2lkZS5cbiAgICBXaGVuIHNldCB0byBmYWxzZSwgaWYgdGhlIG1vZGVsIHZhbHVlcyBhcmUgbW9kaWZpZWQgZnJvbSBvdXRzaWRlIHRoZSBzbGlkZXIsIGFuZCB0aGV5IGFyZSBvdXRzaWRlIGFsbG93ZWQgcmFuZ2UsXG4gICAgdGhlIHNsaWRlciBtYXkgYmUgcmVuZGVyZWQgaW5jb3JyZWN0bHkuIEhvd2V2ZXIsIHNldHRpbmcgdGhpcyB0byBmYWxzZSBtYXkgYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIHBlcmZvcm0gY3VzdG9tIG5vcm1hbGlzYXRpb24uICovXG4gIGVuZm9yY2VSYW5nZT86IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKiBTZXQgdG8gdHJ1ZSB0byBmb3JjZSB0aGUgdmFsdWUocykgdG8gYmUgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBzdGVwIHZhbHVlLCBldmVuIHdoZW4gbW9kaWZpZWQgZnJvbSB0aGUgb3V0c2lkZS5cbiAgICBXaGVuIHNldCB0byBmYWxzZSwgaWYgdGhlIG1vZGVsIHZhbHVlcyBhcmUgbW9kaWZpZWQgZnJvbSBvdXRzaWRlIHRoZSBzbGlkZXIsIGFuZCB0aGV5IGFyZSBvdXRzaWRlIGFsbG93ZWQgcmFuZ2UsXG4gICAgdGhlIHNsaWRlciBtYXkgYmUgcmVuZGVyZWQgaW5jb3JyZWN0bHkuIEhvd2V2ZXIsIHNldHRpbmcgdGhpcyB0byBmYWxzZSBtYXkgYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIHBlcmZvcm0gY3VzdG9tIG5vcm1hbGlzYXRpb24uICovXG4gIGVuZm9yY2VTdGVwc0FycmF5PzogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqIFNldCB0byB0cnVlIHRvIHByZXZlbnQgdG8gdXNlciBmcm9tIHN3aXRjaGluZyB0aGUgbWluIGFuZCBtYXggaGFuZGxlcy4gQXBwbGllcyB0byByYW5nZSBzbGlkZXIgb25seS4gKi9cbiAgbm9Td2l0Y2hpbmc/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFNldCB0byB0cnVlIHRvIG9ubHkgYmluZCBldmVudHMgb24gc2xpZGVyIGhhbmRsZXMuICovXG4gIG9ubHlCaW5kSGFuZGxlcz86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogU2V0IHRvIHRydWUgdG8gc2hvdyBncmFwaHMgcmlnaHQgdG8gbGVmdC5cbiAgICBJZiB2ZXJ0aWNhbCBpcyB0cnVlIGl0IHdpbGwgYmUgZnJvbSB0b3AgdG8gYm90dG9tIGFuZCBsZWZ0IC8gcmlnaHQgYXJyb3cgZnVuY3Rpb25zIHJldmVyc2VkLiAqL1xuICByaWdodFRvTGVmdD86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogU2V0IHRvIHRydWUgdG8gcmV2ZXJzZSBrZXlib2FyZCBuYXZpZ2F0aW9uOlxuICAgIFJpZ2h0L3RvcCBhcnJvd3M6IC0xXG4gICAgTGVmdC9ib3R0b20gYXJyb3dzOiArMVxuICAgIFBhZ2UtdXA6IC0xMCVcbiAgICBQYWdlLWRvd246ICsxMCVcbiAgICBFbmQ6IG1pbmltdW0gdmFsdWVcbiAgICBIb21lOiBtYXhpbXVtIHZhbHVlXG4gICAqL1xuICByZXZlcnNlZENvbnRyb2xzPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBTZXQgdG8gdHJ1ZSB0byBrZWVwIHRoZSBzbGlkZXIgbGFiZWxzIGluc2lkZSB0aGUgc2xpZGVyIGJvdW5kcy4gKi9cbiAgYm91bmRQb2ludGVyTGFiZWxzPzogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqIFNldCB0byB0cnVlIHRvIHVzZSBhIGxvZ2FyaXRobWljIHNjYWxlIHRvIGRpc3BsYXkgdGhlIHNsaWRlci4gICovXG4gIGxvZ1NjYWxlPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBGdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHBvc2l0aW9uIG9uIHRoZSBzbGlkZXIgZm9yIGEgZ2l2ZW4gdmFsdWUuXG4gICAgVGhlIHBvc2l0aW9uIG11c3QgYmUgYSBwZXJjZW50YWdlIGJldHdlZW4gMCBhbmQgMS5cbiAgICBUaGUgZnVuY3Rpb24gc2hvdWxkIGJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBvciBkZWNyZWFzaW5nOyBvdGhlcndpc2UgdGhlIHNsaWRlciBtYXkgYmVoYXZlIGluY29ycmVjdGx5LiAqL1xuICBjdXN0b21WYWx1ZVRvUG9zaXRpb24/OiBWYWx1ZVRvUG9zaXRpb25GdW5jdGlvbiA9IG51bGw7XG5cbiAgLyoqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gcG9zaXRpb24gb24gdGhlIHNsaWRlci5cbiAgICBUaGUgcG9zaXRpb24gaXMgYSBwZXJjZW50YWdlIGJldHdlZW4gMCBhbmQgMS5cbiAgICBUaGUgZnVuY3Rpb24gc2hvdWxkIGJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBvciBkZWNyZWFzaW5nOyBvdGhlcndpc2UgdGhlIHNsaWRlciBtYXkgYmVoYXZlIGluY29ycmVjdGx5LiAqL1xuICBjdXN0b21Qb3NpdGlvblRvVmFsdWU/OiBQb3NpdGlvblRvVmFsdWVGdW5jdGlvbiA9IG51bGw7XG5cbiAgLyoqIFByZWNpc2lvbiBsaW1pdCBmb3IgY2FsY3VsYXRlZCB2YWx1ZXMuXG4gICAgVmFsdWVzIHVzZWQgaW4gY2FsY3VsYXRpb25zIHdpbGwgYmUgcm91bmRlZCB0byB0aGlzIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHNcbiAgICB0byBwcmV2ZW50IGFjY3VtdWxhdGluZyBzbWFsbCBmbG9hdGluZy1wb2ludCBlcnJvcnMuICovXG4gIHByZWNpc2lvbkxpbWl0PzogbnVtYmVyID0gMTI7XG5cbiAgLyoqIFVzZSB0byBkaXNwbGF5IHRoZSBzZWxlY3Rpb24gYmFyIGFzIGEgZ3JhZGllbnQuXG4gICAgVGhlIGdpdmVuIG9iamVjdCBtdXN0IGNvbnRhaW4gZnJvbSBhbmQgdG8gcHJvcGVydGllcyB3aGljaCBhcmUgY29sb3JzLiAqL1xuICBzZWxlY3Rpb25CYXJHcmFkaWVudD86IHtmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmd9ID0gbnVsbDtcblxuICAvKiogVXNlIHRvIGFkZCBhIGxhYmVsIGRpcmVjdGx5IHRvIHRoZSBzbGlkZXIgZm9yIGFjY2Vzc2liaWxpdHkuIEFkZHMgdGhlIGFyaWEtbGFiZWwgYXR0cmlidXRlLiAqL1xuICBhcmlhTGFiZWw/OiBzdHJpbmcgPSBudWxsO1xuXG4gIC8qKiBVc2UgaW5zdGVhZCBvZiBhcmlhTGFiZWwgdG8gcmVmZXJlbmNlIHRoZSBpZCBvZiBhbiBlbGVtZW50IHdoaWNoIHdpbGwgYmUgdXNlZCB0byBsYWJlbCB0aGUgc2xpZGVyLlxuICAgIEFkZHMgdGhlIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUuICovXG4gIGFyaWFMYWJlbGxlZEJ5Pzogc3RyaW5nID0gbnVsbDtcblxuICAvKiogVXNlIHRvIGFkZCBhIGxhYmVsIGRpcmVjdGx5IHRvIHRoZSBzbGlkZXIgcmFuZ2UgZm9yIGFjY2Vzc2liaWxpdHkuIEFkZHMgdGhlIGFyaWEtbGFiZWwgYXR0cmlidXRlLiAqL1xuICBhcmlhTGFiZWxIaWdoPzogc3RyaW5nID0gbnVsbDtcblxuICAvKiogVXNlIGluc3RlYWQgb2YgYXJpYUxhYmVsSGlnaCB0byByZWZlcmVuY2UgdGhlIGlkIG9mIGFuIGVsZW1lbnQgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGxhYmVsIHRoZSBzbGlkZXIgcmFuZ2UuXG4gICAgQWRkcyB0aGUgYXJpYS1sYWJlbGxlZGJ5IGF0dHJpYnV0ZS4gKi9cbiAgYXJpYUxhYmVsbGVkQnlIaWdoPzogc3RyaW5nID0gbnVsbDtcblxuICAvKiogVXNlIHRvIGluY3JlYXNlIHJlbmRlcmluZyBwZXJmb3JtYW5jZS4gSWYgdGhlIHZhbHVlIGlzIG5vdCBwcm92aWRlZCwgdGhlIHNsaWRlciBjYWxjdWxhdGVzIHRoZSB3aXRoL2hlaWdodCBvZiB0aGUgaGFuZGxlICovXG4gIGhhbmRsZURpbWVuc2lvbj86IG51bWJlciA9IG51bGw7XG5cbiAgLyoqIFVzZSB0byBpbmNyZWFzZSByZW5kZXJpbmcgcGVyZm9ybWFuY2UuIElmIHRoZSB2YWx1ZSBpcyBub3QgcHJvdmlkZWQsIHRoZSBzbGlkZXIgY2FsY3VsYXRlcyB0aGUgd2l0aC9oZWlnaHQgb2YgdGhlIGJhciAqL1xuICBiYXJEaW1lbnNpb24/OiBudW1iZXIgPSBudWxsO1xuXG4gIC8qKiBFbmFibGUvZGlzYWJsZSBDU1MgYW5pbWF0aW9ucyAqL1xuICBhbmltYXRlPzogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqIEVuYWJsZS9kaXNhYmxlIENTUyBhbmltYXRpb25zIHdoaWxlIG1vdmluZyB0aGUgc2xpZGVyICovXG4gIGFuaW1hdGVPbk1vdmU/OiBib29sZWFuID0gZmFsc2U7XG59XG4iLCIvKiogUG9pbnRlciB0eXBlICovXG5leHBvcnQgZW51bSBQb2ludGVyVHlwZSB7XG4gIC8qKiBMb3cgcG9pbnRlciAqL1xuICBNaW4sXG4gIC8qKiBIaWdoIHBvaW50ZXIgKi9cbiAgTWF4XG59XG4iLCJpbXBvcnQgeyBQb2ludGVyVHlwZSB9IGZyb20gJy4vcG9pbnRlci10eXBlJztcblxuZXhwb3J0IGNsYXNzIENoYW5nZUNvbnRleHQge1xuICB2YWx1ZTogbnVtYmVyO1xuICBoaWdoVmFsdWU/OiBudW1iZXI7XG4gIHBvaW50ZXJUeXBlOiBQb2ludGVyVHlwZTtcbn1cbiIsImltcG9ydCB7IEN1c3RvbVN0ZXBEZWZpbml0aW9uIH0gZnJvbSAnLi9vcHRpb25zJztcblxuLyoqXG4gKiAgQ29sbGVjdGlvbiBvZiBmdW5jdGlvbnMgdG8gaGFuZGxlIGNvbnZlcnNpb25zL2xvb2t1cHMgb2YgdmFsdWVzXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWx1ZUhlbHBlciB7XG4gIHN0YXRpYyBpc051bGxPclVuZGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGw7XG4gIH1cblxuICBzdGF0aWMgYXJlQXJyYXlzRXF1YWwoYXJyYXkxOiBhbnlbXSwgYXJyYXkyOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIGlmIChhcnJheTEubGVuZ3RoICE9PSBhcnJheTIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGFycmF5MS5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBsaW5lYXJWYWx1ZVRvUG9zaXRpb24odmFsOiBudW1iZXIsIG1pblZhbDogbnVtYmVyLCBtYXhWYWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgcmFuZ2U6IG51bWJlciA9IG1heFZhbCAtIG1pblZhbDtcbiAgICByZXR1cm4gKHZhbCAtIG1pblZhbCkgLyByYW5nZTtcbiAgfVxuXG4gIHN0YXRpYyBsb2dWYWx1ZVRvUG9zaXRpb24odmFsOiBudW1iZXIsIG1pblZhbDogbnVtYmVyLCBtYXhWYWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgdmFsID0gTWF0aC5sb2codmFsKTtcbiAgICBtaW5WYWwgPSBNYXRoLmxvZyhtaW5WYWwpO1xuICAgIG1heFZhbCA9IE1hdGgubG9nKG1heFZhbCk7XG4gICAgY29uc3QgcmFuZ2U6IG51bWJlciA9IG1heFZhbCAtIG1pblZhbDtcbiAgICByZXR1cm4gKHZhbCAtIG1pblZhbCkgLyByYW5nZTtcbiAgfVxuXG4gIHN0YXRpYyBsaW5lYXJQb3NpdGlvblRvVmFsdWUocGVyY2VudDogbnVtYmVyLCBtaW5WYWw6IG51bWJlciwgbWF4VmFsOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBwZXJjZW50ICogKG1heFZhbCAtIG1pblZhbCkgKyBtaW5WYWw7XG4gIH1cblxuICBzdGF0aWMgbG9nUG9zaXRpb25Ub1ZhbHVlKHBlcmNlbnQ6IG51bWJlciwgbWluVmFsOiBudW1iZXIsIG1heFZhbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBtaW5WYWwgPSBNYXRoLmxvZyhtaW5WYWwpO1xuICAgIG1heFZhbCA9IE1hdGgubG9nKG1heFZhbCk7XG4gICAgY29uc3QgdmFsdWU6IG51bWJlciA9IHBlcmNlbnQgKiAobWF4VmFsIC0gbWluVmFsKSArIG1pblZhbDtcbiAgICByZXR1cm4gTWF0aC5leHAodmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGZpbmRTdGVwSW5kZXgobW9kZWxWYWx1ZTogbnVtYmVyLCBzdGVwc0FycmF5OiBDdXN0b21TdGVwRGVmaW5pdGlvbltdKTogbnVtYmVyIHtcbiAgICBjb25zdCBkaWZmZXJlbmNlczogbnVtYmVyW10gPSBzdGVwc0FycmF5Lm1hcCgoc3RlcDogQ3VzdG9tU3RlcERlZmluaXRpb24pOiBudW1iZXIgPT4gTWF0aC5hYnMobW9kZWxWYWx1ZSAtIHN0ZXAudmFsdWUpKTtcblxuICAgIGxldCBtaW5EaWZmZXJlbmNlSW5kZXg6IG51bWJlciA9IDA7XG4gICAgZm9yIChsZXQgaW5kZXg6IG51bWJlciA9IDA7IGluZGV4IDwgc3RlcHNBcnJheS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmIChkaWZmZXJlbmNlc1tpbmRleF0gIT09IGRpZmZlcmVuY2VzW21pbkRpZmZlcmVuY2VJbmRleF0gJiYgZGlmZmVyZW5jZXNbaW5kZXhdIDwgZGlmZmVyZW5jZXNbbWluRGlmZmVyZW5jZUluZGV4XSkge1xuICAgICAgICBtaW5EaWZmZXJlbmNlSW5kZXggPSBpbmRleDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWluRGlmZmVyZW5jZUluZGV4O1xuICB9XG59XG4iLCIvLyBEZWNsYXJhdGlvbiBmb3IgUmVzaXplT2JzZXJ2ZXIgYSBuZXcgQVBJIGF2YWlsYWJsZSBpbiBzb21lIG9mIG5ld2VzdCBicm93c2Vyczpcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXNpemVPYnNlcnZlclxuZGVjbGFyZSBjbGFzcyBSZXNpemVPYnNlcnZlciB7XG59XG5cbi8qKiBIZWxwZXIgd2l0aCBjb21wYXRpYmlsaXR5IGZ1bmN0aW9ucyB0byBzdXBwb3J0IGRpZmZlcmVudCBicm93c2VycyAqL1xuZXhwb3J0IGNsYXNzIENvbXBhdGliaWxpdHlIZWxwZXIge1xuICAvKiogV29ya2Fyb3VuZCBmb3IgVG91Y2hFdmVudCBjb25zdHJ1Y3RvciBzYWRseSBub3QgYmVpbmcgYXZhaWxhYmxlIG9uIGFsbCBicm93c2VycyAoZS5nLiBGaXJlZm94LCBTYWZhcmkpICovXG4gIHB1YmxpYyBzdGF0aWMgaXNUb3VjaEV2ZW50KGV2ZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoKHdpbmRvdyBhcyBhbnkpLlRvdWNoRXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2ZW50IGluc3RhbmNlb2YgVG91Y2hFdmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnQudG91Y2hlcyAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIERldGVjdCBwcmVzZW5jZSBvZiBSZXNpemVPYnNlcnZlciBBUEkgKi9cbiAgcHVibGljIHN0YXRpYyBpc1Jlc2l6ZU9ic2VydmVyQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAod2luZG93IGFzIGFueSkuUmVzaXplT2JzZXJ2ZXIgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiLyoqIEhlbHBlciB3aXRoIG1hdGhlbWF0aWNhbCBmdW5jdGlvbnMgKi9cbmV4cG9ydCBjbGFzcyBNYXRoSGVscGVyIHtcbiAgLyogUm91bmQgbnVtYmVycyB0byBhIGdpdmVuIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgKi9cbiAgc3RhdGljIHJvdW5kVG9QcmVjaXNpb25MaW1pdCh2YWx1ZTogbnVtYmVyLCBwcmVjaXNpb25MaW1pdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKyggdmFsdWUudG9QcmVjaXNpb24ocHJlY2lzaW9uTGltaXQpICk7XG4gIH1cblxuICBzdGF0aWMgaXNNb2R1bG9XaXRoaW5QcmVjaXNpb25MaW1pdCh2YWx1ZTogbnVtYmVyLCBtb2R1bG86IG51bWJlciwgcHJlY2lzaW9uTGltaXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxpbWl0OiBudW1iZXIgPSBNYXRoLnBvdygxMCwgLXByZWNpc2lvbkxpbWl0KTtcbiAgICByZXR1cm4gTWF0aC5hYnModmFsdWUgJSBtb2R1bG8pIDw9IGxpbWl0IHx8IE1hdGguYWJzKE1hdGguYWJzKHZhbHVlICUgbW9kdWxvKSAtIG1vZHVsbykgPD0gbGltaXQ7XG4gIH1cblxuICBzdGF0aWMgY2xhbXBUb1JhbmdlKHZhbHVlOiBudW1iZXIsIGZsb29yOiBudW1iZXIsIGNlaWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbHVlLCBmbG9vciksIGNlaWwpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNsYXNzIEV2ZW50TGlzdGVuZXIge1xuICBldmVudE5hbWU6IHN0cmluZyA9IG51bGw7XG4gIGV2ZW50czogU3ViamVjdDxFdmVudD4gPSBudWxsO1xuICBldmVudHNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG51bGw7XG4gIHRlYXJkb3duQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBudWxsO1xufVxuIiwiaW1wb3J0IHsgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0aHJvdHRsZVRpbWUsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCBkZXRlY3RQYXNzaXZlRXZlbnRzIGZyb20gJ2RldGVjdC1wYXNzaXZlLWV2ZW50cyc7XG5cbmltcG9ydCB7IEV2ZW50TGlzdGVuZXIgfSBmcm9tICcuL2V2ZW50LWxpc3RlbmVyJztcbmltcG9ydCB7IFZhbHVlSGVscGVyIH0gZnJvbSAnLi92YWx1ZS1oZWxwZXInO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBhdHRhY2ggZXZlbnQgbGlzdGVuZXJzIHRvIERPTSBlbGVtZW50cyB3aXRoIGRlYm91bmNlIHN1cHBvcnQgdXNpbmcgcnhqc1xuICovXG5leHBvcnQgY2xhc3MgRXZlbnRMaXN0ZW5lckhlbHBlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge1xuICB9XG5cbiAgcHVibGljIGF0dGFjaFBhc3NpdmVFdmVudExpc3RlbmVyKG5hdGl2ZUVsZW1lbnQ6IGFueSwgZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCxcbiAgICAgIHRocm90dGxlSW50ZXJ2YWw/OiBudW1iZXIpOiBFdmVudExpc3RlbmVyIHtcbiAgICAvLyBPbmx5IHVzZSBwYXNzaXZlIGV2ZW50IGxpc3RlbmVycyBpZiB0aGUgYnJvd3NlciBzdXBwb3J0cyBpdFxuICAgIGlmIChkZXRlY3RQYXNzaXZlRXZlbnRzLmhhc1N1cHBvcnQgIT09IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmF0dGFjaEV2ZW50TGlzdGVuZXIobmF0aXZlRWxlbWVudCwgZXZlbnROYW1lLCBjYWxsYmFjaywgdGhyb3R0bGVJbnRlcnZhbCk7XG4gICAgfVxuXG4gICAgLy8gQW5ndWxhciBkb2Vzbid0IHN1cHBvcnQgcGFzc2l2ZSBldmVudCBoYW5kbGVycyAoeWV0KSwgc28gd2UgbmVlZCB0byByb2xsIG91ciBvd24gY29kZSB1c2luZyBuYXRpdmUgZnVuY3Rpb25zXG4gICAgY29uc3QgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXIgPSBuZXcgRXZlbnRMaXN0ZW5lcigpO1xuICAgIGxpc3RlbmVyLmV2ZW50TmFtZSA9IGV2ZW50TmFtZTtcbiAgICBsaXN0ZW5lci5ldmVudHMgPSBuZXcgU3ViamVjdDxFdmVudD4oKTtcblxuICAgIGNvbnN0IG9ic2VydmVyQ2FsbGJhY2s6IChldmVudDogRXZlbnQpID0+IHZvaWQgPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBsaXN0ZW5lci5ldmVudHMubmV4dChldmVudCk7XG4gICAgfTtcbiAgICBuYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBvYnNlcnZlckNhbGxiYWNrLCB7cGFzc2l2ZTogdHJ1ZSwgY2FwdHVyZTogZmFsc2V9KTtcblxuICAgIGxpc3RlbmVyLnRlYXJkb3duQ2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICBuYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBvYnNlcnZlckNhbGxiYWNrLCB7cGFzc2l2ZTogdHJ1ZSwgY2FwdHVyZTogZmFsc2V9KTtcbiAgICB9O1xuXG4gICAgbGlzdGVuZXIuZXZlbnRzU3Vic2NyaXB0aW9uID0gbGlzdGVuZXIuZXZlbnRzXG4gICAgICAucGlwZSgoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRocm90dGxlSW50ZXJ2YWwpKVxuICAgICAgICA/IHRocm90dGxlVGltZSh0aHJvdHRsZUludGVydmFsLCB1bmRlZmluZWQsIHsgbGVhZGluZzogdHJ1ZSwgdHJhaWxpbmc6IHRydWV9KVxuICAgICAgICA6IHRhcCgoKSA9PiB7fSkgLy8gbm8tb3BcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiBsaXN0ZW5lcjtcbiAgfVxuXG4gIHB1YmxpYyBkZXRhY2hFdmVudExpc3RlbmVyKGV2ZW50TGlzdGVuZXI6IEV2ZW50TGlzdGVuZXIpOiB2b2lkIHtcbiAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKGV2ZW50TGlzdGVuZXIuZXZlbnRzU3Vic2NyaXB0aW9uKSkge1xuICAgICAgZXZlbnRMaXN0ZW5lci5ldmVudHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIGV2ZW50TGlzdGVuZXIuZXZlbnRzU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKGV2ZW50TGlzdGVuZXIuZXZlbnRzKSkge1xuICAgICAgZXZlbnRMaXN0ZW5lci5ldmVudHMuY29tcGxldGUoKTtcbiAgICAgIGV2ZW50TGlzdGVuZXIuZXZlbnRzID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKGV2ZW50TGlzdGVuZXIudGVhcmRvd25DYWxsYmFjaykpIHtcbiAgICAgIGV2ZW50TGlzdGVuZXIudGVhcmRvd25DYWxsYmFjaygpO1xuICAgICAgZXZlbnRMaXN0ZW5lci50ZWFyZG93bkNhbGxiYWNrID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXR0YWNoRXZlbnRMaXN0ZW5lcihuYXRpdmVFbGVtZW50OiBhbnksIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IHZvaWQsXG4gICAgICB0aHJvdHRsZUludGVydmFsPzogbnVtYmVyKTogRXZlbnRMaXN0ZW5lciB7XG4gICAgY29uc3QgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXIgPSBuZXcgRXZlbnRMaXN0ZW5lcigpO1xuICAgIGxpc3RlbmVyLmV2ZW50TmFtZSA9IGV2ZW50TmFtZTtcbiAgICBsaXN0ZW5lci5ldmVudHMgPSBuZXcgU3ViamVjdDxFdmVudD4oKTtcblxuICAgIGNvbnN0IG9ic2VydmVyQ2FsbGJhY2s6IChldmVudDogRXZlbnQpID0+IHZvaWQgPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBsaXN0ZW5lci5ldmVudHMubmV4dChldmVudCk7XG4gICAgfTtcblxuICAgIGxpc3RlbmVyLnRlYXJkb3duQ2FsbGJhY2sgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihuYXRpdmVFbGVtZW50LCBldmVudE5hbWUsIG9ic2VydmVyQ2FsbGJhY2spO1xuXG4gICAgbGlzdGVuZXIuZXZlbnRzU3Vic2NyaXB0aW9uID0gbGlzdGVuZXIuZXZlbnRzXG4gICAgICAucGlwZSgoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRocm90dGxlSW50ZXJ2YWwpKVxuICAgICAgICAgID8gdGhyb3R0bGVUaW1lKHRocm90dGxlSW50ZXJ2YWwsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiB0cnVlLCB0cmFpbGluZzogdHJ1ZX0pXG4gICAgICAgICAgOiB0YXAoKCkgPT4ge30pIC8vIG5vLW9wXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogRXZlbnQpID0+IHsgY2FsbGJhY2soZXZlbnQpOyB9KTtcblxuICAgIHJldHVybiBsaXN0ZW5lcjtcbiAgfVxufVxuIiwiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBSZW5kZXJlcjIsIEhvc3RCaW5kaW5nLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXZlbnRMaXN0ZW5lckhlbHBlciB9IGZyb20gJy4vZXZlbnQtbGlzdGVuZXItaGVscGVyJztcbmltcG9ydCB7IEV2ZW50TGlzdGVuZXIgfSBmcm9tICcuL2V2ZW50LWxpc3RlbmVyJztcbmltcG9ydCB7IFZhbHVlSGVscGVyIH0gZnJvbSAnLi92YWx1ZS1oZWxwZXInO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbmd4U2xpZGVyRWxlbWVudF0nXG59KVxuZXhwb3J0IGNsYXNzIFNsaWRlckVsZW1lbnREaXJlY3RpdmUge1xuICBwcml2YXRlIF9wb3NpdGlvbjogbnVtYmVyID0gMDtcbiAgZ2V0IHBvc2l0aW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGltZW5zaW9uOiBudW1iZXIgPSAwO1xuICBnZXQgZGltZW5zaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2RpbWVuc2lvbjtcbiAgfVxuXG4gIHByaXZhdGUgX2Fsd2F5c0hpZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ2V0IGFsd2F5c0hpZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Fsd2F5c0hpZGU7XG4gIH1cblxuICBwcml2YXRlIF92ZXJ0aWNhbDogYm9vbGVhbiA9IGZhbHNlO1xuICBnZXQgdmVydGljYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZlcnRpY2FsO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2NhbGU6IG51bWJlciA9IDE7XG4gIGdldCBzY2FsZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zY2FsZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnc3R5bGUub3BhY2l0eScpXG4gIG9wYWNpdHk6IG51bWJlciA9IDE7XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS52aXNpYmlsaXR5JylcbiAgdmlzaWJpbGl0eTogc3RyaW5nID0gJ3Zpc2libGUnO1xuXG4gIEBIb3N0QmluZGluZygnc3R5bGUubGVmdCcpXG4gIGxlZnQ6IHN0cmluZyA9ICcnO1xuXG4gIEBIb3N0QmluZGluZygnc3R5bGUuYm90dG9tJylcbiAgYm90dG9tOiBzdHJpbmcgPSAnJztcblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmhlaWdodCcpXG4gIGhlaWdodDogc3RyaW5nID0gJyc7XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aCcpXG4gIHdpZHRoOiBzdHJpbmcgPSAnJztcblxuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJIZWxwZXI6IEV2ZW50TGlzdGVuZXJIZWxwZXI7XG4gIHByaXZhdGUgZXZlbnRMaXN0ZW5lcnM6IEV2ZW50TGlzdGVuZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBlbGVtUmVmOiBFbGVtZW50UmVmLCBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJvdGVjdGVkIGNoYW5nZURldGVjdGlvblJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJIZWxwZXIgPSBuZXcgRXZlbnRMaXN0ZW5lckhlbHBlcih0aGlzLnJlbmRlcmVyKTtcbiAgfVxuXG4gIHNldEFsd2F5c0hpZGUoaGlkZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2Fsd2F5c0hpZGUgPSBoaWRlO1xuICAgIGlmIChoaWRlKSB7XG4gICAgICB0aGlzLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgIH1cbiAgfVxuXG4gIGhpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5vcGFjaXR5ID0gMDtcbiAgfVxuXG4gIHNob3coKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWx3YXlzSGlkZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3BhY2l0eSA9IDE7XG4gIH1cblxuICBpc1Zpc2libGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuYWx3YXlzSGlkZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcGFjaXR5ICE9PSAwO1xuICB9XG5cbiAgc2V0VmVydGljYWwodmVydGljYWw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl92ZXJ0aWNhbCA9IHZlcnRpY2FsO1xuICAgIGlmICh0aGlzLl92ZXJ0aWNhbCkge1xuICAgICAgdGhpcy5sZWZ0ID0gJyc7XG4gICAgICB0aGlzLndpZHRoID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm90dG9tID0gJyc7XG4gICAgICB0aGlzLmhlaWdodCA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHNldFNjYWxlKHNjYWxlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zY2FsZSA9IHNjYWxlO1xuICB9XG5cbiAgIC8vIFNldCBlbGVtZW50IGxlZnQvdG9wIHBvc2l0aW9uIGRlcGVuZGluZyBvbiB3aGV0aGVyIHNsaWRlciBpcyBob3Jpem9udGFsIG9yIHZlcnRpY2FsXG4gIHNldFBvc2l0aW9uKHBvczogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3Bvc2l0aW9uICE9PSBwb3MgJiYgIXRoaXMuaXNSZWZEZXN0cm95ZWQoKSkge1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rpb25SZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcG9zaXRpb24gPSBwb3M7XG4gICAgaWYgKHRoaXMuX3ZlcnRpY2FsKSB7XG4gICAgICB0aGlzLmJvdHRvbSA9IE1hdGgucm91bmQocG9zKSArICdweCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVmdCA9IE1hdGgucm91bmQocG9zKSArICdweCc7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIGVsZW1lbnQncyB3aWR0aC9oZWlnaHQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgc2xpZGVyIGlzIGhvcml6b250YWwgb3IgdmVydGljYWxcbiAgY2FsY3VsYXRlRGltZW5zaW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbDogQ2xpZW50UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKHRoaXMudmVydGljYWwpIHtcbiAgICAgIHRoaXMuX2RpbWVuc2lvbiA9ICh2YWwuYm90dG9tIC0gdmFsLnRvcCkgKiB0aGlzLnNjYWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kaW1lbnNpb24gPSAodmFsLnJpZ2h0IC0gdmFsLmxlZnQpICogdGhpcy5zY2FsZTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgZWxlbWVudCB3aWR0aC9oZWlnaHQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgc2xpZGVyIGlzIGhvcml6b250YWwgb3IgdmVydGljYWxcbiAgc2V0RGltZW5zaW9uKGRpbTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2RpbWVuc2lvbiAhPT0gZGltICYmICF0aGlzLmlzUmVmRGVzdHJveWVkKCkpIHtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0aW9uUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHRoaXMuX2RpbWVuc2lvbiA9IGRpbTtcbiAgICBpZiAodGhpcy5fdmVydGljYWwpIHtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gTWF0aC5yb3VuZChkaW0pICsgJ3B4JztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53aWR0aCA9IE1hdGgucm91bmQoZGltKSArICdweCc7XG4gICAgfVxuICB9XG5cbiAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6IENsaWVudFJlY3Qge1xuICAgIHJldHVybiB0aGlzLmVsZW1SZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgfVxuXG4gIG9uKGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IHZvaWQsIGRlYm91bmNlSW50ZXJ2YWw/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lciA9IHRoaXMuZXZlbnRMaXN0ZW5lckhlbHBlci5hdHRhY2hFdmVudExpc3RlbmVyKFxuICAgICAgdGhpcy5lbGVtUmVmLm5hdGl2ZUVsZW1lbnQsIGV2ZW50TmFtZSwgY2FsbGJhY2ssIGRlYm91bmNlSW50ZXJ2YWwpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICBvblBhc3NpdmUoZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCwgZGVib3VuY2VJbnRlcnZhbD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGxpc3RlbmVyOiBFdmVudExpc3RlbmVyID0gdGhpcy5ldmVudExpc3RlbmVySGVscGVyLmF0dGFjaFBhc3NpdmVFdmVudExpc3RlbmVyKFxuICAgICAgdGhpcy5lbGVtUmVmLm5hdGl2ZUVsZW1lbnQsIGV2ZW50TmFtZSwgY2FsbGJhY2ssIGRlYm91bmNlSW50ZXJ2YWwpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICBvZmYoZXZlbnROYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGxpc3RlbmVyc1RvS2VlcDogRXZlbnRMaXN0ZW5lcltdO1xuICAgIGxldCBsaXN0ZW5lcnNUb1JlbW92ZTogRXZlbnRMaXN0ZW5lcltdO1xuICAgIGlmICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQoZXZlbnROYW1lKSkge1xuICAgICAgbGlzdGVuZXJzVG9LZWVwID0gdGhpcy5ldmVudExpc3RlbmVycy5maWx0ZXIoKGV2ZW50OiBFdmVudExpc3RlbmVyKSA9PiBldmVudC5ldmVudE5hbWUgIT09IGV2ZW50TmFtZSk7XG4gICAgICBsaXN0ZW5lcnNUb1JlbW92ZSA9IHRoaXMuZXZlbnRMaXN0ZW5lcnMuZmlsdGVyKChldmVudDogRXZlbnRMaXN0ZW5lcikgPT4gZXZlbnQuZXZlbnROYW1lID09PSBldmVudE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0ZW5lcnNUb0tlZXAgPSBbXTtcbiAgICAgIGxpc3RlbmVyc1RvUmVtb3ZlID0gdGhpcy5ldmVudExpc3RlbmVycztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIGxpc3RlbmVyc1RvUmVtb3ZlKSB7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJIZWxwZXIuZGV0YWNoRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgdGhpcy5ldmVudExpc3RlbmVycyA9IGxpc3RlbmVyc1RvS2VlcDtcbiAgfVxuXG4gIHByaXZhdGUgaXNSZWZEZXN0cm95ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuY2hhbmdlRGV0ZWN0aW9uUmVmKSB8fCB0aGlzLmNoYW5nZURldGVjdGlvblJlZlsnZGVzdHJveWVkJ107XG4gIH1cbn1cbiIsImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgUmVuZGVyZXIyLCBIb3N0QmluZGluZywgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNsaWRlckVsZW1lbnREaXJlY3RpdmUgfSBmcm9tICcuL3NsaWRlci1lbGVtZW50LmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tuZ3hTbGlkZXJIYW5kbGVdJ1xufSlcbmV4cG9ydCBjbGFzcyBTbGlkZXJIYW5kbGVEaXJlY3RpdmUgZXh0ZW5kcyBTbGlkZXJFbGVtZW50RGlyZWN0aXZlIHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5uZ3gtc2xpZGVyLWFjdGl2ZScpXG4gIGFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgcm9sZTogc3RyaW5nID0gJyc7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcbiAgdGFiaW5kZXg6IHN0cmluZyA9ICcnO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW9yaWVudGF0aW9uJylcbiAgYXJpYU9yaWVudGF0aW9uOiBzdHJpbmcgPSAnJztcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbCcpXG4gIGFyaWFMYWJlbDogc3RyaW5nID0gJyc7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWxsZWRieScpXG4gIGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmcgPSAnJztcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZW5vdycpXG4gIGFyaWFWYWx1ZU5vdzogc3RyaW5nID0gJyc7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtdmFsdWV0ZXh0JylcbiAgYXJpYVZhbHVlVGV4dDogc3RyaW5nID0gJyc7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtdmFsdWVtaW4nKVxuICBhcmlhVmFsdWVNaW46IHN0cmluZyA9ICcnO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXZhbHVlbWF4JylcbiAgYXJpYVZhbHVlTWF4OiBzdHJpbmcgPSAnJztcblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1SZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZWxlbVJlZjogRWxlbWVudFJlZiwgcmVuZGVyZXI6IFJlbmRlcmVyMiwgY2hhbmdlRGV0ZWN0aW9uUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKGVsZW1SZWYsIHJlbmRlcmVyLCBjaGFuZ2VEZXRlY3Rpb25SZWYpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNsaWRlckVsZW1lbnREaXJlY3RpdmUgfSBmcm9tICcuL3NsaWRlci1lbGVtZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBWYWx1ZUhlbHBlciB9IGZyb20gJy4vdmFsdWUtaGVscGVyJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25neFNsaWRlckxhYmVsXSdcbn0pXG5leHBvcnQgY2xhc3MgU2xpZGVyTGFiZWxEaXJlY3RpdmUgZXh0ZW5kcyBTbGlkZXJFbGVtZW50RGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZyA9IG51bGw7XG4gIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGVsZW1SZWY6IEVsZW1lbnRSZWYsIHJlbmRlcmVyOiBSZW5kZXJlcjIsIGNoYW5nZURldGVjdGlvblJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcihlbGVtUmVmLCByZW5kZXJlciwgY2hhbmdlRGV0ZWN0aW9uUmVmKTtcbiAgfVxuXG4gIHNldFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgcmVjYWxjdWxhdGVEaW1lbnNpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5hbHdheXNIaWRlICYmXG4gICAgICAgIChWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZhbHVlKSB8fFxuICAgICAgICAgdGhpcy52YWx1ZS5sZW5ndGggIT09IHZhbHVlLmxlbmd0aCB8fFxuICAgICAgICAgKHRoaXMudmFsdWUubGVuZ3RoID4gMCAmJiB0aGlzLmRpbWVuc2lvbiA9PT0gMCkpKSB7XG4gICAgICByZWNhbGN1bGF0ZURpbWVuc2lvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmVsZW1SZWYubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSB2YWx1ZTtcblxuICAgIC8vIFVwZGF0ZSBkaW1lbnNpb24gb25seSB3aGVuIGxlbmd0aCBvZiB0aGUgbGFiZWwgaGF2ZSBjaGFuZ2VkXG4gICAgaWYgKHJlY2FsY3VsYXRlRGltZW5zaW9uKSB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZURpbWVuc2lvbigpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBFbGVtZW50UmVmLFxuICBSZW5kZXJlcjIsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBDb250ZW50Q2hpbGQsXG4gIFRlbXBsYXRlUmVmLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgZm9yd2FyZFJlZixcbiAgTmdab25lXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgdGhyb3R0bGVUaW1lLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCBkZXRlY3RQYXNzaXZlRXZlbnRzIGZyb20gJ2RldGVjdC1wYXNzaXZlLWV2ZW50cyc7XG5cbmltcG9ydCB7XG4gIE9wdGlvbnMsXG4gIExhYmVsVHlwZSxcbiAgVmFsdWVUb1Bvc2l0aW9uRnVuY3Rpb24sXG4gIFBvc2l0aW9uVG9WYWx1ZUZ1bmN0aW9uLFxuICBDdXN0b21TdGVwRGVmaW5pdGlvblxufSBmcm9tICcuL29wdGlvbnMnO1xuaW1wb3J0IHsgUG9pbnRlclR5cGUgfSBmcm9tICcuL3BvaW50ZXItdHlwZSc7XG5pbXBvcnQgeyBDaGFuZ2VDb250ZXh0IH0gZnJvbSAnLi9jaGFuZ2UtY29udGV4dCc7XG5pbXBvcnQgeyBWYWx1ZUhlbHBlciB9IGZyb20gJy4vdmFsdWUtaGVscGVyJztcbmltcG9ydCB7IENvbXBhdGliaWxpdHlIZWxwZXIgfSBmcm9tICcuL2NvbXBhdGliaWxpdHktaGVscGVyJztcbmltcG9ydCB7IE1hdGhIZWxwZXIgfSBmcm9tICcuL21hdGgtaGVscGVyJztcbmltcG9ydCB7IEV2ZW50TGlzdGVuZXIgfSBmcm9tICcuL2V2ZW50LWxpc3RlbmVyJztcbmltcG9ydCB7IEV2ZW50TGlzdGVuZXJIZWxwZXIgfSBmcm9tICcuL2V2ZW50LWxpc3RlbmVyLWhlbHBlcic7XG5pbXBvcnQgeyBTbGlkZXJFbGVtZW50RGlyZWN0aXZlIH0gZnJvbSAnLi9zbGlkZXItZWxlbWVudC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2xpZGVySGFuZGxlRGlyZWN0aXZlIH0gZnJvbSAnLi9zbGlkZXItaGFuZGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTbGlkZXJMYWJlbERpcmVjdGl2ZSB9IGZyb20gJy4vc2xpZGVyLWxhYmVsLmRpcmVjdGl2ZSc7XG5cbi8vIERlY2xhcmF0aW9uIGZvciBSZXNpemVPYnNlcnZlciBhIG5ldyBBUEkgYXZhaWxhYmxlIGluIHNvbWUgb2YgbmV3ZXN0IGJyb3dzZXJzOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Jlc2l6ZU9ic2VydmVyXG5kZWNsYXJlIGNsYXNzIFJlc2l6ZU9ic2VydmVyIHtcbiAgY29uc3RydWN0b3IoY2FsbGJhY2s6ICgpID0+IHZvaWQpO1xuICBvYnNlcnZlKHRhcmdldDogYW55KTogdm9pZDtcbiAgdW5vYnNlcnZlKHRhcmdldDogYW55KTogdm9pZDtcbiAgZGlzY29ubmVjdCgpOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgVGljayB7XG4gIHNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHN0eWxlOiBhbnkgPSB7fTtcbiAgdG9vbHRpcDogc3RyaW5nID0gbnVsbDtcbiAgdG9vbHRpcFBsYWNlbWVudDogc3RyaW5nID0gbnVsbDtcbiAgdmFsdWU6IHN0cmluZyA9IG51bGw7XG4gIHZhbHVlVG9vbHRpcDogc3RyaW5nID0gbnVsbDtcbiAgdmFsdWVUb29sdGlwUGxhY2VtZW50OiBzdHJpbmcgPSBudWxsO1xuICBsZWdlbmQ6IHN0cmluZyA9IG51bGw7XG59XG5cbmNsYXNzIERyYWdnaW5nIHtcbiAgYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIHZhbHVlOiBudW1iZXIgPSAwO1xuICBkaWZmZXJlbmNlOiBudW1iZXIgPSAwO1xuICBwb3NpdGlvbjogbnVtYmVyID0gMDtcbiAgbG93TGltaXQ6IG51bWJlciA9IDA7XG4gIGhpZ2hMaW1pdDogbnVtYmVyID0gMDtcbn1cblxuY2xhc3MgTW9kZWxWYWx1ZXMge1xuICB2YWx1ZTogbnVtYmVyO1xuICBoaWdoVmFsdWU6IG51bWJlcjtcblxuICBwdWJsaWMgc3RhdGljIGNvbXBhcmUoeD86IE1vZGVsVmFsdWVzLCB5PzogTW9kZWxWYWx1ZXMpOiBib29sZWFuIHtcbiAgICBpZiAoVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQoeCkgJiYgVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQoeSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKFZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHgpICE9PSBWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4geC52YWx1ZSA9PT0geS52YWx1ZSAmJiB4LmhpZ2hWYWx1ZSA9PT0geS5oaWdoVmFsdWU7XG4gIH1cbn1cblxuY2xhc3MgTW9kZWxDaGFuZ2UgZXh0ZW5kcyBNb2RlbFZhbHVlcyB7XG4gIC8vIEZsYWcgdXNlZCB0byBieS1wYXNzIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgZmlsdGVyIG9uIGlucHV0IHZhbHVlc1xuICAvLyAoc29tZXRpbWVzIHRoZXJlIGlzIGEgbmVlZCB0byBwYXNzIHZhbHVlcyB0aHJvdWdoIGV2ZW4gdGhvdWdoIHRoZSBtb2RlbCB2YWx1ZXMgaGF2ZSBub3QgY2hhbmdlZClcbiAgZm9yY2VDaGFuZ2U6IGJvb2xlYW47XG5cbiAgcHVibGljIHN0YXRpYyBjb21wYXJlKHg/OiBNb2RlbENoYW5nZSwgeT86IE1vZGVsQ2hhbmdlKTogYm9vbGVhbiB7XG4gICAgaWYgKFZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHgpICYmIFZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh4KSAhPT0gVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQoeSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHgudmFsdWUgPT09IHkudmFsdWUgJiZcbiAgICAgICAgICAgeC5oaWdoVmFsdWUgPT09IHkuaGlnaFZhbHVlICYmXG4gICAgICAgICAgIHguZm9yY2VDaGFuZ2UgPT09IHkuZm9yY2VDaGFuZ2U7XG4gIH1cbn1cblxuY2xhc3MgSW5wdXRNb2RlbENoYW5nZSBleHRlbmRzIE1vZGVsQ2hhbmdlIHtcbiAgaW50ZXJuYWxDaGFuZ2U6IGJvb2xlYW47XG59XG5cbmNsYXNzIE91dHB1dE1vZGVsQ2hhbmdlIGV4dGVuZHMgTW9kZWxDaGFuZ2Uge1xuICB1c2VyRXZlbnRJbml0aWF0ZWQ6IGJvb2xlYW47XG59XG5cbmNvbnN0IE5HWF9TTElERVJfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11c2UtYmVmb3JlLWRlY2xhcmUgKi9cbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2xpZGVyQ29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1zbGlkZXInLFxuICB0ZW1wbGF0ZTogYDwhLS0gLy8gMCBMZWZ0IHNlbGVjdGlvbiBiYXIgb3V0c2lkZSB0d28gaGFuZGxlcyAtLT5cbjxzcGFuIG5neFNsaWRlckVsZW1lbnQgI2xlZnRPdXRlclNlbGVjdGlvbkJhciBjbGFzcz1cIm5neC1zbGlkZXItc3BhbiBuZ3gtc2xpZGVyLWJhci13cmFwcGVyIG5neC1zbGlkZXItbGVmdC1vdXQtc2VsZWN0aW9uXCI+XG4gIDxzcGFuIGNsYXNzPVwibmd4LXNsaWRlci1zcGFuIG5neC1zbGlkZXItYmFyXCI+PC9zcGFuPlxuPC9zcGFuPlxuPCEtLSAvLyAxIFJpZ2h0IHNlbGVjdGlvbiBiYXIgb3V0c2lkZSB0d28gaGFuZGxlcyAtLT5cbjxzcGFuIG5neFNsaWRlckVsZW1lbnQgI3JpZ2h0T3V0ZXJTZWxlY3Rpb25CYXIgY2xhc3M9XCJuZ3gtc2xpZGVyLXNwYW4gbmd4LXNsaWRlci1iYXItd3JhcHBlciBuZ3gtc2xpZGVyLXJpZ2h0LW91dC1zZWxlY3Rpb25cIj5cbiAgPHNwYW4gY2xhc3M9XCJuZ3gtc2xpZGVyLXNwYW4gbmd4LXNsaWRlci1iYXJcIj48L3NwYW4+XG48L3NwYW4+XG48IS0tIC8vIDIgVGhlIHdob2xlIHNsaWRlciBiYXIgLS0+XG48c3BhbiBuZ3hTbGlkZXJFbGVtZW50ICNmdWxsQmFyIFtjbGFzcy5uZ3gtc2xpZGVyLXRyYW5zcGFyZW50XT1cImZ1bGxCYXJUcmFuc3BhcmVudENsYXNzXCIgY2xhc3M9XCJuZ3gtc2xpZGVyLXNwYW4gbmd4LXNsaWRlci1iYXItd3JhcHBlciBuZ3gtc2xpZGVyLWZ1bGwtYmFyXCI+XG4gIDxzcGFuIGNsYXNzPVwibmd4LXNsaWRlci1zcGFuIG5neC1zbGlkZXItYmFyXCI+PC9zcGFuPlxuPC9zcGFuPlxuPCEtLSAvLyAzIFNlbGVjdGlvbiBiYXIgYmV0d2VlbiB0d28gaGFuZGxlcyAtLT5cbjxzcGFuIG5neFNsaWRlckVsZW1lbnQgI3NlbGVjdGlvbkJhciBbY2xhc3Mubmd4LXNsaWRlci1kcmFnZ2FibGVdPVwic2VsZWN0aW9uQmFyRHJhZ2dhYmxlQ2xhc3NcIiBjbGFzcz1cIm5neC1zbGlkZXItc3BhbiBuZ3gtc2xpZGVyLWJhci13cmFwcGVyIG5neC1zbGlkZXItc2VsZWN0aW9uLWJhclwiPlxuICA8c3BhbiBjbGFzcz1cIm5neC1zbGlkZXItc3BhbiBuZ3gtc2xpZGVyLWJhciBuZ3gtc2xpZGVyLXNlbGVjdGlvblwiIFtuZ1N0eWxlXT1cImJhclN0eWxlXCI+PC9zcGFuPlxuPC9zcGFuPlxuPCEtLSAvLyA0IExvdyBzbGlkZXIgaGFuZGxlIC0tPlxuPHNwYW4gbmd4U2xpZGVySGFuZGxlICNtaW5IYW5kbGUgY2xhc3M9XCJuZ3gtc2xpZGVyLXNwYW4gbmd4LXNsaWRlci1wb2ludGVyIG5neC1zbGlkZXItcG9pbnRlci1taW5cIiBbbmdTdHlsZV09bWluUG9pbnRlclN0eWxlPjwvc3Bhbj5cbjwhLS0gLy8gNSBIaWdoIHNsaWRlciBoYW5kbGUgLS0+XG48c3BhbiBuZ3hTbGlkZXJIYW5kbGUgI21heEhhbmRsZSBbc3R5bGUuZGlzcGxheV09XCJyYW5nZSA/ICdpbmhlcml0JyA6ICdub25lJ1wiIGNsYXNzPVwibmd4LXNsaWRlci1zcGFuIG5neC1zbGlkZXItcG9pbnRlciBuZ3gtc2xpZGVyLXBvaW50ZXItbWF4XCIgW25nU3R5bGVdPW1heFBvaW50ZXJTdHlsZT48L3NwYW4+XG48IS0tIC8vIDYgRmxvb3IgbGFiZWwgLS0+XG48c3BhbiBuZ3hTbGlkZXJMYWJlbCAjZmxvb3JMYWJlbCBjbGFzcz1cIm5neC1zbGlkZXItc3BhbiBuZ3gtc2xpZGVyLWJ1YmJsZSBuZ3gtc2xpZGVyLWxpbWl0IG5neC1zbGlkZXItZmxvb3JcIj48L3NwYW4+XG48IS0tIC8vIDcgQ2VpbGluZyBsYWJlbCAtLT5cbjxzcGFuIG5neFNsaWRlckxhYmVsICNjZWlsTGFiZWwgY2xhc3M9XCJuZ3gtc2xpZGVyLXNwYW4gbmd4LXNsaWRlci1idWJibGUgbmd4LXNsaWRlci1saW1pdCBuZ3gtc2xpZGVyLWNlaWxcIj48L3NwYW4+XG48IS0tIC8vIDggTGFiZWwgYWJvdmUgdGhlIGxvdyBzbGlkZXIgaGFuZGxlIC0tPlxuPHNwYW4gbmd4U2xpZGVyTGFiZWwgI21pbkhhbmRsZUxhYmVsIGNsYXNzPVwibmd4LXNsaWRlci1zcGFuIG5neC1zbGlkZXItYnViYmxlIG5neC1zbGlkZXItbW9kZWwtdmFsdWVcIj48L3NwYW4+XG48IS0tIC8vIDkgTGFiZWwgYWJvdmUgdGhlIGhpZ2ggc2xpZGVyIGhhbmRsZSAtLT5cbjxzcGFuIG5neFNsaWRlckxhYmVsICNtYXhIYW5kbGVMYWJlbCBjbGFzcz1cIm5neC1zbGlkZXItc3BhbiBuZ3gtc2xpZGVyLWJ1YmJsZSBuZ3gtc2xpZGVyLW1vZGVsLWhpZ2hcIj48L3NwYW4+XG48IS0tIC8vIDEwIENvbWJpbmVkIHJhbmdlIGxhYmVsIHdoZW4gdGhlIHNsaWRlciBoYW5kbGVzIGFyZSBjbG9zZSBleC4gMTUgLSAxNyAtLT5cbjxzcGFuIG5neFNsaWRlckxhYmVsICNjb21iaW5lZExhYmVsIGNsYXNzPVwibmd4LXNsaWRlci1zcGFuIG5neC1zbGlkZXItYnViYmxlIG5neC1zbGlkZXItY29tYmluZWRcIj48L3NwYW4+XG48IS0tIC8vIDExIFRoZSB0aWNrcyAtLT5cbjxzcGFuIG5neFNsaWRlckVsZW1lbnQgI3RpY2tzRWxlbWVudCBbaGlkZGVuXT1cIiFzaG93VGlja3NcIiBbY2xhc3Mubmd4LXNsaWRlci10aWNrcy12YWx1ZXMtdW5kZXJdPVwidGlja3NVbmRlclZhbHVlc0NsYXNzXCIgY2xhc3M9XCJuZ3gtc2xpZGVyLXRpY2tzXCI+XG4gIDxzcGFuICpuZ0Zvcj1cImxldCB0IG9mIHRpY2tzXCIgY2xhc3M9XCJuZ3gtc2xpZGVyLXRpY2tcIiBbbmdDbGFzc109XCJ7J25neC1zbGlkZXItc2VsZWN0ZWQnOiB0LnNlbGVjdGVkfVwiIFtuZ1N0eWxlXT1cInQuc3R5bGVcIj5cbiAgICA8bmd4LXNsaWRlci10b29sdGlwLXdyYXBwZXIgW3RlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZVwiIFt0b29sdGlwXT1cInQudG9vbHRpcFwiIFtwbGFjZW1lbnRdPVwidC50b29sdGlwUGxhY2VtZW50XCI+PC9uZ3gtc2xpZGVyLXRvb2x0aXAtd3JhcHBlcj5cbiAgICA8bmd4LXNsaWRlci10b29sdGlwLXdyYXBwZXIgKm5nSWY9XCJ0LnZhbHVlICE9IG51bGxcIiBjbGFzcz1cIm5neC1zbGlkZXItc3BhbiBuZ3gtc2xpZGVyLXRpY2stdmFsdWVcIlxuICAgICAgICBbdGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlXCIgW3Rvb2x0aXBdPVwidC52YWx1ZVRvb2x0aXBcIiBbcGxhY2VtZW50XT1cInQudmFsdWVUb29sdGlwUGxhY2VtZW50XCIgW2NvbnRlbnRdPVwidC52YWx1ZVwiPjwvbmd4LXNsaWRlci10b29sdGlwLXdyYXBwZXI+XG4gICAgPHNwYW4gKm5nSWY9XCJ0LmxlZ2VuZCAhPSBudWxsXCIgY2xhc3M9XCJuZ3gtc2xpZGVyLXNwYW4gbmd4LXNsaWRlci10aWNrLWxlZ2VuZFwiIFtpbm5lckhUTUxdPVwidC5sZWdlbmRcIj48L3NwYW4+XG4gIDwvc3Bhbj5cbjwvc3Bhbj5gLFxuICBzdHlsZXM6IFtgOjpuZy1kZWVwIC5uZ3gtc2xpZGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDo0cHg7d2lkdGg6MTAwJTttYXJnaW46MzVweCAwIDE1cHg7dmVydGljYWwtYWxpZ246bWlkZGxlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0b3VjaC1hY3Rpb246cGFuLXl9OjpuZy1kZWVwIC5uZ3gtc2xpZGVyLndpdGgtbGVnZW5ke21hcmdpbi1ib3R0b206NDBweH06Om5nLWRlZXAgLm5neC1zbGlkZXJbZGlzYWJsZWRde2N1cnNvcjpub3QtYWxsb3dlZH06Om5nLWRlZXAgLm5neC1zbGlkZXJbZGlzYWJsZWRdIC5uZ3gtc2xpZGVyLXBvaW50ZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6I2Q4ZTBmM306Om5nLWRlZXAgLm5neC1zbGlkZXJbZGlzYWJsZWRdIC5uZ3gtc2xpZGVyLWRyYWdnYWJsZXtjdXJzb3I6bm90LWFsbG93ZWR9OjpuZy1kZWVwIC5uZ3gtc2xpZGVyW2Rpc2FibGVkXSAubmd4LXNsaWRlci1zZWxlY3Rpb257YmFja2dyb3VuZDojOGI5MWEyfTo6bmctZGVlcCAubmd4LXNsaWRlcltkaXNhYmxlZF0gLm5neC1zbGlkZXItdGlja3tjdXJzb3I6bm90LWFsbG93ZWR9OjpuZy1kZWVwIC5uZ3gtc2xpZGVyW2Rpc2FibGVkXSAubmd4LXNsaWRlci10aWNrLm5neC1zbGlkZXItc2VsZWN0ZWR7YmFja2dyb3VuZDojOGI5MWEyfTo6bmctZGVlcCAubmd4LXNsaWRlciAubmd4LXNsaWRlci1zcGFue3doaXRlLXNwYWNlOm5vd3JhcDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9ja306Om5nLWRlZXAgLm5neC1zbGlkZXIgLm5neC1zbGlkZXItYmFzZXt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3BhZGRpbmc6MH06Om5nLWRlZXAgLm5neC1zbGlkZXIgLm5neC1zbGlkZXItYmFyLXdyYXBwZXJ7bGVmdDowO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW4tdG9wOi0xNnB4O3BhZGRpbmctdG9wOjE2cHg7d2lkdGg6MTAwJTtoZWlnaHQ6MzJweDt6LWluZGV4OjF9OjpuZy1kZWVwIC5uZ3gtc2xpZGVyIC5uZ3gtc2xpZGVyLWRyYWdnYWJsZXtjdXJzb3I6bW92ZX06Om5nLWRlZXAgLm5neC1zbGlkZXIgLm5neC1zbGlkZXItYmFye2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDo0cHg7ei1pbmRleDoxO2JhY2tncm91bmQ6I2Q4ZTBmMztib3JkZXItcmFkaXVzOjJweH06Om5nLWRlZXAgLm5neC1zbGlkZXIgLm5neC1zbGlkZXItYmFyLXdyYXBwZXIubmd4LXNsaWRlci10cmFuc3BhcmVudCAubmd4LXNsaWRlci1iYXJ7YmFja2dyb3VuZDowIDB9OjpuZy1kZWVwIC5uZ3gtc2xpZGVyIC5uZ3gtc2xpZGVyLWJhci13cmFwcGVyLm5neC1zbGlkZXItbGVmdC1vdXQtc2VsZWN0aW9uIC5uZ3gtc2xpZGVyLWJhcntiYWNrZ3JvdW5kOiNkZjAwMmR9OjpuZy1kZWVwIC5uZ3gtc2xpZGVyIC5uZ3gtc2xpZGVyLWJhci13cmFwcGVyLm5neC1zbGlkZXItcmlnaHQtb3V0LXNlbGVjdGlvbiAubmd4LXNsaWRlci1iYXJ7YmFja2dyb3VuZDojMDNhNjg4fTo6bmctZGVlcCAubmd4LXNsaWRlciAubmd4LXNsaWRlci1zZWxlY3Rpb257ei1pbmRleDoyO2JhY2tncm91bmQ6IzBkYjlmMDtib3JkZXItcmFkaXVzOjJweH06Om5nLWRlZXAgLm5neC1zbGlkZXIgLm5neC1zbGlkZXItcG9pbnRlcntjdXJzb3I6cG9pbnRlcjt3aWR0aDozMnB4O2hlaWdodDozMnB4O3RvcDotMTRweDtiYWNrZ3JvdW5kLWNvbG9yOiMwZGI5ZjA7ei1pbmRleDozO2JvcmRlci1yYWRpdXM6MTZweH06Om5nLWRlZXAgLm5neC1zbGlkZXIgLm5neC1zbGlkZXItcG9pbnRlcjphZnRlcntjb250ZW50OicnO3dpZHRoOjhweDtoZWlnaHQ6OHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMnB4O2xlZnQ6MTJweDtib3JkZXItcmFkaXVzOjRweDtiYWNrZ3JvdW5kOiNmZmZ9OjpuZy1kZWVwIC5uZ3gtc2xpZGVyIC5uZ3gtc2xpZGVyLXBvaW50ZXI6aG92ZXI6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfTo6bmctZGVlcCAubmd4LXNsaWRlciAubmd4LXNsaWRlci1wb2ludGVyLm5neC1zbGlkZXItYWN0aXZle3otaW5kZXg6NH06Om5nLWRlZXAgLm5neC1zbGlkZXIgLm5neC1zbGlkZXItcG9pbnRlci5uZ3gtc2xpZGVyLWFjdGl2ZTphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiM0NTFhZmZ9OjpuZy1kZWVwIC5uZ3gtc2xpZGVyIC5uZ3gtc2xpZGVyLWJ1YmJsZXtjdXJzb3I6ZGVmYXVsdDtib3R0b206MTZweDtwYWRkaW5nOjFweCAzcHg7Y29sb3I6IzU1NjM3ZDtmb250LXNpemU6MTZweH06Om5nLWRlZXAgLm5neC1zbGlkZXIgLm5neC1zbGlkZXItYnViYmxlLm5neC1zbGlkZXItbGltaXR7Y29sb3I6IzU1NjM3ZH06Om5nLWRlZXAgLm5neC1zbGlkZXIgLm5neC1zbGlkZXItdGlja3N7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7aGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDotM3B4O21hcmdpbjowO3otaW5kZXg6MTtsaXN0LXN0eWxlOm5vbmV9OjpuZy1kZWVwIC5uZ3gtc2xpZGVyIC5uZ3gtc2xpZGVyLXRpY2tzLXZhbHVlcy11bmRlciAubmd4LXNsaWRlci10aWNrLXZhbHVle3RvcDphdXRvO2JvdHRvbTotMzZweH06Om5nLWRlZXAgLm5neC1zbGlkZXIgLm5neC1zbGlkZXItdGlja3t0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjt3aWR0aDoxMHB4O2hlaWdodDoxMHB4O2JhY2tncm91bmQ6I2Q4ZTBmMztib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7bWFyZ2luLWxlZnQ6MTFweH06Om5nLWRlZXAgLm5neC1zbGlkZXIgLm5neC1zbGlkZXItdGljay5uZ3gtc2xpZGVyLXNlbGVjdGVke2JhY2tncm91bmQ6IzBkYjlmMH06Om5nLWRlZXAgLm5neC1zbGlkZXIgLm5neC1zbGlkZXItdGljay12YWx1ZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTM0cHg7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLDApfTo6bmctZGVlcCAubmd4LXNsaWRlciAubmd4LXNsaWRlci10aWNrLWxlZ2VuZHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjRweDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsMCk7bWF4LXdpZHRoOjUwcHg7d2hpdGUtc3BhY2U6bm9ybWFsfTo6bmctZGVlcCAubmd4LXNsaWRlci52ZXJ0aWNhbHtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDo0cHg7aGVpZ2h0OjEwMCU7bWFyZ2luOjAgMjBweDtwYWRkaW5nOjA7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dG91Y2gtYWN0aW9uOnBhbi14fTo6bmctZGVlcCAubmd4LXNsaWRlci52ZXJ0aWNhbCAubmd4LXNsaWRlci1iYXNle3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cGFkZGluZzowfTo6bmctZGVlcCAubmd4LXNsaWRlci52ZXJ0aWNhbCAubmd4LXNsaWRlci1iYXItd3JhcHBlcnt0b3A6YXV0bztsZWZ0OjA7bWFyZ2luOjAgMCAwIC0xNnB4O3BhZGRpbmc6MCAwIDAgMTZweDtoZWlnaHQ6MTAwJTt3aWR0aDozMnB4fTo6bmctZGVlcCAubmd4LXNsaWRlci52ZXJ0aWNhbCAubmd4LXNsaWRlci1iYXJ7Ym90dG9tOjA7bGVmdDphdXRvO3dpZHRoOjRweDtoZWlnaHQ6MTAwJX06Om5nLWRlZXAgLm5neC1zbGlkZXIudmVydGljYWwgLm5neC1zbGlkZXItcG9pbnRlcntsZWZ0Oi0xNHB4IWltcG9ydGFudDt0b3A6YXV0bztib3R0b206MH06Om5nLWRlZXAgLm5neC1zbGlkZXIudmVydGljYWwgLm5neC1zbGlkZXItYnViYmxle2xlZnQ6MTZweCFpbXBvcnRhbnQ7Ym90dG9tOjB9OjpuZy1kZWVwIC5uZ3gtc2xpZGVyLnZlcnRpY2FsIC5uZ3gtc2xpZGVyLXRpY2tze2hlaWdodDoxMDAlO3dpZHRoOjA7bGVmdDotM3B4O3RvcDowO3otaW5kZXg6MX06Om5nLWRlZXAgLm5neC1zbGlkZXIudmVydGljYWwgLm5neC1zbGlkZXItdGlja3t2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tdG9wOjExcHh9OjpuZy1kZWVwIC5uZ3gtc2xpZGVyLnZlcnRpY2FsIC5uZ3gtc2xpZGVyLXRpY2stdmFsdWV7bGVmdDoyNHB4O3RvcDphdXRvOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLC0yOCUpO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwtMjglKX06Om5nLWRlZXAgLm5neC1zbGlkZXIudmVydGljYWwgLm5neC1zbGlkZXItdGljay1sZWdlbmR7dG9wOmF1dG87cmlnaHQ6MjRweDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwtMjglKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsLTI4JSk7bWF4LXdpZHRoOm5vbmU7d2hpdGUtc3BhY2U6bm93cmFwfTo6bmctZGVlcCAubmd4LXNsaWRlci52ZXJ0aWNhbCAubmd4LXNsaWRlci10aWNrcy12YWx1ZXMtdW5kZXIgLm5neC1zbGlkZXItdGljay12YWx1ZXtib3R0b206YXV0bztsZWZ0OmF1dG87cmlnaHQ6MjRweH06Om5nLWRlZXAgLm5neC1zbGlkZXIgKnt0cmFuc2l0aW9uOm5vbmV9OjpuZy1kZWVwIC5uZ3gtc2xpZGVyLmFuaW1hdGUgLm5neC1zbGlkZXItYmFyLXdyYXBwZXJ7dHJhbnNpdGlvbjouM3MgbGluZWFyfTo6bmctZGVlcCAubmd4LXNsaWRlci5hbmltYXRlIC5uZ3gtc2xpZGVyLXNlbGVjdGlvbnt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjNzIGxpbmVhcn06Om5nLWRlZXAgLm5neC1zbGlkZXIuYW5pbWF0ZSAubmd4LXNsaWRlci1wb2ludGVye3RyYW5zaXRpb246LjNzIGxpbmVhcn06Om5nLWRlZXAgLm5neC1zbGlkZXIuYW5pbWF0ZSAubmd4LXNsaWRlci1idWJibGV7dHJhbnNpdGlvbjouM3MgbGluZWFyfTo6bmctZGVlcCAubmd4LXNsaWRlci5hbmltYXRlIC5uZ3gtc2xpZGVyLWJ1YmJsZS5uZ3gtc2xpZGVyLWxpbWl0e3RyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyfTo6bmctZGVlcCAubmd4LXNsaWRlci5hbmltYXRlIC5uZ3gtc2xpZGVyLWJ1YmJsZS5uZ3gtc2xpZGVyLWNvbWJpbmVke3RyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyfTo6bmctZGVlcCAubmd4LXNsaWRlci5hbmltYXRlIC5uZ3gtc2xpZGVyLXRpY2t7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4zcyBsaW5lYXJ9YF0sXG4gIGhvc3Q6IHsgY2xhc3M6ICduZ3gtc2xpZGVyJyB9LFxuICBwcm92aWRlcnM6IFtOR1hfU0xJREVSX0NPTlRST0xfVkFMVUVfQUNDRVNTT1JdXG59KVxuZXhwb3J0IGNsYXNzIFNsaWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgLy8gTW9kZWwgZm9yIGxvdyB2YWx1ZSBvZiBzbGlkZXIuIEZvciBzaW1wbGUgc2xpZGVyLCB0aGlzIGlzIHRoZSBvbmx5IGlucHV0LiBGb3IgcmFuZ2Ugc2xpZGVyLCB0aGlzIGlzIHRoZSBsb3cgdmFsdWUuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB2YWx1ZTogbnVtYmVyID0gbnVsbDtcbiAgLy8gT3V0cHV0IGZvciBsb3cgdmFsdWUgc2xpZGVyIHRvIHN1cHBvcnQgdHdvLXdheSBiaW5kaW5nc1xuICBAT3V0cHV0KClcbiAgcHVibGljIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBNb2RlbCBmb3IgaGlnaCB2YWx1ZSBvZiBzbGlkZXIuIE5vdCB1c2VkIGluIHNpbXBsZSBzbGlkZXIuIEZvciByYW5nZSBzbGlkZXIsIHRoaXMgaXMgdGhlIGhpZ2ggdmFsdWUuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoaWdoVmFsdWU6IG51bWJlciA9IG51bGw7XG4gIC8vIE91dHB1dCBmb3IgaGlnaCB2YWx1ZSBzbGlkZXIgdG8gc3VwcG9ydCB0d28td2F5IGJpbmRpbmdzXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgaGlnaFZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBBbiBvYmplY3Qgd2l0aCBhbGwgdGhlIG90aGVyIG9wdGlvbnMgb2YgdGhlIHNsaWRlci5cbiAgLy8gRWFjaCBvcHRpb24gY2FuIGJlIHVwZGF0ZWQgYXQgcnVudGltZSBhbmQgdGhlIHNsaWRlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcmUtcmVuZGVyZWQuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvcHRpb25zOiBPcHRpb25zID0gbmV3IE9wdGlvbnMoKTtcblxuICAvLyBFdmVudCBlbWl0dGVkIHdoZW4gdXNlciBzdGFydHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc2xpZGVyXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgdXNlckNoYW5nZVN0YXJ0OiBFdmVudEVtaXR0ZXI8Q2hhbmdlQ29udGV4dD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gRXZlbnQgZW1pdHRlZCBvbiBlYWNoIGNoYW5nZSBjb21pbmcgZnJvbSB1c2VyIGludGVyYWN0aW9uXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgdXNlckNoYW5nZTogRXZlbnRFbWl0dGVyPENoYW5nZUNvbnRleHQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIEV2ZW50IGVtaXR0ZWQgd2hlbiB1c2VyIGZpbmlzaGVzIGludGVyYWN0aW9uIHdpdGggdGhlIHNsaWRlclxuICBAT3V0cHV0KClcbiAgcHVibGljIHVzZXJDaGFuZ2VFbmQ6IEV2ZW50RW1pdHRlcjxDaGFuZ2VDb250ZXh0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwcml2YXRlIG1hbnVhbFJlZnJlc2hTdWJzY3JpcHRpb246IGFueTtcbiAgLy8gSW5wdXQgZXZlbnQgdGhhdCB0cmlnZ2VycyBzbGlkZXIgcmVmcmVzaCAocmUtcG9zaXRpb25pbmcgb2Ygc2xpZGVyIGVsZW1lbnRzKVxuICBASW5wdXQoKSBzZXQgbWFudWFsUmVmcmVzaChtYW51YWxSZWZyZXNoOiBFdmVudEVtaXR0ZXI8dm9pZD4pIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlTWFudWFsUmVmcmVzaCgpO1xuXG4gICAgdGhpcy5tYW51YWxSZWZyZXNoU3Vic2NyaXB0aW9uID0gbWFudWFsUmVmcmVzaC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNhbGN1bGF0ZVZpZXdEaW1lbnNpb25zQW5kRGV0ZWN0Q2hhbmdlcygpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdHJpZ2dlckZvY3VzU3Vic2NyaXB0aW9uOiBhbnk7XG4gIC8vIElucHV0IGV2ZW50IHRoYXQgdHJpZ2dlcnMgc2V0dGluZyBmb2N1cyBvbiBnaXZlbiBzbGlkZXIgaGFuZGxlXG4gIEBJbnB1dCgpIHNldCB0cmlnZ2VyRm9jdXModHJpZ2dlckZvY3VzOiBFdmVudEVtaXR0ZXI8dm9pZD4pIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlVHJpZ2dlckZvY3VzKCk7XG5cbiAgICB0aGlzLnRyaWdnZXJGb2N1c1N1YnNjcmlwdGlvbiA9IHRyaWdnZXJGb2N1cy5zdWJzY3JpYmUoKHBvaW50ZXJUeXBlOiBQb2ludGVyVHlwZSkgPT4ge1xuICAgICAgdGhpcy5mb2N1c1BvaW50ZXIocG9pbnRlclR5cGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU2xpZGVyIHR5cGUsIHRydWUgbWVhbnMgcmFuZ2Ugc2xpZGVyXG4gIHB1YmxpYyBnZXQgcmFuZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZhbHVlKSAmJiAhVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5oaWdoVmFsdWUpO1xuICB9XG5cbiAgLy8gU2V0IHRvIHRydWUgaWYgaW5pdCBtZXRob2QgYWxyZWFkeSBleGVjdXRlZFxuICBwcml2YXRlIGluaXRIYXNSdW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBDaGFuZ2VzIGluIG1vZGVsIGlucHV0cyBhcmUgcGFzc2VkIHRocm91Z2ggdGhpcyBzdWJqZWN0XG4gIC8vIFRoZXNlIGFyZSBhbGwgY2hhbmdlcyBjb21pbmcgaW4gZnJvbSBvdXRzaWRlIHRoZSBjb21wb25lbnQgdGhyb3VnaCBpbnB1dCBiaW5kaW5ncyBvciByZWFjdGl2ZSBmb3JtIGlucHV0c1xuICBwcml2YXRlIGlucHV0TW9kZWxDaGFuZ2VTdWJqZWN0OiBTdWJqZWN0PElucHV0TW9kZWxDaGFuZ2U+ID0gbmV3IFN1YmplY3Q8SW5wdXRNb2RlbENoYW5nZT4oKTtcbiAgcHJpdmF0ZSBpbnB1dE1vZGVsQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBudWxsO1xuXG4gIC8vIENoYW5nZXMgdG8gbW9kZWwgb3V0cHV0cyBhcmUgcGFzc2VkIHRocm91Z2ggdGhpcyBzdWJqZWN0XG4gIC8vIFRoZXNlIGFyZSBhbGwgY2hhbmdlcyB0aGF0IG5lZWQgdG8gYmUgY29tbXVuaWNhdGVkIHRvIG91dHB1dCBlbWl0dGVycyBhbmQgcmVnaXN0ZXJlZCBjYWxsYmFja3NcbiAgcHJpdmF0ZSBvdXRwdXRNb2RlbENoYW5nZVN1YmplY3Q6IFN1YmplY3Q8T3V0cHV0TW9kZWxDaGFuZ2U+ID0gbmV3IFN1YmplY3Q8T3V0cHV0TW9kZWxDaGFuZ2U+KCk7XG4gIHByaXZhdGUgb3V0cHV0TW9kZWxDaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG51bGw7XG5cbiAgLy8gTG93IHZhbHVlIHN5bmNlZCB0byBtb2RlbCBsb3cgdmFsdWVcbiAgcHJpdmF0ZSB2aWV3TG93VmFsdWU6IG51bWJlciA9IG51bGw7XG4gIC8vIEhpZ2ggdmFsdWUgc3luY2VkIHRvIG1vZGVsIGhpZ2ggdmFsdWVcbiAgcHJpdmF0ZSB2aWV3SGlnaFZhbHVlOiBudW1iZXIgPSBudWxsO1xuICAvLyBPcHRpb25zIHN5bmNlZCB0byBtb2RlbCBvcHRpb25zLCBiYXNlZCBvbiBkZWZhdWx0c1xuICBwcml2YXRlIHZpZXdPcHRpb25zOiBPcHRpb25zID0gbmV3IE9wdGlvbnMoKTtcblxuICAvLyBIYWxmIG9mIHRoZSB3aWR0aCBvciBoZWlnaHQgb2YgdGhlIHNsaWRlciBoYW5kbGVzXG4gIHByaXZhdGUgaGFuZGxlSGFsZkRpbWVuc2lvbjogbnVtYmVyID0gMDtcbiAgLy8gTWF4aW11bSBwb3NpdGlvbiB0aGUgc2xpZGVyIGhhbmRsZSBjYW4gaGF2ZVxuICBwcml2YXRlIG1heEhhbmRsZVBvc2l0aW9uOiBudW1iZXIgPSAwO1xuXG4gIC8vIFdoaWNoIGhhbmRsZSBpcyBjdXJyZW50bHkgdHJhY2tlZCBmb3IgbW92ZSBldmVudHNcbiAgcHJpdmF0ZSBjdXJyZW50VHJhY2tpbmdQb2ludGVyOiBQb2ludGVyVHlwZSA9IG51bGw7XG4gIC8vIEludGVybmFsIHZhcmlhYmxlIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGZvY3VzIGVsZW1lbnRcbiAgcHJpdmF0ZSBjdXJyZW50Rm9jdXNQb2ludGVyOiBQb2ludGVyVHlwZSA9IG51bGw7XG4gIC8vIFVzZWQgdG8gY2FsbCBvblN0YXJ0IG9uIHRoZSBmaXJzdCBrZXlkb3duIGV2ZW50XG4gIHByaXZhdGUgZmlyc3RLZXlEb3duOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIEN1cnJlbnQgdG91Y2ggaWQgb2YgdG91Y2ggZXZlbnQgYmVpbmcgaGFuZGxlZFxuICBwcml2YXRlIHRvdWNoSWQ6IG51bWJlciA9IG51bGw7XG4gIC8vIFZhbHVlcyByZWNvcmRlZCB3aGVuIGZpcnN0IGRyYWdnaW5nIHRoZSBiYXJcbiAgcHJpdmF0ZSBkcmFnZ2luZzogRHJhZ2dpbmcgPSBuZXcgRHJhZ2dpbmcoKTtcblxuICAvKiBTbGlkZXIgRE9NIGVsZW1lbnRzICovXG5cbiAgLy8gTGVmdCBzZWxlY3Rpb24gYmFyIG91dHNpZGUgdHdvIGhhbmRsZXNcbiAgQFZpZXdDaGlsZCgnbGVmdE91dGVyU2VsZWN0aW9uQmFyJywge3JlYWQ6IFNsaWRlckVsZW1lbnREaXJlY3RpdmV9KVxuICBwcml2YXRlIGxlZnRPdXRlclNlbGVjdGlvbkJhckVsZW1lbnQ6IFNsaWRlckVsZW1lbnREaXJlY3RpdmU7XG5cbiAgLy8gUmlnaHQgc2VsZWN0aW9uIGJhciBvdXRzaWRlIHR3byBoYW5kbGVzXG4gIEBWaWV3Q2hpbGQoJ3JpZ2h0T3V0ZXJTZWxlY3Rpb25CYXInLCB7cmVhZDogU2xpZGVyRWxlbWVudERpcmVjdGl2ZX0pXG4gIHByaXZhdGUgcmlnaHRPdXRlclNlbGVjdGlvbkJhckVsZW1lbnQ6IFNsaWRlckVsZW1lbnREaXJlY3RpdmU7XG5cbiAgLy8gVGhlIHdob2xlIHNsaWRlciBiYXJcbiAgQFZpZXdDaGlsZCgnZnVsbEJhcicsIHtyZWFkOiBTbGlkZXJFbGVtZW50RGlyZWN0aXZlfSlcbiAgcHJpdmF0ZSBmdWxsQmFyRWxlbWVudDogU2xpZGVyRWxlbWVudERpcmVjdGl2ZTtcblxuICAvLyBIaWdobGlnaHQgYmV0d2VlbiB0d28gaGFuZGxlc1xuICBAVmlld0NoaWxkKCdzZWxlY3Rpb25CYXInLCB7cmVhZDogU2xpZGVyRWxlbWVudERpcmVjdGl2ZX0pXG4gIHByaXZhdGUgc2VsZWN0aW9uQmFyRWxlbWVudDogU2xpZGVyRWxlbWVudERpcmVjdGl2ZTtcblxuICAvLyBMZWZ0IHNsaWRlciBoYW5kbGVcbiAgQFZpZXdDaGlsZCgnbWluSGFuZGxlJywge3JlYWQ6IFNsaWRlckhhbmRsZURpcmVjdGl2ZX0pXG4gIHByaXZhdGUgbWluSGFuZGxlRWxlbWVudDogU2xpZGVySGFuZGxlRGlyZWN0aXZlO1xuXG4gIC8vIFJpZ2h0IHNsaWRlciBoYW5kbGVcbiAgQFZpZXdDaGlsZCgnbWF4SGFuZGxlJywge3JlYWQ6IFNsaWRlckhhbmRsZURpcmVjdGl2ZX0pXG4gIHByaXZhdGUgbWF4SGFuZGxlRWxlbWVudDogU2xpZGVySGFuZGxlRGlyZWN0aXZlO1xuXG4gIC8vIEZsb29yIGxhYmVsXG4gIEBWaWV3Q2hpbGQoJ2Zsb29yTGFiZWwnLCB7cmVhZDogU2xpZGVyTGFiZWxEaXJlY3RpdmV9KVxuICBwcml2YXRlIGZsb29yTGFiZWxFbGVtZW50OiBTbGlkZXJMYWJlbERpcmVjdGl2ZTtcblxuICAvLyBDZWlsaW5nIGxhYmVsXG4gIEBWaWV3Q2hpbGQoJ2NlaWxMYWJlbCcsIHtyZWFkOiBTbGlkZXJMYWJlbERpcmVjdGl2ZX0pXG4gIHByaXZhdGUgY2VpbExhYmVsRWxlbWVudDogU2xpZGVyTGFiZWxEaXJlY3RpdmU7XG5cbiAgLy8gTGFiZWwgYWJvdmUgdGhlIGxvdyB2YWx1ZVxuICBAVmlld0NoaWxkKCdtaW5IYW5kbGVMYWJlbCcsIHtyZWFkOiBTbGlkZXJMYWJlbERpcmVjdGl2ZX0pXG4gIHByaXZhdGUgbWluSGFuZGxlTGFiZWxFbGVtZW50OiBTbGlkZXJMYWJlbERpcmVjdGl2ZTtcblxuICAvLyBMYWJlbCBhYm92ZSB0aGUgaGlnaCB2YWx1ZVxuICBAVmlld0NoaWxkKCdtYXhIYW5kbGVMYWJlbCcsIHtyZWFkOiBTbGlkZXJMYWJlbERpcmVjdGl2ZX0pXG4gIHByaXZhdGUgbWF4SGFuZGxlTGFiZWxFbGVtZW50OiBTbGlkZXJMYWJlbERpcmVjdGl2ZTtcblxuICAvLyBDb21iaW5lZCBsYWJlbFxuICBAVmlld0NoaWxkKCdjb21iaW5lZExhYmVsJywge3JlYWQ6IFNsaWRlckxhYmVsRGlyZWN0aXZlfSlcbiAgcHJpdmF0ZSBjb21iaW5lZExhYmVsRWxlbWVudDogU2xpZGVyTGFiZWxEaXJlY3RpdmU7XG5cbiAgLy8gVGhlIHRpY2tzXG4gIEBWaWV3Q2hpbGQoJ3RpY2tzRWxlbWVudCcsIHtyZWFkOiBTbGlkZXJFbGVtZW50RGlyZWN0aXZlfSlcbiAgcHJpdmF0ZSB0aWNrc0VsZW1lbnQ6IFNsaWRlckVsZW1lbnREaXJlY3RpdmU7XG5cbiAgLy8gT3B0aW9uYWwgY3VzdG9tIHRlbXBsYXRlIGZvciBkaXNwbGF5aW5nIHRvb2x0aXBzXG4gIEBDb250ZW50Q2hpbGQoJ3Rvb2x0aXBUZW1wbGF0ZScpXG4gIHB1YmxpYyB0b29sdGlwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLy8gSG9zdCBlbGVtZW50IGNsYXNzIGJpbmRpbmdzXG4gIEBIb3N0QmluZGluZygnY2xhc3MudmVydGljYWwnKVxuICBwdWJsaWMgc2xpZGVyRWxlbWVudFZlcnRpY2FsQ2xhc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbmltYXRlJylcbiAgcHVibGljIHNsaWRlckVsZW1lbnRBbmltYXRlQ2xhc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy53aXRoLWxlZ2VuZCcpXG4gIHB1YmxpYyBzbGlkZXJFbGVtZW50V2l0aExlZ2VuZENsYXNzOiBib29sZWFuID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kaXNhYmxlZCcpXG4gIHB1YmxpYyBzbGlkZXJFbGVtZW50RGlzYWJsZWRBdHRyOiBzdHJpbmcgPSBudWxsO1xuXG4gIC8vIENTUyBzdHlsZXMgYW5kIGNsYXNzIGZsYWdzXG4gIHB1YmxpYyBiYXJTdHlsZTogYW55ID0ge307XG4gIHB1YmxpYyBtaW5Qb2ludGVyU3R5bGU6IGFueSA9IHt9O1xuICBwdWJsaWMgbWF4UG9pbnRlclN0eWxlOiBhbnkgPSB7fTtcbiAgcHVibGljIGZ1bGxCYXJUcmFuc3BhcmVudENsYXNzOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzZWxlY3Rpb25CYXJEcmFnZ2FibGVDbGFzczogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgdGlja3NVbmRlclZhbHVlc0NsYXNzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gV2hldGhlciB0byBzaG93L2hpZGUgdGlja3NcbiAgcHVibGljIGdldCBzaG93VGlja3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmlld09wdGlvbnMuc2hvd1RpY2tzO1xuICB9XG5cbiAgLyogSWYgdGlja1N0ZXAgaXMgc2V0IG9yIHRpY2tzQXJyYXkgaXMgc3BlY2lmaWVkLlxuICAgICBJbiB0aGlzIGNhc2UsIHRpY2tzIHZhbHVlcyBzaG91bGQgYmUgZGlzcGxheWVkIGJlbG93IHRoZSBzbGlkZXIuICovXG4gIHByaXZhdGUgaW50ZXJtZWRpYXRlVGlja3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gVGlja3MgYXJyYXkgYXMgZGlzcGxheWVkIGluIHZpZXdcbiAgcHVibGljIHRpY2tzOiBUaWNrW10gPSBbXTtcblxuICAvLyBFdmVudCBsaXN0ZW5lcnNcbiAgcHJpdmF0ZSBldmVudExpc3RlbmVySGVscGVyOiBFdmVudExpc3RlbmVySGVscGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBvbk1vdmVFdmVudExpc3RlbmVyOiBFdmVudExpc3RlbmVyID0gbnVsbDtcbiAgcHJpdmF0ZSBvbkVuZEV2ZW50TGlzdGVuZXI6IEV2ZW50TGlzdGVuZXIgPSBudWxsO1xuICAvLyBXaGV0aGVyIGN1cnJlbnRseSBtb3ZpbmcgdGhlIHNsaWRlciAoYmV0d2VlbiBvblN0YXJ0KCkgYW5kIG9uRW5kKCkpXG4gIHByaXZhdGUgbW92aW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gT2JzZXJ2ZXIgZm9yIHNsaWRlciBlbGVtZW50IHJlc2l6ZSBldmVudHNcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuXG4gIC8vIENhbGxiYWNrcyBmb3IgcmVhY3RpdmUgZm9ybXMgc3VwcG9ydFxuICBwcml2YXRlIG9uVG91Y2hlZENhbGxiYWNrOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9IG51bGw7XG4gIHByaXZhdGUgb25DaGFuZ2VDYWxsYmFjazogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSBudWxsO1xuXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdGlvblJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgem9uZTogTmdab25lKSB7XG4gICAgdGhpcy5ldmVudExpc3RlbmVySGVscGVyID0gbmV3IEV2ZW50TGlzdGVuZXJIZWxwZXIodGhpcy5yZW5kZXJlcik7XG4gIH1cblxuICAvLyBPbkluaXQgaW50ZXJmYWNlXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdPcHRpb25zID0gbmV3IE9wdGlvbnMoKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMudmlld09wdGlvbnMsIHRoaXMub3B0aW9ucyk7XG5cbiAgICAvLyBXZSBuZWVkIHRvIHJ1biB0aGVzZSB0d28gdGhpbmdzIGZpcnN0LCBiZWZvcmUgdGhlIHJlc3Qgb2YgdGhlIGluaXQgaW4gbmdBZnRlclZpZXdJbml0KCksXG4gICAgLy8gYmVjYXVzZSB0aGVzZSB0d28gc2V0dGluZ3MgYXJlIHNldCB0aHJvdWdoIEBIb3N0QmluZGluZyBhbmQgQW5ndWxhciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgLy8gbWVjaGFuaXNtIGRvZXNuJ3QgbGlrZSB0aGVtIGNoYW5naW5nIGluIG5nQWZ0ZXJWaWV3SW5pdCgpXG4gICAgdGhpcy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gICAgdGhpcy51cGRhdGVWZXJ0aWNhbFN0YXRlKCk7XG4gIH1cblxuICAvLyBBZnRlclZpZXdJbml0IGludGVyZmFjZVxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYXBwbHlPcHRpb25zKCk7XG5cbiAgICB0aGlzLnN1YnNjcmliZUlucHV0TW9kZWxDaGFuZ2VTdWJqZWN0KHRoaXMudmlld09wdGlvbnMuaW5wdXRFdmVudHNJbnRlcnZhbCk7XG4gICAgdGhpcy5zdWJzY3JpYmVPdXRwdXRNb2RlbENoYW5nZVN1YmplY3QodGhpcy52aWV3T3B0aW9ucy5vdXRwdXRFdmVudHNJbnRlcnZhbCk7XG5cbiAgICAvLyBPbmNlIHdlIGFwcGx5IG9wdGlvbnMsIHdlIG5lZWQgdG8gbm9ybWFsaXNlIG1vZGVsIHZhbHVlcyBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICB0aGlzLnJlbm9ybWFsaXNlTW9kZWxWYWx1ZXMoKTtcblxuICAgIHRoaXMudmlld0xvd1ZhbHVlID0gdGhpcy5tb2RlbFZhbHVlVG9WaWV3VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgIHRoaXMudmlld0hpZ2hWYWx1ZSA9IHRoaXMubW9kZWxWYWx1ZVRvVmlld1ZhbHVlKHRoaXMuaGlnaFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aWV3SGlnaFZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVZlcnRpY2FsU3RhdGUoKTsgLy8gbmVlZCB0byBydW4gdGhpcyBhZ2FpbiB0byBjb3ZlciBjaGFuZ2VzIHRvIHNsaWRlciBlbGVtZW50c1xuICAgIHRoaXMubWFuYWdlRWxlbWVudHNTdHlsZSgpO1xuICAgIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICAgIHRoaXMuY2FsY3VsYXRlVmlld0RpbWVuc2lvbnMoKTtcbiAgICB0aGlzLmFkZEFjY2Vzc2liaWxpdHkoKTtcbiAgICB0aGlzLnVwZGF0ZUNlaWxMYWJlbCgpO1xuICAgIHRoaXMudXBkYXRlRmxvb3JMYWJlbCgpO1xuICAgIHRoaXMuaW5pdEhhbmRsZXMoKTtcbiAgICB0aGlzLm1hbmFnZUV2ZW50c0JpbmRpbmdzKCk7XG5cbiAgICB0aGlzLnN1YnNjcmliZVJlc2l6ZU9ic2VydmVyKCk7XG5cbiAgICB0aGlzLmluaXRIYXNSdW4gPSB0cnVlO1xuXG4gICAgLy8gUnVuIGNoYW5nZSBkZXRlY3Rpb24gbWFudWFsbHkgdG8gcmVzb2x2ZSBzb21lIGlzc3VlcyB3aGVuIGluaXQgcHJvY2VkdXJlIGNoYW5nZXMgdmFsdWVzIHVzZWQgaW4gdGhlIHZpZXdcbiAgICBpZiAoIXRoaXMuaXNSZWZEZXN0cm95ZWQoKSkge1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rpb25SZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE9uQ2hhbmdlcyBpbnRlcmZhY2VcbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBBbHdheXMgYXBwbHkgb3B0aW9ucyBmaXJzdFxuICAgIGlmICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQoY2hhbmdlcy5vcHRpb25zKSkge1xuICAgICAgdGhpcy5vbkNoYW5nZU9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICAvLyBUaGVuIHZhbHVlIGNoYW5nZXNcbiAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKGNoYW5nZXMudmFsdWUpIHx8XG4gICAgICAgICFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZChjaGFuZ2VzLmhpZ2hWYWx1ZSkpIHtcbiAgICAgIHRoaXMuaW5wdXRNb2RlbENoYW5nZVN1YmplY3QubmV4dCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICBoaWdoVmFsdWU6IHRoaXMuaGlnaFZhbHVlLFxuICAgICAgICBmb3JjZUNoYW5nZTogZmFsc2UsXG4gICAgICAgIGludGVybmFsQ2hhbmdlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gT25EZXN0cm95IGludGVyZmFjZVxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bmJpbmRFdmVudHMoKTtcblxuICAgIHRoaXMudW5zdWJzY3JpYmVSZXNpemVPYnNlcnZlcigpO1xuICAgIHRoaXMudW5zdWJzY3JpYmVJbnB1dE1vZGVsQ2hhbmdlU3ViamVjdCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmVPdXRwdXRNb2RlbENoYW5nZVN1YmplY3QoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlTWFudWFsUmVmcmVzaCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmVUcmlnZ2VyRm9jdXMoKTtcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgdGhpcy52YWx1ZSA9IG9ialswXTtcbiAgICAgIHRoaXMuaGlnaFZhbHVlID0gb2JqWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gb2JqO1xuICAgIH1cblxuICAgIC8vIG5nT25DaGFuZ2VzKCkgaXMgbm90IGNhbGxlZCBpbiB0aGlzIGluc3RhbmNlLCBzbyB3ZSBuZWVkIHRvIGNvbW11bmljYXRlIHRoZSBjaGFuZ2UgbWFudWFsbHlcbiAgICB0aGlzLmlucHV0TW9kZWxDaGFuZ2VTdWJqZWN0Lm5leHQoe1xuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBoaWdoVmFsdWU6IHRoaXMuaGlnaFZhbHVlLFxuICAgICAgZm9yY2VDaGFuZ2U6IGZhbHNlLFxuICAgICAgaW50ZXJuYWxDaGFuZ2U6IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2VDYWxsYmFjazogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gb25DaGFuZ2VDYWxsYmFjaztcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQob25Ub3VjaGVkQ2FsbGJhY2s6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBvblRvdWNoZWRDYWxsYmFjaztcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy52aWV3T3B0aW9ucy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uUmVzaXplKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNhbGN1bGF0ZVZpZXdEaW1lbnNpb25zQW5kRGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVJbnB1dE1vZGVsQ2hhbmdlU3ViamVjdChpbnRlcnZhbD86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRNb2RlbENoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuaW5wdXRNb2RlbENoYW5nZVN1YmplY3RcbiAgICAucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKE1vZGVsQ2hhbmdlLmNvbXBhcmUpLFxuICAgICAgLy8gSGFjayB0byByZXNldCB0aGUgc3RhdHVzIG9mIHRoZSBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpIC0gaWYgYSBcImZha2VcIiBldmVudCBjb21lcyB0aHJvdWdoIHdpdGggZm9yY2VDaGFuZ2U9dHJ1ZSxcbiAgICAgIC8vIHdlIGZvcmNlZnVsbHkgYnktcGFzcyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBidXQgb3RoZXJ3aXNlIGRyb3AgdGhlIGV2ZW50XG4gICAgICBmaWx0ZXIoKG1vZGVsQ2hhbmdlOiBJbnB1dE1vZGVsQ2hhbmdlKSA9PiAhbW9kZWxDaGFuZ2UuZm9yY2VDaGFuZ2UgJiYgIW1vZGVsQ2hhbmdlLmludGVybmFsQ2hhbmdlKSxcbiAgICAgICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQoaW50ZXJ2YWwpKVxuICAgICAgICAgID8gdGhyb3R0bGVUaW1lKGludGVydmFsLCB1bmRlZmluZWQsIHsgbGVhZGluZzogdHJ1ZSwgdHJhaWxpbmc6IHRydWV9KVxuICAgICAgICAgIDogdGFwKCgpID0+IHt9KSAvLyBuby1vcFxuICAgIClcbiAgICAuc3Vic2NyaWJlKChtb2RlbENoYW5nZTogSW5wdXRNb2RlbENoYW5nZSkgPT4gdGhpcy5hcHBseUlucHV0TW9kZWxDaGFuZ2UobW9kZWxDaGFuZ2UpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlT3V0cHV0TW9kZWxDaGFuZ2VTdWJqZWN0KGludGVydmFsPzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5vdXRwdXRNb2RlbENoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMub3V0cHV0TW9kZWxDaGFuZ2VTdWJqZWN0XG4gICAgICAucGlwZShcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoTW9kZWxDaGFuZ2UuY29tcGFyZSksXG4gICAgICAgICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQoaW50ZXJ2YWwpKVxuICAgICAgICAgID8gdGhyb3R0bGVUaW1lKGludGVydmFsLCB1bmRlZmluZWQsIHsgbGVhZGluZzogdHJ1ZSwgdHJhaWxpbmc6IHRydWV9KVxuICAgICAgICAgIDogdGFwKCgpID0+IHt9KSAvLyBuby1vcFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobW9kZWxDaGFuZ2U6IE91dHB1dE1vZGVsQ2hhbmdlKSA9PiB0aGlzLnB1Ymxpc2hPdXRwdXRNb2RlbENoYW5nZShtb2RlbENoYW5nZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVSZXNpemVPYnNlcnZlcigpOiB2b2lkIHtcbiAgICBpZiAoQ29tcGF0aWJpbGl0eUhlbHBlci5pc1Jlc2l6ZU9ic2VydmVyQXZhaWxhYmxlKCkpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCk6IHZvaWQgPT4gdGhpcy5jYWxjdWxhdGVWaWV3RGltZW5zaW9uc0FuZERldGVjdENoYW5nZXMoKSk7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVSZXNpemVPYnNlcnZlcigpOiB2b2lkIHtcbiAgICBpZiAoQ29tcGF0aWJpbGl0eUhlbHBlci5pc1Jlc2l6ZU9ic2VydmVyQXZhaWxhYmxlKCkgJiYgdGhpcy5yZXNpemVPYnNlcnZlciAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVuc3Vic2NyaWJlT25Nb3ZlKCk6IHZvaWQge1xuICAgIGlmICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5vbk1vdmVFdmVudExpc3RlbmVyKSkge1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVySGVscGVyLmRldGFjaEV2ZW50TGlzdGVuZXIodGhpcy5vbk1vdmVFdmVudExpc3RlbmVyKTtcbiAgICAgIHRoaXMub25Nb3ZlRXZlbnRMaXN0ZW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZU9uRW5kKCk6IHZvaWQge1xuICAgIGlmICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5vbkVuZEV2ZW50TGlzdGVuZXIpKSB7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJIZWxwZXIuZGV0YWNoRXZlbnRMaXN0ZW5lcih0aGlzLm9uRW5kRXZlbnRMaXN0ZW5lcik7XG4gICAgICB0aGlzLm9uRW5kRXZlbnRMaXN0ZW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUlucHV0TW9kZWxDaGFuZ2VTdWJqZWN0KCk6IHZvaWQge1xuICAgIGlmICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5pbnB1dE1vZGVsQ2hhbmdlU3Vic2NyaXB0aW9uKSkge1xuICAgICAgdGhpcy5pbnB1dE1vZGVsQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmlucHV0TW9kZWxDaGFuZ2VTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVPdXRwdXRNb2RlbENoYW5nZVN1YmplY3QoKTogdm9pZCB7XG4gICAgaWYgKCFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLm91dHB1dE1vZGVsQ2hhbmdlU3Vic2NyaXB0aW9uKSkge1xuICAgICAgdGhpcy5vdXRwdXRNb2RlbENoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5vdXRwdXRNb2RlbENoYW5nZVN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZU1hbnVhbFJlZnJlc2goKTogdm9pZCB7XG4gICAgaWYgKCFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLm1hbnVhbFJlZnJlc2hTdWJzY3JpcHRpb24pKSB7XG4gICAgICB0aGlzLm1hbnVhbFJlZnJlc2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMubWFudWFsUmVmcmVzaFN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZVRyaWdnZXJGb2N1cygpOiB2b2lkIHtcbiAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudHJpZ2dlckZvY3VzU3Vic2NyaXB0aW9uKSkge1xuICAgICAgdGhpcy50cmlnZ2VyRm9jdXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMudHJpZ2dlckZvY3VzU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFBvaW50ZXJFbGVtZW50KHBvaW50ZXJUeXBlOiBQb2ludGVyVHlwZSk6IFNsaWRlckhhbmRsZURpcmVjdGl2ZSB7XG4gICAgaWYgKHBvaW50ZXJUeXBlID09PSBQb2ludGVyVHlwZS5NaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLm1pbkhhbmRsZUVsZW1lbnQ7XG4gICAgfSBlbHNlIGlmIChwb2ludGVyVHlwZSA9PT0gUG9pbnRlclR5cGUuTWF4KSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXhIYW5kbGVFbGVtZW50O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFRyYWNraW5nVmFsdWUoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5jdXJyZW50VHJhY2tpbmdQb2ludGVyID09PSBQb2ludGVyVHlwZS5NaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnZpZXdMb3dWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFRyYWNraW5nUG9pbnRlciA9PT0gUG9pbnRlclR5cGUuTWF4KSB7XG4gICAgICByZXR1cm4gdGhpcy52aWV3SGlnaFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbW9kZWxWYWx1ZVRvVmlld1ZhbHVlKG1vZGVsVmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKFZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKG1vZGVsVmFsdWUpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cblxuICAgIGlmICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52aWV3T3B0aW9ucy5zdGVwc0FycmF5KSAmJiAhdGhpcy52aWV3T3B0aW9ucy5iaW5kSW5kZXhGb3JTdGVwc0FycmF5KSB7XG4gICAgICByZXR1cm4gVmFsdWVIZWxwZXIuZmluZFN0ZXBJbmRleCgrbW9kZWxWYWx1ZSwgdGhpcy52aWV3T3B0aW9ucy5zdGVwc0FycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuICttb2RlbFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSB2aWV3VmFsdWVUb01vZGVsVmFsdWUodmlld1ZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52aWV3T3B0aW9ucy5zdGVwc0FycmF5KSAmJiAhdGhpcy52aWV3T3B0aW9ucy5iaW5kSW5kZXhGb3JTdGVwc0FycmF5KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdGVwVmFsdWUodmlld1ZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpZXdWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RlcFZhbHVlKHNsaWRlclZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHN0ZXA6IEN1c3RvbVN0ZXBEZWZpbml0aW9uID0gdGhpcy52aWV3T3B0aW9ucy5zdGVwc0FycmF5W3NsaWRlclZhbHVlXTtcbiAgICByZXR1cm4gKCFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZChzdGVwKSkgPyBzdGVwLnZhbHVlIDogTmFOO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVZpZXdDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMudmlld1ZhbHVlVG9Nb2RlbFZhbHVlKHRoaXMudmlld0xvd1ZhbHVlKTtcbiAgICBpZiAodGhpcy5yYW5nZSkge1xuICAgICAgdGhpcy5oaWdoVmFsdWUgPSB0aGlzLnZpZXdWYWx1ZVRvTW9kZWxWYWx1ZSh0aGlzLnZpZXdIaWdoVmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMub3V0cHV0TW9kZWxDaGFuZ2VTdWJqZWN0Lm5leHQoe1xuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBoaWdoVmFsdWU6IHRoaXMuaGlnaFZhbHVlLFxuICAgICAgdXNlckV2ZW50SW5pdGlhdGVkOiB0cnVlLFxuICAgICAgZm9yY2VDaGFuZ2U6IGZhbHNlXG4gICAgfSk7XG5cbiAgICAvLyBBdCB0aGlzIHBvaW50IGFsbCBjaGFuZ2VzIGFyZSBhcHBsaWVkIGFuZCBvdXRwdXRzIGFyZSBlbWl0dGVkLCBzbyB3ZSBzaG91bGQgYmUgZG9uZS5cbiAgICAvLyBIb3dldmVyLCBpbnB1dCBjaGFuZ2VzIGFyZSBjb21tdW5pY2F0ZWQgaW4gZGlmZmVyZW50IHN0cmVhbSBhbmQgd2UgbmVlZCB0byBiZSByZWFkeSB0b1xuICAgIC8vIGFjdCBvbiB0aGUgbmV4dCBpbnB1dCBjaGFuZ2UgZXZlbiBpZiBpdCBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIGxhc3QgaW5wdXQgY2hhbmdlLlxuICAgIC8vIFRoZXJlZm9yZSwgd2Ugc2VuZCBhIHNwZWNpYWwgZXZlbnQgdG8gcmVzZXQgdGhlIHN0cmVhbS5cbiAgICB0aGlzLmlucHV0TW9kZWxDaGFuZ2VTdWJqZWN0Lm5leHQoe1xuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBoaWdoVmFsdWU6IHRoaXMuaGlnaFZhbHVlLFxuICAgICAgZm9yY2VDaGFuZ2U6IGZhbHNlLFxuICAgICAgaW50ZXJuYWxDaGFuZ2U6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEFwcGx5IG1vZGVsIGNoYW5nZSB0byB0aGUgc2xpZGVyIHZpZXdcbiAgcHJpdmF0ZSBhcHBseUlucHV0TW9kZWxDaGFuZ2UobW9kZWxDaGFuZ2U6IElucHV0TW9kZWxDaGFuZ2UpOiB2b2lkIHtcbiAgICBjb25zdCBub3JtYWxpc2VkTW9kZWxDaGFuZ2U6IE1vZGVsVmFsdWVzID0gdGhpcy5ub3JtYWxpc2VNb2RlbFZhbHVlcyhtb2RlbENoYW5nZSk7XG5cbiAgICAvLyBJZiBub3JtYWxpc2VkIG1vZGVsIGNoYW5nZSBpcyBkaWZmZXJlbnQsIGFwcGx5IHRoZSBjaGFuZ2UgdG8gdGhlIG1vZGVsIHZhbHVlc1xuICAgIGNvbnN0IG5vcm1hbGlzYXRpb25DaGFuZ2U6IGJvb2xlYW4gPSAhTW9kZWxWYWx1ZXMuY29tcGFyZShtb2RlbENoYW5nZSwgbm9ybWFsaXNlZE1vZGVsQ2hhbmdlKTtcbiAgICBpZiAobm9ybWFsaXNhdGlvbkNoYW5nZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IG5vcm1hbGlzZWRNb2RlbENoYW5nZS52YWx1ZTtcbiAgICAgIHRoaXMuaGlnaFZhbHVlID0gbm9ybWFsaXNlZE1vZGVsQ2hhbmdlLmhpZ2hWYWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnZpZXdMb3dWYWx1ZSA9IHRoaXMubW9kZWxWYWx1ZVRvVmlld1ZhbHVlKG5vcm1hbGlzZWRNb2RlbENoYW5nZS52YWx1ZSk7XG4gICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgIHRoaXMudmlld0hpZ2hWYWx1ZSA9IHRoaXMubW9kZWxWYWx1ZVRvVmlld1ZhbHVlKG5vcm1hbGlzZWRNb2RlbENoYW5nZS5oaWdoVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpZXdIaWdoVmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTG93SGFuZGxlKHRoaXMudmFsdWVUb1Bvc2l0aW9uKHRoaXMudmlld0xvd1ZhbHVlKSk7XG4gICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgIHRoaXMudXBkYXRlSGlnaEhhbmRsZSh0aGlzLnZhbHVlVG9Qb3NpdGlvbih0aGlzLnZpZXdIaWdoVmFsdWUpKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25CYXIoKTtcbiAgICB0aGlzLnVwZGF0ZVRpY2tzU2NhbGUoKTtcbiAgICB0aGlzLnVwZGF0ZUFyaWFBdHRyaWJ1dGVzKCk7XG4gICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29tYmluZWRMYWJlbCgpO1xuICAgIH1cblxuICAgIC8vIEF0IHRoZSBlbmQsIHdlIG5lZWQgdG8gY29tbXVuaWNhdGUgdGhlIG1vZGVsIGNoYW5nZSB0byB0aGUgb3V0cHV0cyBhcyB3ZWxsXG4gICAgLy8gTm9ybWFsaXNhdGlvbiBjaGFuZ2VzIGFyZSBhbHNvIGFsd2F5cyBmb3JjZWQgb3V0IHRvIGVuc3VyZSB0aGF0IHN1YnNjcmliZXJzIGFsd2F5cyBlbmQgdXAgaW4gY29ycmVjdCBzdGF0ZVxuICAgIHRoaXMub3V0cHV0TW9kZWxDaGFuZ2VTdWJqZWN0Lm5leHQoe1xuICAgICAgdmFsdWU6IG5vcm1hbGlzZWRNb2RlbENoYW5nZS52YWx1ZSxcbiAgICAgIGhpZ2hWYWx1ZTogbm9ybWFsaXNlZE1vZGVsQ2hhbmdlLmhpZ2hWYWx1ZSxcbiAgICAgIGZvcmNlQ2hhbmdlOiBub3JtYWxpc2F0aW9uQ2hhbmdlLFxuICAgICAgdXNlckV2ZW50SW5pdGlhdGVkOiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgLy8gUHVibGlzaCBtb2RlbCBjaGFuZ2UgdG8gb3V0cHV0IGV2ZW50IGVtaXR0ZXJzIGFuZCByZWdpc3RlcmVkIGNhbGxiYWNrc1xuICBwcml2YXRlIHB1Ymxpc2hPdXRwdXRNb2RlbENoYW5nZShtb2RlbENoYW5nZTogT3V0cHV0TW9kZWxDaGFuZ2UpOiB2b2lkIHtcbiAgICBjb25zdCBlbWl0T3V0cHV0czogKCkgPT4gdm9pZCA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChtb2RlbENoYW5nZS52YWx1ZSk7XG4gICAgICBpZiAodGhpcy5yYW5nZSkge1xuICAgICAgICB0aGlzLmhpZ2hWYWx1ZUNoYW5nZS5lbWl0KG1vZGVsQ2hhbmdlLmhpZ2hWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5vbkNoYW5nZUNhbGxiYWNrKSkge1xuICAgICAgICBpZiAodGhpcy5yYW5nZSkge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayhbbW9kZWxDaGFuZ2UudmFsdWUsIG1vZGVsQ2hhbmdlLmhpZ2hWYWx1ZV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayhtb2RlbENoYW5nZS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5vblRvdWNoZWRDYWxsYmFjaykpIHtcbiAgICAgICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgICAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrKFttb2RlbENoYW5nZS52YWx1ZSwgbW9kZWxDaGFuZ2UuaGlnaFZhbHVlXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayhtb2RlbENoYW5nZS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKG1vZGVsQ2hhbmdlLnVzZXJFdmVudEluaXRpYXRlZCkge1xuICAgICAgLy8gSWYgdGhpcyBjaGFuZ2Ugd2FzIGluaXRpYXRlZCBieSBhIHVzZXIgZXZlbnQsIHdlIGNhbiBlbWl0IG91dHB1dHMgaW4gdGhlIHNhbWUgdGlja1xuICAgICAgZW1pdE91dHB1dHMoKTtcbiAgICAgIHRoaXMudXNlckNoYW5nZS5lbWl0KHRoaXMuZ2V0Q2hhbmdlQ29udGV4dCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQnV0LCBpZiB0aGUgY2hhbmdlIHdhcyBpbml0YXRlZCBieSBzb21ldGhpbmcgZWxzZSBsaWtlIGEgY2hhbmdlIGluIGlucHV0IGJpbmRpbmdzLFxuICAgICAgLy8gd2UgbmVlZCB0byB3YWl0IHVudGlsIG5leHQgdGljayB0byBlbWl0IHRoZSBvdXRwdXRzIHRvIGtlZXAgQW5ndWxhciBjaGFuZ2UgZGV0ZWN0aW9uIGhhcHB5XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHsgZW1pdE91dHB1dHMoKTsgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpc2VNb2RlbFZhbHVlcyhpbnB1dDogTW9kZWxWYWx1ZXMpOiBNb2RlbFZhbHVlcyB7XG4gICAgY29uc3Qgbm9ybWFsaXNlZElucHV0OiBNb2RlbFZhbHVlcyA9IG5ldyBNb2RlbFZhbHVlcygpO1xuICAgIG5vcm1hbGlzZWRJbnB1dC52YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgIG5vcm1hbGlzZWRJbnB1dC5oaWdoVmFsdWUgPSBpbnB1dC5oaWdoVmFsdWU7XG5cbiAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMuc3RlcHNBcnJheSkpIHtcbiAgICAgIC8vIFdoZW4gdXNpbmcgc3RlcHMgYXJyYXksIG9ubHkgcm91bmQgdG8gbmVhcmVzdCBzdGVwIGluIHRoZSBhcnJheVxuICAgICAgLy8gTm8gb3RoZXIgZW5mb3JjZW1lbnQgY2FuIGJlIGRvbmUsIGFzIHRoZSBzdGVwIGFycmF5IG1heSBiZSBvdXQgb2Ygb3JkZXIsIGFuZCB0aGF0IGlzIHBlcmZlY3RseSBmaW5lXG4gICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5lbmZvcmNlU3RlcHNBcnJheSkge1xuICAgICAgICBjb25zdCB2YWx1ZUluZGV4OiBudW1iZXIgPSBWYWx1ZUhlbHBlci5maW5kU3RlcEluZGV4KG5vcm1hbGlzZWRJbnB1dC52YWx1ZSwgdGhpcy52aWV3T3B0aW9ucy5zdGVwc0FycmF5KTtcbiAgICAgICAgbm9ybWFsaXNlZElucHV0LnZhbHVlID0gdGhpcy52aWV3T3B0aW9ucy5zdGVwc0FycmF5W3ZhbHVlSW5kZXhdLnZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLnJhbmdlKSB7XG4gICAgICAgICAgY29uc3QgaGlnaFZhbHVlSW5kZXg6IG51bWJlciA9IFZhbHVlSGVscGVyLmZpbmRTdGVwSW5kZXgobm9ybWFsaXNlZElucHV0LmhpZ2hWYWx1ZSwgdGhpcy52aWV3T3B0aW9ucy5zdGVwc0FycmF5KTtcbiAgICAgICAgICBub3JtYWxpc2VkSW5wdXQuaGlnaFZhbHVlID0gdGhpcy52aWV3T3B0aW9ucy5zdGVwc0FycmF5W2hpZ2hWYWx1ZUluZGV4XS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbm9ybWFsaXNlZElucHV0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmVuZm9yY2VTdGVwKSB7XG4gICAgICBub3JtYWxpc2VkSW5wdXQudmFsdWUgPSB0aGlzLnJvdW5kU3RlcChub3JtYWxpc2VkSW5wdXQudmFsdWUpO1xuICAgICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgICAgbm9ybWFsaXNlZElucHV0LmhpZ2hWYWx1ZSA9IHRoaXMucm91bmRTdGVwKG5vcm1hbGlzZWRJbnB1dC5oaWdoVmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmVuZm9yY2VSYW5nZSkge1xuICAgICAgbm9ybWFsaXNlZElucHV0LnZhbHVlID0gTWF0aEhlbHBlci5jbGFtcFRvUmFuZ2Uobm9ybWFsaXNlZElucHV0LnZhbHVlLCB0aGlzLnZpZXdPcHRpb25zLmZsb29yLCB0aGlzLnZpZXdPcHRpb25zLmNlaWwpO1xuXG4gICAgICBpZiAodGhpcy5yYW5nZSkge1xuICAgICAgICBub3JtYWxpc2VkSW5wdXQuaGlnaFZhbHVlID0gTWF0aEhlbHBlci5jbGFtcFRvUmFuZ2Uobm9ybWFsaXNlZElucHV0LmhpZ2hWYWx1ZSwgdGhpcy52aWV3T3B0aW9ucy5mbG9vciwgdGhpcy52aWV3T3B0aW9ucy5jZWlsKTtcbiAgICAgIH1cblxuICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgcmFuZ2Ugc2xpZGVyIGludmFyaWFudCAodmFsdWUgPD0gaGlnaFZhbHVlKSBpcyBhbHdheXMgc2F0aXNmaWVkXG4gICAgICBpZiAodGhpcy5yYW5nZSAmJiBpbnB1dC52YWx1ZSA+IGlucHV0LmhpZ2hWYWx1ZSkge1xuICAgICAgICAvLyBXZSBrbm93IHRoYXQgYm90aCB2YWx1ZXMgYXJlIG5vdyBjbGFtcGVkIGNvcnJlY3RseSwgdGhleSBtYXkganVzdCBiZSBpbiB0aGUgd3Jvbmcgb3JkZXJcbiAgICAgICAgLy8gU28gdGhlIGVhc3kgc29sdXRpb24gaXMgdG8gc3dhcCB0aGVtLi4uIGV4Y2VwdCBzd2FwcGluZyBpcyBzb21ldGltZXMgZGlzYWJsZWQgaW4gb3B0aW9ucywgc28gd2UgbWFrZSB0aGUgdHdvIHZhbHVlcyB0aGUgc2FtZVxuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5ub1N3aXRjaGluZykge1xuICAgICAgICAgIG5vcm1hbGlzZWRJbnB1dC52YWx1ZSA9IG5vcm1hbGlzZWRJbnB1dC5oaWdoVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdGVtcFZhbHVlOiBudW1iZXIgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgICBub3JtYWxpc2VkSW5wdXQudmFsdWUgPSBpbnB1dC5oaWdoVmFsdWU7XG4gICAgICAgICAgbm9ybWFsaXNlZElucHV0LmhpZ2hWYWx1ZSA9IHRlbXBWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpc2VkSW5wdXQ7XG4gIH1cblxuICBwcml2YXRlIHJlbm9ybWFsaXNlTW9kZWxWYWx1ZXMoKTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXNNb2RlbFZhbHVlczogTW9kZWxWYWx1ZXMgPSB7XG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGhpZ2hWYWx1ZTogdGhpcy5oaWdoVmFsdWVcbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGlzZWRNb2RlbFZhbHVlczogTW9kZWxWYWx1ZXMgPSB0aGlzLm5vcm1hbGlzZU1vZGVsVmFsdWVzKHByZXZpb3VzTW9kZWxWYWx1ZXMpO1xuICAgIGlmICghTW9kZWxWYWx1ZXMuY29tcGFyZShub3JtYWxpc2VkTW9kZWxWYWx1ZXMsIHByZXZpb3VzTW9kZWxWYWx1ZXMpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbm9ybWFsaXNlZE1vZGVsVmFsdWVzLnZhbHVlO1xuICAgICAgdGhpcy5oaWdoVmFsdWUgPSBub3JtYWxpc2VkTW9kZWxWYWx1ZXMuaGlnaFZhbHVlO1xuXG4gICAgICB0aGlzLm91dHB1dE1vZGVsQ2hhbmdlU3ViamVjdC5uZXh0KHtcbiAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgIGhpZ2hWYWx1ZTogdGhpcy5oaWdoVmFsdWUsXG4gICAgICAgIGZvcmNlQ2hhbmdlOiB0cnVlLFxuICAgICAgICB1c2VyRXZlbnRJbml0aWF0ZWQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uQ2hhbmdlT3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaW5pdEhhc1J1bikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzSW5wdXRFdmVudHNJbnRlcnZhbDogbnVtYmVyID0gdGhpcy52aWV3T3B0aW9ucy5pbnB1dEV2ZW50c0ludGVydmFsO1xuICAgIGNvbnN0IHByZXZpb3VzT3V0cHV0RXZlbnRzSW50ZXJ2YWw6IG51bWJlciA9IHRoaXMudmlld09wdGlvbnMub3V0cHV0RXZlbnRzSW50ZXJ2YWw7XG5cbiAgICBjb25zdCBwcmV2aW91c09wdGlvbnNJbmZsdWVuY2luZ0V2ZW50QmluZGluZ3M6IGJvb2xlYW5bXSA9IHRoaXMuZ2V0T3B0aW9uc0luZmx1ZW5jaW5nRXZlbnRCaW5kaW5ncyh0aGlzLnZpZXdPcHRpb25zKTtcblxuICAgIHRoaXMuYXBwbHlPcHRpb25zKCk7XG5cbiAgICBjb25zdCBuZXdPcHRpb25zSW5mbHVlbmNpbmdFdmVudEJpbmRpbmdzOiBib29sZWFuW10gPSB0aGlzLmdldE9wdGlvbnNJbmZsdWVuY2luZ0V2ZW50QmluZGluZ3ModGhpcy52aWV3T3B0aW9ucyk7XG4gICAgLy8gQXZvaWQgcmUtYmluZGluZyBldmVudHMgaW4gY2FzZSBub3RoaW5nIGNoYW5nZXMgdGhhdCBjYW4gaW5mbHVlbmNlIGl0XG4gICAgLy8gSXQgbWFrZXMgaXQgcG9zc2libGUgdG8gY2hhbmdlIG9wdGlvbnMgd2hpbGUgZHJhZ2dpbmcgdGhlIHNsaWRlclxuICAgIGNvbnN0IHJlYmluZEV2ZW50czogYm9vbGVhbiA9ICFWYWx1ZUhlbHBlci5hcmVBcnJheXNFcXVhbChwcmV2aW91c09wdGlvbnNJbmZsdWVuY2luZ0V2ZW50QmluZGluZ3MsIG5ld09wdGlvbnNJbmZsdWVuY2luZ0V2ZW50QmluZGluZ3MpO1xuXG4gICAgaWYgKHByZXZpb3VzSW5wdXRFdmVudHNJbnRlcnZhbCAhPT0gdGhpcy52aWV3T3B0aW9ucy5pbnB1dEV2ZW50c0ludGVydmFsKSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlSW5wdXRNb2RlbENoYW5nZVN1YmplY3QoKTtcbiAgICAgIHRoaXMuc3Vic2NyaWJlSW5wdXRNb2RlbENoYW5nZVN1YmplY3QodGhpcy52aWV3T3B0aW9ucy5pbnB1dEV2ZW50c0ludGVydmFsKTtcbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNPdXRwdXRFdmVudHNJbnRlcnZhbCAhPT0gdGhpcy52aWV3T3B0aW9ucy5vdXRwdXRFdmVudHNJbnRlcnZhbCkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZUlucHV0TW9kZWxDaGFuZ2VTdWJqZWN0KCk7XG4gICAgICB0aGlzLnN1YnNjcmliZUlucHV0TW9kZWxDaGFuZ2VTdWJqZWN0KHRoaXMudmlld09wdGlvbnMub3V0cHV0RXZlbnRzSW50ZXJ2YWwpO1xuICAgIH1cblxuICAgIC8vIFdpdGggbmV3IG9wdGlvbnMsIHdlIG5lZWQgdG8gcmUtbm9ybWFsaXNlIG1vZGVsIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICB0aGlzLnJlbm9ybWFsaXNlTW9kZWxWYWx1ZXMoKTtcblxuICAgIHRoaXMudmlld0xvd1ZhbHVlID0gdGhpcy5tb2RlbFZhbHVlVG9WaWV3VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgIHRoaXMudmlld0hpZ2hWYWx1ZSA9IHRoaXMubW9kZWxWYWx1ZVRvVmlld1ZhbHVlKHRoaXMuaGlnaFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aWV3SGlnaFZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0U2xpZGVyKHJlYmluZEV2ZW50cyk7XG4gIH1cblxuICAvLyBSZWFkIHRoZSB1c2VyIG9wdGlvbnMgYW5kIGFwcGx5IHRoZW0gdG8gdGhlIHNsaWRlciBtb2RlbFxuICBwcml2YXRlIGFwcGx5T3B0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdPcHRpb25zID0gbmV3IE9wdGlvbnMoKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMudmlld09wdGlvbnMsIHRoaXMub3B0aW9ucyk7XG5cbiAgICB0aGlzLnZpZXdPcHRpb25zLmRyYWdnYWJsZVJhbmdlID0gdGhpcy5yYW5nZSAmJiB0aGlzLnZpZXdPcHRpb25zLmRyYWdnYWJsZVJhbmdlO1xuICAgIHRoaXMudmlld09wdGlvbnMuZHJhZ2dhYmxlUmFuZ2VPbmx5ID0gdGhpcy5yYW5nZSAmJiB0aGlzLnZpZXdPcHRpb25zLmRyYWdnYWJsZVJhbmdlT25seTtcbiAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kcmFnZ2FibGVSYW5nZU9ubHkpIHtcbiAgICAgIHRoaXMudmlld09wdGlvbnMuZHJhZ2dhYmxlUmFuZ2UgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMudmlld09wdGlvbnMuc2hvd1RpY2tzID0gdGhpcy52aWV3T3B0aW9ucy5zaG93VGlja3MgfHxcbiAgICAgIHRoaXMudmlld09wdGlvbnMuc2hvd1RpY2tzVmFsdWVzIHx8XG4gICAgICAhVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52aWV3T3B0aW9ucy50aWNrc0FycmF5KTtcbiAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5zaG93VGlja3MgJiZcbiAgICAgICAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMudGlja1N0ZXApIHx8ICFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZpZXdPcHRpb25zLnRpY2tzQXJyYXkpKSkge1xuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVUaWNrcyA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy52aWV3T3B0aW9ucy5zaG93U2VsZWN0aW9uQmFyID0gdGhpcy52aWV3T3B0aW9ucy5zaG93U2VsZWN0aW9uQmFyIHx8XG4gICAgICB0aGlzLnZpZXdPcHRpb25zLnNob3dTZWxlY3Rpb25CYXJFbmQgfHxcbiAgICAgICFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZpZXdPcHRpb25zLnNob3dTZWxlY3Rpb25CYXJGcm9tVmFsdWUpO1xuXG4gICAgaWYgKCFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZpZXdPcHRpb25zLnN0ZXBzQXJyYXkpKSB7XG4gICAgICB0aGlzLmFwcGx5U3RlcHNBcnJheU9wdGlvbnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcHBseUZsb29yQ2VpbE9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBpZiAoVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52aWV3T3B0aW9ucy5jb21iaW5lTGFiZWxzKSkge1xuICAgICAgdGhpcy52aWV3T3B0aW9ucy5jb21iaW5lTGFiZWxzID0gKG1pblZhbHVlOiBzdHJpbmcsIG1heFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgICByZXR1cm4gbWluVmFsdWUgKyAnIC0gJyArIG1heFZhbHVlO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5sb2dTY2FsZSAmJiB0aGlzLnZpZXdPcHRpb25zLmZsb29yID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2FuXFwndCB1c2UgZmxvb3I9MCB3aXRoIGxvZ2FyaXRobWljIHNjYWxlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVN0ZXBzQXJyYXlPcHRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMudmlld09wdGlvbnMuZmxvb3IgPSAwO1xuICAgIHRoaXMudmlld09wdGlvbnMuY2VpbCA9IHRoaXMudmlld09wdGlvbnMuc3RlcHNBcnJheS5sZW5ndGggLSAxO1xuICAgIHRoaXMudmlld09wdGlvbnMuc3RlcCA9IDE7XG5cbiAgICBpZiAoVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGUpKSB7XG4gICAgICB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZSA9IChtb2RlbFZhbHVlOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5iaW5kSW5kZXhGb3JTdGVwc0FycmF5KSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzLmdldFN0ZXBWYWx1ZShtb2RlbFZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFN0cmluZyhtb2RlbFZhbHVlKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUZsb29yQ2VpbE9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKFZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMuc3RlcCkpIHtcbiAgICAgIHRoaXMudmlld09wdGlvbnMuc3RlcCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlld09wdGlvbnMuc3RlcCA9ICt0aGlzLnZpZXdPcHRpb25zLnN0ZXA7XG4gICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5zdGVwIDw9IDApIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5zdGVwID0gMTtcbiAgICAgfVxuICAgIH1cblxuICAgIGlmIChWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZpZXdPcHRpb25zLmNlaWwpIHx8XG4gICAgICAgIFZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMuZmxvb3IpKSB7XG4gICAgICB0aHJvdyBFcnJvcignZmxvb3IgYW5kIGNlaWwgb3B0aW9ucyBtdXN0IGJlIHN1cHBsaWVkJyk7XG4gICAgfVxuICAgIHRoaXMudmlld09wdGlvbnMuY2VpbCA9ICt0aGlzLnZpZXdPcHRpb25zLmNlaWw7XG4gICAgdGhpcy52aWV3T3B0aW9ucy5mbG9vciA9ICt0aGlzLnZpZXdPcHRpb25zLmZsb29yO1xuXG4gICAgaWYgKFZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlKSkge1xuICAgICAgdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGUgPSAodmFsdWU6IG51bWJlcik6IHN0cmluZyA9PiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlc2V0cyBzbGlkZXJcbiAgcHJpdmF0ZSByZXNldFNsaWRlcihyZWJpbmRFdmVudHM6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5tYW5hZ2VFbGVtZW50c1N0eWxlKCk7XG4gICAgdGhpcy5hZGRBY2Nlc3NpYmlsaXR5KCk7XG4gICAgdGhpcy51cGRhdGVDZWlsTGFiZWwoKTtcbiAgICB0aGlzLnVwZGF0ZUZsb29yTGFiZWwoKTtcbiAgICBpZiAocmViaW5kRXZlbnRzKSB7XG4gICAgICB0aGlzLnVuYmluZEV2ZW50cygpO1xuICAgICAgdGhpcy5tYW5hZ2VFdmVudHNCaW5kaW5ncygpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICB0aGlzLmNhbGN1bGF0ZVZpZXdEaW1lbnNpb25zKCk7XG4gICAgdGhpcy5yZWZvY3VzUG9pbnRlcklmTmVlZGVkKCk7XG4gIH1cblxuICAvLyBTZXRzIGZvY3VzIG9uIHRoZSBzcGVjaWZpZWQgcG9pbnRlclxuICBwcml2YXRlIGZvY3VzUG9pbnRlcihwb2ludGVyVHlwZTogUG9pbnRlclR5cGUpOiB2b2lkIHtcbiAgICAvLyBJZiBub3Qgc3VwcGxpZWQsIHVzZSBtaW4gcG9pbnRlciBhcyBkZWZhdWx0XG4gICAgaWYgKHBvaW50ZXJUeXBlICE9PSBQb2ludGVyVHlwZS5NaW4gJiYgcG9pbnRlclR5cGUgIT09IFBvaW50ZXJUeXBlLk1heCkge1xuICAgICAgcG9pbnRlclR5cGUgPSBQb2ludGVyVHlwZS5NaW47XG4gICAgfVxuXG4gICAgaWYgKHBvaW50ZXJUeXBlID09PSBQb2ludGVyVHlwZS5NaW4pIHtcbiAgICAgIHRoaXMubWluSGFuZGxlRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5yYW5nZSAmJiBwb2ludGVyVHlwZSA9PT0gUG9pbnRlclR5cGUuTWF4KSB7XG4gICAgICB0aGlzLm1heEhhbmRsZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlZm9jdXNQb2ludGVySWZOZWVkZWQoKTogdm9pZCB7XG4gICAgaWYgKCFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLmN1cnJlbnRGb2N1c1BvaW50ZXIpKSB7XG4gICAgICB0aGlzLm9uUG9pbnRlckZvY3VzKHRoaXMuY3VycmVudEZvY3VzUG9pbnRlcik7XG4gICAgICBjb25zdCBlbGVtZW50OiBTbGlkZXJIYW5kbGVEaXJlY3RpdmUgPSB0aGlzLmdldFBvaW50ZXJFbGVtZW50KHRoaXMuY3VycmVudEZvY3VzUG9pbnRlcik7XG4gICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIGVhY2ggZWxlbWVudHMgc3R5bGUgYmFzZWQgb24gb3B0aW9uc1xuICBwcml2YXRlIG1hbmFnZUVsZW1lbnRzU3R5bGUoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVTY2FsZSgpO1xuXG4gICAgdGhpcy5mbG9vckxhYmVsRWxlbWVudC5zZXRBbHdheXNIaWRlKHRoaXMudmlld09wdGlvbnMuc2hvd1RpY2tzVmFsdWVzIHx8IHRoaXMudmlld09wdGlvbnMuaGlkZUxpbWl0TGFiZWxzKTtcbiAgICB0aGlzLmNlaWxMYWJlbEVsZW1lbnQuc2V0QWx3YXlzSGlkZSh0aGlzLnZpZXdPcHRpb25zLnNob3dUaWNrc1ZhbHVlcyB8fCB0aGlzLnZpZXdPcHRpb25zLmhpZGVMaW1pdExhYmVscyk7XG5cbiAgICBjb25zdCBoaWRlTGFiZWxzRm9yVGlja3M6IGJvb2xlYW4gPSB0aGlzLnZpZXdPcHRpb25zLnNob3dUaWNrc1ZhbHVlcyAmJiAhdGhpcy5pbnRlcm1lZGlhdGVUaWNrcztcbiAgICB0aGlzLm1pbkhhbmRsZUxhYmVsRWxlbWVudC5zZXRBbHdheXNIaWRlKGhpZGVMYWJlbHNGb3JUaWNrcyB8fCB0aGlzLnZpZXdPcHRpb25zLmhpZGVQb2ludGVyTGFiZWxzKTtcbiAgICB0aGlzLm1heEhhbmRsZUxhYmVsRWxlbWVudC5zZXRBbHdheXNIaWRlKGhpZGVMYWJlbHNGb3JUaWNrcyB8fCAhdGhpcy5yYW5nZSB8fCB0aGlzLnZpZXdPcHRpb25zLmhpZGVQb2ludGVyTGFiZWxzKTtcbiAgICB0aGlzLmNvbWJpbmVkTGFiZWxFbGVtZW50LnNldEFsd2F5c0hpZGUoaGlkZUxhYmVsc0ZvclRpY2tzIHx8ICF0aGlzLnJhbmdlIHx8IHRoaXMudmlld09wdGlvbnMuaGlkZVBvaW50ZXJMYWJlbHMpO1xuICAgIHRoaXMuc2VsZWN0aW9uQmFyRWxlbWVudC5zZXRBbHdheXNIaWRlKCF0aGlzLnJhbmdlICYmICF0aGlzLnZpZXdPcHRpb25zLnNob3dTZWxlY3Rpb25CYXIpO1xuICAgIHRoaXMubGVmdE91dGVyU2VsZWN0aW9uQmFyRWxlbWVudC5zZXRBbHdheXNIaWRlKCF0aGlzLnJhbmdlIHx8ICF0aGlzLnZpZXdPcHRpb25zLnNob3dPdXRlclNlbGVjdGlvbkJhcnMpO1xuICAgIHRoaXMucmlnaHRPdXRlclNlbGVjdGlvbkJhckVsZW1lbnQuc2V0QWx3YXlzSGlkZSghdGhpcy5yYW5nZSB8fCAhdGhpcy52aWV3T3B0aW9ucy5zaG93T3V0ZXJTZWxlY3Rpb25CYXJzKTtcblxuICAgIHRoaXMuZnVsbEJhclRyYW5zcGFyZW50Q2xhc3MgPSB0aGlzLnJhbmdlICYmIHRoaXMudmlld09wdGlvbnMuc2hvd091dGVyU2VsZWN0aW9uQmFycztcbiAgICB0aGlzLnNlbGVjdGlvbkJhckRyYWdnYWJsZUNsYXNzID0gdGhpcy52aWV3T3B0aW9ucy5kcmFnZ2FibGVSYW5nZSAmJiAhdGhpcy52aWV3T3B0aW9ucy5vbmx5QmluZEhhbmRsZXM7XG4gICAgdGhpcy50aWNrc1VuZGVyVmFsdWVzQ2xhc3MgPSB0aGlzLmludGVybWVkaWF0ZVRpY2tzICYmIHRoaXMub3B0aW9ucy5zaG93VGlja3NWYWx1ZXM7XG5cbiAgICBpZiAodGhpcy5zbGlkZXJFbGVtZW50VmVydGljYWxDbGFzcyAhPT0gdGhpcy52aWV3T3B0aW9ucy52ZXJ0aWNhbCkge1xuICAgICAgdGhpcy51cGRhdGVWZXJ0aWNhbFN0YXRlKCk7XG4gICAgICAvLyBUaGUgYWJvdmUgY2hhbmdlIGluIGhvc3QgY29tcG9uZW50IGNsYXNzIHdpbGwgbm90IGJlIGFwcGxpZWQgdW50aWwgdGhlIGVuZCBvZiB0aGlzIGN5Y2xlXG4gICAgICAvLyBIb3dldmVyLCBmdW5jdGlvbnMgY2FsY3VsYXRpbmcgdGhlIHNsaWRlciBwb3NpdGlvbiBleHBlY3QgdGhlIHNsaWRlciB0byBiZSBhbHJlYWR5IHN0eWxlZCBhcyB2ZXJ0aWNhbFxuICAgICAgLy8gU28gYXMgYSB3b3JrYXJvdW5kLCB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBzbGlkZXIgb25jZSBhZ2FpbiB0byBjb21wdXRlIHRoZSBjb3JyZWN0IHZhbHVlc1xuICAgICAgc2V0VGltZW91dCgoKTogdm9pZCA9PiB7IHRoaXMucmVzZXRTbGlkZXIoKTsgfSk7XG4gICAgfVxuXG4gICAgLy8gQ2hhbmdpbmcgYW5pbWF0ZSBjbGFzcyBtYXkgaW50ZXJmZXJlIHdpdGggc2xpZGVyIHJlc2V0L2luaXRpYWxpc2F0aW9uLCBzbyB3ZSBzaG91bGQgc2V0IGl0IHNlcGFyYXRlbHksXG4gICAgLy8gYWZ0ZXIgYWxsIGlzIHByb3Blcmx5IHNldCB1cFxuICAgIGlmICh0aGlzLnNsaWRlckVsZW1lbnRBbmltYXRlQ2xhc3MgIT09IHRoaXMudmlld09wdGlvbnMuYW5pbWF0ZSkge1xuICAgICAgc2V0VGltZW91dCgoKTogdm9pZCA9PiB7IHRoaXMuc2xpZGVyRWxlbWVudEFuaW1hdGVDbGFzcyA9IHRoaXMudmlld09wdGlvbnMuYW5pbWF0ZTsgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gTWFuYWdlIHRoZSBldmVudHMgYmluZGluZ3MgYmFzZWQgb24gcmVhZE9ubHkgYW5kIGRpc2FibGVkIG9wdGlvbnNcbiAgcHJpdmF0ZSBtYW5hZ2VFdmVudHNCaW5kaW5ncygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kaXNhYmxlZCB8fCB0aGlzLnZpZXdPcHRpb25zLnJlYWRPbmx5KSB7XG4gICAgICB0aGlzLnVuYmluZEV2ZW50cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJpbmRFdmVudHMoKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgdGhlIGRpc2FibGVkIHN0YXRlIGJhc2VkIG9uIGRpc2FibGVkIG9wdGlvblxuICBwcml2YXRlIHVwZGF0ZURpc2FibGVkU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5zbGlkZXJFbGVtZW50RGlzYWJsZWRBdHRyID0gdGhpcy52aWV3T3B0aW9ucy5kaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiBudWxsO1xuICB9XG5cbiAgLy8gU2V0IHZlcnRpY2FsIHN0YXRlIGJhc2VkIG9uIHZlcnRpY2FsIG9wdGlvblxuICBwcml2YXRlIHVwZGF0ZVZlcnRpY2FsU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5zbGlkZXJFbGVtZW50VmVydGljYWxDbGFzcyA9IHRoaXMudmlld09wdGlvbnMudmVydGljYWw7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuZ2V0QWxsU2xpZGVyRWxlbWVudHMoKSkge1xuICAgICAgLy8gVGhpcyBpcyBhbHNvIGNhbGxlZCBiZWZvcmUgbmdBZnRlckluaXQsIHNvIG5lZWQgdG8gY2hlY2sgdGhhdCB2aWV3IGNoaWxkIGJpbmRpbmdzIHdvcmtcbiAgICAgIGlmICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQoZWxlbWVudCkpIHtcbiAgICAgICAgZWxlbWVudC5zZXRWZXJ0aWNhbCh0aGlzLnZpZXdPcHRpb25zLnZlcnRpY2FsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNjYWxlKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLmdldEFsbFNsaWRlckVsZW1lbnRzKCkpIHtcbiAgICAgIGVsZW1lbnQuc2V0U2NhbGUodGhpcy52aWV3T3B0aW9ucy5zY2FsZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRBbGxTbGlkZXJFbGVtZW50cygpOiBTbGlkZXJFbGVtZW50RGlyZWN0aXZlW10ge1xuICAgIHJldHVybiBbdGhpcy5sZWZ0T3V0ZXJTZWxlY3Rpb25CYXJFbGVtZW50LFxuICAgICAgdGhpcy5yaWdodE91dGVyU2VsZWN0aW9uQmFyRWxlbWVudCxcbiAgICAgIHRoaXMuZnVsbEJhckVsZW1lbnQsXG4gICAgICB0aGlzLnNlbGVjdGlvbkJhckVsZW1lbnQsXG4gICAgICB0aGlzLm1pbkhhbmRsZUVsZW1lbnQsXG4gICAgICB0aGlzLm1heEhhbmRsZUVsZW1lbnQsXG4gICAgICB0aGlzLmZsb29yTGFiZWxFbGVtZW50LFxuICAgICAgdGhpcy5jZWlsTGFiZWxFbGVtZW50LFxuICAgICAgdGhpcy5taW5IYW5kbGVMYWJlbEVsZW1lbnQsXG4gICAgICB0aGlzLm1heEhhbmRsZUxhYmVsRWxlbWVudCxcbiAgICAgIHRoaXMuY29tYmluZWRMYWJlbEVsZW1lbnQsXG4gICAgICB0aGlzLnRpY2tzRWxlbWVudFxuICAgIF07XG4gIH1cblxuICAvLyBJbml0aWFsaXplIHNsaWRlciBoYW5kbGVzIHBvc2l0aW9ucyBhbmQgbGFiZWxzXG4gIC8vIFJ1biBvbmx5IG9uY2UgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCBldmVyeSB0aW1lIHZpZXcgcG9ydCBjaGFuZ2VzIHNpemVcbiAgcHJpdmF0ZSBpbml0SGFuZGxlcygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUxvd0hhbmRsZSh0aGlzLnZhbHVlVG9Qb3NpdGlvbih0aGlzLnZpZXdMb3dWYWx1ZSkpO1xuXG4gICAgLypcbiAgIHRoZSBvcmRlciBoZXJlIGlzIGltcG9ydGFudCBzaW5jZSB0aGUgc2VsZWN0aW9uIGJhciBzaG91bGQgYmVcbiAgIHVwZGF0ZWQgYWZ0ZXIgdGhlIGhpZ2ggaGFuZGxlIGJ1dCBiZWZvcmUgdGhlIGNvbWJpbmVkIGxhYmVsXG4gICAqL1xuICAgIGlmICh0aGlzLnJhbmdlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUhpZ2hIYW5kbGUodGhpcy52YWx1ZVRvUG9zaXRpb24odGhpcy52aWV3SGlnaFZhbHVlKSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25CYXIoKTtcblxuICAgIGlmICh0aGlzLnJhbmdlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbWJpbmVkTGFiZWwoKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRpY2tzU2NhbGUoKTtcbiAgfVxuXG4gIC8vIEFkZHMgYWNjZXNzaWJpbGl0eSBhdHRyaWJ1dGVzLCBydW4gb25seSBvbmNlIGR1cmluZyBpbml0aWFsaXphdGlvblxuICBwcml2YXRlIGFkZEFjY2Vzc2liaWxpdHkoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVBcmlhQXR0cmlidXRlcygpO1xuXG4gICAgdGhpcy5taW5IYW5kbGVFbGVtZW50LnJvbGUgPSAnc2xpZGVyJztcblxuICAgIGlmICggdGhpcy52aWV3T3B0aW9ucy5rZXlib2FyZFN1cHBvcnQgJiZcbiAgICAgICEodGhpcy52aWV3T3B0aW9ucy5yZWFkT25seSB8fCB0aGlzLnZpZXdPcHRpb25zLmRpc2FibGVkKSApIHtcbiAgICAgIHRoaXMubWluSGFuZGxlRWxlbWVudC50YWJpbmRleCA9ICcwJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5taW5IYW5kbGVFbGVtZW50LnRhYmluZGV4ID0gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5taW5IYW5kbGVFbGVtZW50LmFyaWFPcmllbnRhdGlvbiA9IHRoaXMudmlld09wdGlvbnMudmVydGljYWwgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnO1xuXG4gICAgaWYgKCFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZpZXdPcHRpb25zLmFyaWFMYWJlbCkpIHtcbiAgICAgIHRoaXMubWluSGFuZGxlRWxlbWVudC5hcmlhTGFiZWwgPSB0aGlzLnZpZXdPcHRpb25zLmFyaWFMYWJlbDtcbiAgICB9IGVsc2UgaWYgKCFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZpZXdPcHRpb25zLmFyaWFMYWJlbGxlZEJ5KSkge1xuICAgICAgdGhpcy5taW5IYW5kbGVFbGVtZW50LmFyaWFMYWJlbGxlZEJ5ID0gdGhpcy52aWV3T3B0aW9ucy5hcmlhTGFiZWxsZWRCeTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yYW5nZSkge1xuICAgICAgdGhpcy5tYXhIYW5kbGVFbGVtZW50LnJvbGUgPSAnc2xpZGVyJztcblxuICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMua2V5Ym9hcmRTdXBwb3J0ICYmXG4gICAgICAgICEodGhpcy52aWV3T3B0aW9ucy5yZWFkT25seSB8fCB0aGlzLnZpZXdPcHRpb25zLmRpc2FibGVkKSkge1xuICAgICAgICB0aGlzLm1heEhhbmRsZUVsZW1lbnQudGFiaW5kZXggPSAnMCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1heEhhbmRsZUVsZW1lbnQudGFiaW5kZXggPSAnJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYXhIYW5kbGVFbGVtZW50LmFyaWFPcmllbnRhdGlvbiA9IHRoaXMudmlld09wdGlvbnMudmVydGljYWwgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnO1xuXG4gICAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMuYXJpYUxhYmVsSGlnaCkpIHtcbiAgICAgICAgdGhpcy5tYXhIYW5kbGVFbGVtZW50LmFyaWFMYWJlbCA9IHRoaXMudmlld09wdGlvbnMuYXJpYUxhYmVsSGlnaDtcbiAgICAgIH0gZWxzZSBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMuYXJpYUxhYmVsbGVkQnlIaWdoKSkge1xuICAgICAgICB0aGlzLm1heEhhbmRsZUVsZW1lbnQuYXJpYUxhYmVsbGVkQnkgPSB0aGlzLnZpZXdPcHRpb25zLmFyaWFMYWJlbGxlZEJ5SGlnaDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGVzIGFyaWEgYXR0cmlidXRlcyBhY2NvcmRpbmcgdG8gY3VycmVudCB2YWx1ZXNcbiAgcHJpdmF0ZSB1cGRhdGVBcmlhQXR0cmlidXRlcygpOiB2b2lkIHtcbiAgICB0aGlzLm1pbkhhbmRsZUVsZW1lbnQuYXJpYVZhbHVlTm93ID0gKCt0aGlzLnZhbHVlKS50b1N0cmluZygpO1xuICAgIHRoaXMubWluSGFuZGxlRWxlbWVudC5hcmlhVmFsdWVUZXh0ID0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGUoK3RoaXMudmFsdWUsIExhYmVsVHlwZS5Mb3cpO1xuICAgIHRoaXMubWluSGFuZGxlRWxlbWVudC5hcmlhVmFsdWVNaW4gPSB0aGlzLnZpZXdPcHRpb25zLmZsb29yLnRvU3RyaW5nKCk7XG4gICAgdGhpcy5taW5IYW5kbGVFbGVtZW50LmFyaWFWYWx1ZU1heCA9IHRoaXMudmlld09wdGlvbnMuY2VpbC50b1N0cmluZygpO1xuXG4gICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgIHRoaXMubWF4SGFuZGxlRWxlbWVudC5hcmlhVmFsdWVOb3cgPSAoK3RoaXMuaGlnaFZhbHVlKS50b1N0cmluZygpO1xuICAgICAgdGhpcy5tYXhIYW5kbGVFbGVtZW50LmFyaWFWYWx1ZVRleHQgPSB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZSgrdGhpcy5oaWdoVmFsdWUsIExhYmVsVHlwZS5IaWdoKTtcbiAgICAgIHRoaXMubWF4SGFuZGxlRWxlbWVudC5hcmlhVmFsdWVNaW4gPSB0aGlzLnZpZXdPcHRpb25zLmZsb29yLnRvU3RyaW5nKCk7XG4gICAgICB0aGlzLm1heEhhbmRsZUVsZW1lbnQuYXJpYVZhbHVlTWF4ID0gdGhpcy52aWV3T3B0aW9ucy5jZWlsLnRvU3RyaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIGRpbWVuc2lvbnMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHZpZXcgcG9ydCBzaXplXG4gIC8vIFJ1biBvbmNlIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgZXZlcnkgdGltZSB2aWV3IHBvcnQgY2hhbmdlcyBzaXplLlxuICBwcml2YXRlIGNhbGN1bGF0ZVZpZXdEaW1lbnNpb25zKCk6IHZvaWQge1xuICAgIGlmICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52aWV3T3B0aW9ucy5oYW5kbGVEaW1lbnNpb24pKSB7XG4gICAgICB0aGlzLm1pbkhhbmRsZUVsZW1lbnQuc2V0RGltZW5zaW9uKHRoaXMudmlld09wdGlvbnMuaGFuZGxlRGltZW5zaW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5taW5IYW5kbGVFbGVtZW50LmNhbGN1bGF0ZURpbWVuc2lvbigpO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZVdpZHRoOiBudW1iZXIgPSB0aGlzLm1pbkhhbmRsZUVsZW1lbnQuZGltZW5zaW9uO1xuXG4gICAgdGhpcy5oYW5kbGVIYWxmRGltZW5zaW9uID0gaGFuZGxlV2lkdGggLyAyO1xuXG4gICAgaWYgKCFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZpZXdPcHRpb25zLmJhckRpbWVuc2lvbikpIHtcbiAgICAgIHRoaXMuZnVsbEJhckVsZW1lbnQuc2V0RGltZW5zaW9uKHRoaXMudmlld09wdGlvbnMuYmFyRGltZW5zaW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mdWxsQmFyRWxlbWVudC5jYWxjdWxhdGVEaW1lbnNpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLm1heEhhbmRsZVBvc2l0aW9uID0gdGhpcy5mdWxsQmFyRWxlbWVudC5kaW1lbnNpb24gLSBoYW5kbGVXaWR0aDtcblxuICAgIGlmICh0aGlzLmluaXRIYXNSdW4pIHtcbiAgICAgIHRoaXMudXBkYXRlRmxvb3JMYWJlbCgpO1xuICAgICAgdGhpcy51cGRhdGVDZWlsTGFiZWwoKTtcbiAgICAgIHRoaXMuaW5pdEhhbmRsZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZVZpZXdEaW1lbnNpb25zQW5kRGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNhbGN1bGF0ZVZpZXdEaW1lbnNpb25zKCk7XG4gICAgaWYgKCF0aGlzLmlzUmVmRGVzdHJveWVkKCkpIHtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgc2xpZGVyIHJlZmVyZW5jZSBpcyBhbHJlYWR5IGRlc3Ryb3llZFxuICAgKiBAcmV0dXJucyBib29sZWFuIC0gdHJ1ZSBpZiByZWYgaXMgZGVzdHJveWVkXG4gICAqL1xuICBwcml2YXRlIGlzUmVmRGVzdHJveWVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNoYW5nZURldGVjdGlvblJlZlsnZGVzdHJveWVkJ107XG4gIH1cblxuICAvLyBVcGRhdGUgdGhlIHRpY2tzIHBvc2l0aW9uXG4gIHByaXZhdGUgdXBkYXRlVGlja3NTY2FsZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudmlld09wdGlvbnMuc2hvd1RpY2tzKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5zbGlkZXJFbGVtZW50V2l0aExlZ2VuZENsYXNzID0gZmFsc2U7IH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpY2tzQXJyYXk6IG51bWJlcltdID0gIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMudGlja3NBcnJheSlcbiAgICAgID8gdGhpcy52aWV3T3B0aW9ucy50aWNrc0FycmF5XG4gICAgICA6IHRoaXMuZ2V0VGlja3NBcnJheSgpO1xuICAgIGNvbnN0IHRyYW5zbGF0ZTogc3RyaW5nID0gdGhpcy52aWV3T3B0aW9ucy52ZXJ0aWNhbCA/ICd0cmFuc2xhdGVZJyA6ICd0cmFuc2xhdGVYJztcblxuICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLnJpZ2h0VG9MZWZ0KSB7XG4gICAgICB0aWNrc0FycmF5LnJldmVyc2UoKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aWNrVmFsdWVTdGVwOiBudW1iZXIgPSAhVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52aWV3T3B0aW9ucy50aWNrVmFsdWVTdGVwKSA/IHRoaXMudmlld09wdGlvbnMudGlja1ZhbHVlU3RlcCA6XG4gICAgICAgICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52aWV3T3B0aW9ucy50aWNrU3RlcCkgPyB0aGlzLnZpZXdPcHRpb25zLnRpY2tTdGVwIDogdGhpcy52aWV3T3B0aW9ucy5zdGVwKTtcblxuICAgIGxldCBoYXNBdExlYXN0T25lTGVnZW5kOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjb25zdCBuZXdUaWNrczogVGlja1tdID0gdGlja3NBcnJheS5tYXAoKHZhbHVlOiBudW1iZXIpOiBUaWNrID0+IHtcbiAgICAgIGxldCBwb3NpdGlvbjogbnVtYmVyID0gdGhpcy52YWx1ZVRvUG9zaXRpb24odmFsdWUpO1xuXG4gICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy52ZXJ0aWNhbCkge1xuICAgICAgICBwb3NpdGlvbiA9IHRoaXMubWF4SGFuZGxlUG9zaXRpb24gLSBwb3NpdGlvbjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHJhbnNsYXRpb246IHN0cmluZyA9IHRyYW5zbGF0ZSArICcoJyArIE1hdGgucm91bmQocG9zaXRpb24pICsgJ3B4KSc7XG4gICAgICBjb25zdCB0aWNrOiBUaWNrID0gbmV3IFRpY2soKTtcbiAgICAgIHRpY2suc2VsZWN0ZWQgPSB0aGlzLmlzVGlja1NlbGVjdGVkKHZhbHVlKTtcbiAgICAgIHRpY2suc3R5bGUgPSB7XG4gICAgICAgICctd2Via2l0LXRyYW5zZm9ybSc6IHRyYW5zbGF0aW9uLFxuICAgICAgICAnLW1vei10cmFuc2Zvcm0nOiB0cmFuc2xhdGlvbixcbiAgICAgICAgJy1vLXRyYW5zZm9ybSc6IHRyYW5zbGF0aW9uLFxuICAgICAgICAnLW1zLXRyYW5zZm9ybSc6IHRyYW5zbGF0aW9uLFxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0aW9uLFxuICAgICAgfTtcbiAgICAgIGlmICh0aWNrLnNlbGVjdGVkICYmICFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZpZXdPcHRpb25zLmdldFNlbGVjdGlvbkJhckNvbG9yKSkge1xuICAgICAgICB0aWNrLnN0eWxlWydiYWNrZ3JvdW5kLWNvbG9yJ10gPSB0aGlzLmdldFNlbGVjdGlvbkJhckNvbG9yKCk7XG4gICAgICB9XG4gICAgICBpZiAoIXRpY2suc2VsZWN0ZWQgJiYgIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMuZ2V0VGlja0NvbG9yKSkge1xuICAgICAgICB0aWNrLnN0eWxlWydiYWNrZ3JvdW5kLWNvbG9yJ10gPSB0aGlzLmdldFRpY2tDb2xvcih2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMudGlja3NUb29sdGlwKSkge1xuICAgICAgICB0aWNrLnRvb2x0aXAgPSB0aGlzLnZpZXdPcHRpb25zLnRpY2tzVG9vbHRpcCh2YWx1ZSk7XG4gICAgICAgIHRpY2sudG9vbHRpcFBsYWNlbWVudCA9IHRoaXMudmlld09wdGlvbnMudmVydGljYWwgPyAncmlnaHQnIDogJ3RvcCc7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5zaG93VGlja3NWYWx1ZXMgJiYgIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRpY2tWYWx1ZVN0ZXApICYmXG4gICAgICAgICAgTWF0aEhlbHBlci5pc01vZHVsb1dpdGhpblByZWNpc2lvbkxpbWl0KHZhbHVlLCB0aWNrVmFsdWVTdGVwLCB0aGlzLnZpZXdPcHRpb25zLnByZWNpc2lvbkxpbWl0KSkge1xuICAgICAgICB0aWNrLnZhbHVlID0gdGhpcy5nZXREaXNwbGF5VmFsdWUodmFsdWUsIExhYmVsVHlwZS5UaWNrVmFsdWUpO1xuICAgICAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMudGlja3NWYWx1ZXNUb29sdGlwKSkge1xuICAgICAgICAgIHRpY2sudmFsdWVUb29sdGlwID0gdGhpcy52aWV3T3B0aW9ucy50aWNrc1ZhbHVlc1Rvb2x0aXAodmFsdWUpO1xuICAgICAgICAgIHRpY2sudmFsdWVUb29sdGlwUGxhY2VtZW50ID0gdGhpcy52aWV3T3B0aW9ucy52ZXJ0aWNhbFxuICAgICAgICAgICAgPyAncmlnaHQnXG4gICAgICAgICAgICA6ICd0b3AnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBsZWdlbmQ6IHN0cmluZyA9IG51bGw7XG4gICAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMuc3RlcHNBcnJheSkpIHtcbiAgICAgICAgY29uc3Qgc3RlcDogQ3VzdG9tU3RlcERlZmluaXRpb24gPSB0aGlzLnZpZXdPcHRpb25zLnN0ZXBzQXJyYXlbdmFsdWVdO1xuICAgICAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHN0ZXApKSB7XG4gICAgICAgICAgbGVnZW5kID0gc3RlcC5sZWdlbmQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMuZ2V0TGVnZW5kKSkge1xuICAgICAgICBsZWdlbmQgPSB0aGlzLnZpZXdPcHRpb25zLmdldExlZ2VuZCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKGxlZ2VuZCkpIHtcbiAgICAgICAgdGljay5sZWdlbmQgPSBsZWdlbmQ7XG4gICAgICAgIGhhc0F0TGVhc3RPbmVMZWdlbmQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGljaztcbiAgICB9KTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLnNsaWRlckVsZW1lbnRXaXRoTGVnZW5kQ2xhc3MgPSBoYXNBdExlYXN0T25lTGVnZW5kOyB9KTtcblxuICAgIC8vIFdlIHNob3VsZCBhdm9pZCByZS1jcmVhdGluZyB0aGUgdGlja3MgYXJyYXkgaWYgcG9zc2libGVcbiAgICAvLyBUaGlzIGJvdGggaW1wcm92ZXMgcGVyZm9ybWFuY2UgYW5kIG1ha2VzIENTUyBhbmltYXRpb25zIHdvcmsgY29ycmVjdGx5XG4gICAgaWYgKCFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnRpY2tzKSAmJiB0aGlzLnRpY2tzLmxlbmd0aCA9PT0gbmV3VGlja3MubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpICA8IG5ld1RpY2tzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy50aWNrc1tpXSwgbmV3VGlja3NbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRpY2tzID0gbmV3VGlja3M7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzUmVmRGVzdHJveWVkKCkpIHtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFRpY2tzQXJyYXkoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHN0ZXA6IG51bWJlciA9ICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52aWV3T3B0aW9ucy50aWNrU3RlcCkpID8gdGhpcy52aWV3T3B0aW9ucy50aWNrU3RlcCA6IHRoaXMudmlld09wdGlvbnMuc3RlcDtcbiAgICBjb25zdCB0aWNrc0FycmF5OiBudW1iZXJbXSA9IFtdO1xuXG4gICAgY29uc3QgbnVtYmVyT2ZWYWx1ZXM6IG51bWJlciA9IDEgKyBNYXRoLmZsb29yKE1hdGhIZWxwZXIucm91bmRUb1ByZWNpc2lvbkxpbWl0KFxuICAgICAgTWF0aC5hYnModGhpcy52aWV3T3B0aW9ucy5jZWlsIC0gdGhpcy52aWV3T3B0aW9ucy5mbG9vcikgLyBzdGVwLFxuICAgICAgdGhpcy52aWV3T3B0aW9ucy5wcmVjaXNpb25MaW1pdFxuICAgICkpO1xuICAgIGZvciAobGV0IGluZGV4OiBudW1iZXIgPSAwOyBpbmRleCA8IG51bWJlck9mVmFsdWVzOyArK2luZGV4KSB7XG4gICAgICB0aWNrc0FycmF5LnB1c2goTWF0aEhlbHBlci5yb3VuZFRvUHJlY2lzaW9uTGltaXQodGhpcy52aWV3T3B0aW9ucy5mbG9vciArIHN0ZXAgKiBpbmRleCwgdGhpcy52aWV3T3B0aW9ucy5wcmVjaXNpb25MaW1pdCkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aWNrc0FycmF5O1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RpY2tTZWxlY3RlZCh2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnJhbmdlKSB7XG4gICAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMuc2hvd1NlbGVjdGlvbkJhckZyb21WYWx1ZSkpIHtcbiAgICAgICAgY29uc3QgY2VudGVyOiBudW1iZXIgPSB0aGlzLnZpZXdPcHRpb25zLnNob3dTZWxlY3Rpb25CYXJGcm9tVmFsdWU7XG4gICAgICAgIGlmICh0aGlzLnZpZXdMb3dWYWx1ZSA+IGNlbnRlciAmJlxuICAgICAgICAgICAgdmFsdWUgPj0gY2VudGVyICYmXG4gICAgICAgICAgICB2YWx1ZSA8PSB0aGlzLnZpZXdMb3dWYWx1ZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld0xvd1ZhbHVlIDwgY2VudGVyICYmXG4gICAgICAgICAgICAgICAgICAgdmFsdWUgPD0gY2VudGVyICYmXG4gICAgICAgICAgICAgICAgICAgdmFsdWUgPj0gdGhpcy52aWV3TG93VmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdPcHRpb25zLnNob3dTZWxlY3Rpb25CYXJFbmQpIHtcbiAgICAgICAgaWYgKHZhbHVlID49IHRoaXMudmlld0xvd1ZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy52aWV3T3B0aW9ucy5zaG93U2VsZWN0aW9uQmFyICYmIHZhbHVlIDw9IHRoaXMudmlld0xvd1ZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnJhbmdlICYmIHZhbHVlID49IHRoaXMudmlld0xvd1ZhbHVlICYmIHZhbHVlIDw9IHRoaXMudmlld0hpZ2hWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gVXBkYXRlIHBvc2l0aW9uIG9mIHRoZSBmbG9vciBsYWJlbFxuICBwcml2YXRlIHVwZGF0ZUZsb29yTGFiZWwoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZsb29yTGFiZWxFbGVtZW50LmFsd2F5c0hpZGUpIHtcbiAgICAgIHRoaXMuZmxvb3JMYWJlbEVsZW1lbnQuc2V0VmFsdWUodGhpcy5nZXREaXNwbGF5VmFsdWUodGhpcy52aWV3T3B0aW9ucy5mbG9vciwgTGFiZWxUeXBlLkZsb29yKSk7XG4gICAgICB0aGlzLmZsb29yTGFiZWxFbGVtZW50LmNhbGN1bGF0ZURpbWVuc2lvbigpO1xuICAgICAgY29uc3QgcG9zaXRpb246IG51bWJlciA9IHRoaXMudmlld09wdGlvbnMucmlnaHRUb0xlZnRcbiAgICAgICAgPyB0aGlzLmZ1bGxCYXJFbGVtZW50LmRpbWVuc2lvbiAtIHRoaXMuZmxvb3JMYWJlbEVsZW1lbnQuZGltZW5zaW9uXG4gICAgICAgIDogMDtcbiAgICAgIHRoaXMuZmxvb3JMYWJlbEVsZW1lbnQuc2V0UG9zaXRpb24ocG9zaXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVwZGF0ZSBwb3NpdGlvbiBvZiB0aGUgY2VpbGluZyBsYWJlbFxuICBwcml2YXRlIHVwZGF0ZUNlaWxMYWJlbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2VpbExhYmVsRWxlbWVudC5hbHdheXNIaWRlKSB7XG4gICAgICB0aGlzLmNlaWxMYWJlbEVsZW1lbnQuc2V0VmFsdWUodGhpcy5nZXREaXNwbGF5VmFsdWUodGhpcy52aWV3T3B0aW9ucy5jZWlsLCBMYWJlbFR5cGUuQ2VpbCkpO1xuICAgICAgdGhpcy5jZWlsTGFiZWxFbGVtZW50LmNhbGN1bGF0ZURpbWVuc2lvbigpO1xuICAgICAgY29uc3QgcG9zaXRpb246IG51bWJlciA9IHRoaXMudmlld09wdGlvbnMucmlnaHRUb0xlZnRcbiAgICAgICAgPyAwXG4gICAgICAgIDogdGhpcy5mdWxsQmFyRWxlbWVudC5kaW1lbnNpb24gLSB0aGlzLmNlaWxMYWJlbEVsZW1lbnQuZGltZW5zaW9uO1xuICAgICAgdGhpcy5jZWlsTGFiZWxFbGVtZW50LnNldFBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgc2xpZGVyIGhhbmRsZXMgYW5kIGxhYmVsIHBvc2l0aW9uc1xuICBwcml2YXRlIHVwZGF0ZUhhbmRsZXMod2hpY2g6IFBvaW50ZXJUeXBlLCBuZXdQb3M6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh3aGljaCA9PT0gUG9pbnRlclR5cGUuTWluKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxvd0hhbmRsZShuZXdQb3MpO1xuICAgIH0gZWxzZSBpZiAod2hpY2ggPT09IFBvaW50ZXJUeXBlLk1heCkge1xuICAgICAgdGhpcy51cGRhdGVIaWdoSGFuZGxlKG5ld1Bvcyk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25CYXIoKTtcbiAgICB0aGlzLnVwZGF0ZVRpY2tzU2NhbGUoKTtcbiAgICBpZiAodGhpcy5yYW5nZSkge1xuICAgICAgdGhpcy51cGRhdGVDb21iaW5lZExhYmVsKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHdvcmsgb3V0IHRoZSBwb3NpdGlvbiBmb3IgaGFuZGxlIGxhYmVscyBkZXBlbmRpbmcgb24gUlRMIG9yIG5vdFxuICBwcml2YXRlIGdldEhhbmRsZUxhYmVsUG9zKGxhYmVsVHlwZTogUG9pbnRlclR5cGUsIG5ld1BvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBsYWJlbERpbWVuc2lvbjogbnVtYmVyID0gKGxhYmVsVHlwZSA9PT0gUG9pbnRlclR5cGUuTWluKVxuICAgICAgPyB0aGlzLm1pbkhhbmRsZUxhYmVsRWxlbWVudC5kaW1lbnNpb25cbiAgICAgIDogdGhpcy5tYXhIYW5kbGVMYWJlbEVsZW1lbnQuZGltZW5zaW9uO1xuICAgIGNvbnN0IG5lYXJIYW5kbGVQb3M6IG51bWJlciA9IG5ld1BvcyAtIGxhYmVsRGltZW5zaW9uIC8gMiArIHRoaXMuaGFuZGxlSGFsZkRpbWVuc2lvbjtcbiAgICBjb25zdCBlbmRPZkJhclBvczogbnVtYmVyID0gdGhpcy5mdWxsQmFyRWxlbWVudC5kaW1lbnNpb24gLSBsYWJlbERpbWVuc2lvbjtcblxuICAgIGlmICghdGhpcy52aWV3T3B0aW9ucy5ib3VuZFBvaW50ZXJMYWJlbHMpIHtcbiAgICAgIHJldHVybiBuZWFySGFuZGxlUG9zO1xuICAgIH1cblxuICAgIGlmICgodGhpcy52aWV3T3B0aW9ucy5yaWdodFRvTGVmdCAmJiBsYWJlbFR5cGUgPT09IFBvaW50ZXJUeXBlLk1pbikgfHxcbiAgICAgICAoIXRoaXMudmlld09wdGlvbnMucmlnaHRUb0xlZnQgJiYgbGFiZWxUeXBlID09PSBQb2ludGVyVHlwZS5NYXgpKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4obmVhckhhbmRsZVBvcywgZW5kT2ZCYXJQb3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobmVhckhhbmRsZVBvcywgMCksIGVuZE9mQmFyUG9zKTtcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgbG93IHNsaWRlciBoYW5kbGUgcG9zaXRpb24gYW5kIGxhYmVsXG4gIHByaXZhdGUgdXBkYXRlTG93SGFuZGxlKG5ld1BvczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5taW5IYW5kbGVFbGVtZW50LnNldFBvc2l0aW9uKG5ld1Bvcyk7XG4gICAgdGhpcy5taW5IYW5kbGVMYWJlbEVsZW1lbnQuc2V0VmFsdWUodGhpcy5nZXREaXNwbGF5VmFsdWUodGhpcy52aWV3TG93VmFsdWUsIExhYmVsVHlwZS5Mb3cpKTtcbiAgICB0aGlzLm1pbkhhbmRsZUxhYmVsRWxlbWVudC5zZXRQb3NpdGlvbih0aGlzLmdldEhhbmRsZUxhYmVsUG9zKFBvaW50ZXJUeXBlLk1pbiwgbmV3UG9zKSk7XG5cbiAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMuZ2V0UG9pbnRlckNvbG9yKSkge1xuICAgICAgdGhpcy5taW5Qb2ludGVyU3R5bGUgPSB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5nZXRQb2ludGVyQ29sb3IoUG9pbnRlclR5cGUuTWluKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlld09wdGlvbnMuYXV0b0hpZGVMaW1pdExhYmVscykge1xuICAgICAgdGhpcy51cGRhdGVGbG9vckFuZENlaWxMYWJlbHNWaXNpYmlsaXR5KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIGhpZ2ggc2xpZGVyIGhhbmRsZSBwb3NpdGlvbiBhbmQgbGFiZWxcbiAgcHJpdmF0ZSB1cGRhdGVIaWdoSGFuZGxlKG5ld1BvczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5tYXhIYW5kbGVFbGVtZW50LnNldFBvc2l0aW9uKG5ld1Bvcyk7XG4gICAgdGhpcy5tYXhIYW5kbGVMYWJlbEVsZW1lbnQuc2V0VmFsdWUodGhpcy5nZXREaXNwbGF5VmFsdWUodGhpcy52aWV3SGlnaFZhbHVlLCBMYWJlbFR5cGUuSGlnaCkpO1xuICAgIHRoaXMubWF4SGFuZGxlTGFiZWxFbGVtZW50LnNldFBvc2l0aW9uKHRoaXMuZ2V0SGFuZGxlTGFiZWxQb3MoUG9pbnRlclR5cGUuTWF4LCBuZXdQb3MpKTtcblxuICAgIGlmICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52aWV3T3B0aW9ucy5nZXRQb2ludGVyQ29sb3IpKSB7XG4gICAgICB0aGlzLm1heFBvaW50ZXJTdHlsZSA9IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmdldFBvaW50ZXJDb2xvcihQb2ludGVyVHlwZS5NYXgpLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmlld09wdGlvbnMuYXV0b0hpZGVMaW1pdExhYmVscykge1xuICAgICAgdGhpcy51cGRhdGVGbG9vckFuZENlaWxMYWJlbHNWaXNpYmlsaXR5KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2hvdy9oaWRlIGZsb29yL2NlaWxpbmcgbGFiZWxcbiAgcHJpdmF0ZSB1cGRhdGVGbG9vckFuZENlaWxMYWJlbHNWaXNpYmlsaXR5KCk6IHZvaWQge1xuICAgIC8vIFNob3cgYmFzZWQgb25seSBvbiBoaWRlTGltaXRMYWJlbHMgaWYgcG9pbnRlciBsYWJlbHMgYXJlIGhpZGRlblxuICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmhpZGVQb2ludGVyTGFiZWxzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBmbG9vckxhYmVsSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG4gICAgbGV0IGNlaWxMYWJlbEhpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0IGlzTWluTGFiZWxBdEZsb29yOiBib29sZWFuID0gdGhpcy5pc0xhYmVsQmVsb3dGbG9vckxhYmVsKHRoaXMubWluSGFuZGxlTGFiZWxFbGVtZW50KTtcbiAgICBjb25zdCBpc01pbkxhYmVsQXRDZWlsOiBib29sZWFuID0gdGhpcy5pc0xhYmVsQWJvdmVDZWlsTGFiZWwodGhpcy5taW5IYW5kbGVMYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IGlzTWF4TGFiZWxBdENlaWw6IGJvb2xlYW4gPSB0aGlzLmlzTGFiZWxBYm92ZUNlaWxMYWJlbCh0aGlzLm1heEhhbmRsZUxhYmVsRWxlbWVudCk7XG4gICAgY29uc3QgaXNDb21iaW5lZExhYmVsQXRGbG9vcjogYm9vbGVhbiA9IHRoaXMuaXNMYWJlbEJlbG93Rmxvb3JMYWJlbCh0aGlzLmNvbWJpbmVkTGFiZWxFbGVtZW50KTtcbiAgICBjb25zdCBpc0NvbWJpbmVkTGFiZWxBdENlaWw6IGJvb2xlYW4gPSB0aGlzLmlzTGFiZWxBYm92ZUNlaWxMYWJlbCh0aGlzLmNvbWJpbmVkTGFiZWxFbGVtZW50KTtcblxuICAgIGlmIChpc01pbkxhYmVsQXRGbG9vcikge1xuICAgICAgZmxvb3JMYWJlbEhpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmZsb29yTGFiZWxFbGVtZW50LmhpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxvb3JMYWJlbEhpZGRlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5mbG9vckxhYmVsRWxlbWVudC5zaG93KCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTWluTGFiZWxBdENlaWwpIHtcbiAgICAgIGNlaWxMYWJlbEhpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmNlaWxMYWJlbEVsZW1lbnQuaGlkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjZWlsTGFiZWxIaWRkZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuY2VpbExhYmVsRWxlbWVudC5zaG93KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgIGNvbnN0IGhpZGVDZWlsOiBib29sZWFuID0gdGhpcy5jb21iaW5lZExhYmVsRWxlbWVudC5pc1Zpc2libGUoKSA/IGlzQ29tYmluZWRMYWJlbEF0Q2VpbCA6IGlzTWF4TGFiZWxBdENlaWw7XG4gICAgICBjb25zdCBoaWRlRmxvb3I6IGJvb2xlYW4gPSB0aGlzLmNvbWJpbmVkTGFiZWxFbGVtZW50LmlzVmlzaWJsZSgpID8gaXNDb21iaW5lZExhYmVsQXRGbG9vciA6IGlzTWluTGFiZWxBdEZsb29yO1xuXG4gICAgICBpZiAoaGlkZUNlaWwpIHtcbiAgICAgICAgdGhpcy5jZWlsTGFiZWxFbGVtZW50LmhpZGUoKTtcbiAgICAgIH0gZWxzZSBpZiAoIWNlaWxMYWJlbEhpZGRlbikge1xuICAgICAgICB0aGlzLmNlaWxMYWJlbEVsZW1lbnQuc2hvdygpO1xuICAgICAgfVxuXG4gICAgICAvLyBIaWRlIG9yIHNob3cgZmxvb3IgbGFiZWxcbiAgICAgIGlmIChoaWRlRmxvb3IpIHtcbiAgICAgICAgdGhpcy5mbG9vckxhYmVsRWxlbWVudC5oaWRlKCk7XG4gICAgICB9IGVsc2UgaWYgKCFmbG9vckxhYmVsSGlkZGVuKSB7XG4gICAgICAgIHRoaXMuZmxvb3JMYWJlbEVsZW1lbnQuc2hvdygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNMYWJlbEJlbG93Rmxvb3JMYWJlbChsYWJlbDogU2xpZGVyTGFiZWxEaXJlY3RpdmUpOiBib29sZWFuIHtcbiAgICBjb25zdCBwb3M6IG51bWJlciA9IGxhYmVsLnBvc2l0aW9uO1xuICAgIGNvbnN0IGRpbTogbnVtYmVyID0gbGFiZWwuZGltZW5zaW9uO1xuICAgIGNvbnN0IGZsb29yUG9zOiBudW1iZXIgPSB0aGlzLmZsb29yTGFiZWxFbGVtZW50LnBvc2l0aW9uO1xuICAgIGNvbnN0IGZsb29yRGltOiBudW1iZXIgPSB0aGlzLmZsb29yTGFiZWxFbGVtZW50LmRpbWVuc2lvbjtcbiAgICByZXR1cm4gdGhpcy52aWV3T3B0aW9ucy5yaWdodFRvTGVmdFxuICAgICAgPyBwb3MgKyBkaW0gPj0gZmxvb3JQb3MgLSAyXG4gICAgICA6IHBvcyA8PSBmbG9vclBvcyArIGZsb29yRGltICsgMjtcbiAgfVxuXG4gIHByaXZhdGUgaXNMYWJlbEFib3ZlQ2VpbExhYmVsKGxhYmVsOiBTbGlkZXJMYWJlbERpcmVjdGl2ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBvczogbnVtYmVyID0gbGFiZWwucG9zaXRpb247XG4gICAgY29uc3QgZGltOiBudW1iZXIgPSBsYWJlbC5kaW1lbnNpb247XG4gICAgY29uc3QgY2VpbFBvczogbnVtYmVyID0gdGhpcy5jZWlsTGFiZWxFbGVtZW50LnBvc2l0aW9uO1xuICAgIGNvbnN0IGNlaWxEaW06IG51bWJlciA9IHRoaXMuY2VpbExhYmVsRWxlbWVudC5kaW1lbnNpb247XG4gICAgcmV0dXJuIHRoaXMudmlld09wdGlvbnMucmlnaHRUb0xlZnRcbiAgICAgID8gcG9zIDw9IGNlaWxQb3MgKyBjZWlsRGltICsgMlxuICAgICAgOiBwb3MgKyBkaW0gPj0gY2VpbFBvcyAtIDI7XG4gIH1cblxuICAvLyBVcGRhdGUgc2xpZGVyIHNlbGVjdGlvbiBiYXIsIGNvbWJpbmVkIGxhYmVsIGFuZCByYW5nZSBsYWJlbFxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGlvbkJhcigpOiB2b2lkIHtcbiAgICBsZXQgcG9zaXRpb246IG51bWJlciA9IDA7XG4gICAgbGV0IGRpbWVuc2lvbjogbnVtYmVyID0gMDtcbiAgICBjb25zdCBpc1NlbGVjdGlvbkJhckZyb21SaWdodDogYm9vbGVhbiA9IHRoaXMudmlld09wdGlvbnMucmlnaHRUb0xlZnRcbiAgICAgICAgPyAhdGhpcy52aWV3T3B0aW9ucy5zaG93U2VsZWN0aW9uQmFyRW5kXG4gICAgICAgIDogdGhpcy52aWV3T3B0aW9ucy5zaG93U2VsZWN0aW9uQmFyRW5kO1xuICAgIGNvbnN0IHBvc2l0aW9uRm9yUmFuZ2U6IG51bWJlciA9IHRoaXMudmlld09wdGlvbnMucmlnaHRUb0xlZnRcbiAgICAgICAgPyB0aGlzLm1heEhhbmRsZUVsZW1lbnQucG9zaXRpb24gKyB0aGlzLmhhbmRsZUhhbGZEaW1lbnNpb25cbiAgICAgICAgOiB0aGlzLm1pbkhhbmRsZUVsZW1lbnQucG9zaXRpb24gKyB0aGlzLmhhbmRsZUhhbGZEaW1lbnNpb247XG5cbiAgICBpZiAodGhpcy5yYW5nZSkge1xuICAgICAgZGltZW5zaW9uID0gTWF0aC5hYnModGhpcy5tYXhIYW5kbGVFbGVtZW50LnBvc2l0aW9uIC0gdGhpcy5taW5IYW5kbGVFbGVtZW50LnBvc2l0aW9uKTtcbiAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25Gb3JSYW5nZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZpZXdPcHRpb25zLnNob3dTZWxlY3Rpb25CYXJGcm9tVmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGNlbnRlcjogbnVtYmVyID0gdGhpcy52aWV3T3B0aW9ucy5zaG93U2VsZWN0aW9uQmFyRnJvbVZhbHVlO1xuICAgICAgICBjb25zdCBjZW50ZXJQb3NpdGlvbjogbnVtYmVyID0gdGhpcy52YWx1ZVRvUG9zaXRpb24oY2VudGVyKTtcbiAgICAgICAgY29uc3QgaXNNb2RlbEdyZWF0ZXJUaGFuQ2VudGVyOiBib29sZWFuID0gdGhpcy52aWV3T3B0aW9ucy5yaWdodFRvTGVmdFxuICAgICAgICAgICAgPyB0aGlzLnZpZXdMb3dWYWx1ZSA8PSBjZW50ZXJcbiAgICAgICAgICAgIDogdGhpcy52aWV3TG93VmFsdWUgPiBjZW50ZXI7XG4gICAgICAgIGlmIChpc01vZGVsR3JlYXRlclRoYW5DZW50ZXIpIHtcbiAgICAgICAgICBkaW1lbnNpb24gPSB0aGlzLm1pbkhhbmRsZUVsZW1lbnQucG9zaXRpb24gLSBjZW50ZXJQb3NpdGlvbjtcbiAgICAgICAgICBwb3NpdGlvbiA9IGNlbnRlclBvc2l0aW9uICsgdGhpcy5oYW5kbGVIYWxmRGltZW5zaW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpbWVuc2lvbiA9IGNlbnRlclBvc2l0aW9uIC0gdGhpcy5taW5IYW5kbGVFbGVtZW50LnBvc2l0aW9uO1xuICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5taW5IYW5kbGVFbGVtZW50LnBvc2l0aW9uICsgdGhpcy5oYW5kbGVIYWxmRGltZW5zaW9uO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzU2VsZWN0aW9uQmFyRnJvbVJpZ2h0KSB7XG4gICAgICAgIGRpbWVuc2lvbiA9IE1hdGguY2VpbChNYXRoLmFicyh0aGlzLm1heEhhbmRsZVBvc2l0aW9uIC0gdGhpcy5taW5IYW5kbGVFbGVtZW50LnBvc2l0aW9uKSArIHRoaXMuaGFuZGxlSGFsZkRpbWVuc2lvbik7XG4gICAgICAgIHBvc2l0aW9uID0gTWF0aC5mbG9vcih0aGlzLm1pbkhhbmRsZUVsZW1lbnQucG9zaXRpb24gKyB0aGlzLmhhbmRsZUhhbGZEaW1lbnNpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGltZW5zaW9uID0gdGhpcy5taW5IYW5kbGVFbGVtZW50LnBvc2l0aW9uICsgdGhpcy5oYW5kbGVIYWxmRGltZW5zaW9uO1xuICAgICAgICBwb3NpdGlvbiA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0aW9uQmFyRWxlbWVudC5zZXREaW1lbnNpb24oZGltZW5zaW9uKTtcbiAgICB0aGlzLnNlbGVjdGlvbkJhckVsZW1lbnQuc2V0UG9zaXRpb24ocG9zaXRpb24pO1xuICAgIGlmICh0aGlzLnJhbmdlICYmIHRoaXMudmlld09wdGlvbnMuc2hvd091dGVyU2VsZWN0aW9uQmFycykge1xuICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMucmlnaHRUb0xlZnQpIHtcbiAgICAgICAgdGhpcy5yaWdodE91dGVyU2VsZWN0aW9uQmFyRWxlbWVudC5zZXREaW1lbnNpb24ocG9zaXRpb24pO1xuICAgICAgICB0aGlzLnJpZ2h0T3V0ZXJTZWxlY3Rpb25CYXJFbGVtZW50LnNldFBvc2l0aW9uKDApO1xuICAgICAgICB0aGlzLmZ1bGxCYXJFbGVtZW50LmNhbGN1bGF0ZURpbWVuc2lvbigpO1xuICAgICAgICB0aGlzLmxlZnRPdXRlclNlbGVjdGlvbkJhckVsZW1lbnQuc2V0RGltZW5zaW9uKHRoaXMuZnVsbEJhckVsZW1lbnQuZGltZW5zaW9uIC0gKHBvc2l0aW9uICsgZGltZW5zaW9uKSk7XG4gICAgICAgIHRoaXMubGVmdE91dGVyU2VsZWN0aW9uQmFyRWxlbWVudC5zZXRQb3NpdGlvbihwb3NpdGlvbiArIGRpbWVuc2lvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxlZnRPdXRlclNlbGVjdGlvbkJhckVsZW1lbnQuc2V0RGltZW5zaW9uKHBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy5sZWZ0T3V0ZXJTZWxlY3Rpb25CYXJFbGVtZW50LnNldFBvc2l0aW9uKDApO1xuICAgICAgICB0aGlzLmZ1bGxCYXJFbGVtZW50LmNhbGN1bGF0ZURpbWVuc2lvbigpO1xuICAgICAgICB0aGlzLnJpZ2h0T3V0ZXJTZWxlY3Rpb25CYXJFbGVtZW50LnNldERpbWVuc2lvbih0aGlzLmZ1bGxCYXJFbGVtZW50LmRpbWVuc2lvbiAtIChwb3NpdGlvbiArIGRpbWVuc2lvbikpO1xuICAgICAgICB0aGlzLnJpZ2h0T3V0ZXJTZWxlY3Rpb25CYXJFbGVtZW50LnNldFBvc2l0aW9uKHBvc2l0aW9uICsgZGltZW5zaW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZpZXdPcHRpb25zLmdldFNlbGVjdGlvbkJhckNvbG9yKSkge1xuICAgICAgY29uc3QgY29sb3I6IHN0cmluZyA9IHRoaXMuZ2V0U2VsZWN0aW9uQmFyQ29sb3IoKTtcbiAgICAgIHRoaXMuYmFyU3R5bGUgPSB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMuc2VsZWN0aW9uQmFyR3JhZGllbnQpKSB7XG4gICAgICBjb25zdCBvZmZzZXQ6IG51bWJlciA9ICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52aWV3T3B0aW9ucy5zaG93U2VsZWN0aW9uQmFyRnJvbVZhbHVlKSlcbiAgICAgICAgICAgID8gdGhpcy52YWx1ZVRvUG9zaXRpb24odGhpcy52aWV3T3B0aW9ucy5zaG93U2VsZWN0aW9uQmFyRnJvbVZhbHVlKVxuICAgICAgICAgICAgOiAwO1xuICAgICAgY29uc3QgcmV2ZXJzZWQ6IGJvb2xlYW4gPSAob2Zmc2V0IC0gcG9zaXRpb24gPiAwICYmICFpc1NlbGVjdGlvbkJhckZyb21SaWdodCkgfHwgKG9mZnNldCAtIHBvc2l0aW9uIDw9IDAgJiYgaXNTZWxlY3Rpb25CYXJGcm9tUmlnaHQpO1xuICAgICAgY29uc3QgZGlyZWN0aW9uOiBzdHJpbmcgPSB0aGlzLnZpZXdPcHRpb25zLnZlcnRpY2FsXG4gICAgICAgICAgPyByZXZlcnNlZCA/ICdib3R0b20nIDogJ3RvcCdcbiAgICAgICAgICA6IHJldmVyc2VkID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICAgIHRoaXMuYmFyU3R5bGUgPSB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTpcbiAgICAgICAgICAnbGluZWFyLWdyYWRpZW50KHRvICcgK1xuICAgICAgICAgIGRpcmVjdGlvbiArXG4gICAgICAgICAgJywgJyArXG4gICAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5zZWxlY3Rpb25CYXJHcmFkaWVudC5mcm9tICtcbiAgICAgICAgICAnIDAlLCcgK1xuICAgICAgICAgIHRoaXMudmlld09wdGlvbnMuc2VsZWN0aW9uQmFyR3JhZGllbnQudG8gK1xuICAgICAgICAgICcgMTAwJSknLFxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLnZlcnRpY2FsKSB7XG4gICAgICAgIHRoaXMuYmFyU3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uID1cbiAgICAgICAgICAnY2VudGVyICcgK1xuICAgICAgICAgIChvZmZzZXQgK1xuICAgICAgICAgICAgZGltZW5zaW9uICtcbiAgICAgICAgICAgIHBvc2l0aW9uICtcbiAgICAgICAgICAgIChyZXZlcnNlZCA/IC10aGlzLmhhbmRsZUhhbGZEaW1lbnNpb24gOiAwKSkgK1xuICAgICAgICAgICdweCc7XG4gICAgICAgIHRoaXMuYmFyU3R5bGUuYmFja2dyb3VuZFNpemUgPVxuICAgICAgICAgICcxMDAlICcgKyAodGhpcy5mdWxsQmFyRWxlbWVudC5kaW1lbnNpb24gLSB0aGlzLmhhbmRsZUhhbGZEaW1lbnNpb24pICsgJ3B4JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYmFyU3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uID1cbiAgICAgICAgICBvZmZzZXQgLVxuICAgICAgICAgIHBvc2l0aW9uICtcbiAgICAgICAgICAocmV2ZXJzZWQgPyB0aGlzLmhhbmRsZUhhbGZEaW1lbnNpb24gOiAwKSArXG4gICAgICAgICAgJ3B4IGNlbnRlcic7XG4gICAgICAgIHRoaXMuYmFyU3R5bGUuYmFja2dyb3VuZFNpemUgPVxuICAgICAgICAgIHRoaXMuZnVsbEJhckVsZW1lbnQuZGltZW5zaW9uIC0gdGhpcy5oYW5kbGVIYWxmRGltZW5zaW9uICsgJ3B4IDEwMCUnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFdyYXBwZXIgYXJvdW5kIHRoZSBnZXRTZWxlY3Rpb25CYXJDb2xvciBvZiB0aGUgdXNlciB0byBwYXNzIHRvIGNvcnJlY3QgcGFyYW1ldGVyc1xuICBwcml2YXRlIGdldFNlbGVjdGlvbkJhckNvbG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnZpZXdPcHRpb25zLmdldFNlbGVjdGlvbkJhckNvbG9yKFxuICAgICAgICB0aGlzLnZhbHVlLFxuICAgICAgICB0aGlzLmhpZ2hWYWx1ZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmlld09wdGlvbnMuZ2V0U2VsZWN0aW9uQmFyQ29sb3IodGhpcy52YWx1ZSk7XG4gIH1cblxuICAvLyBXcmFwcGVyIGFyb3VuZCB0aGUgZ2V0UG9pbnRlckNvbG9yIG9mIHRoZSB1c2VyIHRvIHBhc3MgdG8gIGNvcnJlY3QgcGFyYW1ldGVyc1xuICBwcml2YXRlIGdldFBvaW50ZXJDb2xvcihwb2ludGVyVHlwZTogUG9pbnRlclR5cGUpOiBzdHJpbmcge1xuICAgIGlmIChwb2ludGVyVHlwZSA9PT0gUG9pbnRlclR5cGUuTWF4KSB7XG4gICAgICByZXR1cm4gdGhpcy52aWV3T3B0aW9ucy5nZXRQb2ludGVyQ29sb3IoXG4gICAgICAgIHRoaXMuaGlnaFZhbHVlLFxuICAgICAgICBwb2ludGVyVHlwZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmlld09wdGlvbnMuZ2V0UG9pbnRlckNvbG9yKFxuICAgICAgdGhpcy52YWx1ZSxcbiAgICAgIHBvaW50ZXJUeXBlXG4gICAgKTtcbiAgfVxuXG4gIC8vIFdyYXBwZXIgYXJvdW5kIHRoZSBnZXRUaWNrQ29sb3Igb2YgdGhlIHVzZXIgdG8gcGFzcyB0byBjb3JyZWN0IHBhcmFtZXRlcnNcbiAgcHJpdmF0ZSBnZXRUaWNrQ29sb3IodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudmlld09wdGlvbnMuZ2V0VGlja0NvbG9yKHZhbHVlKTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSBjb21iaW5lZCBsYWJlbCBwb3NpdGlvbiBhbmQgdmFsdWVcbiAgcHJpdmF0ZSB1cGRhdGVDb21iaW5lZExhYmVsKCk6IHZvaWQge1xuICAgIGxldCBpc0xhYmVsT3ZlcmxhcDogYm9vbGVhbiA9IG51bGw7XG4gICAgaWYgKHRoaXMudmlld09wdGlvbnMucmlnaHRUb0xlZnQpIHtcbiAgICAgIGlzTGFiZWxPdmVybGFwID1cbiAgICAgICAgdGhpcy5taW5IYW5kbGVMYWJlbEVsZW1lbnQucG9zaXRpb24gLSB0aGlzLm1pbkhhbmRsZUxhYmVsRWxlbWVudC5kaW1lbnNpb24gLSAxMCA8PSB0aGlzLm1heEhhbmRsZUxhYmVsRWxlbWVudC5wb3NpdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNMYWJlbE92ZXJsYXAgPVxuICAgICAgICB0aGlzLm1pbkhhbmRsZUxhYmVsRWxlbWVudC5wb3NpdGlvbiArIHRoaXMubWluSGFuZGxlTGFiZWxFbGVtZW50LmRpbWVuc2lvbiArIDEwID49IHRoaXMubWF4SGFuZGxlTGFiZWxFbGVtZW50LnBvc2l0aW9uO1xuICAgIH1cblxuICAgIGlmIChpc0xhYmVsT3ZlcmxhcCkge1xuICAgICAgY29uc3QgbG93RGlzcGxheVZhbHVlOiBzdHJpbmcgPSB0aGlzLmdldERpc3BsYXlWYWx1ZSh0aGlzLnZpZXdMb3dWYWx1ZSwgTGFiZWxUeXBlLkxvdyk7XG4gICAgICBjb25zdCBoaWdoRGlzcGxheVZhbHVlOiBzdHJpbmcgPSB0aGlzLmdldERpc3BsYXlWYWx1ZSh0aGlzLnZpZXdIaWdoVmFsdWUsIExhYmVsVHlwZS5IaWdoKTtcbiAgICAgIGNvbnN0IGNvbWJpbmVkTGFiZWxWYWx1ZTogc3RyaW5nID0gdGhpcy52aWV3T3B0aW9ucy5yaWdodFRvTGVmdFxuICAgICAgICA/IHRoaXMudmlld09wdGlvbnMuY29tYmluZUxhYmVscyhoaWdoRGlzcGxheVZhbHVlLCBsb3dEaXNwbGF5VmFsdWUpXG4gICAgICAgIDogdGhpcy52aWV3T3B0aW9ucy5jb21iaW5lTGFiZWxzKGxvd0Rpc3BsYXlWYWx1ZSwgaGlnaERpc3BsYXlWYWx1ZSk7XG5cbiAgICAgIHRoaXMuY29tYmluZWRMYWJlbEVsZW1lbnQuc2V0VmFsdWUoY29tYmluZWRMYWJlbFZhbHVlKTtcbiAgICAgIGNvbnN0IHBvczogbnVtYmVyID0gdGhpcy52aWV3T3B0aW9ucy5ib3VuZFBvaW50ZXJMYWJlbHNcbiAgICAgICAgPyBNYXRoLm1pbihcbiAgICAgICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkJhckVsZW1lbnQucG9zaXRpb24gK1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQmFyRWxlbWVudC5kaW1lbnNpb24gLyAyIC1cbiAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVkTGFiZWxFbGVtZW50LmRpbWVuc2lvbiAvIDIsXG4gICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLmZ1bGxCYXJFbGVtZW50LmRpbWVuc2lvbiAtIHRoaXMuY29tYmluZWRMYWJlbEVsZW1lbnQuZGltZW5zaW9uXG4gICAgICAgICAgKVxuICAgICAgICA6IHRoaXMuc2VsZWN0aW9uQmFyRWxlbWVudC5wb3NpdGlvbiArIHRoaXMuc2VsZWN0aW9uQmFyRWxlbWVudC5kaW1lbnNpb24gLyAyIC0gdGhpcy5jb21iaW5lZExhYmVsRWxlbWVudC5kaW1lbnNpb24gLyAyO1xuXG4gICAgICB0aGlzLmNvbWJpbmVkTGFiZWxFbGVtZW50LnNldFBvc2l0aW9uKHBvcyk7XG4gICAgICB0aGlzLm1pbkhhbmRsZUxhYmVsRWxlbWVudC5oaWRlKCk7XG4gICAgICB0aGlzLm1heEhhbmRsZUxhYmVsRWxlbWVudC5oaWRlKCk7XG4gICAgICB0aGlzLmNvbWJpbmVkTGFiZWxFbGVtZW50LnNob3coKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVIaWdoSGFuZGxlKHRoaXMudmFsdWVUb1Bvc2l0aW9uKHRoaXMudmlld0hpZ2hWYWx1ZSkpO1xuICAgICAgdGhpcy51cGRhdGVMb3dIYW5kbGUodGhpcy52YWx1ZVRvUG9zaXRpb24odGhpcy52aWV3TG93VmFsdWUpKTtcbiAgICAgIHRoaXMubWF4SGFuZGxlTGFiZWxFbGVtZW50LnNob3coKTtcbiAgICAgIHRoaXMubWluSGFuZGxlTGFiZWxFbGVtZW50LnNob3coKTtcbiAgICAgIHRoaXMuY29tYmluZWRMYWJlbEVsZW1lbnQuaGlkZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5hdXRvSGlkZUxpbWl0TGFiZWxzKSB7XG4gICAgICB0aGlzLnVwZGF0ZUZsb29yQW5kQ2VpbExhYmVsc1Zpc2liaWxpdHkoKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIHRyYW5zbGF0ZWQgdmFsdWUgaWYgYSB0cmFuc2xhdGUgZnVuY3Rpb24gaXMgcHJvdmlkZWQgZWxzZSB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgcHJpdmF0ZSBnZXREaXNwbGF5VmFsdWUodmFsdWU6IG51bWJlciwgd2hpY2g6IExhYmVsVHlwZSk6IHN0cmluZyB7XG4gICAgaWYgKCFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZpZXdPcHRpb25zLnN0ZXBzQXJyYXkpICYmICF0aGlzLnZpZXdPcHRpb25zLmJpbmRJbmRleEZvclN0ZXBzQXJyYXkpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5nZXRTdGVwVmFsdWUodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGUodmFsdWUsIHdoaWNoKTtcbiAgfVxuXG4gIC8vIFJvdW5kIHZhbHVlIHRvIHN0ZXAgYW5kIHByZWNpc2lvbiBiYXNlZCBvbiBtaW5WYWx1ZVxuICBwcml2YXRlIHJvdW5kU3RlcCh2YWx1ZTogbnVtYmVyLCBjdXN0b21TdGVwPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBzdGVwOiBudW1iZXIgPSAhVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQoY3VzdG9tU3RlcCkgPyBjdXN0b21TdGVwIDogdGhpcy52aWV3T3B0aW9ucy5zdGVwO1xuICAgIGxldCBzdGVwcGVkRGlmZmVyZW5jZTogbnVtYmVyID0gTWF0aEhlbHBlci5yb3VuZFRvUHJlY2lzaW9uTGltaXQoXG4gICAgICAodmFsdWUgLSB0aGlzLnZpZXdPcHRpb25zLmZsb29yKSAvIHN0ZXAsIHRoaXMudmlld09wdGlvbnMucHJlY2lzaW9uTGltaXQpO1xuICAgIHN0ZXBwZWREaWZmZXJlbmNlID0gTWF0aC5yb3VuZChzdGVwcGVkRGlmZmVyZW5jZSkgKiBzdGVwO1xuICAgIHJldHVybiBNYXRoSGVscGVyLnJvdW5kVG9QcmVjaXNpb25MaW1pdCh0aGlzLnZpZXdPcHRpb25zLmZsb29yICsgc3RlcHBlZERpZmZlcmVuY2UsIHRoaXMudmlld09wdGlvbnMucHJlY2lzaW9uTGltaXQpO1xuICB9XG5cbiAgLy8gVHJhbnNsYXRlIHZhbHVlIHRvIHBpeGVsIHBvc2l0aW9uXG4gIHByaXZhdGUgdmFsdWVUb1Bvc2l0aW9uKHZhbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgZm46IFZhbHVlVG9Qb3NpdGlvbkZ1bmN0aW9uICA9IFZhbHVlSGVscGVyLmxpbmVhclZhbHVlVG9Qb3NpdGlvbjtcbiAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMuY3VzdG9tVmFsdWVUb1Bvc2l0aW9uKSkge1xuICAgICAgZm4gPSB0aGlzLnZpZXdPcHRpb25zLmN1c3RvbVZhbHVlVG9Qb3NpdGlvbjtcbiAgICB9IGVsc2UgaWYgKHRoaXMudmlld09wdGlvbnMubG9nU2NhbGUpIHtcbiAgICAgIGZuID0gVmFsdWVIZWxwZXIubG9nVmFsdWVUb1Bvc2l0aW9uO1xuICAgIH1cblxuICAgIHZhbCA9IE1hdGhIZWxwZXIuY2xhbXBUb1JhbmdlKHZhbCwgdGhpcy52aWV3T3B0aW9ucy5mbG9vciwgdGhpcy52aWV3T3B0aW9ucy5jZWlsKTtcbiAgICBsZXQgcGVyY2VudDogbnVtYmVyID0gZm4odmFsLCB0aGlzLnZpZXdPcHRpb25zLmZsb29yLCB0aGlzLnZpZXdPcHRpb25zLmNlaWwpO1xuICAgIGlmIChWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZChwZXJjZW50KSkge1xuICAgICAgcGVyY2VudCA9IDA7XG4gICAgfVxuICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLnJpZ2h0VG9MZWZ0KSB7XG4gICAgICBwZXJjZW50ID0gMSAtIHBlcmNlbnQ7XG4gICAgfVxuICAgIHJldHVybiBwZXJjZW50ICogdGhpcy5tYXhIYW5kbGVQb3NpdGlvbjtcbiAgfVxuXG4gIC8vIFRyYW5zbGF0ZSBwb3NpdGlvbiB0byBtb2RlbCB2YWx1ZVxuICBwcml2YXRlIHBvc2l0aW9uVG9WYWx1ZShwb3NpdGlvbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgcGVyY2VudDogbnVtYmVyID0gcG9zaXRpb24gLyB0aGlzLm1heEhhbmRsZVBvc2l0aW9uO1xuICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLnJpZ2h0VG9MZWZ0KSB7XG4gICAgICBwZXJjZW50ID0gMSAtIHBlcmNlbnQ7XG4gICAgfVxuICAgIGxldCBmbjogUG9zaXRpb25Ub1ZhbHVlRnVuY3Rpb24gPSBWYWx1ZUhlbHBlci5saW5lYXJQb3NpdGlvblRvVmFsdWU7XG4gICAgaWYgKCFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZpZXdPcHRpb25zLmN1c3RvbVBvc2l0aW9uVG9WYWx1ZSkpIHtcbiAgICAgIGZuID0gdGhpcy52aWV3T3B0aW9ucy5jdXN0b21Qb3NpdGlvblRvVmFsdWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnZpZXdPcHRpb25zLmxvZ1NjYWxlKSB7XG4gICAgICBmbiA9IFZhbHVlSGVscGVyLmxvZ1Bvc2l0aW9uVG9WYWx1ZTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWU6IG51bWJlciA9IGZuKHBlcmNlbnQsIHRoaXMudmlld09wdGlvbnMuZmxvb3IsIHRoaXMudmlld09wdGlvbnMuY2VpbCk7XG4gICAgcmV0dXJuICFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IDA7XG4gIH1cblxuICAvLyBHZXQgdGhlIFgtY29vcmRpbmF0ZSBvciBZLWNvb3JkaW5hdGUgb2YgYW4gZXZlbnRcbiAgcHJpdmF0ZSBnZXRFdmVudFhZKGV2ZW50OiBNb3VzZUV2ZW50fFRvdWNoRXZlbnQsIHRhcmdldFRvdWNoSWQ/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnZpZXdPcHRpb25zLnZlcnRpY2FsID8gZXZlbnQuY2xpZW50WSA6IGV2ZW50LmNsaWVudFg7XG4gICAgfVxuXG4gICAgbGV0IHRvdWNoSW5kZXg6IG51bWJlciA9IDA7XG4gICAgY29uc3QgdG91Y2hlczogVG91Y2hMaXN0ID0gZXZlbnQudG91Y2hlcztcbiAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRhcmdldFRvdWNoSWQpKSB7XG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdG91Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodG91Y2hlc1tpXS5pZGVudGlmaWVyID09PSB0YXJnZXRUb3VjaElkKSB7XG4gICAgICAgICAgdG91Y2hJbmRleCA9IGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhlIHRhcmdldCB0b3VjaCBvciBpZiB0aGUgdGFyZ2V0IHRvdWNoIHdhcyBub3QgZm91bmQgaW4gdGhlIGV2ZW50XG4gICAgLy8gcmV0dXJucyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGZpcnN0IHRvdWNoXG4gICAgcmV0dXJuIHRoaXMudmlld09wdGlvbnMudmVydGljYWwgPyB0b3VjaGVzW3RvdWNoSW5kZXhdLmNsaWVudFkgOiB0b3VjaGVzW3RvdWNoSW5kZXhdLmNsaWVudFg7XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBldmVudCBwb3NpdGlvbiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgc2xpZGVyIGlzIGhvcml6b250YWwgb3IgdmVydGljYWxcbiAgcHJpdmF0ZSBnZXRFdmVudFBvc2l0aW9uKGV2ZW50OiBNb3VzZUV2ZW50fFRvdWNoRXZlbnQsIHRhcmdldFRvdWNoSWQ/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHNsaWRlckVsZW1lbnRCb3VuZGluZ1JlY3Q6IENsaWVudFJlY3QgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGNvbnN0IHNsaWRlclBvczogbnVtYmVyID0gdGhpcy52aWV3T3B0aW9ucy52ZXJ0aWNhbCA/XG4gICAgICBzbGlkZXJFbGVtZW50Qm91bmRpbmdSZWN0LmJvdHRvbSA6IHNsaWRlckVsZW1lbnRCb3VuZGluZ1JlY3QubGVmdDtcbiAgICBsZXQgZXZlbnRQb3M6IG51bWJlciA9IDA7XG4gICAgaWYgKHRoaXMudmlld09wdGlvbnMudmVydGljYWwpIHtcbiAgICAgIGV2ZW50UG9zID0gLXRoaXMuZ2V0RXZlbnRYWShldmVudCwgdGFyZ2V0VG91Y2hJZCkgKyBzbGlkZXJQb3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50UG9zID0gdGhpcy5nZXRFdmVudFhZKGV2ZW50LCB0YXJnZXRUb3VjaElkKSAtIHNsaWRlclBvcztcbiAgICB9XG4gICAgcmV0dXJuIGV2ZW50UG9zICogdGhpcy52aWV3T3B0aW9ucy5zY2FsZSAtIHRoaXMuaGFuZGxlSGFsZkRpbWVuc2lvbjtcbiAgfVxuXG4gIC8vIEdldCB0aGUgaGFuZGxlIGNsb3Nlc3QgdG8gYW4gZXZlbnRcbiAgcHJpdmF0ZSBnZXROZWFyZXN0SGFuZGxlKGV2ZW50OiBNb3VzZUV2ZW50fFRvdWNoRXZlbnQpOiBQb2ludGVyVHlwZSB7XG4gICAgaWYgKCF0aGlzLnJhbmdlKSB7XG4gICAgICByZXR1cm4gUG9pbnRlclR5cGUuTWluO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc2l0aW9uOiBudW1iZXIgPSB0aGlzLmdldEV2ZW50UG9zaXRpb24oZXZlbnQpO1xuICAgIGNvbnN0IGRpc3RhbmNlTWluOiBudW1iZXIgPSBNYXRoLmFicyhwb3NpdGlvbiAtIHRoaXMubWluSGFuZGxlRWxlbWVudC5wb3NpdGlvbik7XG4gICAgY29uc3QgZGlzdGFuY2VNYXg6IG51bWJlciA9IE1hdGguYWJzKHBvc2l0aW9uIC0gdGhpcy5tYXhIYW5kbGVFbGVtZW50LnBvc2l0aW9uKTtcblxuICAgIGlmIChkaXN0YW5jZU1pbiA8IGRpc3RhbmNlTWF4KSB7XG4gICAgICByZXR1cm4gUG9pbnRlclR5cGUuTWluO1xuICAgIH0gZWxzZSBpZiAoZGlzdGFuY2VNaW4gPiBkaXN0YW5jZU1heCkge1xuICAgICAgcmV0dXJuIFBvaW50ZXJUeXBlLk1heDtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnZpZXdPcHRpb25zLnJpZ2h0VG9MZWZ0KSB7XG4gICAgICAvLyBpZiBldmVudCBpcyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIG1pbi9tYXggdGhlbiBpZiBpdCdzIGF0IGxlZnQgb2YgbWluSCwgd2UgcmV0dXJuIG1pbkggZWxzZSBtYXhIXG4gICAgICByZXR1cm4gcG9zaXRpb24gPCB0aGlzLm1pbkhhbmRsZUVsZW1lbnQucG9zaXRpb24gPyBQb2ludGVyVHlwZS5NaW4gOiBQb2ludGVyVHlwZS5NYXg7XG4gICAgfVxuICAgIC8vIHJldmVyc2UgaW4gcnRsXG4gICAgcmV0dXJuIHBvc2l0aW9uID4gdGhpcy5taW5IYW5kbGVFbGVtZW50LnBvc2l0aW9uID8gUG9pbnRlclR5cGUuTWluIDogUG9pbnRlclR5cGUuTWF4O1xuICB9XG5cbiAgLy8gQmluZCBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzIHRvIHNsaWRlciBoYW5kbGVzXG4gIHByaXZhdGUgYmluZEV2ZW50cygpOiB2b2lkIHtcbiAgICBjb25zdCBkcmFnZ2FibGVSYW5nZTogYm9vbGVhbiA9IHRoaXMudmlld09wdGlvbnMuZHJhZ2dhYmxlUmFuZ2U7XG5cbiAgICBpZiAoIXRoaXMudmlld09wdGlvbnMub25seUJpbmRIYW5kbGVzKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkJhckVsZW1lbnQub24oJ21vdXNlZG93bicsXG4gICAgICAgIChldmVudDogTW91c2VFdmVudCk6IHZvaWQgPT4gdGhpcy5vbkJhclN0YXJ0KG51bGwsIGRyYWdnYWJsZVJhbmdlLCBldmVudCwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlld09wdGlvbnMuZHJhZ2dhYmxlUmFuZ2VPbmx5KSB7XG4gICAgICB0aGlzLm1pbkhhbmRsZUVsZW1lbnQub24oJ21vdXNlZG93bicsXG4gICAgICAgIChldmVudDogTW91c2VFdmVudCk6IHZvaWQgPT4gdGhpcy5vbkJhclN0YXJ0KFBvaW50ZXJUeXBlLk1pbiwgZHJhZ2dhYmxlUmFuZ2UsIGV2ZW50LCB0cnVlLCB0cnVlKVxuICAgICAgKTtcbiAgICAgIHRoaXMubWF4SGFuZGxlRWxlbWVudC5vbignbW91c2Vkb3duJyxcbiAgICAgICAgKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCA9PiB0aGlzLm9uQmFyU3RhcnQoUG9pbnRlclR5cGUuTWF4LCBkcmFnZ2FibGVSYW5nZSwgZXZlbnQsIHRydWUsIHRydWUpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1pbkhhbmRsZUVsZW1lbnQub24oJ21vdXNlZG93bicsXG4gICAgICAgIChldmVudDogTW91c2VFdmVudCk6IHZvaWQgPT4gdGhpcy5vblN0YXJ0KFBvaW50ZXJUeXBlLk1pbiwgZXZlbnQsIHRydWUsIHRydWUpXG4gICAgICApO1xuXG4gICAgICBpZiAodGhpcy5yYW5nZSkge1xuICAgICAgICB0aGlzLm1heEhhbmRsZUVsZW1lbnQub24oJ21vdXNlZG93bicsXG4gICAgICAgICAgKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCA9PiB0aGlzLm9uU3RhcnQoUG9pbnRlclR5cGUuTWF4LCBldmVudCwgdHJ1ZSwgdHJ1ZSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52aWV3T3B0aW9ucy5vbmx5QmluZEhhbmRsZXMpIHtcbiAgICAgICAgdGhpcy5mdWxsQmFyRWxlbWVudC5vbignbW91c2Vkb3duJyxcbiAgICAgICAgICAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHRoaXMub25TdGFydChudWxsLCBldmVudCwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50aWNrc0VsZW1lbnQub24oJ21vdXNlZG93bicsXG4gICAgICAgICAgKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCA9PiB0aGlzLm9uU3RhcnQobnVsbCwgZXZlbnQsIHRydWUsIHRydWUsIHRydWUsIHRydWUpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZpZXdPcHRpb25zLm9ubHlCaW5kSGFuZGxlcykge1xuICAgICAgdGhpcy5zZWxlY3Rpb25CYXJFbGVtZW50Lm9uUGFzc2l2ZSgndG91Y2hzdGFydCcsXG4gICAgICAgIChldmVudDogVG91Y2hFdmVudCk6IHZvaWQgPT4gdGhpcy5vbkJhclN0YXJ0KG51bGwsIGRyYWdnYWJsZVJhbmdlLCBldmVudCwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRyYWdnYWJsZVJhbmdlT25seSkge1xuICAgICAgdGhpcy5taW5IYW5kbGVFbGVtZW50Lm9uUGFzc2l2ZSgndG91Y2hzdGFydCcsXG4gICAgICAgIChldmVudDogVG91Y2hFdmVudCk6IHZvaWQgPT4gdGhpcy5vbkJhclN0YXJ0KFBvaW50ZXJUeXBlLk1pbiwgZHJhZ2dhYmxlUmFuZ2UsIGV2ZW50LCB0cnVlLCB0cnVlKVxuICAgICAgKTtcbiAgICAgIHRoaXMubWF4SGFuZGxlRWxlbWVudC5vblBhc3NpdmUoJ3RvdWNoc3RhcnQnLFxuICAgICAgICAoZXZlbnQ6IFRvdWNoRXZlbnQpOiB2b2lkID0+IHRoaXMub25CYXJTdGFydChQb2ludGVyVHlwZS5NYXgsIGRyYWdnYWJsZVJhbmdlLCBldmVudCwgdHJ1ZSwgdHJ1ZSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWluSGFuZGxlRWxlbWVudC5vblBhc3NpdmUoJ3RvdWNoc3RhcnQnLFxuICAgICAgICAoZXZlbnQ6IFRvdWNoRXZlbnQpOiB2b2lkID0+IHRoaXMub25TdGFydChQb2ludGVyVHlwZS5NaW4sIGV2ZW50LCB0cnVlLCB0cnVlKVxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLnJhbmdlKSB7XG4gICAgICAgIHRoaXMubWF4SGFuZGxlRWxlbWVudC5vblBhc3NpdmUoJ3RvdWNoc3RhcnQnLFxuICAgICAgICAgIChldmVudDogVG91Y2hFdmVudCk6IHZvaWQgPT4gdGhpcy5vblN0YXJ0KFBvaW50ZXJUeXBlLk1heCwgZXZlbnQsIHRydWUsIHRydWUpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMudmlld09wdGlvbnMub25seUJpbmRIYW5kbGVzKSB7XG4gICAgICAgIHRoaXMuZnVsbEJhckVsZW1lbnQub25QYXNzaXZlKCd0b3VjaHN0YXJ0JyxcbiAgICAgICAgICAoZXZlbnQ6IFRvdWNoRXZlbnQpOiB2b2lkID0+IHRoaXMub25TdGFydChudWxsLCBldmVudCwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50aWNrc0VsZW1lbnQub25QYXNzaXZlKCd0b3VjaHN0YXJ0JyxcbiAgICAgICAgICAoZXZlbnQ6IFRvdWNoRXZlbnQpOiB2b2lkID0+IHRoaXMub25TdGFydChudWxsLCBldmVudCwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmtleWJvYXJkU3VwcG9ydCkge1xuICAgICAgdGhpcy5taW5IYW5kbGVFbGVtZW50Lm9uKCdmb2N1cycsICgpOiB2b2lkID0+IHRoaXMub25Qb2ludGVyRm9jdXMoUG9pbnRlclR5cGUuTWluKSk7XG4gICAgICBpZiAodGhpcy5yYW5nZSkge1xuICAgICAgICB0aGlzLm1heEhhbmRsZUVsZW1lbnQub24oJ2ZvY3VzJywgKCk6IHZvaWQgPT4gdGhpcy5vblBvaW50ZXJGb2N1cyhQb2ludGVyVHlwZS5NYXgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE9wdGlvbnNJbmZsdWVuY2luZ0V2ZW50QmluZGluZ3Mob3B0aW9uczogT3B0aW9ucyk6IGJvb2xlYW5bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG9wdGlvbnMuZGlzYWJsZWQsXG4gICAgICBvcHRpb25zLnJlYWRPbmx5LFxuICAgICAgb3B0aW9ucy5kcmFnZ2FibGVSYW5nZSxcbiAgICAgIG9wdGlvbnMuZHJhZ2dhYmxlUmFuZ2VPbmx5LFxuICAgICAgb3B0aW9ucy5vbmx5QmluZEhhbmRsZXMsXG4gICAgICBvcHRpb25zLmtleWJvYXJkU3VwcG9ydFxuICAgIF07XG4gIH1cblxuICAvLyBVbmJpbmQgbW91c2UgYW5kIHRvdWNoIGV2ZW50cyB0byBzbGlkZXIgaGFuZGxlc1xuICBwcml2YXRlIHVuYmluZEV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlT25Nb3ZlKCk7XG4gICAgdGhpcy51bnN1YnNjcmliZU9uRW5kKCk7XG5cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5nZXRBbGxTbGlkZXJFbGVtZW50cygpKSB7XG4gICAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKGVsZW1lbnQpKSB7XG4gICAgICAgIGVsZW1lbnQub2ZmKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkJhclN0YXJ0KHBvaW50ZXJUeXBlOiBQb2ludGVyVHlwZSwgZHJhZ2dhYmxlUmFuZ2U6IGJvb2xlYW4sIGV2ZW50OiBNb3VzZUV2ZW50fFRvdWNoRXZlbnQsXG4gICAgYmluZE1vdmU6IGJvb2xlYW4sIGJpbmRFbmQ6IGJvb2xlYW4sIHNpbXVsYXRlSW1tZWRpYXRlTW92ZT86IGJvb2xlYW4sIHNpbXVsYXRlSW1tZWRpYXRlRW5kPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChkcmFnZ2FibGVSYW5nZSkge1xuICAgICAgdGhpcy5vbkRyYWdTdGFydChwb2ludGVyVHlwZSwgZXZlbnQsIGJpbmRNb3ZlLCBiaW5kRW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vblN0YXJ0KHBvaW50ZXJUeXBlLCBldmVudCwgYmluZE1vdmUsIGJpbmRFbmQsIHNpbXVsYXRlSW1tZWRpYXRlTW92ZSwgc2ltdWxhdGVJbW1lZGlhdGVFbmQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG9uU3RhcnQgZXZlbnQgaGFuZGxlclxuICBwcml2YXRlIG9uU3RhcnQocG9pbnRlclR5cGU6IFBvaW50ZXJUeXBlLCBldmVudDogTW91c2VFdmVudHxUb3VjaEV2ZW50LFxuICAgICAgYmluZE1vdmU6IGJvb2xlYW4sIGJpbmRFbmQ6IGJvb2xlYW4sIHNpbXVsYXRlSW1tZWRpYXRlTW92ZT86IGJvb2xlYW4sIHNpbXVsYXRlSW1tZWRpYXRlRW5kPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vIE9ubHkgY2FsbCBwcmV2ZW50RGVmYXVsdCgpIHdoZW4gaGFuZGxpbmcgbm9uLXBhc3NpdmUgZXZlbnRzIChwYXNzaXZlIGV2ZW50cyBkb24ndCBuZWVkIGl0KVxuICAgIGlmICghQ29tcGF0aWJpbGl0eUhlbHBlci5pc1RvdWNoRXZlbnQoZXZlbnQpIHx8ICFkZXRlY3RQYXNzaXZlRXZlbnRzLmhhc1N1cHBvcnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5tb3ZpbmcgPSBmYWxzZTtcblxuICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhpcyBpbiBjYXNlIHRoZSBIVE1MIHdoZXJlIHRoZSBzbGlkZXJzIGFyZSBvblxuICAgIC8vIGhhdmUgYmVlbiBhbmltYXRlZCBpbnRvIHZpZXcuXG4gICAgdGhpcy5jYWxjdWxhdGVWaWV3RGltZW5zaW9ucygpO1xuXG4gICAgaWYgKFZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHBvaW50ZXJUeXBlKSkge1xuICAgICAgcG9pbnRlclR5cGUgPSB0aGlzLmdldE5lYXJlc3RIYW5kbGUoZXZlbnQpO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFRyYWNraW5nUG9pbnRlciA9IHBvaW50ZXJUeXBlO1xuXG4gICAgY29uc3QgcG9pbnRlckVsZW1lbnQ6IFNsaWRlckhhbmRsZURpcmVjdGl2ZSA9IHRoaXMuZ2V0UG9pbnRlckVsZW1lbnQocG9pbnRlclR5cGUpO1xuICAgIHBvaW50ZXJFbGVtZW50LmFjdGl2ZSA9IHRydWU7XG5cbiAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5rZXlib2FyZFN1cHBvcnQpIHtcbiAgICAgIHBvaW50ZXJFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgaWYgKGJpbmRNb3ZlKSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlT25Nb3ZlKCk7XG5cbiAgICAgIGNvbnN0IG9uTW92ZUNhbGxiYWNrOiAoKGU6IE1vdXNlRXZlbnR8VG91Y2hFdmVudCkgPT4gdm9pZCkgPVxuICAgICAgICAoZTogTW91c2VFdmVudHxUb3VjaEV2ZW50KTogdm9pZCA9PiB0aGlzLmRyYWdnaW5nLmFjdGl2ZSA/IHRoaXMub25EcmFnTW92ZShlKSA6IHRoaXMub25Nb3ZlKGUpO1xuXG4gICAgICBpZiAoQ29tcGF0aWJpbGl0eUhlbHBlci5pc1RvdWNoRXZlbnQoZXZlbnQpKSB7XG4gICAgICAgIHRoaXMub25Nb3ZlRXZlbnRMaXN0ZW5lciA9IHRoaXMuZXZlbnRMaXN0ZW5lckhlbHBlci5hdHRhY2hQYXNzaXZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICBkb2N1bWVudCwgJ3RvdWNobW92ZScsIG9uTW92ZUNhbGxiYWNrLCB0aGlzLnZpZXdPcHRpb25zLnRvdWNoRXZlbnRzSW50ZXJ2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vbk1vdmVFdmVudExpc3RlbmVyID0gdGhpcy5ldmVudExpc3RlbmVySGVscGVyLmF0dGFjaEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgZG9jdW1lbnQsICdtb3VzZW1vdmUnLCBvbk1vdmVDYWxsYmFjaywgdGhpcy52aWV3T3B0aW9ucy5tb3VzZUV2ZW50c0ludGVydmFsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYmluZEVuZCkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZU9uRW5kKCk7XG5cbiAgICAgIGNvbnN0IG9uRW5kQ2FsbGJhY2s6ICgoZTogTW91c2VFdmVudHxUb3VjaEV2ZW50KSA9PiB2b2lkKSA9XG4gICAgICAgIChlOiBNb3VzZUV2ZW50fFRvdWNoRXZlbnQpOiB2b2lkID0+IHRoaXMub25FbmQoZSk7XG5cbiAgICAgIGlmIChDb21wYXRpYmlsaXR5SGVscGVyLmlzVG91Y2hFdmVudChldmVudCkpIHtcbiAgICAgICAgdGhpcy5vbkVuZEV2ZW50TGlzdGVuZXIgPSB0aGlzLmV2ZW50TGlzdGVuZXJIZWxwZXIuYXR0YWNoUGFzc2l2ZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsICd0b3VjaGVuZCcsIG9uRW5kQ2FsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vbkVuZEV2ZW50TGlzdGVuZXIgPSB0aGlzLmV2ZW50TGlzdGVuZXJIZWxwZXIuYXR0YWNoRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwgJ21vdXNldXAnLCBvbkVuZENhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVzZXJDaGFuZ2VTdGFydC5lbWl0KHRoaXMuZ2V0Q2hhbmdlQ29udGV4dCgpKTtcblxuICAgIGlmIChDb21wYXRpYmlsaXR5SGVscGVyLmlzVG91Y2hFdmVudChldmVudCkgJiYgIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKChldmVudCBhcyBUb3VjaEV2ZW50KS5jaGFuZ2VkVG91Y2hlcykpIHtcbiAgICAgIC8vIFN0b3JlIHRoZSB0b3VjaCBpZGVudGlmaWVyXG4gICAgICBpZiAoVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy50b3VjaElkKSkge1xuICAgICAgICB0aGlzLnRvdWNoSWQgPSAoZXZlbnQgYXMgVG91Y2hFdmVudCkuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGljayBldmVudHMsIGVpdGhlciB3aXRoIG1vdXNlIG9yIHRvdWNoIGdlc3R1cmUgYXJlIHdlaXJkLiBTb21ldGltZXMgdGhleSByZXN1bHQgaW4gZnVsbFxuICAgIC8vIHN0YXJ0LCBtb3ZlLCBlbmQgc2VxdWVuY2UsIGFuZCBzb21ldGltZXMsIHRoZXkgZG9uJ3QgLSB0aGV5IG9ubHkgaW52b2tlIG1vdXNlZG93blxuICAgIC8vIEFzIGEgd29ya2Fyb3VuZCwgd2Ugc2ltdWxhdGUgdGhlIGZpcnN0IG1vdmUgZXZlbnQgYW5kIHRoZSBlbmQgZXZlbnQgaWYgaXQncyBuZWNlc3NhcnlcbiAgICBpZiAoc2ltdWxhdGVJbW1lZGlhdGVNb3ZlKSB7XG4gICAgICB0aGlzLm9uTW92ZShldmVudCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHNpbXVsYXRlSW1tZWRpYXRlRW5kKSB7XG4gICAgICB0aGlzLm9uRW5kKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBvbk1vdmUgZXZlbnQgaGFuZGxlclxuICBwcml2YXRlIG9uTW92ZShldmVudDogTW91c2VFdmVudHxUb3VjaEV2ZW50LCBmcm9tVGljaz86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBsZXQgdG91Y2hGb3JUaGlzU2xpZGVyOiBUb3VjaCA9IG51bGw7XG5cbiAgICBpZiAoQ29tcGF0aWJpbGl0eUhlbHBlci5pc1RvdWNoRXZlbnQoZXZlbnQpKSB7XG4gICAgICBjb25zdCBjaGFuZ2VkVG91Y2hlczogVG91Y2hMaXN0ID0gKGV2ZW50IGFzIFRvdWNoRXZlbnQpLmNoYW5nZWRUb3VjaGVzO1xuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyID09PSB0aGlzLnRvdWNoSWQpIHtcbiAgICAgICAgICB0b3VjaEZvclRoaXNTbGlkZXIgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodG91Y2hGb3JUaGlzU2xpZGVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlld09wdGlvbnMuYW5pbWF0ZSAmJiAhdGhpcy52aWV3T3B0aW9ucy5hbmltYXRlT25Nb3ZlKSB7XG4gICAgICBpZiAodGhpcy5tb3ZpbmcpIHtcbiAgICAgICAgdGhpcy5zbGlkZXJFbGVtZW50QW5pbWF0ZUNsYXNzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5tb3ZpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgbmV3UG9zOiBudW1iZXIgPSAhVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodG91Y2hGb3JUaGlzU2xpZGVyKVxuICAgICAgPyB0aGlzLmdldEV2ZW50UG9zaXRpb24oZXZlbnQsIHRvdWNoRm9yVGhpc1NsaWRlci5pZGVudGlmaWVyKVxuICAgICAgOiB0aGlzLmdldEV2ZW50UG9zaXRpb24oZXZlbnQpO1xuICAgIGxldCBuZXdWYWx1ZTogbnVtYmVyO1xuICAgIGNvbnN0IGNlaWxWYWx1ZTogbnVtYmVyID0gdGhpcy52aWV3T3B0aW9ucy5yaWdodFRvTGVmdFxuICAgICAgICA/IHRoaXMudmlld09wdGlvbnMuZmxvb3JcbiAgICAgICAgOiB0aGlzLnZpZXdPcHRpb25zLmNlaWw7XG4gICAgY29uc3QgZmxvb3JWYWx1ZTogbnVtYmVyID0gdGhpcy52aWV3T3B0aW9ucy5yaWdodFRvTGVmdCA/IHRoaXMudmlld09wdGlvbnMuY2VpbCA6IHRoaXMudmlld09wdGlvbnMuZmxvb3I7XG5cbiAgICBpZiAobmV3UG9zIDw9IDApIHtcbiAgICAgIG5ld1ZhbHVlID0gZmxvb3JWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKG5ld1BvcyA+PSB0aGlzLm1heEhhbmRsZVBvc2l0aW9uKSB7XG4gICAgICBuZXdWYWx1ZSA9IGNlaWxWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VmFsdWUgPSB0aGlzLnBvc2l0aW9uVG9WYWx1ZShuZXdQb3MpO1xuICAgICAgaWYgKGZyb21UaWNrICYmICFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZpZXdPcHRpb25zLnRpY2tTdGVwKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IHRoaXMucm91bmRTdGVwKG5ld1ZhbHVlLCB0aGlzLnZpZXdPcHRpb25zLnRpY2tTdGVwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdGhpcy5yb3VuZFN0ZXAobmV3VmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBvc2l0aW9uVHJhY2tpbmdIYW5kbGUobmV3VmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkVuZChldmVudDogTW91c2VFdmVudHxUb3VjaEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKENvbXBhdGliaWxpdHlIZWxwZXIuaXNUb3VjaEV2ZW50KGV2ZW50KSkge1xuICAgICAgY29uc3QgY2hhbmdlZFRvdWNoZXM6IFRvdWNoTGlzdCA9IChldmVudCBhcyBUb3VjaEV2ZW50KS5jaGFuZ2VkVG91Y2hlcztcbiAgICAgIGlmIChjaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyICE9PSB0aGlzLnRvdWNoSWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubW92aW5nID0gZmFsc2U7XG4gICAgaWYgKHRoaXMudmlld09wdGlvbnMuYW5pbWF0ZSkge1xuICAgICAgdGhpcy5zbGlkZXJFbGVtZW50QW5pbWF0ZUNsYXNzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnRvdWNoSWQgPSBudWxsO1xuXG4gICAgaWYgKCF0aGlzLnZpZXdPcHRpb25zLmtleWJvYXJkU3VwcG9ydCkge1xuICAgICAgdGhpcy5taW5IYW5kbGVFbGVtZW50LmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5tYXhIYW5kbGVFbGVtZW50LmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5jdXJyZW50VHJhY2tpbmdQb2ludGVyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5kcmFnZ2luZy5hY3RpdmUgPSBmYWxzZTtcblxuICAgIHRoaXMudW5zdWJzY3JpYmVPbk1vdmUoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlT25FbmQoKTtcblxuICAgIHRoaXMudXNlckNoYW5nZUVuZC5lbWl0KHRoaXMuZ2V0Q2hhbmdlQ29udGV4dCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Qb2ludGVyRm9jdXMocG9pbnRlclR5cGU6IFBvaW50ZXJUeXBlKTogdm9pZCB7XG4gICAgY29uc3QgcG9pbnRlckVsZW1lbnQ6IFNsaWRlckhhbmRsZURpcmVjdGl2ZSA9IHRoaXMuZ2V0UG9pbnRlckVsZW1lbnQocG9pbnRlclR5cGUpO1xuICAgIHBvaW50ZXJFbGVtZW50Lm9uKCdibHVyJywgKCk6IHZvaWQgPT4gdGhpcy5vblBvaW50ZXJCbHVyKHBvaW50ZXJFbGVtZW50KSk7XG4gICAgcG9pbnRlckVsZW1lbnQub24oJ2tleWRvd24nLCAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHRoaXMub25LZXlib2FyZEV2ZW50KGV2ZW50KSk7XG4gICAgcG9pbnRlckVsZW1lbnQub24oJ2tleXVwJywgKCk6IHZvaWQgPT4gdGhpcy5vbktleVVwKCkpO1xuICAgIHBvaW50ZXJFbGVtZW50LmFjdGl2ZSA9IHRydWU7XG5cbiAgICB0aGlzLmN1cnJlbnRUcmFja2luZ1BvaW50ZXIgPSBwb2ludGVyVHlwZTtcbiAgICB0aGlzLmN1cnJlbnRGb2N1c1BvaW50ZXIgPSBwb2ludGVyVHlwZTtcbiAgICB0aGlzLmZpcnN0S2V5RG93biA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIG9uS2V5VXAoKTogdm9pZCB7XG4gICAgdGhpcy5maXJzdEtleURvd24gPSB0cnVlO1xuICAgIHRoaXMudXNlckNoYW5nZUVuZC5lbWl0KHRoaXMuZ2V0Q2hhbmdlQ29udGV4dCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Qb2ludGVyQmx1cihwb2ludGVyOiBTbGlkZXJIYW5kbGVEaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBwb2ludGVyLm9mZignYmx1cicpO1xuICAgIHBvaW50ZXIub2ZmKCdrZXlkb3duJyk7XG4gICAgcG9pbnRlci5vZmYoJ2tleXVwJyk7XG4gICAgcG9pbnRlci5hY3RpdmUgPSBmYWxzZTtcbiAgICBpZiAoVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy50b3VjaElkKSkge1xuICAgICAgdGhpcy5jdXJyZW50VHJhY2tpbmdQb2ludGVyID0gbnVsbDtcbiAgICAgIHRoaXMuY3VycmVudEZvY3VzUG9pbnRlciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRLZXlBY3Rpb25zKGN1cnJlbnRWYWx1ZTogbnVtYmVyKToge1trZXk6IHN0cmluZ106IG51bWJlcn0ge1xuICAgIGNvbnN0IHZhbHVlUmFuZ2U6IG51bWJlciA9IHRoaXMudmlld09wdGlvbnMuY2VpbCAtIHRoaXMudmlld09wdGlvbnMuZmxvb3I7XG5cbiAgICBsZXQgaW5jcmVhc2VTdGVwOiBudW1iZXIgPSBjdXJyZW50VmFsdWUgKyB0aGlzLnZpZXdPcHRpb25zLnN0ZXA7XG4gICAgbGV0IGRlY3JlYXNlU3RlcDogbnVtYmVyID0gY3VycmVudFZhbHVlIC0gdGhpcy52aWV3T3B0aW9ucy5zdGVwO1xuICAgIGxldCBpbmNyZWFzZVBhZ2U6IG51bWJlciA9IGN1cnJlbnRWYWx1ZSArIHZhbHVlUmFuZ2UgLyAxMDtcbiAgICBsZXQgZGVjcmVhc2VQYWdlOiBudW1iZXIgPSBjdXJyZW50VmFsdWUgLSB2YWx1ZVJhbmdlIC8gMTA7XG5cbiAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5yZXZlcnNlZENvbnRyb2xzKSB7XG4gICAgICBpbmNyZWFzZVN0ZXAgPSBjdXJyZW50VmFsdWUgLSB0aGlzLnZpZXdPcHRpb25zLnN0ZXA7XG4gICAgICBkZWNyZWFzZVN0ZXAgPSBjdXJyZW50VmFsdWUgKyB0aGlzLnZpZXdPcHRpb25zLnN0ZXA7XG4gICAgICBpbmNyZWFzZVBhZ2UgPSBjdXJyZW50VmFsdWUgLSB2YWx1ZVJhbmdlIC8gMTA7XG4gICAgICBkZWNyZWFzZVBhZ2UgPSBjdXJyZW50VmFsdWUgKyB2YWx1ZVJhbmdlIC8gMTA7XG4gICAgfVxuXG4gICAgLy8gTGVmdCB0byByaWdodCBkZWZhdWx0IGFjdGlvbnNcbiAgICBjb25zdCBhY3Rpb25zOiB7W2tleTogc3RyaW5nXTogbnVtYmVyfSA9IHtcbiAgICAgIFVQOiBpbmNyZWFzZVN0ZXAsXG4gICAgICBET1dOOiBkZWNyZWFzZVN0ZXAsXG4gICAgICBMRUZUOiBkZWNyZWFzZVN0ZXAsXG4gICAgICBSSUdIVDogaW5jcmVhc2VTdGVwLFxuICAgICAgUEFHRVVQOiBpbmNyZWFzZVBhZ2UsXG4gICAgICBQQUdFRE9XTjogZGVjcmVhc2VQYWdlLFxuICAgICAgSE9NRTogdGhpcy52aWV3T3B0aW9ucy5yZXZlcnNlZENvbnRyb2xzID8gdGhpcy52aWV3T3B0aW9ucy5jZWlsIDogdGhpcy52aWV3T3B0aW9ucy5mbG9vcixcbiAgICAgIEVORDogdGhpcy52aWV3T3B0aW9ucy5yZXZlcnNlZENvbnRyb2xzID8gdGhpcy52aWV3T3B0aW9ucy5mbG9vciA6IHRoaXMudmlld09wdGlvbnMuY2VpbCxcbiAgICB9O1xuICAgIC8vIHJpZ2h0IHRvIGxlZnQgbWVhbnMgc3dhcHBpbmcgcmlnaHQgYW5kIGxlZnQgYXJyb3dzXG4gICAgaWYgKHRoaXMudmlld09wdGlvbnMucmlnaHRUb0xlZnQpIHtcbiAgICAgIGFjdGlvbnMuTEVGVCA9IGluY3JlYXNlU3RlcDtcbiAgICAgIGFjdGlvbnMuUklHSFQgPSBkZWNyZWFzZVN0ZXA7XG4gICAgICAvLyByaWdodCB0byBsZWZ0IGFuZCB2ZXJ0aWNhbCBtZWFucyB3ZSBhbHNvIHN3YXAgdXAgYW5kIGRvd25cbiAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLnZlcnRpY2FsKSB7XG4gICAgICAgIGFjdGlvbnMuVVAgPSBkZWNyZWFzZVN0ZXA7XG4gICAgICAgIGFjdGlvbnMuRE9XTiA9IGluY3JlYXNlU3RlcDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIG9uS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZTogbnVtYmVyID0gdGhpcy5nZXRDdXJyZW50VHJhY2tpbmdWYWx1ZSgpO1xuICAgIGNvbnN0IGtleUNvZGU6IG51bWJlciA9ICFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZChldmVudC5rZXlDb2RlKVxuICAgICAgPyBldmVudC5rZXlDb2RlXG4gICAgICA6IGV2ZW50LndoaWNoO1xuICAgIGNvbnN0IGtleXM6IHtba2V5Q29kZTogbnVtYmVyXTogc3RyaW5nfSA9IHtcbiAgICAgICAgMzg6ICdVUCcsXG4gICAgICAgIDQwOiAnRE9XTicsXG4gICAgICAgIDM3OiAnTEVGVCcsXG4gICAgICAgIDM5OiAnUklHSFQnLFxuICAgICAgICAzMzogJ1BBR0VVUCcsXG4gICAgICAgIDM0OiAnUEFHRURPV04nLFxuICAgICAgICAzNjogJ0hPTUUnLFxuICAgICAgICAzNTogJ0VORCcsXG4gICAgICB9O1xuICAgIGNvbnN0IGFjdGlvbnM6IHtba2V5OiBzdHJpbmddOiBudW1iZXJ9ID0gdGhpcy5nZXRLZXlBY3Rpb25zKGN1cnJlbnRWYWx1ZSk7XG4gICAgY29uc3Qga2V5OiBzdHJpbmcgPSBrZXlzW2tleUNvZGVdO1xuICAgIGNvbnN0IGFjdGlvbjogbnVtYmVyID0gYWN0aW9uc1trZXldO1xuXG4gICAgaWYgKFZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKGFjdGlvbikgfHwgVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5jdXJyZW50VHJhY2tpbmdQb2ludGVyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKHRoaXMuZmlyc3RLZXlEb3duKSB7XG4gICAgICB0aGlzLmZpcnN0S2V5RG93biA9IGZhbHNlO1xuICAgICAgdGhpcy51c2VyQ2hhbmdlU3RhcnQuZW1pdCh0aGlzLmdldENoYW5nZUNvbnRleHQoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aW9uVmFsdWU6IG51bWJlciA9IE1hdGhIZWxwZXIuY2xhbXBUb1JhbmdlKGFjdGlvbiwgdGhpcy52aWV3T3B0aW9ucy5mbG9vciwgdGhpcy52aWV3T3B0aW9ucy5jZWlsKTtcbiAgICBjb25zdCBuZXdWYWx1ZTogbnVtYmVyID0gdGhpcy5yb3VuZFN0ZXAoYWN0aW9uVmFsdWUpO1xuICAgIGlmICghdGhpcy52aWV3T3B0aW9ucy5kcmFnZ2FibGVSYW5nZU9ubHkpIHtcbiAgICAgIHRoaXMucG9zaXRpb25UcmFja2luZ0hhbmRsZShuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRpZmZlcmVuY2U6IG51bWJlciA9IHRoaXMudmlld0hpZ2hWYWx1ZSAtIHRoaXMudmlld0xvd1ZhbHVlO1xuICAgICAgbGV0IG5ld01pblZhbHVlOiBudW1iZXI7XG4gICAgICBsZXQgbmV3TWF4VmFsdWU6IG51bWJlcjtcblxuICAgICAgaWYgKHRoaXMuY3VycmVudFRyYWNraW5nUG9pbnRlciA9PT0gUG9pbnRlclR5cGUuTWluKSB7XG4gICAgICAgIG5ld01pblZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIG5ld01heFZhbHVlID0gbmV3VmFsdWUgKyBkaWZmZXJlbmNlO1xuICAgICAgICBpZiAobmV3TWF4VmFsdWUgPiB0aGlzLnZpZXdPcHRpb25zLmNlaWwpIHtcbiAgICAgICAgICBuZXdNYXhWYWx1ZSA9IHRoaXMudmlld09wdGlvbnMuY2VpbDtcbiAgICAgICAgICBuZXdNaW5WYWx1ZSA9IG5ld01heFZhbHVlIC0gZGlmZmVyZW5jZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRUcmFja2luZ1BvaW50ZXIgPT09IFBvaW50ZXJUeXBlLk1heCkge1xuICAgICAgICBuZXdNYXhWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICBuZXdNaW5WYWx1ZSA9IG5ld1ZhbHVlIC0gZGlmZmVyZW5jZTtcbiAgICAgICAgaWYgKG5ld01pblZhbHVlIDwgdGhpcy52aWV3T3B0aW9ucy5mbG9vcikge1xuICAgICAgICAgIG5ld01pblZhbHVlID0gdGhpcy52aWV3T3B0aW9ucy5mbG9vcjtcbiAgICAgICAgICBuZXdNYXhWYWx1ZSA9IG5ld01pblZhbHVlICsgZGlmZmVyZW5jZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5wb3NpdGlvblRyYWNraW5nQmFyKG5ld01pblZhbHVlLCBuZXdNYXhWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gb25EcmFnU3RhcnQgZXZlbnQgaGFuZGxlciwgaGFuZGxlcyBkcmFnZ2luZyBvZiB0aGUgbWlkZGxlIGJhclxuICBwcml2YXRlIG9uRHJhZ1N0YXJ0KHBvaW50ZXJUeXBlOiBQb2ludGVyVHlwZSwgZXZlbnQ6IE1vdXNlRXZlbnR8VG91Y2hFdmVudCxcbiAgICBiaW5kTW92ZTogYm9vbGVhbiwgYmluZEVuZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHBvc2l0aW9uOiBudW1iZXIgPSB0aGlzLmdldEV2ZW50UG9zaXRpb24oZXZlbnQpO1xuXG4gICAgdGhpcy5kcmFnZ2luZyA9IG5ldyBEcmFnZ2luZygpO1xuICAgIHRoaXMuZHJhZ2dpbmcuYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLmRyYWdnaW5nLnZhbHVlID0gdGhpcy5wb3NpdGlvblRvVmFsdWUocG9zaXRpb24pO1xuICAgIHRoaXMuZHJhZ2dpbmcuZGlmZmVyZW5jZSA9IHRoaXMudmlld0hpZ2hWYWx1ZSAtIHRoaXMudmlld0xvd1ZhbHVlO1xuICAgIHRoaXMuZHJhZ2dpbmcubG93TGltaXQgPSB0aGlzLnZpZXdPcHRpb25zLnJpZ2h0VG9MZWZ0XG4gICAgICAgID8gdGhpcy5taW5IYW5kbGVFbGVtZW50LnBvc2l0aW9uIC0gcG9zaXRpb25cbiAgICAgICAgOiBwb3NpdGlvbiAtIHRoaXMubWluSGFuZGxlRWxlbWVudC5wb3NpdGlvbjtcbiAgICB0aGlzLmRyYWdnaW5nLmhpZ2hMaW1pdCA9IHRoaXMudmlld09wdGlvbnMucmlnaHRUb0xlZnRcbiAgICAgICAgPyBwb3NpdGlvbiAtIHRoaXMubWF4SGFuZGxlRWxlbWVudC5wb3NpdGlvblxuICAgICAgICA6IHRoaXMubWF4SGFuZGxlRWxlbWVudC5wb3NpdGlvbiAtIHBvc2l0aW9uO1xuXG4gICAgdGhpcy5vblN0YXJ0KHBvaW50ZXJUeXBlLCBldmVudCwgYmluZE1vdmUsIGJpbmRFbmQpO1xuICB9XG5cbiAgLyoqIEdldCBtaW4gdmFsdWUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5ld1BvcyBpcyBvdXRPZkJvdW5kcyBhYm92ZSBvciBiZWxvdyB0aGUgYmFyIGFuZCByaWdodFRvTGVmdCAqL1xuICBwcml2YXRlIGdldE1pblZhbHVlKG5ld1BvczogbnVtYmVyLCBvdXRPZkJvdW5kczogYm9vbGVhbiwgaXNBYm92ZTogYm9vbGVhbik6IG51bWJlciB7XG4gICAgY29uc3QgaXNSVEw6IGJvb2xlYW4gPSB0aGlzLnZpZXdPcHRpb25zLnJpZ2h0VG9MZWZ0O1xuICAgIGxldCB2YWx1ZTogbnVtYmVyID0gbnVsbDtcblxuICAgIGlmIChvdXRPZkJvdW5kcykge1xuICAgICAgaWYgKGlzQWJvdmUpIHtcbiAgICAgICAgdmFsdWUgPSBpc1JUTFxuICAgICAgICAgID8gdGhpcy52aWV3T3B0aW9ucy5mbG9vclxuICAgICAgICAgIDogdGhpcy52aWV3T3B0aW9ucy5jZWlsIC0gdGhpcy5kcmFnZ2luZy5kaWZmZXJlbmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBpc1JUTFxuICAgICAgICAgID8gdGhpcy52aWV3T3B0aW9ucy5jZWlsIC0gdGhpcy5kcmFnZ2luZy5kaWZmZXJlbmNlXG4gICAgICAgICAgOiB0aGlzLnZpZXdPcHRpb25zLmZsb29yO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IGlzUlRMXG4gICAgICAgID8gdGhpcy5wb3NpdGlvblRvVmFsdWUobmV3UG9zICsgdGhpcy5kcmFnZ2luZy5sb3dMaW1pdClcbiAgICAgICAgOiB0aGlzLnBvc2l0aW9uVG9WYWx1ZShuZXdQb3MgLSB0aGlzLmRyYWdnaW5nLmxvd0xpbWl0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucm91bmRTdGVwKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBHZXQgbWF4IHZhbHVlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuZXdQb3MgaXMgb3V0T2ZCb3VuZHMgYWJvdmUgb3IgYmVsb3cgdGhlIGJhciBhbmQgcmlnaHRUb0xlZnQgKi9cbiAgcHJpdmF0ZSBnZXRNYXhWYWx1ZShuZXdQb3M6IG51bWJlciwgb3V0T2ZCb3VuZHM6IGJvb2xlYW4sIGlzQWJvdmU6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIGNvbnN0IGlzUlRMOiBib29sZWFuID0gdGhpcy52aWV3T3B0aW9ucy5yaWdodFRvTGVmdDtcbiAgICBsZXQgdmFsdWU6IG51bWJlciA9IG51bGw7XG5cbiAgICBpZiAob3V0T2ZCb3VuZHMpIHtcbiAgICAgIGlmIChpc0Fib3ZlKSB7XG4gICAgICAgIHZhbHVlID0gaXNSVExcbiAgICAgICAgICA/IHRoaXMudmlld09wdGlvbnMuZmxvb3IgKyB0aGlzLmRyYWdnaW5nLmRpZmZlcmVuY2VcbiAgICAgICAgICA6IHRoaXMudmlld09wdGlvbnMuY2VpbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gaXNSVExcbiAgICAgICAgICA/IHRoaXMudmlld09wdGlvbnMuY2VpbFxuICAgICAgICAgIDogdGhpcy52aWV3T3B0aW9ucy5mbG9vciArIHRoaXMuZHJhZ2dpbmcuZGlmZmVyZW5jZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzUlRMKSB7XG4gICAgICAgIHZhbHVlID1cbiAgICAgICAgICB0aGlzLnBvc2l0aW9uVG9WYWx1ZShuZXdQb3MgKyB0aGlzLmRyYWdnaW5nLmxvd0xpbWl0KSArXG4gICAgICAgICAgdGhpcy5kcmFnZ2luZy5kaWZmZXJlbmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPVxuICAgICAgICAgIHRoaXMucG9zaXRpb25Ub1ZhbHVlKG5ld1BvcyAtIHRoaXMuZHJhZ2dpbmcubG93TGltaXQpICtcbiAgICAgICAgICB0aGlzLmRyYWdnaW5nLmRpZmZlcmVuY2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucm91bmRTdGVwKHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgb25EcmFnTW92ZShldmVudD86IE1vdXNlRXZlbnR8VG91Y2hFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG5ld1BvczogbnVtYmVyID0gdGhpcy5nZXRFdmVudFBvc2l0aW9uKGV2ZW50KTtcblxuICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmFuaW1hdGUgJiYgIXRoaXMudmlld09wdGlvbnMuYW5pbWF0ZU9uTW92ZSkge1xuICAgICAgaWYgKHRoaXMubW92aW5nKSB7XG4gICAgICAgIHRoaXMuc2xpZGVyRWxlbWVudEFuaW1hdGVDbGFzcyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubW92aW5nID0gdHJ1ZTtcblxuICAgIGxldCBjZWlsTGltaXQ6IG51bWJlcixcbiAgICAgICAgZmxvb3JMaW1pdDogbnVtYmVyLFxuICAgICAgICBmbG9vckhhbmRsZUVsZW1lbnQ6IFNsaWRlckhhbmRsZURpcmVjdGl2ZSxcbiAgICAgICAgY2VpbEhhbmRsZUVsZW1lbnQ6IFNsaWRlckhhbmRsZURpcmVjdGl2ZTtcbiAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5yaWdodFRvTGVmdCkge1xuICAgICAgY2VpbExpbWl0ID0gdGhpcy5kcmFnZ2luZy5sb3dMaW1pdDtcbiAgICAgIGZsb29yTGltaXQgPSB0aGlzLmRyYWdnaW5nLmhpZ2hMaW1pdDtcbiAgICAgIGZsb29ySGFuZGxlRWxlbWVudCA9IHRoaXMubWF4SGFuZGxlRWxlbWVudDtcbiAgICAgIGNlaWxIYW5kbGVFbGVtZW50ID0gdGhpcy5taW5IYW5kbGVFbGVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBjZWlsTGltaXQgPSB0aGlzLmRyYWdnaW5nLmhpZ2hMaW1pdDtcbiAgICAgIGZsb29yTGltaXQgPSB0aGlzLmRyYWdnaW5nLmxvd0xpbWl0O1xuICAgICAgZmxvb3JIYW5kbGVFbGVtZW50ID0gdGhpcy5taW5IYW5kbGVFbGVtZW50O1xuICAgICAgY2VpbEhhbmRsZUVsZW1lbnQgPSB0aGlzLm1heEhhbmRsZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgaXNVbmRlckZsb29yTGltaXQ6IGJvb2xlYW4gPSAobmV3UG9zIDw9IGZsb29yTGltaXQpO1xuICAgIGNvbnN0IGlzT3ZlckNlaWxMaW1pdDogYm9vbGVhbiA9IChuZXdQb3MgPj0gdGhpcy5tYXhIYW5kbGVQb3NpdGlvbiAtIGNlaWxMaW1pdCk7XG5cbiAgICBsZXQgbmV3TWluVmFsdWU6IG51bWJlcjtcbiAgICBsZXQgbmV3TWF4VmFsdWU6IG51bWJlcjtcbiAgICBpZiAoaXNVbmRlckZsb29yTGltaXQpIHtcbiAgICAgIGlmIChmbG9vckhhbmRsZUVsZW1lbnQucG9zaXRpb24gPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbmV3TWluVmFsdWUgPSB0aGlzLmdldE1pblZhbHVlKG5ld1BvcywgdHJ1ZSwgZmFsc2UpO1xuICAgICAgbmV3TWF4VmFsdWUgPSB0aGlzLmdldE1heFZhbHVlKG5ld1BvcywgdHJ1ZSwgZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoaXNPdmVyQ2VpbExpbWl0KSB7XG4gICAgICBpZiAoY2VpbEhhbmRsZUVsZW1lbnQucG9zaXRpb24gPT09IHRoaXMubWF4SGFuZGxlUG9zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbmV3TWF4VmFsdWUgPSB0aGlzLmdldE1heFZhbHVlKG5ld1BvcywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBuZXdNaW5WYWx1ZSA9IHRoaXMuZ2V0TWluVmFsdWUobmV3UG9zLCB0cnVlLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TWluVmFsdWUgPSB0aGlzLmdldE1pblZhbHVlKG5ld1BvcywgZmFsc2UsIGZhbHNlKTtcbiAgICAgIG5ld01heFZhbHVlID0gdGhpcy5nZXRNYXhWYWx1ZShuZXdQb3MsIGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdGhpcy5wb3NpdGlvblRyYWNraW5nQmFyKG5ld01pblZhbHVlLCBuZXdNYXhWYWx1ZSk7XG4gIH1cblxuICAvLyBTZXQgdGhlIG5ldyB2YWx1ZSBhbmQgcG9zaXRpb24gZm9yIHRoZSBlbnRpcmUgYmFyXG4gIHByaXZhdGUgcG9zaXRpb25UcmFja2luZ0JhcihuZXdNaW5WYWx1ZTogbnVtYmVyLCBuZXdNYXhWYWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZpZXdPcHRpb25zLm1pbkxpbWl0KSAmJlxuICAgICAgICBuZXdNaW5WYWx1ZSA8IHRoaXMudmlld09wdGlvbnMubWluTGltaXQpIHtcbiAgICAgIG5ld01pblZhbHVlID0gdGhpcy52aWV3T3B0aW9ucy5taW5MaW1pdDtcbiAgICAgIG5ld01heFZhbHVlID0gTWF0aEhlbHBlci5yb3VuZFRvUHJlY2lzaW9uTGltaXQobmV3TWluVmFsdWUgKyB0aGlzLmRyYWdnaW5nLmRpZmZlcmVuY2UsIHRoaXMudmlld09wdGlvbnMucHJlY2lzaW9uTGltaXQpO1xuICAgIH1cbiAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMubWF4TGltaXQpICYmXG4gICAgICAgIG5ld01heFZhbHVlID4gdGhpcy52aWV3T3B0aW9ucy5tYXhMaW1pdCkge1xuICAgICAgbmV3TWF4VmFsdWUgPSB0aGlzLnZpZXdPcHRpb25zLm1heExpbWl0O1xuICAgICAgbmV3TWluVmFsdWUgPSBNYXRoSGVscGVyLnJvdW5kVG9QcmVjaXNpb25MaW1pdChuZXdNYXhWYWx1ZSAtIHRoaXMuZHJhZ2dpbmcuZGlmZmVyZW5jZSwgdGhpcy52aWV3T3B0aW9ucy5wcmVjaXNpb25MaW1pdCk7XG4gICAgfVxuXG4gICAgdGhpcy52aWV3TG93VmFsdWUgPSBuZXdNaW5WYWx1ZTtcbiAgICB0aGlzLnZpZXdIaWdoVmFsdWUgPSBuZXdNYXhWYWx1ZTtcbiAgICB0aGlzLmFwcGx5Vmlld0NoYW5nZSgpO1xuICAgIHRoaXMudXBkYXRlSGFuZGxlcyhQb2ludGVyVHlwZS5NaW4sIHRoaXMudmFsdWVUb1Bvc2l0aW9uKG5ld01pblZhbHVlKSk7XG4gICAgdGhpcy51cGRhdGVIYW5kbGVzKFBvaW50ZXJUeXBlLk1heCwgdGhpcy52YWx1ZVRvUG9zaXRpb24obmV3TWF4VmFsdWUpKTtcbiAgfVxuXG4gIC8vIFNldCB0aGUgbmV3IHZhbHVlIGFuZCBwb3NpdGlvbiB0byB0aGUgY3VycmVudCB0cmFja2luZyBoYW5kbGVcbiAgcHJpdmF0ZSBwb3NpdGlvblRyYWNraW5nSGFuZGxlKG5ld1ZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBuZXdWYWx1ZSA9IHRoaXMuYXBwbHlNaW5NYXhMaW1pdChuZXdWYWx1ZSk7XG4gICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLnB1c2hSYW5nZSkge1xuICAgICAgICBuZXdWYWx1ZSA9IHRoaXMuYXBwbHlQdXNoUmFuZ2UobmV3VmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMubm9Td2l0Y2hpbmcpIHtcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50VHJhY2tpbmdQb2ludGVyID09PSBQb2ludGVyVHlwZS5NaW4gJiZcbiAgICAgICAgICAgICAgbmV3VmFsdWUgPiB0aGlzLnZpZXdIaWdoVmFsdWUpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5hcHBseU1pbk1heFJhbmdlKHRoaXMudmlld0hpZ2hWYWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRUcmFja2luZ1BvaW50ZXIgPT09IFBvaW50ZXJUeXBlLk1heCAmJlxuICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPCB0aGlzLnZpZXdMb3dWYWx1ZSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmFwcGx5TWluTWF4UmFuZ2UodGhpcy52aWV3TG93VmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXdWYWx1ZSA9IHRoaXMuYXBwbHlNaW5NYXhSYW5nZShuZXdWYWx1ZSk7XG4gICAgICAgIC8qIFRoaXMgaXMgdG8gY2hlY2sgaWYgd2UgbmVlZCB0byBzd2l0Y2ggdGhlIG1pbiBhbmQgbWF4IGhhbmRsZXMgKi9cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRyYWNraW5nUG9pbnRlciA9PT0gUG9pbnRlclR5cGUuTWluICYmIG5ld1ZhbHVlID4gdGhpcy52aWV3SGlnaFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52aWV3TG93VmFsdWUgPSB0aGlzLnZpZXdIaWdoVmFsdWU7XG4gICAgICAgICAgdGhpcy5hcHBseVZpZXdDaGFuZ2UoKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUhhbmRsZXMoUG9pbnRlclR5cGUuTWluLCB0aGlzLm1heEhhbmRsZUVsZW1lbnQucG9zaXRpb24pO1xuICAgICAgICAgIHRoaXMudXBkYXRlQXJpYUF0dHJpYnV0ZXMoKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRUcmFja2luZ1BvaW50ZXIgPSBQb2ludGVyVHlwZS5NYXg7XG4gICAgICAgICAgdGhpcy5taW5IYW5kbGVFbGVtZW50LmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMubWF4SGFuZGxlRWxlbWVudC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmtleWJvYXJkU3VwcG9ydCkge1xuICAgICAgICAgICAgdGhpcy5tYXhIYW5kbGVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFRyYWNraW5nUG9pbnRlciA9PT0gUG9pbnRlclR5cGUuTWF4ICYmXG4gICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPCB0aGlzLnZpZXdMb3dWYWx1ZSkge1xuICAgICAgICAgIHRoaXMudmlld0hpZ2hWYWx1ZSA9IHRoaXMudmlld0xvd1ZhbHVlO1xuICAgICAgICAgIHRoaXMuYXBwbHlWaWV3Q2hhbmdlKCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVIYW5kbGVzKFBvaW50ZXJUeXBlLk1heCwgdGhpcy5taW5IYW5kbGVFbGVtZW50LnBvc2l0aW9uKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUFyaWFBdHRyaWJ1dGVzKCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VHJhY2tpbmdQb2ludGVyID0gUG9pbnRlclR5cGUuTWluO1xuICAgICAgICAgIHRoaXMubWF4SGFuZGxlRWxlbWVudC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm1pbkhhbmRsZUVsZW1lbnQuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5rZXlib2FyZFN1cHBvcnQpIHtcbiAgICAgICAgICAgIHRoaXMubWluSGFuZGxlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmdldEN1cnJlbnRUcmFja2luZ1ZhbHVlKCkgIT09IG5ld1ZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50VHJhY2tpbmdQb2ludGVyID09PSBQb2ludGVyVHlwZS5NaW4pIHtcbiAgICAgICAgdGhpcy52aWV3TG93VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgdGhpcy5hcHBseVZpZXdDaGFuZ2UoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50VHJhY2tpbmdQb2ludGVyID09PSBQb2ludGVyVHlwZS5NYXgpIHtcbiAgICAgICAgdGhpcy52aWV3SGlnaFZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIHRoaXMuYXBwbHlWaWV3Q2hhbmdlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUhhbmRsZXModGhpcy5jdXJyZW50VHJhY2tpbmdQb2ludGVyLCB0aGlzLnZhbHVlVG9Qb3NpdGlvbihuZXdWYWx1ZSkpO1xuICAgICAgdGhpcy51cGRhdGVBcmlhQXR0cmlidXRlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlNaW5NYXhMaW1pdChuZXdWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMubWluTGltaXQpICYmIG5ld1ZhbHVlIDwgdGhpcy52aWV3T3B0aW9ucy5taW5MaW1pdCkge1xuICAgICAgcmV0dXJuIHRoaXMudmlld09wdGlvbnMubWluTGltaXQ7XG4gICAgfVxuICAgIGlmICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52aWV3T3B0aW9ucy5tYXhMaW1pdCkgJiYgbmV3VmFsdWUgPiB0aGlzLnZpZXdPcHRpb25zLm1heExpbWl0KSB7XG4gICAgICByZXR1cm4gdGhpcy52aWV3T3B0aW9ucy5tYXhMaW1pdDtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1ZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseU1pbk1heFJhbmdlKG5ld1ZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IG9wcG9zaXRlVmFsdWU6IG51bWJlciA9ICh0aGlzLmN1cnJlbnRUcmFja2luZ1BvaW50ZXIgPT09IFBvaW50ZXJUeXBlLk1pbilcbiAgICAgID8gdGhpcy52aWV3SGlnaFZhbHVlXG4gICAgICA6IHRoaXMudmlld0xvd1ZhbHVlO1xuICAgIGNvbnN0IGRpZmZlcmVuY2U6IG51bWJlciA9IE1hdGguYWJzKG5ld1ZhbHVlIC0gb3Bwb3NpdGVWYWx1ZSk7XG4gICAgaWYgKCFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZpZXdPcHRpb25zLm1pblJhbmdlKSkge1xuICAgICAgaWYgKGRpZmZlcmVuY2UgPCB0aGlzLnZpZXdPcHRpb25zLm1pblJhbmdlKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRUcmFja2luZ1BvaW50ZXIgPT09IFBvaW50ZXJUeXBlLk1pbikge1xuICAgICAgICAgIHJldHVybiBNYXRoSGVscGVyLnJvdW5kVG9QcmVjaXNpb25MaW1pdCh0aGlzLnZpZXdIaWdoVmFsdWUgLSB0aGlzLnZpZXdPcHRpb25zLm1pblJhbmdlLCB0aGlzLnZpZXdPcHRpb25zLnByZWNpc2lvbkxpbWl0KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRUcmFja2luZ1BvaW50ZXIgPT09IFBvaW50ZXJUeXBlLk1heCkge1xuICAgICAgICAgIHJldHVybiBNYXRoSGVscGVyLnJvdW5kVG9QcmVjaXNpb25MaW1pdCh0aGlzLnZpZXdMb3dWYWx1ZSArIHRoaXMudmlld09wdGlvbnMubWluUmFuZ2UsIHRoaXMudmlld09wdGlvbnMucHJlY2lzaW9uTGltaXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghVmFsdWVIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52aWV3T3B0aW9ucy5tYXhSYW5nZSkpIHtcbiAgICAgIGlmIChkaWZmZXJlbmNlID4gdGhpcy52aWV3T3B0aW9ucy5tYXhSYW5nZSkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50VHJhY2tpbmdQb2ludGVyID09PSBQb2ludGVyVHlwZS5NaW4pIHtcbiAgICAgICAgICByZXR1cm4gTWF0aEhlbHBlci5yb3VuZFRvUHJlY2lzaW9uTGltaXQodGhpcy52aWV3SGlnaFZhbHVlIC0gdGhpcy52aWV3T3B0aW9ucy5tYXhSYW5nZSwgdGhpcy52aWV3T3B0aW9ucy5wcmVjaXNpb25MaW1pdCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50VHJhY2tpbmdQb2ludGVyID09PSBQb2ludGVyVHlwZS5NYXgpIHtcbiAgICAgICAgICByZXR1cm4gTWF0aEhlbHBlci5yb3VuZFRvUHJlY2lzaW9uTGltaXQodGhpcy52aWV3TG93VmFsdWUgKyB0aGlzLnZpZXdPcHRpb25zLm1heFJhbmdlLCB0aGlzLnZpZXdPcHRpb25zLnByZWNpc2lvbkxpbWl0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3VmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5UHVzaFJhbmdlKG5ld1ZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGRpZmZlcmVuY2U6IG51bWJlciA9ICh0aGlzLmN1cnJlbnRUcmFja2luZ1BvaW50ZXIgPT09IFBvaW50ZXJUeXBlLk1pbilcbiAgICAgICAgICA/IHRoaXMudmlld0hpZ2hWYWx1ZSAtIG5ld1ZhbHVlXG4gICAgICAgICAgOiBuZXdWYWx1ZSAtIHRoaXMudmlld0xvd1ZhbHVlO1xuICAgIGNvbnN0IG1pblJhbmdlOiBudW1iZXIgPSAoIVZhbHVlSGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmlld09wdGlvbnMubWluUmFuZ2UpKVxuICAgICAgICAgID8gdGhpcy52aWV3T3B0aW9ucy5taW5SYW5nZVxuICAgICAgICAgIDogdGhpcy52aWV3T3B0aW9ucy5zdGVwO1xuICAgIGNvbnN0IG1heFJhbmdlOiBudW1iZXIgPSB0aGlzLnZpZXdPcHRpb25zLm1heFJhbmdlO1xuICAgIC8vIGlmIHNtYWxsZXIgdGhhbiBtaW5SYW5nZVxuICAgIGlmIChkaWZmZXJlbmNlIDwgbWluUmFuZ2UpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRUcmFja2luZ1BvaW50ZXIgPT09IFBvaW50ZXJUeXBlLk1pbikge1xuICAgICAgICB0aGlzLnZpZXdIaWdoVmFsdWUgPSBNYXRoSGVscGVyLnJvdW5kVG9QcmVjaXNpb25MaW1pdChcbiAgICAgICAgICBNYXRoLm1pbihuZXdWYWx1ZSArIG1pblJhbmdlLCB0aGlzLnZpZXdPcHRpb25zLmNlaWwpLCB0aGlzLnZpZXdPcHRpb25zLnByZWNpc2lvbkxpbWl0KTtcbiAgICAgICAgbmV3VmFsdWUgPSBNYXRoSGVscGVyLnJvdW5kVG9QcmVjaXNpb25MaW1pdCh0aGlzLnZpZXdIaWdoVmFsdWUgLSBtaW5SYW5nZSwgdGhpcy52aWV3T3B0aW9ucy5wcmVjaXNpb25MaW1pdCk7XG4gICAgICAgIHRoaXMuYXBwbHlWaWV3Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMudXBkYXRlSGFuZGxlcyhQb2ludGVyVHlwZS5NYXgsIHRoaXMudmFsdWVUb1Bvc2l0aW9uKHRoaXMudmlld0hpZ2hWYWx1ZSkpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRUcmFja2luZ1BvaW50ZXIgPT09IFBvaW50ZXJUeXBlLk1heCkge1xuICAgICAgICB0aGlzLnZpZXdMb3dWYWx1ZSA9IE1hdGhIZWxwZXIucm91bmRUb1ByZWNpc2lvbkxpbWl0KFxuICAgICAgICAgIE1hdGgubWF4KG5ld1ZhbHVlIC0gbWluUmFuZ2UsIHRoaXMudmlld09wdGlvbnMuZmxvb3IpLCB0aGlzLnZpZXdPcHRpb25zLnByZWNpc2lvbkxpbWl0KTtcbiAgICAgICAgbmV3VmFsdWUgPSBNYXRoSGVscGVyLnJvdW5kVG9QcmVjaXNpb25MaW1pdCh0aGlzLnZpZXdMb3dWYWx1ZSArIG1pblJhbmdlLCB0aGlzLnZpZXdPcHRpb25zLnByZWNpc2lvbkxpbWl0KTtcbiAgICAgICAgdGhpcy5hcHBseVZpZXdDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy51cGRhdGVIYW5kbGVzKFBvaW50ZXJUeXBlLk1pbiwgdGhpcy52YWx1ZVRvUG9zaXRpb24odGhpcy52aWV3TG93VmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlQXJpYUF0dHJpYnV0ZXMoKTtcbiAgICB9IGVsc2UgaWYgKCFWYWx1ZUhlbHBlci5pc051bGxPclVuZGVmaW5lZChtYXhSYW5nZSkgJiYgZGlmZmVyZW5jZSA+IG1heFJhbmdlKSB7XG4gICAgICAvLyBpZiBncmVhdGVyIHRoYW4gbWF4UmFuZ2VcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRUcmFja2luZ1BvaW50ZXIgPT09IFBvaW50ZXJUeXBlLk1pbikge1xuICAgICAgICB0aGlzLnZpZXdIaWdoVmFsdWUgPSBNYXRoSGVscGVyLnJvdW5kVG9QcmVjaXNpb25MaW1pdChuZXdWYWx1ZSArIG1heFJhbmdlLCB0aGlzLnZpZXdPcHRpb25zLnByZWNpc2lvbkxpbWl0KTtcbiAgICAgICAgdGhpcy5hcHBseVZpZXdDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy51cGRhdGVIYW5kbGVzKFBvaW50ZXJUeXBlLk1heCwgdGhpcy52YWx1ZVRvUG9zaXRpb24odGhpcy52aWV3SGlnaFZhbHVlKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRUcmFja2luZ1BvaW50ZXIgPT09IFBvaW50ZXJUeXBlLk1heCkge1xuICAgICAgICB0aGlzLnZpZXdMb3dWYWx1ZSA9IE1hdGhIZWxwZXIucm91bmRUb1ByZWNpc2lvbkxpbWl0KG5ld1ZhbHVlIC0gbWF4UmFuZ2UsIHRoaXMudmlld09wdGlvbnMucHJlY2lzaW9uTGltaXQpO1xuICAgICAgICB0aGlzLmFwcGx5Vmlld0NoYW5nZSgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUhhbmRsZXMoUG9pbnRlclR5cGUuTWluLCB0aGlzLnZhbHVlVG9Qb3NpdGlvbih0aGlzLnZpZXdMb3dWYWx1ZSkpO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVBcmlhQXR0cmlidXRlcygpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3VmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldENoYW5nZUNvbnRleHQoKTogQ2hhbmdlQ29udGV4dCB7XG4gICAgY29uc3QgY2hhbmdlQ29udGV4dDogQ2hhbmdlQ29udGV4dCA9IG5ldyBDaGFuZ2VDb250ZXh0KCk7XG4gICAgY2hhbmdlQ29udGV4dC5wb2ludGVyVHlwZSA9IHRoaXMuY3VycmVudFRyYWNraW5nUG9pbnRlcjtcbiAgICBjaGFuZ2VDb250ZXh0LnZhbHVlID0gK3RoaXMudmFsdWU7XG4gICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgIGNoYW5nZUNvbnRleHQuaGlnaFZhbHVlID0gK3RoaXMuaGlnaFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gY2hhbmdlQ29udGV4dDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LXNsaWRlci10b29sdGlwLXdyYXBwZXInLFxuICB0ZW1wbGF0ZTogYDxuZy1jb250YWluZXIgKm5nSWY9XCJ0ZW1wbGF0ZVwiPlxuICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDoge3Rvb2x0aXA6IHRvb2x0aXAsIHBsYWNlbWVudDogcGxhY2VtZW50LCBjb250ZW50OiBjb250ZW50fVwiPjwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0ZW1wbGF0ZVwiPlxuICA8ZGl2IGNsYXNzPVwibmd4LXNsaWRlci1pbm5lci10b29sdGlwXCIgW2F0dHIudGl0bGVdPVwidG9vbHRpcFwiIFthdHRyLmRhdGEtdG9vbHRpcC1wbGFjZW1lbnRdPVwicGxhY2VtZW50XCI+XG4gICAge3tjb250ZW50fX1cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5gLFxuICBzdHlsZXM6IFtgLm5neC1zbGlkZXItaW5uZXItdG9vbHRpcHtoZWlnaHQ6MTAwJX1gXVxufSlcbmV4cG9ydCBjbGFzcyBUb29sdGlwV3JhcHBlckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBJbnB1dCgpXG4gIHRvb2x0aXA6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBwbGFjZW1lbnQ6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBjb250ZW50OiBzdHJpbmc7XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNsaWRlckNvbXBvbmVudCB9IGZyb20gJy4vc2xpZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbGlkZXJFbGVtZW50RGlyZWN0aXZlIH0gZnJvbSAnLi9zbGlkZXItZWxlbWVudC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2xpZGVySGFuZGxlRGlyZWN0aXZlIH0gZnJvbSAnLi9zbGlkZXItaGFuZGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTbGlkZXJMYWJlbERpcmVjdGl2ZSB9IGZyb20gJy4vc2xpZGVyLWxhYmVsLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUb29sdGlwV3JhcHBlckNvbXBvbmVudCB9IGZyb20gJy4vdG9vbHRpcC13cmFwcGVyLmNvbXBvbmVudCc7XG5cbi8qKlxuICogTmd4U2xpZGVyIG1vZHVsZVxuICpcbiAqIFRoZSBtb2R1bGUgZXhwb3J0cyB0aGUgc2xpZGVyIGNvbXBvbmVudFxuICovXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFNsaWRlckNvbXBvbmVudCxcbiAgICBTbGlkZXJFbGVtZW50RGlyZWN0aXZlLFxuICAgIFNsaWRlckhhbmRsZURpcmVjdGl2ZSxcbiAgICBTbGlkZXJMYWJlbERpcmVjdGl2ZSxcbiAgICBUb29sdGlwV3JhcHBlckNvbXBvbmVudFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgU2xpZGVyQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4U2xpZGVyTW9kdWxlIHsgfVxuIl19
- /***/ }),
- /***/ "mk5/":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/window.js ***!
- \*****************************************************************/
- /*! exports provided: window */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "window", function() { return window; });
- /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subject */ "XNiG");
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function window(windowBoundaries) {
- return function windowOperatorFunction(source) {
- return source.lift(new WindowOperator(windowBoundaries));
- };
- }
- class WindowOperator {
- constructor(windowBoundaries) {
- this.windowBoundaries = windowBoundaries;
- }
- call(subscriber, source) {
- const windowSubscriber = new WindowSubscriber(subscriber);
- const sourceSubscription = source.subscribe(windowSubscriber);
- if (!sourceSubscription.closed) {
- windowSubscriber.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(windowSubscriber, this.windowBoundaries));
- }
- return sourceSubscription;
- }
- }
- class WindowSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"] {
- constructor(destination) {
- super(destination);
- this.window = new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]();
- destination.next(this.window);
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.openWindow();
- }
- notifyError(error, innerSub) {
- this._error(error);
- }
- notifyComplete(innerSub) {
- this._complete();
- }
- _next(value) {
- this.window.next(value);
- }
- _error(err) {
- this.window.error(err);
- this.destination.error(err);
- }
- _complete() {
- this.window.complete();
- this.destination.complete();
- }
- _unsubscribe() {
- this.window = null;
- }
- openWindow() {
- const prevWindow = this.window;
- if (prevWindow) {
- prevWindow.complete();
- }
- const destination = this.destination;
- const newWindow = this.window = new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]();
- destination.next(newWindow);
- }
- }
- //# sourceMappingURL=window.js.map
- /***/ }),
- /***/ "mlxB":
- /*!************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/isDate.js ***!
- \************************************************************/
- /*! exports provided: isDate */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isDate", function() { return isDate; });
- function isDate(value) {
- return value instanceof Date && !isNaN(+value);
- }
- //# sourceMappingURL=isDate.js.map
- /***/ }),
- /***/ "mqiu":
- /*!****************************************************************************************************!*\
- !*** ./node_modules/@ngx-translate/http-loader/__ivy_ngcc__/fesm2015/ngx-translate-http-loader.js ***!
- \****************************************************************************************************/
- /*! exports provided: TranslateHttpLoader */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TranslateHttpLoader", function() { return TranslateHttpLoader; });
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
- */
- class TranslateHttpLoader {
- /**
- * @param {?} http
- * @param {?=} prefix
- * @param {?=} suffix
- */
- constructor(http, prefix = "/assets/i18n/", suffix = ".json") {
- this.http = http;
- this.prefix = prefix;
- this.suffix = suffix;
- }
- /**
- * Gets the translations from the server
- * @param {?} lang
- * @return {?}
- */
- getTranslation(lang) {
- return this.http.get(`${this.prefix}${lang}${this.suffix}`);
- }
- }
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
- */
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
- */
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRyYW5zbGF0ZS1odHRwLWxvYWRlci5qcyIsInNvdXJjZXMiOlsiQG5neC10cmFuc2xhdGUvaHR0cC1sb2FkZXIvbGliL2h0dHAtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFJQSxNQUFhLG1CQUFtQix6QkFBaEMsTUFBYSxtQkFBbUI7QUFBRztBQUFRO0FBQ3ZDO0FBQTBCO0FBQTBCO0lBQXRELFlBQW9CLElBQWdCLEVBQVMsU0FBaUIsZUFBZSxFQUFTLFNBQWlCLE9BQU8saEVBQWhELElBQTlELFlBQW9CLElBQWdCLEVBQVMsU0FBaUIsZUFBZSxFQUFTLFNBQWlCLE9BQU87UUFBMUYsU0FBSSxHQUFKLElBQUksQ0FBWSx6QkFBOEUsUUFBOUYsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFTLFdBQU0sR0FBTixNQUFNLENBQTBCLDdCQUF4QyxRQUFRLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBa0IsN0JBQWhDLFFBQVEsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7S0FBSSxMQUFILEtBQUc7QUFDcEg7QUFFQztBQUNFOztBQUNvQztJQUE5QixjQUFjLENBQUMsSUFBWSx2QkFBVyxJQUF0QyxjQUFjLENBQUMsSUFBWTtRQUNoQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMscEVBRHhCLFFBQ3BDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztLQUM3RCxMQUFILEtBQUc7Q0FDRixEQUFELENBQUM7QUFDRDtBQUFDO0FBQUk7QUFBa0M7QUFBZ0Y7QUFBSTtBQUFDO0FBQUk7QUFBa0M7QUFBZ0Y7QUFBSTtBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7VHJhbnNsYXRlTG9hZGVyfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0ZUh0dHBMb2FkZXIgaW1wbGVtZW50cyBUcmFuc2xhdGVMb2FkZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHB1YmxpYyBwcmVmaXg6IHN0cmluZyA9IFwiL2Fzc2V0cy9pMThuL1wiLCBwdWJsaWMgc3VmZml4OiBzdHJpbmcgPSBcIi5qc29uXCIpIHt9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRyYW5zbGF0aW9ucyBmcm9tIHRoZSBzZXJ2ZXJcbiAgICovXG4gIHB1YmxpYyBnZXRUcmFuc2xhdGlvbihsYW5nOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMucHJlZml4fSR7bGFuZ30ke3RoaXMuc3VmZml4fWApO1xuICB9XG59XG4iXX0=
- /***/ }),
- /***/ "mrSG":
- /*!*****************************************!*\
- !*** ./node_modules/tslib/tslib.es6.js ***!
- \*****************************************/
- /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __createBinding, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __extends; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __assign; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__rest", function() { return __rest; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __decorate; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__param", function() { return __param; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__metadata", function() { return __metadata; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__awaiter", function() { return __awaiter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__generator", function() { return __generator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__createBinding", function() { return __createBinding; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__exportStar", function() { return __exportStar; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__values", function() { return __values; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__read", function() { return __read; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spread", function() { return __spread; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spreadArrays", function() { return __spreadArrays; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__await", function() { return __await; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncGenerator", function() { return __asyncGenerator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncDelegator", function() { return __asyncDelegator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncValues", function() { return __asyncValues; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__makeTemplateObject", function() { return __makeTemplateObject; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importStar", function() { return __importStar; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importDefault", function() { return __importDefault; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldGet", function() { return __classPrivateFieldGet; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldSet", function() { return __classPrivateFieldSet; });
- /*! *****************************************************************************
- Copyright (c) Microsoft Corporation.
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted.
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
- ***************************************************************************** */
- /* global Reflect, Promise */
- var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- }
- var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- }
- return __assign.apply(this, arguments);
- }
- function __rest(s, e) {
- var t = {};
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
- t[p] = s[p];
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
- t[p[i]] = s[p[i]];
- }
- return t;
- }
- function __decorate(decorators, target, key, desc) {
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
- return c > 3 && r && Object.defineProperty(target, key, r), r;
- }
- function __param(paramIndex, decorator) {
- return function (target, key) { decorator(target, key, paramIndex); }
- }
- function __metadata(metadataKey, metadataValue) {
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
- }
- function __awaiter(thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
- }
- function __generator(thisArg, body) {
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
- function verb(n) { return function (v) { return step([n, v]); }; }
- function step(op) {
- if (f) throw new TypeError("Generator is already executing.");
- while (_) try {
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
- if (y = 0, t) op = [op[0] & 2, t.value];
- switch (op[0]) {
- case 0: case 1: t = op; break;
- case 4: _.label++; return { value: op[1], done: false };
- case 5: _.label++; y = op[1]; op = [0]; continue;
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
- default:
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
- if (t[2]) _.ops.pop();
- _.trys.pop(); continue;
- }
- op = body.call(thisArg, _);
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
- }
- }
- var __createBinding = Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
- }) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
- });
- function __exportStar(m, o) {
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
- }
- function __values(o) {
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
- if (m) return m.call(o);
- if (o && typeof o.length === "number") return {
- next: function () {
- if (o && i >= o.length) o = void 0;
- return { value: o && o[i++], done: !o };
- }
- };
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
- }
- function __read(o, n) {
- var m = typeof Symbol === "function" && o[Symbol.iterator];
- if (!m) return o;
- var i = m.call(o), r, ar = [], e;
- try {
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
- }
- catch (error) { e = { error: error }; }
- finally {
- try {
- if (r && !r.done && (m = i["return"])) m.call(i);
- }
- finally { if (e) throw e.error; }
- }
- return ar;
- }
- function __spread() {
- for (var ar = [], i = 0; i < arguments.length; i++)
- ar = ar.concat(__read(arguments[i]));
- return ar;
- }
- function __spreadArrays() {
- for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
- for (var r = Array(s), k = 0, i = 0; i < il; i++)
- for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
- r[k] = a[j];
- return r;
- };
- function __await(v) {
- return this instanceof __await ? (this.v = v, this) : new __await(v);
- }
- function __asyncGenerator(thisArg, _arguments, generator) {
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
- var g = generator.apply(thisArg, _arguments || []), i, q = [];
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
- function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
- function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
- function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
- function fulfill(value) { resume("next", value); }
- function reject(value) { resume("throw", value); }
- function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
- }
- function __asyncDelegator(o) {
- var i, p;
- return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
- function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
- }
- function __asyncValues(o) {
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
- var m = o[Symbol.asyncIterator], i;
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
- }
- function __makeTemplateObject(cooked, raw) {
- if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
- return cooked;
- };
- var __setModuleDefault = Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
- }) : function(o, v) {
- o["default"] = v;
- };
- function __importStar(mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
- }
- function __importDefault(mod) {
- return (mod && mod.__esModule) ? mod : { default: mod };
- }
- function __classPrivateFieldGet(receiver, privateMap) {
- if (!privateMap.has(receiver)) {
- throw new TypeError("attempted to get private field on non-instance");
- }
- return privateMap.get(receiver);
- }
- function __classPrivateFieldSet(receiver, privateMap, value) {
- if (!privateMap.has(receiver)) {
- throw new TypeError("attempted to set private field on non-instance");
- }
- privateMap.set(receiver, value);
- return value;
- }
- /***/ }),
- /***/ "n6bG":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/isFunction.js ***!
- \****************************************************************/
- /*! exports provided: isFunction */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isFunction", function() { return isFunction; });
- function isFunction(x) {
- return typeof x === 'function';
- }
- //# sourceMappingURL=isFunction.js.map
- /***/ }),
- /***/ "nLfN":
- /*!*********************************************************************!*\
- !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/platform.js ***!
- \*********************************************************************/
- /*! exports provided: Platform, PlatformModule, _supportsShadowDom, getRtlScrollAxisType, getSupportedInputTypes, normalizePassiveListenerOptions, supportsPassiveEventListeners, supportsScrollBehavior */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Platform", function() { return Platform; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PlatformModule", function() { return PlatformModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_supportsShadowDom", function() { return _supportsShadowDom; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getRtlScrollAxisType", function() { return getRtlScrollAxisType; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSupportedInputTypes", function() { return getSupportedInputTypes; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "normalizePassiveListenerOptions", function() { return normalizePassiveListenerOptions; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "supportsPassiveEventListeners", function() { return supportsPassiveEventListeners; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "supportsScrollBehavior", function() { return supportsScrollBehavior; });
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ "ofXK");
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/platform/platform.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- // Whether the current platform supports the V8 Break Iterator. The V8 check
- // is necessary to detect all Blink based browsers.
- /** @type {?} */
- let hasV8BreakIterator;
- // We need a try/catch around the reference to `Intl`, because accessing it in some cases can
- // cause IE to throw. These cases are tied to particular versions of Windows and can happen if
- // the consumer is providing a polyfilled `Map`. See:
- // https://github.com/Microsoft/ChakraCore/issues/3189
- // https://github.com/angular/components/issues/15687
- try {
- hasV8BreakIterator = (typeof Intl !== 'undefined' && ((/** @type {?} */ (Intl))).v8BreakIterator);
- }
- catch (_a) {
- hasV8BreakIterator = false;
- }
- /**
- * Service to detect the current platform by comparing the userAgent strings and
- * checking browser-specific global properties.
- */
- class Platform {
- /**
- * \@breaking-change 8.0.0 remove optional decorator
- * @param {?=} _platformId
- */
- constructor(_platformId) {
- this._platformId = _platformId;
- // We want to use the Angular platform check because if the Document is shimmed
- // without the navigator, the following checks will fail. This is preferred because
- // sometimes the Document may be shimmed without the user's knowledge or intention
- /**
- * Whether the Angular application is being rendered in the browser.
- */
- this.isBrowser = this._platformId ?
- Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["isPlatformBrowser"])(this._platformId) : typeof document === 'object' && !!document;
- /**
- * Whether the current browser is Microsoft Edge.
- */
- this.EDGE = this.isBrowser && /(edge)/i.test(navigator.userAgent);
- /**
- * Whether the current rendering engine is Microsoft Trident.
- */
- this.TRIDENT = this.isBrowser && /(msie|trident)/i.test(navigator.userAgent);
- // EdgeHTML and Trident mock Blink specific things and need to be excluded from this check.
- /**
- * Whether the current rendering engine is Blink.
- */
- this.BLINK = this.isBrowser && (!!(((/** @type {?} */ (window))).chrome || hasV8BreakIterator) &&
- typeof CSS !== 'undefined' && !this.EDGE && !this.TRIDENT);
- // Webkit is part of the userAgent in EdgeHTML, Blink and Trident. Therefore we need to
- // ensure that Webkit runs standalone and is not used as another engine's base.
- /**
- * Whether the current rendering engine is WebKit.
- */
- this.WEBKIT = this.isBrowser &&
- /AppleWebKit/i.test(navigator.userAgent) && !this.BLINK && !this.EDGE && !this.TRIDENT;
- /**
- * Whether the current platform is Apple iOS.
- */
- this.IOS = this.isBrowser && /iPad|iPhone|iPod/.test(navigator.userAgent) &&
- !('MSStream' in window);
- // It's difficult to detect the plain Gecko engine, because most of the browsers identify
- // them self as Gecko-like browsers and modify the userAgent's according to that.
- // Since we only cover one explicit Firefox case, we can simply check for Firefox
- // instead of having an unstable check for Gecko.
- /**
- * Whether the current browser is Firefox.
- */
- this.FIREFOX = this.isBrowser && /(firefox|minefield)/i.test(navigator.userAgent);
- /**
- * Whether the current platform is Android.
- */
- // Trident on mobile adds the android platform to the userAgent to trick detections.
- this.ANDROID = this.isBrowser && /android/i.test(navigator.userAgent) && !this.TRIDENT;
- // Safari browsers will include the Safari keyword in their userAgent. Some browsers may fake
- // this and just place the Safari keyword in the userAgent. To be more safe about Safari every
- // Safari browser should also use Webkit as its layout engine.
- /**
- * Whether the current browser is Safari.
- */
- this.SAFARI = this.isBrowser && /safari/i.test(navigator.userAgent) && this.WEBKIT;
- }
- }
- Platform.ɵfac = function Platform_Factory(t) { return new (t || Platform)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"], 8)); };
- /** @nocollapse */
- Platform.ctorParameters = () => [
- { type: Object, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"],] }] }
- ];
- /** @nocollapse */ Platform.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: function Platform_Factory() { return new Platform(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"], 8)); }, token: Platform, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Platform, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: Object, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
- }] }]; }, null); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/platform/platform-module.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class PlatformModule {
- }
- PlatformModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: PlatformModule });
- PlatformModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function PlatformModule_Factory(t) { return new (t || PlatformModule)(); } });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PlatformModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{}]
- }], null, null); })();
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/platform/features/input-types.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Cached result Set of input types support by the current browser.
- * @type {?}
- */
- let supportedInputTypes;
- /**
- * Types of `<input>` that *might* be supported.
- * @type {?}
- */
- const candidateInputTypes = [
- // `color` must come first. Chrome 56 shows a warning if we change the type to `color` after
- // first changing it to something else:
- // The specified value "" does not conform to the required format.
- // The format is "#rrggbb" where rr, gg, bb are two-digit hexadecimal numbers.
- 'color',
- 'button',
- 'checkbox',
- 'date',
- 'datetime-local',
- 'email',
- 'file',
- 'hidden',
- 'image',
- 'month',
- 'number',
- 'password',
- 'radio',
- 'range',
- 'reset',
- 'search',
- 'submit',
- 'tel',
- 'text',
- 'time',
- 'url',
- 'week',
- ];
- /**
- * @return {?} The input types supported by this browser.
- */
- function getSupportedInputTypes() {
- // Result is cached.
- if (supportedInputTypes) {
- return supportedInputTypes;
- }
- // We can't check if an input type is not supported until we're on the browser, so say that
- // everything is supported when not on the browser. We don't use `Platform` here since it's
- // just a helper function and can't inject it.
- if (typeof document !== 'object' || !document) {
- supportedInputTypes = new Set(candidateInputTypes);
- return supportedInputTypes;
- }
- /** @type {?} */
- let featureTestInput = document.createElement('input');
- supportedInputTypes = new Set(candidateInputTypes.filter((/**
- * @param {?} value
- * @return {?}
- */
- value => {
- featureTestInput.setAttribute('type', value);
- return featureTestInput.type === value;
- })));
- return supportedInputTypes;
- }
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/platform/features/passive-listeners.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Cached result of whether the user's browser supports passive event listeners.
- * @type {?}
- */
- let supportsPassiveEvents;
- /**
- * Checks whether the user's browser supports passive event listeners.
- * See: https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md
- * @return {?}
- */
- function supportsPassiveEventListeners() {
- if (supportsPassiveEvents == null && typeof window !== 'undefined') {
- try {
- window.addEventListener('test', (/** @type {?} */ (null)), Object.defineProperty({}, 'passive', {
- get: (/**
- * @return {?}
- */
- () => supportsPassiveEvents = true)
- }));
- }
- finally {
- supportsPassiveEvents = supportsPassiveEvents || false;
- }
- }
- return supportsPassiveEvents;
- }
- /**
- * Normalizes an `AddEventListener` object to something that can be passed
- * to `addEventListener` on any browser, no matter whether it supports the
- * `options` parameter.
- * @param {?} options Object to be normalized.
- * @return {?}
- */
- function normalizePassiveListenerOptions(options) {
- return supportsPassiveEventListeners() ? options : !!options.capture;
- }
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/platform/features/scrolling.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /** @enum {number} */
- const RtlScrollAxisType = {
- /**
- * scrollLeft is 0 when scrolled all the way left and (scrollWidth - clientWidth) when scrolled
- * all the way right.
- */
- NORMAL: 0,
- /**
- * scrollLeft is -(scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled
- * all the way right.
- */
- NEGATED: 1,
- /**
- * scrollLeft is (scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled
- * all the way right.
- */
- INVERTED: 2,
- };
- /**
- * Cached result of the way the browser handles the horizontal scroll axis in RTL mode.
- * @type {?}
- */
- let rtlScrollAxisType;
- /**
- * Check whether the browser supports scroll behaviors.
- * @return {?}
- */
- function supportsScrollBehavior() {
- return !!(typeof document == 'object' && 'scrollBehavior' in (/** @type {?} */ (document.documentElement)).style);
- }
- /**
- * Checks the type of RTL scroll axis used by this browser. As of time of writing, Chrome is NORMAL,
- * Firefox & Safari are NEGATED, and IE & Edge are INVERTED.
- * @return {?}
- */
- function getRtlScrollAxisType() {
- // We can't check unless we're on the browser. Just assume 'normal' if we're not.
- if (typeof document !== 'object' || !document) {
- return 0 /* NORMAL */;
- }
- if (rtlScrollAxisType == null) {
- // Create a 1px wide scrolling container and a 2px wide content element.
- /** @type {?} */
- const scrollContainer = document.createElement('div');
- /** @type {?} */
- const containerStyle = scrollContainer.style;
- scrollContainer.dir = 'rtl';
- containerStyle.height = '1px';
- containerStyle.width = '1px';
- containerStyle.overflow = 'auto';
- containerStyle.visibility = 'hidden';
- containerStyle.pointerEvents = 'none';
- containerStyle.position = 'absolute';
- /** @type {?} */
- const content = document.createElement('div');
- /** @type {?} */
- const contentStyle = content.style;
- contentStyle.width = '2px';
- contentStyle.height = '1px';
- scrollContainer.appendChild(content);
- document.body.appendChild(scrollContainer);
- rtlScrollAxisType = 0 /* NORMAL */;
- // The viewport starts scrolled all the way to the right in RTL mode. If we are in a NORMAL
- // browser this would mean that the scrollLeft should be 1. If it's zero instead we know we're
- // dealing with one of the other two types of browsers.
- if (scrollContainer.scrollLeft === 0) {
- // In a NEGATED browser the scrollLeft is always somewhere in [-maxScrollAmount, 0]. For an
- // INVERTED browser it is always somewhere in [0, maxScrollAmount]. We can determine which by
- // setting to the scrollLeft to 1. This is past the max for a NEGATED browser, so it will
- // return 0 when we read it again.
- scrollContainer.scrollLeft = 1;
- rtlScrollAxisType =
- scrollContainer.scrollLeft === 0 ? 1 /* NEGATED */ : 2 /* INVERTED */;
- }
- (/** @type {?} */ (scrollContainer.parentNode)).removeChild(scrollContainer);
- }
- return rtlScrollAxisType;
- }
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/platform/features/shadow-dom.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /** @type {?} */
- let shadowDomIsSupported;
- /**
- * Checks whether the user's browser support Shadow DOM.
- * @return {?}
- */
- function _supportsShadowDom() {
- if (shadowDomIsSupported == null) {
- /** @type {?} */
- const head = typeof document !== 'undefined' ? document.head : null;
- shadowDomIsSupported = !!(head && (((/** @type {?} */ (head))).createShadowRoot || head.attachShadow));
- }
- return shadowDomIsSupported;
- }
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/platform/public-api.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=platform.js.map
- /***/ }),
- /***/ "nYR2":
- /*!*******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/finalize.js ***!
- \*******************************************************************/
- /*! exports provided: finalize */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "finalize", function() { return finalize; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Subscription */ "quSY");
- function finalize(callback) {
- return (source) => source.lift(new FinallyOperator(callback));
- }
- class FinallyOperator {
- constructor(callback) {
- this.callback = callback;
- }
- call(subscriber, source) {
- return source.subscribe(new FinallySubscriber(subscriber, this.callback));
- }
- }
- class FinallySubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, callback) {
- super(destination);
- this.add(new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"](callback));
- }
- }
- //# sourceMappingURL=finalize.js.map
- /***/ }),
- /***/ "ngJS":
- /*!**********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/subscribeToArray.js ***!
- \**********************************************************************/
- /*! exports provided: subscribeToArray */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToArray", function() { return subscribeToArray; });
- const subscribeToArray = (array) => (subscriber) => {
- for (let i = 0, len = array.length; i < len && !subscriber.closed; i++) {
- subscriber.next(array[i]);
- }
- subscriber.complete();
- };
- //# sourceMappingURL=subscribeToArray.js.map
- /***/ }),
- /***/ "oB13":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/multicast.js ***!
- \********************************************************************/
- /*! exports provided: multicast, MulticastOperator */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "multicast", function() { return multicast; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MulticastOperator", function() { return MulticastOperator; });
- /* harmony import */ var _observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../observable/ConnectableObservable */ "EQ5u");
- function multicast(subjectOrSubjectFactory, selector) {
- return function multicastOperatorFunction(source) {
- let subjectFactory;
- if (typeof subjectOrSubjectFactory === 'function') {
- subjectFactory = subjectOrSubjectFactory;
- }
- else {
- subjectFactory = function subjectFactory() {
- return subjectOrSubjectFactory;
- };
- }
- if (typeof selector === 'function') {
- return source.lift(new MulticastOperator(subjectFactory, selector));
- }
- const connectable = Object.create(source, _observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_0__["connectableObservableDescriptor"]);
- connectable.source = source;
- connectable.subjectFactory = subjectFactory;
- return connectable;
- };
- }
- class MulticastOperator {
- constructor(subjectFactory, selector) {
- this.subjectFactory = subjectFactory;
- this.selector = selector;
- }
- call(subscriber, source) {
- const { selector } = this;
- const subject = this.subjectFactory();
- const subscription = selector(subject).subscribe(subscriber);
- subscription.add(source.subscribe(subject));
- return subscription;
- }
- }
- //# sourceMappingURL=multicast.js.map
- /***/ }),
- /***/ "ofXK":
- /*!**********************************************************************!*\
- !*** ./node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js ***!
- \**********************************************************************/
- /*! exports provided: APP_BASE_HREF, AsyncPipe, CommonModule, CurrencyPipe, DOCUMENT, DatePipe, DecimalPipe, FormStyle, FormatWidth, HashLocationStrategy, I18nPluralPipe, I18nSelectPipe, JsonPipe, KeyValuePipe, LOCATION_INITIALIZED, Location, LocationStrategy, LowerCasePipe, NgClass, NgComponentOutlet, NgForOf, NgForOfContext, NgIf, NgIfContext, NgLocaleLocalization, NgLocalization, NgPlural, NgPluralCase, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet, NumberFormatStyle, NumberSymbol, PathLocationStrategy, PercentPipe, PlatformLocation, Plural, SlicePipe, TitleCasePipe, TranslationWidth, UpperCasePipe, VERSION, ViewportScroller, WeekDay, formatCurrency, formatDate, formatNumber, formatPercent, getCurrencySymbol, getLocaleCurrencyCode, getLocaleCurrencyName, getLocaleCurrencySymbol, getLocaleDateFormat, getLocaleDateTimeFormat, getLocaleDayNames, getLocaleDayPeriods, getLocaleDirection, getLocaleEraNames, getLocaleExtraDayPeriodRules, getLocaleExtraDayPeriods, getLocaleFirstDayOfWeek, getLocaleId, getLocaleMonthNames, getLocaleNumberFormat, getLocaleNumberSymbol, getLocalePluralCase, getLocaleTimeFormat, getLocaleWeekEndRange, getNumberOfCurrencyDigits, isPlatformBrowser, isPlatformServer, isPlatformWorkerApp, isPlatformWorkerUi, registerLocaleData, ɵBrowserPlatformLocation, ɵDomAdapter, ɵNullViewportScroller, ɵPLATFORM_BROWSER_ID, ɵPLATFORM_SERVER_ID, ɵPLATFORM_WORKER_APP_ID, ɵPLATFORM_WORKER_UI_ID, ɵangular_packages_common_common_a, ɵangular_packages_common_common_b, ɵangular_packages_common_common_c, ɵangular_packages_common_common_d, ɵangular_packages_common_common_e, ɵangular_packages_common_common_f, ɵgetDOM, ɵparseCookieValue, ɵsetRootDomAdapter */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "APP_BASE_HREF", function() { return APP_BASE_HREF; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsyncPipe", function() { return AsyncPipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CommonModule", function() { return CommonModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CurrencyPipe", function() { return CurrencyPipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DOCUMENT", function() { return DOCUMENT; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DatePipe", function() { return DatePipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DecimalPipe", function() { return DecimalPipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormStyle", function() { return FormStyle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormatWidth", function() { return FormatWidth; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HashLocationStrategy", function() { return HashLocationStrategy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "I18nPluralPipe", function() { return I18nPluralPipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "I18nSelectPipe", function() { return I18nSelectPipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "JsonPipe", function() { return JsonPipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KeyValuePipe", function() { return KeyValuePipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LOCATION_INITIALIZED", function() { return LOCATION_INITIALIZED; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Location", function() { return Location; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LocationStrategy", function() { return LocationStrategy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LowerCasePipe", function() { return LowerCasePipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgClass", function() { return NgClass; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgComponentOutlet", function() { return NgComponentOutlet; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgForOf", function() { return NgForOf; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgForOfContext", function() { return NgForOfContext; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgIf", function() { return NgIf; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgIfContext", function() { return NgIfContext; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgLocaleLocalization", function() { return NgLocaleLocalization; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgLocalization", function() { return NgLocalization; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgPlural", function() { return NgPlural; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgPluralCase", function() { return NgPluralCase; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgStyle", function() { return NgStyle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgSwitch", function() { return NgSwitch; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgSwitchCase", function() { return NgSwitchCase; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgSwitchDefault", function() { return NgSwitchDefault; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NgTemplateOutlet", function() { return NgTemplateOutlet; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NumberFormatStyle", function() { return NumberFormatStyle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NumberSymbol", function() { return NumberSymbol; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PathLocationStrategy", function() { return PathLocationStrategy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PercentPipe", function() { return PercentPipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PlatformLocation", function() { return PlatformLocation; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Plural", function() { return Plural; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SlicePipe", function() { return SlicePipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TitleCasePipe", function() { return TitleCasePipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TranslationWidth", function() { return TranslationWidth; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UpperCasePipe", function() { return UpperCasePipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VERSION", function() { return VERSION; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ViewportScroller", function() { return ViewportScroller; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WeekDay", function() { return WeekDay; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "formatCurrency", function() { return formatCurrency; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "formatDate", function() { return formatDate; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "formatNumber", function() { return formatNumber; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "formatPercent", function() { return formatPercent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCurrencySymbol", function() { return getCurrencySymbol; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleCurrencyCode", function() { return getLocaleCurrencyCode; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleCurrencyName", function() { return getLocaleCurrencyName; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleCurrencySymbol", function() { return getLocaleCurrencySymbol; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleDateFormat", function() { return getLocaleDateFormat; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleDateTimeFormat", function() { return getLocaleDateTimeFormat; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleDayNames", function() { return getLocaleDayNames; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleDayPeriods", function() { return getLocaleDayPeriods; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleDirection", function() { return getLocaleDirection; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleEraNames", function() { return getLocaleEraNames; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleExtraDayPeriodRules", function() { return getLocaleExtraDayPeriodRules; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleExtraDayPeriods", function() { return getLocaleExtraDayPeriods; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleFirstDayOfWeek", function() { return getLocaleFirstDayOfWeek; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleId", function() { return getLocaleId; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleMonthNames", function() { return getLocaleMonthNames; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleNumberFormat", function() { return getLocaleNumberFormat; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleNumberSymbol", function() { return getLocaleNumberSymbol; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocalePluralCase", function() { return getLocalePluralCase; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleTimeFormat", function() { return getLocaleTimeFormat; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaleWeekEndRange", function() { return getLocaleWeekEndRange; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getNumberOfCurrencyDigits", function() { return getNumberOfCurrencyDigits; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPlatformBrowser", function() { return isPlatformBrowser; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPlatformServer", function() { return isPlatformServer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPlatformWorkerApp", function() { return isPlatformWorkerApp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPlatformWorkerUi", function() { return isPlatformWorkerUi; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerLocaleData", function() { return registerLocaleData; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵBrowserPlatformLocation", function() { return BrowserPlatformLocation; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵDomAdapter", function() { return DomAdapter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵNullViewportScroller", function() { return NullViewportScroller; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵPLATFORM_BROWSER_ID", function() { return PLATFORM_BROWSER_ID; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵPLATFORM_SERVER_ID", function() { return PLATFORM_SERVER_ID; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵPLATFORM_WORKER_APP_ID", function() { return PLATFORM_WORKER_APP_ID; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵPLATFORM_WORKER_UI_ID", function() { return PLATFORM_WORKER_UI_ID; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_common_a", function() { return useBrowserPlatformLocation; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_common_b", function() { return createBrowserPlatformLocation; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_common_c", function() { return createLocation; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_common_d", function() { return provideLocationStrategy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_common_e", function() { return COMMON_DIRECTIVES; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_common_f", function() { return COMMON_PIPES; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵgetDOM", function() { return getDOM; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵparseCookieValue", function() { return parseCookieValue; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵsetRootDomAdapter", function() { return setRootDomAdapter; });
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /**
- * @license Angular v11.0.4
- * (c) 2010-2020 Google LLC. https://angular.io/
- * License: MIT
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- let _DOM = null;
- function getDOM() {
- return _DOM;
- }
- function setDOM(adapter) {
- _DOM = adapter;
- }
- function setRootDomAdapter(adapter) {
- if (!_DOM) {
- _DOM = adapter;
- }
- }
- /* tslint:disable:requireParameterType */
- /**
- * Provides DOM operations in an environment-agnostic way.
- *
- * @security Tread carefully! Interacting with the DOM directly is dangerous and
- * can introduce XSS risks.
- */
- class DomAdapter {
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * A DI Token representing the main rendering context. In a browser this is the DOM Document.
- *
- * Note: Document might not be available in the Application Context when Application and Rendering
- * Contexts are not the same (e.g. when running the application in a Web Worker).
- *
- * @publicApi
- */
- const DOCUMENT = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('DocumentToken');
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * This class should not be used directly by an application developer. Instead, use
- * {@link Location}.
- *
- * `PlatformLocation` encapsulates all calls to DOM APIs, which allows the Router to be
- * platform-agnostic.
- * This means that we can have different implementation of `PlatformLocation` for the different
- * platforms that Angular supports. For example, `@angular/platform-browser` provides an
- * implementation specific to the browser environment, while `@angular/platform-server` provides
- * one suitable for use with server-side rendering.
- *
- * The `PlatformLocation` class is used directly by all implementations of {@link LocationStrategy}
- * when they need to interact with the DOM APIs like pushState, popState, etc.
- *
- * {@link LocationStrategy} in turn is used by the {@link Location} service which is used directly
- * by the {@link Router} in order to navigate between routes. Since all interactions between {@link
- * Router} /
- * {@link Location} / {@link LocationStrategy} and DOM APIs flow through the `PlatformLocation`
- * class, they are all platform-agnostic.
- *
- * @publicApi
- */
- class PlatformLocation {
- }
- PlatformLocation.ɵfac = function PlatformLocation_Factory(t) { return new (t || PlatformLocation)(); };
- PlatformLocation.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: useBrowserPlatformLocation, token: PlatformLocation, providedIn: "platform" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PlatformLocation, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{
- providedIn: 'platform',
- // See #23917
- useFactory: useBrowserPlatformLocation
- }]
- }], null, null); })();
- function useBrowserPlatformLocation() {
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(BrowserPlatformLocation);
- }
- /**
- * @description
- * Indicates when a location is initialized.
- *
- * @publicApi
- */
- const LOCATION_INITIALIZED = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('Location Initialized');
- /**
- * `PlatformLocation` encapsulates all of the direct calls to platform APIs.
- * This class should not be used directly by an application developer. Instead, use
- * {@link Location}.
- */
- class BrowserPlatformLocation extends PlatformLocation {
- constructor(_doc) {
- super();
- this._doc = _doc;
- this._init();
- }
- // This is moved to its own method so that `MockPlatformLocationStrategy` can overwrite it
- /** @internal */
- _init() {
- this.location = getDOM().getLocation();
- this._history = getDOM().getHistory();
- }
- getBaseHrefFromDOM() {
- return getDOM().getBaseHref(this._doc);
- }
- onPopState(fn) {
- getDOM().getGlobalEventTarget(this._doc, 'window').addEventListener('popstate', fn, false);
- }
- onHashChange(fn) {
- getDOM().getGlobalEventTarget(this._doc, 'window').addEventListener('hashchange', fn, false);
- }
- get href() {
- return this.location.href;
- }
- get protocol() {
- return this.location.protocol;
- }
- get hostname() {
- return this.location.hostname;
- }
- get port() {
- return this.location.port;
- }
- get pathname() {
- return this.location.pathname;
- }
- get search() {
- return this.location.search;
- }
- get hash() {
- return this.location.hash;
- }
- set pathname(newPath) {
- this.location.pathname = newPath;
- }
- pushState(state, title, url) {
- if (supportsState()) {
- this._history.pushState(state, title, url);
- }
- else {
- this.location.hash = url;
- }
- }
- replaceState(state, title, url) {
- if (supportsState()) {
- this._history.replaceState(state, title, url);
- }
- else {
- this.location.hash = url;
- }
- }
- forward() {
- this._history.forward();
- }
- back() {
- this._history.back();
- }
- getState() {
- return this._history.state;
- }
- }
- BrowserPlatformLocation.ɵfac = function BrowserPlatformLocation_Factory(t) { return new (t || BrowserPlatformLocation)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](DOCUMENT)); };
- BrowserPlatformLocation.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: createBrowserPlatformLocation, token: BrowserPlatformLocation, providedIn: "platform" });
- BrowserPlatformLocation.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [DOCUMENT,] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BrowserPlatformLocation, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{
- providedIn: 'platform',
- // See #23917
- useFactory: createBrowserPlatformLocation
- }]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [DOCUMENT]
- }] }]; }, null); })();
- function supportsState() {
- return !!window.history.pushState;
- }
- function createBrowserPlatformLocation() {
- return new BrowserPlatformLocation(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(DOCUMENT));
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Joins two parts of a URL with a slash if needed.
- *
- * @param start URL string
- * @param end URL string
- *
- *
- * @returns The joined URL string.
- */
- function joinWithSlash(start, end) {
- if (start.length == 0) {
- return end;
- }
- if (end.length == 0) {
- return start;
- }
- let slashes = 0;
- if (start.endsWith('/')) {
- slashes++;
- }
- if (end.startsWith('/')) {
- slashes++;
- }
- if (slashes == 2) {
- return start + end.substring(1);
- }
- if (slashes == 1) {
- return start + end;
- }
- return start + '/' + end;
- }
- /**
- * Removes a trailing slash from a URL string if needed.
- * Looks for the first occurrence of either `#`, `?`, or the end of the
- * line as `/` characters and removes the trailing slash if one exists.
- *
- * @param url URL string.
- *
- * @returns The URL string, modified if needed.
- */
- function stripTrailingSlash(url) {
- const match = url.match(/#|\?|$/);
- const pathEndIdx = match && match.index || url.length;
- const droppedSlashIdx = pathEndIdx - (url[pathEndIdx - 1] === '/' ? 1 : 0);
- return url.slice(0, droppedSlashIdx) + url.slice(pathEndIdx);
- }
- /**
- * Normalizes URL parameters by prepending with `?` if needed.
- *
- * @param params String of URL parameters.
- *
- * @returns The normalized URL parameters string.
- */
- function normalizeQueryParams(params) {
- return params && params[0] !== '?' ? '?' + params : params;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Enables the `Location` service to read route state from the browser's URL.
- * Angular provides two strategies:
- * `HashLocationStrategy` and `PathLocationStrategy`.
- *
- * Applications should use the `Router` or `Location` services to
- * interact with application route state.
- *
- * For instance, `HashLocationStrategy` produces URLs like
- * <code class="no-auto-link">http://example.com#/foo</code>,
- * and `PathLocationStrategy` produces
- * <code class="no-auto-link">http://example.com/foo</code> as an equivalent URL.
- *
- * See these two classes for more.
- *
- * @publicApi
- */
- class LocationStrategy {
- }
- LocationStrategy.ɵfac = function LocationStrategy_Factory(t) { return new (t || LocationStrategy)(); };
- LocationStrategy.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: provideLocationStrategy, token: LocationStrategy, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](LocationStrategy, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{ providedIn: 'root', useFactory: provideLocationStrategy }]
- }], null, null); })();
- function provideLocationStrategy(platformLocation) {
- // See #23917
- const location = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(DOCUMENT).location;
- return new PathLocationStrategy(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(PlatformLocation), location && location.origin || '');
- }
- /**
- * A predefined [DI token](guide/glossary#di-token) for the base href
- * to be used with the `PathLocationStrategy`.
- * The base href is the URL prefix that should be preserved when generating
- * and recognizing URLs.
- *
- * @usageNotes
- *
- * The following example shows how to use this token to configure the root app injector
- * with a base href value, so that the DI framework can supply the dependency anywhere in the app.
- *
- * ```typescript
- * import {Component, NgModule} from '@angular/core';
- * import {APP_BASE_HREF} from '@angular/common';
- *
- * @NgModule({
- * providers: [{provide: APP_BASE_HREF, useValue: '/my/app'}]
- * })
- * class AppModule {}
- * ```
- *
- * @publicApi
- */
- const APP_BASE_HREF = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('appBaseHref');
- /**
- * @description
- * A {@link LocationStrategy} used to configure the {@link Location} service to
- * represent its state in the
- * [path](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax) of the
- * browser's URL.
- *
- * If you're using `PathLocationStrategy`, you must provide a {@link APP_BASE_HREF}
- * or add a `<base href>` element to the document.
- *
- * For instance, if you provide an `APP_BASE_HREF` of `'/my/app/'` and call
- * `location.go('/foo')`, the browser's URL will become
- * `example.com/my/app/foo`. To ensure all relative URIs resolve correctly,
- * the `<base href>` and/or `APP_BASE_HREF` should end with a `/`.
- *
- * Similarly, if you add `<base href='/my/app/'/>` to the document and call
- * `location.go('/foo')`, the browser's URL will become
- * `example.com/my/app/foo`.
- *
- * Note that when using `PathLocationStrategy`, neither the query nor
- * the fragment in the `<base href>` will be preserved, as outlined
- * by the [RFC](https://tools.ietf.org/html/rfc3986#section-5.2.2).
- *
- * @usageNotes
- *
- * ### Example
- *
- * {@example common/location/ts/path_location_component.ts region='LocationComponent'}
- *
- * @publicApi
- */
- class PathLocationStrategy extends LocationStrategy {
- constructor(_platformLocation, href) {
- super();
- this._platformLocation = _platformLocation;
- if (href == null) {
- href = this._platformLocation.getBaseHrefFromDOM();
- }
- if (href == null) {
- throw new Error(`No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.`);
- }
- this._baseHref = href;
- }
- onPopState(fn) {
- this._platformLocation.onPopState(fn);
- this._platformLocation.onHashChange(fn);
- }
- getBaseHref() {
- return this._baseHref;
- }
- prepareExternalUrl(internal) {
- return joinWithSlash(this._baseHref, internal);
- }
- path(includeHash = false) {
- const pathname = this._platformLocation.pathname + normalizeQueryParams(this._platformLocation.search);
- const hash = this._platformLocation.hash;
- return hash && includeHash ? `${pathname}${hash}` : pathname;
- }
- pushState(state, title, url, queryParams) {
- const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));
- this._platformLocation.pushState(state, title, externalUrl);
- }
- replaceState(state, title, url, queryParams) {
- const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));
- this._platformLocation.replaceState(state, title, externalUrl);
- }
- forward() {
- this._platformLocation.forward();
- }
- back() {
- this._platformLocation.back();
- }
- }
- PathLocationStrategy.ɵfac = function PathLocationStrategy_Factory(t) { return new (t || PathLocationStrategy)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](PlatformLocation), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](APP_BASE_HREF, 8)); };
- PathLocationStrategy.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: PathLocationStrategy, factory: PathLocationStrategy.ɵfac });
- PathLocationStrategy.ctorParameters = () => [
- { type: PlatformLocation },
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [APP_BASE_HREF,] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PathLocationStrategy, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: PlatformLocation }, { type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [APP_BASE_HREF]
- }] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @description
- * A {@link LocationStrategy} used to configure the {@link Location} service to
- * represent its state in the
- * [hash fragment](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax)
- * of the browser's URL.
- *
- * For instance, if you call `location.go('/foo')`, the browser's URL will become
- * `example.com#/foo`.
- *
- * @usageNotes
- *
- * ### Example
- *
- * {@example common/location/ts/hash_location_component.ts region='LocationComponent'}
- *
- * @publicApi
- */
- class HashLocationStrategy extends LocationStrategy {
- constructor(_platformLocation, _baseHref) {
- super();
- this._platformLocation = _platformLocation;
- this._baseHref = '';
- if (_baseHref != null) {
- this._baseHref = _baseHref;
- }
- }
- onPopState(fn) {
- this._platformLocation.onPopState(fn);
- this._platformLocation.onHashChange(fn);
- }
- getBaseHref() {
- return this._baseHref;
- }
- path(includeHash = false) {
- // the hash value is always prefixed with a `#`
- // and if it is empty then it will stay empty
- let path = this._platformLocation.hash;
- if (path == null)
- path = '#';
- return path.length > 0 ? path.substring(1) : path;
- }
- prepareExternalUrl(internal) {
- const url = joinWithSlash(this._baseHref, internal);
- return url.length > 0 ? ('#' + url) : url;
- }
- pushState(state, title, path, queryParams) {
- let url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams));
- if (url.length == 0) {
- url = this._platformLocation.pathname;
- }
- this._platformLocation.pushState(state, title, url);
- }
- replaceState(state, title, path, queryParams) {
- let url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams));
- if (url.length == 0) {
- url = this._platformLocation.pathname;
- }
- this._platformLocation.replaceState(state, title, url);
- }
- forward() {
- this._platformLocation.forward();
- }
- back() {
- this._platformLocation.back();
- }
- }
- HashLocationStrategy.ɵfac = function HashLocationStrategy_Factory(t) { return new (t || HashLocationStrategy)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](PlatformLocation), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](APP_BASE_HREF, 8)); };
- HashLocationStrategy.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: HashLocationStrategy, factory: HashLocationStrategy.ɵfac });
- HashLocationStrategy.ctorParameters = () => [
- { type: PlatformLocation },
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [APP_BASE_HREF,] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HashLocationStrategy, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: PlatformLocation }, { type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [APP_BASE_HREF]
- }] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @description
- *
- * A service that applications can use to interact with a browser's URL.
- *
- * Depending on the `LocationStrategy` used, `Location` persists
- * to the URL's path or the URL's hash segment.
- *
- * @usageNotes
- *
- * It's better to use the `Router#navigate` service to trigger route changes. Use
- * `Location` only if you need to interact with or create normalized URLs outside of
- * routing.
- *
- * `Location` is responsible for normalizing the URL against the application's base href.
- * A normalized URL is absolute from the URL host, includes the application's base href, and has no
- * trailing slash:
- * - `/my/app/user/123` is normalized
- * - `my/app/user/123` **is not** normalized
- * - `/my/app/user/123/` **is not** normalized
- *
- * ### Example
- *
- * <code-example path='common/location/ts/path_location_component.ts'
- * region='LocationComponent'></code-example>
- *
- * @publicApi
- */
- class Location {
- constructor(platformStrategy, platformLocation) {
- /** @internal */
- this._subject = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /** @internal */
- this._urlChangeListeners = [];
- this._platformStrategy = platformStrategy;
- const browserBaseHref = this._platformStrategy.getBaseHref();
- this._platformLocation = platformLocation;
- this._baseHref = stripTrailingSlash(_stripIndexHtml(browserBaseHref));
- this._platformStrategy.onPopState((ev) => {
- this._subject.emit({
- 'url': this.path(true),
- 'pop': true,
- 'state': ev.state,
- 'type': ev.type,
- });
- });
- }
- /**
- * Normalizes the URL path for this location.
- *
- * @param includeHash True to include an anchor fragment in the path.
- *
- * @returns The normalized URL path.
- */
- // TODO: vsavkin. Remove the boolean flag and always include hash once the deprecated router is
- // removed.
- path(includeHash = false) {
- return this.normalize(this._platformStrategy.path(includeHash));
- }
- /**
- * Reports the current state of the location history.
- * @returns The current value of the `history.state` object.
- */
- getState() {
- return this._platformLocation.getState();
- }
- /**
- * Normalizes the given path and compares to the current normalized path.
- *
- * @param path The given URL path.
- * @param query Query parameters.
- *
- * @returns True if the given URL path is equal to the current normalized path, false
- * otherwise.
- */
- isCurrentPathEqualTo(path, query = '') {
- return this.path() == this.normalize(path + normalizeQueryParams(query));
- }
- /**
- * Normalizes a URL path by stripping any trailing slashes.
- *
- * @param url String representing a URL.
- *
- * @returns The normalized URL string.
- */
- normalize(url) {
- return Location.stripTrailingSlash(_stripBaseHref(this._baseHref, _stripIndexHtml(url)));
- }
- /**
- * Normalizes an external URL path.
- * If the given URL doesn't begin with a leading slash (`'/'`), adds one
- * before normalizing. Adds a hash if `HashLocationStrategy` is
- * in use, or the `APP_BASE_HREF` if the `PathLocationStrategy` is in use.
- *
- * @param url String representing a URL.
- *
- * @returns A normalized platform-specific URL.
- */
- prepareExternalUrl(url) {
- if (url && url[0] !== '/') {
- url = '/' + url;
- }
- return this._platformStrategy.prepareExternalUrl(url);
- }
- // TODO: rename this method to pushState
- /**
- * Changes the browser's URL to a normalized version of a given URL, and pushes a
- * new item onto the platform's history.
- *
- * @param path URL path to normalize.
- * @param query Query parameters.
- * @param state Location history state.
- *
- */
- go(path, query = '', state = null) {
- this._platformStrategy.pushState(state, '', path, query);
- this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);
- }
- /**
- * Changes the browser's URL to a normalized version of the given URL, and replaces
- * the top item on the platform's history stack.
- *
- * @param path URL path to normalize.
- * @param query Query parameters.
- * @param state Location history state.
- */
- replaceState(path, query = '', state = null) {
- this._platformStrategy.replaceState(state, '', path, query);
- this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);
- }
- /**
- * Navigates forward in the platform's history.
- */
- forward() {
- this._platformStrategy.forward();
- }
- /**
- * Navigates back in the platform's history.
- */
- back() {
- this._platformStrategy.back();
- }
- /**
- * Registers a URL change listener. Use to catch updates performed by the Angular
- * framework that are not detectible through "popstate" or "hashchange" events.
- *
- * @param fn The change handler function, which take a URL and a location history state.
- */
- onUrlChange(fn) {
- this._urlChangeListeners.push(fn);
- if (!this._urlChangeSubscription) {
- this._urlChangeSubscription = this.subscribe(v => {
- this._notifyUrlChangeListeners(v.url, v.state);
- });
- }
- }
- /** @internal */
- _notifyUrlChangeListeners(url = '', state) {
- this._urlChangeListeners.forEach(fn => fn(url, state));
- }
- /**
- * Subscribes to the platform's `popState` events.
- *
- * @param value Event that is triggered when the state history changes.
- * @param exception The exception to throw.
- *
- * @returns Subscribed events.
- */
- subscribe(onNext, onThrow, onReturn) {
- return this._subject.subscribe({ next: onNext, error: onThrow, complete: onReturn });
- }
- }
- Location.ɵfac = function Location_Factory(t) { return new (t || Location)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](LocationStrategy), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](PlatformLocation)); };
- /**
- * Normalizes URL parameters by prepending with `?` if needed.
- *
- * @param params String of URL parameters.
- *
- * @returns The normalized URL parameters string.
- */
- Location.normalizeQueryParams = normalizeQueryParams;
- /**
- * Joins two parts of a URL with a slash if needed.
- *
- * @param start URL string
- * @param end URL string
- *
- *
- * @returns The joined URL string.
- */
- Location.joinWithSlash = joinWithSlash;
- /**
- * Removes a trailing slash from a URL string if needed.
- * Looks for the first occurrence of either `#`, `?`, or the end of the
- * line as `/` characters and removes the trailing slash if one exists.
- *
- * @param url URL string.
- *
- * @returns The URL string, modified if needed.
- */
- Location.stripTrailingSlash = stripTrailingSlash;
- Location.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({ factory: createLocation, token: Location, providedIn: "root" });
- Location.ctorParameters = () => [
- { type: LocationStrategy },
- { type: PlatformLocation }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Location, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
- args: [{
- providedIn: 'root',
- // See #23917
- useFactory: createLocation
- }]
- }], function () { return [{ type: LocationStrategy }, { type: PlatformLocation }]; }, null); })();
- function createLocation() {
- return new Location(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(LocationStrategy), Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(PlatformLocation));
- }
- function _stripBaseHref(baseHref, url) {
- return baseHref && url.startsWith(baseHref) ? url.substring(baseHref.length) : url;
- }
- function _stripIndexHtml(url) {
- return url.replace(/\/index.html$/, '');
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /** @internal */
- const CURRENCIES_EN = {
- 'ADP': [undefined, undefined, 0],
- 'AFN': [undefined, undefined, 0],
- 'ALL': [undefined, undefined, 0],
- 'AMD': [undefined, undefined, 2],
- 'AOA': [undefined, 'Kz'],
- 'ARS': [undefined, '$'],
- 'AUD': ['A$', '$'],
- 'BAM': [undefined, 'KM'],
- 'BBD': [undefined, '$'],
- 'BDT': [undefined, '৳'],
- 'BHD': [undefined, undefined, 3],
- 'BIF': [undefined, undefined, 0],
- 'BMD': [undefined, '$'],
- 'BND': [undefined, '$'],
- 'BOB': [undefined, 'Bs'],
- 'BRL': ['R$'],
- 'BSD': [undefined, '$'],
- 'BWP': [undefined, 'P'],
- 'BYN': [undefined, 'р.', 2],
- 'BYR': [undefined, undefined, 0],
- 'BZD': [undefined, '$'],
- 'CAD': ['CA$', '$', 2],
- 'CHF': [undefined, undefined, 2],
- 'CLF': [undefined, undefined, 4],
- 'CLP': [undefined, '$', 0],
- 'CNY': ['CN¥', '¥'],
- 'COP': [undefined, '$', 2],
- 'CRC': [undefined, '₡', 2],
- 'CUC': [undefined, '$'],
- 'CUP': [undefined, '$'],
- 'CZK': [undefined, 'Kč', 2],
- 'DJF': [undefined, undefined, 0],
- 'DKK': [undefined, 'kr', 2],
- 'DOP': [undefined, '$'],
- 'EGP': [undefined, 'E£'],
- 'ESP': [undefined, '₧', 0],
- 'EUR': ['€'],
- 'FJD': [undefined, '$'],
- 'FKP': [undefined, '£'],
- 'GBP': ['£'],
- 'GEL': [undefined, '₾'],
- 'GIP': [undefined, '£'],
- 'GNF': [undefined, 'FG', 0],
- 'GTQ': [undefined, 'Q'],
- 'GYD': [undefined, '$', 2],
- 'HKD': ['HK$', '$'],
- 'HNL': [undefined, 'L'],
- 'HRK': [undefined, 'kn'],
- 'HUF': [undefined, 'Ft', 2],
- 'IDR': [undefined, 'Rp', 2],
- 'ILS': ['₪'],
- 'INR': ['₹'],
- 'IQD': [undefined, undefined, 0],
- 'IRR': [undefined, undefined, 0],
- 'ISK': [undefined, 'kr', 0],
- 'ITL': [undefined, undefined, 0],
- 'JMD': [undefined, '$'],
- 'JOD': [undefined, undefined, 3],
- 'JPY': ['¥', undefined, 0],
- 'KHR': [undefined, '៛'],
- 'KMF': [undefined, 'CF', 0],
- 'KPW': [undefined, '₩', 0],
- 'KRW': ['₩', undefined, 0],
- 'KWD': [undefined, undefined, 3],
- 'KYD': [undefined, '$'],
- 'KZT': [undefined, '₸'],
- 'LAK': [undefined, '₭', 0],
- 'LBP': [undefined, 'L£', 0],
- 'LKR': [undefined, 'Rs'],
- 'LRD': [undefined, '$'],
- 'LTL': [undefined, 'Lt'],
- 'LUF': [undefined, undefined, 0],
- 'LVL': [undefined, 'Ls'],
- 'LYD': [undefined, undefined, 3],
- 'MGA': [undefined, 'Ar', 0],
- 'MGF': [undefined, undefined, 0],
- 'MMK': [undefined, 'K', 0],
- 'MNT': [undefined, '₮', 2],
- 'MRO': [undefined, undefined, 0],
- 'MUR': [undefined, 'Rs', 2],
- 'MXN': ['MX$', '$'],
- 'MYR': [undefined, 'RM'],
- 'NAD': [undefined, '$'],
- 'NGN': [undefined, '₦'],
- 'NIO': [undefined, 'C$'],
- 'NOK': [undefined, 'kr', 2],
- 'NPR': [undefined, 'Rs'],
- 'NZD': ['NZ$', '$'],
- 'OMR': [undefined, undefined, 3],
- 'PHP': [undefined, '₱'],
- 'PKR': [undefined, 'Rs', 2],
- 'PLN': [undefined, 'zł'],
- 'PYG': [undefined, '₲', 0],
- 'RON': [undefined, 'lei'],
- 'RSD': [undefined, undefined, 0],
- 'RUB': [undefined, '₽'],
- 'RUR': [undefined, 'р.'],
- 'RWF': [undefined, 'RF', 0],
- 'SBD': [undefined, '$'],
- 'SEK': [undefined, 'kr', 2],
- 'SGD': [undefined, '$'],
- 'SHP': [undefined, '£'],
- 'SLL': [undefined, undefined, 0],
- 'SOS': [undefined, undefined, 0],
- 'SRD': [undefined, '$'],
- 'SSP': [undefined, '£'],
- 'STD': [undefined, undefined, 0],
- 'STN': [undefined, 'Db'],
- 'SYP': [undefined, '£', 0],
- 'THB': [undefined, '฿'],
- 'TMM': [undefined, undefined, 0],
- 'TND': [undefined, undefined, 3],
- 'TOP': [undefined, 'T$'],
- 'TRL': [undefined, undefined, 0],
- 'TRY': [undefined, '₺'],
- 'TTD': [undefined, '$'],
- 'TWD': ['NT$', '$', 2],
- 'TZS': [undefined, undefined, 2],
- 'UAH': [undefined, '₴'],
- 'UGX': [undefined, undefined, 0],
- 'USD': ['$'],
- 'UYI': [undefined, undefined, 0],
- 'UYU': [undefined, '$'],
- 'UYW': [undefined, undefined, 4],
- 'UZS': [undefined, undefined, 2],
- 'VEF': [undefined, 'Bs', 2],
- 'VND': ['₫', undefined, 0],
- 'VUV': [undefined, undefined, 0],
- 'XAF': ['FCFA', undefined, 0],
- 'XCD': ['EC$', '$'],
- 'XOF': ['CFA', undefined, 0],
- 'XPF': ['CFPF', undefined, 0],
- 'XXX': ['¤'],
- 'YER': [undefined, undefined, 0],
- 'ZAR': [undefined, 'R'],
- 'ZMK': [undefined, undefined, 0],
- 'ZMW': [undefined, 'ZK'],
- 'ZWD': [undefined, undefined, 0]
- };
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Format styles that can be used to represent numbers.
- * @see `getLocaleNumberFormat()`.
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- var NumberFormatStyle;
- (function (NumberFormatStyle) {
- NumberFormatStyle[NumberFormatStyle["Decimal"] = 0] = "Decimal";
- NumberFormatStyle[NumberFormatStyle["Percent"] = 1] = "Percent";
- NumberFormatStyle[NumberFormatStyle["Currency"] = 2] = "Currency";
- NumberFormatStyle[NumberFormatStyle["Scientific"] = 3] = "Scientific";
- })(NumberFormatStyle || (NumberFormatStyle = {}));
- /**
- * Plurality cases used for translating plurals to different languages.
- *
- * @see `NgPlural`
- * @see `NgPluralCase`
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- var Plural;
- (function (Plural) {
- Plural[Plural["Zero"] = 0] = "Zero";
- Plural[Plural["One"] = 1] = "One";
- Plural[Plural["Two"] = 2] = "Two";
- Plural[Plural["Few"] = 3] = "Few";
- Plural[Plural["Many"] = 4] = "Many";
- Plural[Plural["Other"] = 5] = "Other";
- })(Plural || (Plural = {}));
- /**
- * Context-dependant translation forms for strings.
- * Typically the standalone version is for the nominative form of the word,
- * and the format version is used for the genitive case.
- * @see [CLDR website](http://cldr.unicode.org/translation/date-time-1/date-time#TOC-Standalone-vs.-Format-Styles)
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- var FormStyle;
- (function (FormStyle) {
- FormStyle[FormStyle["Format"] = 0] = "Format";
- FormStyle[FormStyle["Standalone"] = 1] = "Standalone";
- })(FormStyle || (FormStyle = {}));
- /**
- * String widths available for translations.
- * The specific character widths are locale-specific.
- * Examples are given for the word "Sunday" in English.
- *
- * @publicApi
- */
- var TranslationWidth;
- (function (TranslationWidth) {
- /** 1 character for `en-US`. For example: 'S' */
- TranslationWidth[TranslationWidth["Narrow"] = 0] = "Narrow";
- /** 3 characters for `en-US`. For example: 'Sun' */
- TranslationWidth[TranslationWidth["Abbreviated"] = 1] = "Abbreviated";
- /** Full length for `en-US`. For example: "Sunday" */
- TranslationWidth[TranslationWidth["Wide"] = 2] = "Wide";
- /** 2 characters for `en-US`, For example: "Su" */
- TranslationWidth[TranslationWidth["Short"] = 3] = "Short";
- })(TranslationWidth || (TranslationWidth = {}));
- /**
- * String widths available for date-time formats.
- * The specific character widths are locale-specific.
- * Examples are given for `en-US`.
- *
- * @see `getLocaleDateFormat()`
- * @see `getLocaleTimeFormat()``
- * @see `getLocaleDateTimeFormat()`
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- * @publicApi
- */
- var FormatWidth;
- (function (FormatWidth) {
- /**
- * For `en-US`, 'M/d/yy, h:mm a'`
- * (Example: `6/15/15, 9:03 AM`)
- */
- FormatWidth[FormatWidth["Short"] = 0] = "Short";
- /**
- * For `en-US`, `'MMM d, y, h:mm:ss a'`
- * (Example: `Jun 15, 2015, 9:03:01 AM`)
- */
- FormatWidth[FormatWidth["Medium"] = 1] = "Medium";
- /**
- * For `en-US`, `'MMMM d, y, h:mm:ss a z'`
- * (Example: `June 15, 2015 at 9:03:01 AM GMT+1`)
- */
- FormatWidth[FormatWidth["Long"] = 2] = "Long";
- /**
- * For `en-US`, `'EEEE, MMMM d, y, h:mm:ss a zzzz'`
- * (Example: `Monday, June 15, 2015 at 9:03:01 AM GMT+01:00`)
- */
- FormatWidth[FormatWidth["Full"] = 3] = "Full";
- })(FormatWidth || (FormatWidth = {}));
- /**
- * Symbols that can be used to replace placeholders in number patterns.
- * Examples are based on `en-US` values.
- *
- * @see `getLocaleNumberSymbol()`
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- var NumberSymbol;
- (function (NumberSymbol) {
- /**
- * Decimal separator.
- * For `en-US`, the dot character.
- * Example : 2,345`.`67
- */
- NumberSymbol[NumberSymbol["Decimal"] = 0] = "Decimal";
- /**
- * Grouping separator, typically for thousands.
- * For `en-US`, the comma character.
- * Example: 2`,`345.67
- */
- NumberSymbol[NumberSymbol["Group"] = 1] = "Group";
- /**
- * List-item separator.
- * Example: "one, two, and three"
- */
- NumberSymbol[NumberSymbol["List"] = 2] = "List";
- /**
- * Sign for percentage (out of 100).
- * Example: 23.4%
- */
- NumberSymbol[NumberSymbol["PercentSign"] = 3] = "PercentSign";
- /**
- * Sign for positive numbers.
- * Example: +23
- */
- NumberSymbol[NumberSymbol["PlusSign"] = 4] = "PlusSign";
- /**
- * Sign for negative numbers.
- * Example: -23
- */
- NumberSymbol[NumberSymbol["MinusSign"] = 5] = "MinusSign";
- /**
- * Computer notation for exponential value (n times a power of 10).
- * Example: 1.2E3
- */
- NumberSymbol[NumberSymbol["Exponential"] = 6] = "Exponential";
- /**
- * Human-readable format of exponential.
- * Example: 1.2x103
- */
- NumberSymbol[NumberSymbol["SuperscriptingExponent"] = 7] = "SuperscriptingExponent";
- /**
- * Sign for permille (out of 1000).
- * Example: 23.4‰
- */
- NumberSymbol[NumberSymbol["PerMille"] = 8] = "PerMille";
- /**
- * Infinity, can be used with plus and minus.
- * Example: ∞, +∞, -∞
- */
- NumberSymbol[NumberSymbol["Infinity"] = 9] = "Infinity";
- /**
- * Not a number.
- * Example: NaN
- */
- NumberSymbol[NumberSymbol["NaN"] = 10] = "NaN";
- /**
- * Symbol used between time units.
- * Example: 10:52
- */
- NumberSymbol[NumberSymbol["TimeSeparator"] = 11] = "TimeSeparator";
- /**
- * Decimal separator for currency values (fallback to `Decimal`).
- * Example: $2,345.67
- */
- NumberSymbol[NumberSymbol["CurrencyDecimal"] = 12] = "CurrencyDecimal";
- /**
- * Group separator for currency values (fallback to `Group`).
- * Example: $2,345.67
- */
- NumberSymbol[NumberSymbol["CurrencyGroup"] = 13] = "CurrencyGroup";
- })(NumberSymbol || (NumberSymbol = {}));
- /**
- * The value for each day of the week, based on the `en-US` locale
- *
- * @publicApi
- */
- var WeekDay;
- (function (WeekDay) {
- WeekDay[WeekDay["Sunday"] = 0] = "Sunday";
- WeekDay[WeekDay["Monday"] = 1] = "Monday";
- WeekDay[WeekDay["Tuesday"] = 2] = "Tuesday";
- WeekDay[WeekDay["Wednesday"] = 3] = "Wednesday";
- WeekDay[WeekDay["Thursday"] = 4] = "Thursday";
- WeekDay[WeekDay["Friday"] = 5] = "Friday";
- WeekDay[WeekDay["Saturday"] = 6] = "Saturday";
- })(WeekDay || (WeekDay = {}));
- /**
- * Retrieves the locale ID from the currently loaded locale.
- * The loaded locale could be, for example, a global one rather than a regional one.
- * @param locale A locale code, such as `fr-FR`.
- * @returns The locale code. For example, `fr`.
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getLocaleId(locale) {
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale)[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].LocaleId];
- }
- /**
- * Retrieves day period strings for the given locale.
- *
- * @param locale A locale code for the locale format rules to use.
- * @param formStyle The required grammatical form.
- * @param width The required character width.
- * @returns An array of localized period strings. For example, `[AM, PM]` for `en-US`.
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getLocaleDayPeriods(locale, formStyle, width) {
- const data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
- const amPmData = [
- data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DayPeriodsFormat], data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DayPeriodsStandalone]
- ];
- const amPm = getLastDefinedValue(amPmData, formStyle);
- return getLastDefinedValue(amPm, width);
- }
- /**
- * Retrieves days of the week for the given locale, using the Gregorian calendar.
- *
- * @param locale A locale code for the locale format rules to use.
- * @param formStyle The required grammatical form.
- * @param width The required character width.
- * @returns An array of localized name strings.
- * For example,`[Sunday, Monday, ... Saturday]` for `en-US`.
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getLocaleDayNames(locale, formStyle, width) {
- const data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
- const daysData = [data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DaysFormat], data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DaysStandalone]];
- const days = getLastDefinedValue(daysData, formStyle);
- return getLastDefinedValue(days, width);
- }
- /**
- * Retrieves months of the year for the given locale, using the Gregorian calendar.
- *
- * @param locale A locale code for the locale format rules to use.
- * @param formStyle The required grammatical form.
- * @param width The required character width.
- * @returns An array of localized name strings.
- * For example, `[January, February, ...]` for `en-US`.
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getLocaleMonthNames(locale, formStyle, width) {
- const data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
- const monthsData = [data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].MonthsFormat], data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].MonthsStandalone]];
- const months = getLastDefinedValue(monthsData, formStyle);
- return getLastDefinedValue(months, width);
- }
- /**
- * Retrieves Gregorian-calendar eras for the given locale.
- * @param locale A locale code for the locale format rules to use.
- * @param width The required character width.
- * @returns An array of localized era strings.
- * For example, `[AD, BC]` for `en-US`.
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getLocaleEraNames(locale, width) {
- const data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
- const erasData = data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].Eras];
- return getLastDefinedValue(erasData, width);
- }
- /**
- * Retrieves the first day of the week for the given locale.
- *
- * @param locale A locale code for the locale format rules to use.
- * @returns A day index number, using the 0-based week-day index for `en-US`
- * (Sunday = 0, Monday = 1, ...).
- * For example, for `fr-FR`, returns 1 to indicate that the first day is Monday.
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getLocaleFirstDayOfWeek(locale) {
- const data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
- return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].FirstDayOfWeek];
- }
- /**
- * Range of week days that are considered the week-end for the given locale.
- *
- * @param locale A locale code for the locale format rules to use.
- * @returns The range of day values, `[startDay, endDay]`.
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getLocaleWeekEndRange(locale) {
- const data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
- return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].WeekendRange];
- }
- /**
- * Retrieves a localized date-value formating string.
- *
- * @param locale A locale code for the locale format rules to use.
- * @param width The format type.
- * @returns The localized formating string.
- * @see `FormatWidth`
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getLocaleDateFormat(locale, width) {
- const data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
- return getLastDefinedValue(data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DateFormat], width);
- }
- /**
- * Retrieves a localized time-value formatting string.
- *
- * @param locale A locale code for the locale format rules to use.
- * @param width The format type.
- * @returns The localized formatting string.
- * @see `FormatWidth`
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- * @publicApi
- */
- function getLocaleTimeFormat(locale, width) {
- const data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
- return getLastDefinedValue(data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].TimeFormat], width);
- }
- /**
- * Retrieves a localized date-time formatting string.
- *
- * @param locale A locale code for the locale format rules to use.
- * @param width The format type.
- * @returns The localized formatting string.
- * @see `FormatWidth`
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getLocaleDateTimeFormat(locale, width) {
- const data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
- const dateTimeFormatData = data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DateTimeFormat];
- return getLastDefinedValue(dateTimeFormatData, width);
- }
- /**
- * Retrieves a localized number symbol that can be used to replace placeholders in number formats.
- * @param locale The locale code.
- * @param symbol The symbol to localize.
- * @returns The character for the localized symbol.
- * @see `NumberSymbol`
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getLocaleNumberSymbol(locale, symbol) {
- const data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
- const res = data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].NumberSymbols][symbol];
- if (typeof res === 'undefined') {
- if (symbol === NumberSymbol.CurrencyDecimal) {
- return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].NumberSymbols][NumberSymbol.Decimal];
- }
- else if (symbol === NumberSymbol.CurrencyGroup) {
- return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].NumberSymbols][NumberSymbol.Group];
- }
- }
- return res;
- }
- /**
- * Retrieves a number format for a given locale.
- *
- * Numbers are formatted using patterns, like `#,###.00`. For example, the pattern `#,###.00`
- * when used to format the number 12345.678 could result in "12'345,678". That would happen if the
- * grouping separator for your language is an apostrophe, and the decimal separator is a comma.
- *
- * <b>Important:</b> The characters `.` `,` `0` `#` (and others below) are special placeholders
- * that stand for the decimal separator, and so on, and are NOT real characters.
- * You must NOT "translate" the placeholders. For example, don't change `.` to `,` even though in
- * your language the decimal point is written with a comma. The symbols should be replaced by the
- * local equivalents, using the appropriate `NumberSymbol` for your language.
- *
- * Here are the special characters used in number patterns:
- *
- * | Symbol | Meaning |
- * |--------|---------|
- * | . | Replaced automatically by the character used for the decimal point. |
- * | , | Replaced by the "grouping" (thousands) separator. |
- * | 0 | Replaced by a digit (or zero if there aren't enough digits). |
- * | # | Replaced by a digit (or nothing if there aren't enough). |
- * | ¤ | Replaced by a currency symbol, such as $ or USD. |
- * | % | Marks a percent format. The % symbol may change position, but must be retained. |
- * | E | Marks a scientific format. The E symbol may change position, but must be retained. |
- * | ' | Special characters used as literal characters are quoted with ASCII single quotes. |
- *
- * @param locale A locale code for the locale format rules to use.
- * @param type The type of numeric value to be formatted (such as `Decimal` or `Currency`.)
- * @returns The localized format string.
- * @see `NumberFormatStyle`
- * @see [CLDR website](http://cldr.unicode.org/translation/number-patterns)
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getLocaleNumberFormat(locale, type) {
- const data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
- return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].NumberFormats][type];
- }
- /**
- * Retrieves the symbol used to represent the currency for the main country
- * corresponding to a given locale. For example, '$' for `en-US`.
- *
- * @param locale A locale code for the locale format rules to use.
- * @returns The localized symbol character,
- * or `null` if the main country cannot be determined.
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getLocaleCurrencySymbol(locale) {
- const data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
- return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].CurrencySymbol] || null;
- }
- /**
- * Retrieves the name of the currency for the main country corresponding
- * to a given locale. For example, 'US Dollar' for `en-US`.
- * @param locale A locale code for the locale format rules to use.
- * @returns The currency name,
- * or `null` if the main country cannot be determined.
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getLocaleCurrencyName(locale) {
- const data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
- return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].CurrencyName] || null;
- }
- /**
- * Retrieves the default currency code for the given locale.
- *
- * The default is defined as the first currency which is still in use.
- *
- * @param locale The code of the locale whose currency code we want.
- * @returns The code of the default currency for the given locale.
- *
- * @publicApi
- */
- function getLocaleCurrencyCode(locale) {
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵgetLocaleCurrencyCode"])(locale);
- }
- /**
- * Retrieves the currency values for a given locale.
- * @param locale A locale code for the locale format rules to use.
- * @returns The currency values.
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- */
- function getLocaleCurrencies(locale) {
- const data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
- return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].Currencies];
- }
- /**
- * @alias core/ɵgetLocalePluralCase
- * @publicApi
- */
- const getLocalePluralCase = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵgetLocalePluralCase"];
- function checkFullData(data) {
- if (!data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].ExtraData]) {
- throw new Error(`Missing extra locale data for the locale "${data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"]
- .LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`);
- }
- }
- /**
- * Retrieves locale-specific rules used to determine which day period to use
- * when more than one period is defined for a locale.
- *
- * There is a rule for each defined day period. The
- * first rule is applied to the first day period and so on.
- * Fall back to AM/PM when no rules are available.
- *
- * A rule can specify a period as time range, or as a single time value.
- *
- * This functionality is only available when you have loaded the full locale data.
- * See the ["I18n guide"](guide/i18n#i18n-pipes).
- *
- * @param locale A locale code for the locale format rules to use.
- * @returns The rules for the locale, a single time value or array of *from-time, to-time*,
- * or null if no periods are available.
- *
- * @see `getLocaleExtraDayPeriods()`
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getLocaleExtraDayPeriodRules(locale) {
- const data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
- checkFullData(data);
- const rules = data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].ExtraData][2 /* ExtraDayPeriodsRules */] || [];
- return rules.map((rule) => {
- if (typeof rule === 'string') {
- return extractTime(rule);
- }
- return [extractTime(rule[0]), extractTime(rule[1])];
- });
- }
- /**
- * Retrieves locale-specific day periods, which indicate roughly how a day is broken up
- * in different languages.
- * For example, for `en-US`, periods are morning, noon, afternoon, evening, and midnight.
- *
- * This functionality is only available when you have loaded the full locale data.
- * See the ["I18n guide"](guide/i18n#i18n-pipes).
- *
- * @param locale A locale code for the locale format rules to use.
- * @param formStyle The required grammatical form.
- * @param width The required character width.
- * @returns The translated day-period strings.
- * @see `getLocaleExtraDayPeriodRules()`
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getLocaleExtraDayPeriods(locale, formStyle, width) {
- const data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
- checkFullData(data);
- const dayPeriodsData = [
- data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].ExtraData][0 /* ExtraDayPeriodFormats */],
- data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].ExtraData][1 /* ExtraDayPeriodStandalone */]
- ];
- const dayPeriods = getLastDefinedValue(dayPeriodsData, formStyle) || [];
- return getLastDefinedValue(dayPeriods, width) || [];
- }
- /**
- * Retrieves the writing direction of a specified locale
- * @param locale A locale code for the locale format rules to use.
- * @publicApi
- * @returns 'rtl' or 'ltr'
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- */
- function getLocaleDirection(locale) {
- const data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
- return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].Directionality];
- }
- /**
- * Retrieves the first value that is defined in an array, going backwards from an index position.
- *
- * To avoid repeating the same data (as when the "format" and "standalone" forms are the same)
- * add the first value to the locale data arrays, and add other values only if they are different.
- *
- * @param data The data array to retrieve from.
- * @param index A 0-based index into the array to start from.
- * @returns The value immediately before the given index position.
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getLastDefinedValue(data, index) {
- for (let i = index; i > -1; i--) {
- if (typeof data[i] !== 'undefined') {
- return data[i];
- }
- }
- throw new Error('Locale data API: locale data undefined');
- }
- /**
- * Extracts the hours and minutes from a string like "15:45"
- */
- function extractTime(time) {
- const [h, m] = time.split(':');
- return { hours: +h, minutes: +m };
- }
- /**
- * Retrieves the currency symbol for a given currency code.
- *
- * For example, for the default `en-US` locale, the code `USD` can
- * be represented by the narrow symbol `$` or the wide symbol `US$`.
- *
- * @param code The currency code.
- * @param format The format, `wide` or `narrow`.
- * @param locale A locale code for the locale format rules to use.
- *
- * @returns The symbol, or the currency code if no symbol is available.
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getCurrencySymbol(code, format, locale = 'en') {
- const currency = getLocaleCurrencies(locale)[code] || CURRENCIES_EN[code] || [];
- const symbolNarrow = currency[1 /* SymbolNarrow */];
- if (format === 'narrow' && typeof symbolNarrow === 'string') {
- return symbolNarrow;
- }
- return currency[0 /* Symbol */] || code;
- }
- // Most currencies have cents, that's why the default is 2
- const DEFAULT_NB_OF_CURRENCY_DIGITS = 2;
- /**
- * Reports the number of decimal digits for a given currency.
- * The value depends upon the presence of cents in that particular currency.
- *
- * @param code The currency code.
- * @returns The number of decimal digits, typically 0 or 2.
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function getNumberOfCurrencyDigits(code) {
- let digits;
- const currency = CURRENCIES_EN[code];
- if (currency) {
- digits = currency[2 /* NbOfDigits */];
- }
- return typeof digits === 'number' ? digits : DEFAULT_NB_OF_CURRENCY_DIGITS;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ISO8601_DATE_REGEX = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
- // 1 2 3 4 5 6 7 8 9 10 11
- const NAMED_FORMATS = {};
- const DATE_FORMATS_SPLIT = /((?:[^GyYMLwWdEabBhHmsSzZO']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;
- var ZoneWidth;
- (function (ZoneWidth) {
- ZoneWidth[ZoneWidth["Short"] = 0] = "Short";
- ZoneWidth[ZoneWidth["ShortGMT"] = 1] = "ShortGMT";
- ZoneWidth[ZoneWidth["Long"] = 2] = "Long";
- ZoneWidth[ZoneWidth["Extended"] = 3] = "Extended";
- })(ZoneWidth || (ZoneWidth = {}));
- var DateType;
- (function (DateType) {
- DateType[DateType["FullYear"] = 0] = "FullYear";
- DateType[DateType["Month"] = 1] = "Month";
- DateType[DateType["Date"] = 2] = "Date";
- DateType[DateType["Hours"] = 3] = "Hours";
- DateType[DateType["Minutes"] = 4] = "Minutes";
- DateType[DateType["Seconds"] = 5] = "Seconds";
- DateType[DateType["FractionalSeconds"] = 6] = "FractionalSeconds";
- DateType[DateType["Day"] = 7] = "Day";
- })(DateType || (DateType = {}));
- var TranslationType;
- (function (TranslationType) {
- TranslationType[TranslationType["DayPeriods"] = 0] = "DayPeriods";
- TranslationType[TranslationType["Days"] = 1] = "Days";
- TranslationType[TranslationType["Months"] = 2] = "Months";
- TranslationType[TranslationType["Eras"] = 3] = "Eras";
- })(TranslationType || (TranslationType = {}));
- /**
- * @ngModule CommonModule
- * @description
- *
- * Formats a date according to locale rules.
- *
- * @param value The date to format, as a Date, or a number (milliseconds since UTC epoch)
- * or an [ISO date-time string](https://www.w3.org/TR/NOTE-datetime).
- * @param format The date-time components to include. See `DatePipe` for details.
- * @param locale A locale code for the locale format rules to use.
- * @param timezone The time zone. A time zone offset from GMT (such as `'+0430'`),
- * or a standard UTC/GMT or continental US time zone abbreviation.
- * If not specified, uses host system settings.
- *
- * @returns The formatted date string.
- *
- * @see `DatePipe`
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function formatDate(value, format, locale, timezone) {
- let date = toDate(value);
- const namedFormat = getNamedFormat(locale, format);
- format = namedFormat || format;
- let parts = [];
- let match;
- while (format) {
- match = DATE_FORMATS_SPLIT.exec(format);
- if (match) {
- parts = parts.concat(match.slice(1));
- const part = parts.pop();
- if (!part) {
- break;
- }
- format = part;
- }
- else {
- parts.push(format);
- break;
- }
- }
- let dateTimezoneOffset = date.getTimezoneOffset();
- if (timezone) {
- dateTimezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);
- date = convertTimezoneToLocal(date, timezone, true);
- }
- let text = '';
- parts.forEach(value => {
- const dateFormatter = getDateFormatter(value);
- text += dateFormatter ?
- dateFormatter(date, locale, dateTimezoneOffset) :
- value === '\'\'' ? '\'' : value.replace(/(^'|'$)/g, '').replace(/''/g, '\'');
- });
- return text;
- }
- function getNamedFormat(locale, format) {
- const localeId = getLocaleId(locale);
- NAMED_FORMATS[localeId] = NAMED_FORMATS[localeId] || {};
- if (NAMED_FORMATS[localeId][format]) {
- return NAMED_FORMATS[localeId][format];
- }
- let formatValue = '';
- switch (format) {
- case 'shortDate':
- formatValue = getLocaleDateFormat(locale, FormatWidth.Short);
- break;
- case 'mediumDate':
- formatValue = getLocaleDateFormat(locale, FormatWidth.Medium);
- break;
- case 'longDate':
- formatValue = getLocaleDateFormat(locale, FormatWidth.Long);
- break;
- case 'fullDate':
- formatValue = getLocaleDateFormat(locale, FormatWidth.Full);
- break;
- case 'shortTime':
- formatValue = getLocaleTimeFormat(locale, FormatWidth.Short);
- break;
- case 'mediumTime':
- formatValue = getLocaleTimeFormat(locale, FormatWidth.Medium);
- break;
- case 'longTime':
- formatValue = getLocaleTimeFormat(locale, FormatWidth.Long);
- break;
- case 'fullTime':
- formatValue = getLocaleTimeFormat(locale, FormatWidth.Full);
- break;
- case 'short':
- const shortTime = getNamedFormat(locale, 'shortTime');
- const shortDate = getNamedFormat(locale, 'shortDate');
- formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Short), [shortTime, shortDate]);
- break;
- case 'medium':
- const mediumTime = getNamedFormat(locale, 'mediumTime');
- const mediumDate = getNamedFormat(locale, 'mediumDate');
- formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Medium), [mediumTime, mediumDate]);
- break;
- case 'long':
- const longTime = getNamedFormat(locale, 'longTime');
- const longDate = getNamedFormat(locale, 'longDate');
- formatValue =
- formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Long), [longTime, longDate]);
- break;
- case 'full':
- const fullTime = getNamedFormat(locale, 'fullTime');
- const fullDate = getNamedFormat(locale, 'fullDate');
- formatValue =
- formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Full), [fullTime, fullDate]);
- break;
- }
- if (formatValue) {
- NAMED_FORMATS[localeId][format] = formatValue;
- }
- return formatValue;
- }
- function formatDateTime(str, opt_values) {
- if (opt_values) {
- str = str.replace(/\{([^}]+)}/g, function (match, key) {
- return (opt_values != null && key in opt_values) ? opt_values[key] : match;
- });
- }
- return str;
- }
- function padNumber(num, digits, minusSign = '-', trim, negWrap) {
- let neg = '';
- if (num < 0 || (negWrap && num <= 0)) {
- if (negWrap) {
- num = -num + 1;
- }
- else {
- num = -num;
- neg = minusSign;
- }
- }
- let strNum = String(num);
- while (strNum.length < digits) {
- strNum = '0' + strNum;
- }
- if (trim) {
- strNum = strNum.substr(strNum.length - digits);
- }
- return neg + strNum;
- }
- function formatFractionalSeconds(milliseconds, digits) {
- const strMs = padNumber(milliseconds, 3);
- return strMs.substr(0, digits);
- }
- /**
- * Returns a date formatter that transforms a date into its locale digit representation
- */
- function dateGetter(name, size, offset = 0, trim = false, negWrap = false) {
- return function (date, locale) {
- let part = getDatePart(name, date);
- if (offset > 0 || part > -offset) {
- part += offset;
- }
- if (name === DateType.Hours) {
- if (part === 0 && offset === -12) {
- part = 12;
- }
- }
- else if (name === DateType.FractionalSeconds) {
- return formatFractionalSeconds(part, size);
- }
- const localeMinus = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);
- return padNumber(part, size, localeMinus, trim, negWrap);
- };
- }
- function getDatePart(part, date) {
- switch (part) {
- case DateType.FullYear:
- return date.getFullYear();
- case DateType.Month:
- return date.getMonth();
- case DateType.Date:
- return date.getDate();
- case DateType.Hours:
- return date.getHours();
- case DateType.Minutes:
- return date.getMinutes();
- case DateType.Seconds:
- return date.getSeconds();
- case DateType.FractionalSeconds:
- return date.getMilliseconds();
- case DateType.Day:
- return date.getDay();
- default:
- throw new Error(`Unknown DateType value "${part}".`);
- }
- }
- /**
- * Returns a date formatter that transforms a date into its locale string representation
- */
- function dateStrGetter(name, width, form = FormStyle.Format, extended = false) {
- return function (date, locale) {
- return getDateTranslation(date, locale, name, width, form, extended);
- };
- }
- /**
- * Returns the locale translation of a date for a given form, type and width
- */
- function getDateTranslation(date, locale, name, width, form, extended) {
- switch (name) {
- case TranslationType.Months:
- return getLocaleMonthNames(locale, form, width)[date.getMonth()];
- case TranslationType.Days:
- return getLocaleDayNames(locale, form, width)[date.getDay()];
- case TranslationType.DayPeriods:
- const currentHours = date.getHours();
- const currentMinutes = date.getMinutes();
- if (extended) {
- const rules = getLocaleExtraDayPeriodRules(locale);
- const dayPeriods = getLocaleExtraDayPeriods(locale, form, width);
- const index = rules.findIndex(rule => {
- if (Array.isArray(rule)) {
- // morning, afternoon, evening, night
- const [from, to] = rule;
- const afterFrom = currentHours >= from.hours && currentMinutes >= from.minutes;
- const beforeTo = (currentHours < to.hours ||
- (currentHours === to.hours && currentMinutes < to.minutes));
- // We must account for normal rules that span a period during the day (e.g. 6am-9am)
- // where `from` is less (earlier) than `to`. But also rules that span midnight (e.g.
- // 10pm - 5am) where `from` is greater (later!) than `to`.
- //
- // In the first case the current time must be BOTH after `from` AND before `to`
- // (e.g. 8am is after 6am AND before 10am).
- //
- // In the second case the current time must be EITHER after `from` OR before `to`
- // (e.g. 4am is before 5am but not after 10pm; and 11pm is not before 5am but it is
- // after 10pm).
- if (from.hours < to.hours) {
- if (afterFrom && beforeTo) {
- return true;
- }
- }
- else if (afterFrom || beforeTo) {
- return true;
- }
- }
- else { // noon or midnight
- if (rule.hours === currentHours && rule.minutes === currentMinutes) {
- return true;
- }
- }
- return false;
- });
- if (index !== -1) {
- return dayPeriods[index];
- }
- }
- // if no rules for the day periods, we use am/pm by default
- return getLocaleDayPeriods(locale, form, width)[currentHours < 12 ? 0 : 1];
- case TranslationType.Eras:
- return getLocaleEraNames(locale, width)[date.getFullYear() <= 0 ? 0 : 1];
- default:
- // This default case is not needed by TypeScript compiler, as the switch is exhaustive.
- // However Closure Compiler does not understand that and reports an error in typed mode.
- // The `throw new Error` below works around the problem, and the unexpected: never variable
- // makes sure tsc still checks this code is unreachable.
- const unexpected = name;
- throw new Error(`unexpected translation type ${unexpected}`);
- }
- }
- /**
- * Returns a date formatter that transforms a date and an offset into a timezone with ISO8601 or
- * GMT format depending on the width (eg: short = +0430, short:GMT = GMT+4, long = GMT+04:30,
- * extended = +04:30)
- */
- function timeZoneGetter(width) {
- return function (date, locale, offset) {
- const zone = -1 * offset;
- const minusSign = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);
- const hours = zone > 0 ? Math.floor(zone / 60) : Math.ceil(zone / 60);
- switch (width) {
- case ZoneWidth.Short:
- return ((zone >= 0) ? '+' : '') + padNumber(hours, 2, minusSign) +
- padNumber(Math.abs(zone % 60), 2, minusSign);
- case ZoneWidth.ShortGMT:
- return 'GMT' + ((zone >= 0) ? '+' : '') + padNumber(hours, 1, minusSign);
- case ZoneWidth.Long:
- return 'GMT' + ((zone >= 0) ? '+' : '') + padNumber(hours, 2, minusSign) + ':' +
- padNumber(Math.abs(zone % 60), 2, minusSign);
- case ZoneWidth.Extended:
- if (offset === 0) {
- return 'Z';
- }
- else {
- return ((zone >= 0) ? '+' : '') + padNumber(hours, 2, minusSign) + ':' +
- padNumber(Math.abs(zone % 60), 2, minusSign);
- }
- default:
- throw new Error(`Unknown zone width "${width}"`);
- }
- };
- }
- const JANUARY = 0;
- const THURSDAY = 4;
- function getFirstThursdayOfYear(year) {
- const firstDayOfYear = (new Date(year, JANUARY, 1)).getDay();
- return new Date(year, 0, 1 + ((firstDayOfYear <= THURSDAY) ? THURSDAY : THURSDAY + 7) - firstDayOfYear);
- }
- function getThursdayThisWeek(datetime) {
- return new Date(datetime.getFullYear(), datetime.getMonth(), datetime.getDate() + (THURSDAY - datetime.getDay()));
- }
- function weekGetter(size, monthBased = false) {
- return function (date, locale) {
- let result;
- if (monthBased) {
- const nbDaysBefore1stDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1).getDay() - 1;
- const today = date.getDate();
- result = 1 + Math.floor((today + nbDaysBefore1stDayOfMonth) / 7);
- }
- else {
- const thisThurs = getThursdayThisWeek(date);
- // Some days of a year are part of next year according to ISO 8601.
- // Compute the firstThurs from the year of this week's Thursday
- const firstThurs = getFirstThursdayOfYear(thisThurs.getFullYear());
- const diff = thisThurs.getTime() - firstThurs.getTime();
- result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week
- }
- return padNumber(result, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
- };
- }
- /**
- * Returns a date formatter that provides the week-numbering year for the input date.
- */
- function weekNumberingYearGetter(size, trim = false) {
- return function (date, locale) {
- const thisThurs = getThursdayThisWeek(date);
- const weekNumberingYear = thisThurs.getFullYear();
- return padNumber(weekNumberingYear, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign), trim);
- };
- }
- const DATE_FORMATS = {};
- // Based on CLDR formats:
- // See complete list: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
- // See also explanations: http://cldr.unicode.org/translation/date-time
- // TODO(ocombe): support all missing cldr formats: Y, U, Q, D, F, e, c, j, J, C, A, v, V, X, x
- function getDateFormatter(format) {
- if (DATE_FORMATS[format]) {
- return DATE_FORMATS[format];
- }
- let formatter;
- switch (format) {
- // Era name (AD/BC)
- case 'G':
- case 'GG':
- case 'GGG':
- formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Abbreviated);
- break;
- case 'GGGG':
- formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Wide);
- break;
- case 'GGGGG':
- formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Narrow);
- break;
- // 1 digit representation of the year, e.g. (AD 1 => 1, AD 199 => 199)
- case 'y':
- formatter = dateGetter(DateType.FullYear, 1, 0, false, true);
- break;
- // 2 digit representation of the year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)
- case 'yy':
- formatter = dateGetter(DateType.FullYear, 2, 0, true, true);
- break;
- // 3 digit representation of the year, padded (000-999). (e.g. AD 2001 => 01, AD 2010 => 10)
- case 'yyy':
- formatter = dateGetter(DateType.FullYear, 3, 0, false, true);
- break;
- // 4 digit representation of the year (e.g. AD 1 => 0001, AD 2010 => 2010)
- case 'yyyy':
- formatter = dateGetter(DateType.FullYear, 4, 0, false, true);
- break;
- // 1 digit representation of the week-numbering year, e.g. (AD 1 => 1, AD 199 => 199)
- case 'Y':
- formatter = weekNumberingYearGetter(1);
- break;
- // 2 digit representation of the week-numbering year, padded (00-99). (e.g. AD 2001 => 01, AD
- // 2010 => 10)
- case 'YY':
- formatter = weekNumberingYearGetter(2, true);
- break;
- // 3 digit representation of the week-numbering year, padded (000-999). (e.g. AD 1 => 001, AD
- // 2010 => 2010)
- case 'YYY':
- formatter = weekNumberingYearGetter(3);
- break;
- // 4 digit representation of the week-numbering year (e.g. AD 1 => 0001, AD 2010 => 2010)
- case 'YYYY':
- formatter = weekNumberingYearGetter(4);
- break;
- // Month of the year (1-12), numeric
- case 'M':
- case 'L':
- formatter = dateGetter(DateType.Month, 1, 1);
- break;
- case 'MM':
- case 'LL':
- formatter = dateGetter(DateType.Month, 2, 1);
- break;
- // Month of the year (January, ...), string, format
- case 'MMM':
- formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated);
- break;
- case 'MMMM':
- formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Wide);
- break;
- case 'MMMMM':
- formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Narrow);
- break;
- // Month of the year (January, ...), string, standalone
- case 'LLL':
- formatter =
- dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated, FormStyle.Standalone);
- break;
- case 'LLLL':
- formatter =
- dateStrGetter(TranslationType.Months, TranslationWidth.Wide, FormStyle.Standalone);
- break;
- case 'LLLLL':
- formatter =
- dateStrGetter(TranslationType.Months, TranslationWidth.Narrow, FormStyle.Standalone);
- break;
- // Week of the year (1, ... 52)
- case 'w':
- formatter = weekGetter(1);
- break;
- case 'ww':
- formatter = weekGetter(2);
- break;
- // Week of the month (1, ...)
- case 'W':
- formatter = weekGetter(1, true);
- break;
- // Day of the month (1-31)
- case 'd':
- formatter = dateGetter(DateType.Date, 1);
- break;
- case 'dd':
- formatter = dateGetter(DateType.Date, 2);
- break;
- // Day of the Week
- case 'E':
- case 'EE':
- case 'EEE':
- formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Abbreviated);
- break;
- case 'EEEE':
- formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Wide);
- break;
- case 'EEEEE':
- formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Narrow);
- break;
- case 'EEEEEE':
- formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Short);
- break;
- // Generic period of the day (am-pm)
- case 'a':
- case 'aa':
- case 'aaa':
- formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated);
- break;
- case 'aaaa':
- formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide);
- break;
- case 'aaaaa':
- formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow);
- break;
- // Extended period of the day (midnight, at night, ...), standalone
- case 'b':
- case 'bb':
- case 'bbb':
- formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Standalone, true);
- break;
- case 'bbbb':
- formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Standalone, true);
- break;
- case 'bbbbb':
- formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Standalone, true);
- break;
- // Extended period of the day (midnight, night, ...), standalone
- case 'B':
- case 'BB':
- case 'BBB':
- formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Format, true);
- break;
- case 'BBBB':
- formatter =
- dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Format, true);
- break;
- case 'BBBBB':
- formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Format, true);
- break;
- // Hour in AM/PM, (1-12)
- case 'h':
- formatter = dateGetter(DateType.Hours, 1, -12);
- break;
- case 'hh':
- formatter = dateGetter(DateType.Hours, 2, -12);
- break;
- // Hour of the day (0-23)
- case 'H':
- formatter = dateGetter(DateType.Hours, 1);
- break;
- // Hour in day, padded (00-23)
- case 'HH':
- formatter = dateGetter(DateType.Hours, 2);
- break;
- // Minute of the hour (0-59)
- case 'm':
- formatter = dateGetter(DateType.Minutes, 1);
- break;
- case 'mm':
- formatter = dateGetter(DateType.Minutes, 2);
- break;
- // Second of the minute (0-59)
- case 's':
- formatter = dateGetter(DateType.Seconds, 1);
- break;
- case 'ss':
- formatter = dateGetter(DateType.Seconds, 2);
- break;
- // Fractional second
- case 'S':
- formatter = dateGetter(DateType.FractionalSeconds, 1);
- break;
- case 'SS':
- formatter = dateGetter(DateType.FractionalSeconds, 2);
- break;
- case 'SSS':
- formatter = dateGetter(DateType.FractionalSeconds, 3);
- break;
- // Timezone ISO8601 short format (-0430)
- case 'Z':
- case 'ZZ':
- case 'ZZZ':
- formatter = timeZoneGetter(ZoneWidth.Short);
- break;
- // Timezone ISO8601 extended format (-04:30)
- case 'ZZZZZ':
- formatter = timeZoneGetter(ZoneWidth.Extended);
- break;
- // Timezone GMT short format (GMT+4)
- case 'O':
- case 'OO':
- case 'OOO':
- // Should be location, but fallback to format O instead because we don't have the data yet
- case 'z':
- case 'zz':
- case 'zzz':
- formatter = timeZoneGetter(ZoneWidth.ShortGMT);
- break;
- // Timezone GMT long format (GMT+0430)
- case 'OOOO':
- case 'ZZZZ':
- // Should be location, but fallback to format O instead because we don't have the data yet
- case 'zzzz':
- formatter = timeZoneGetter(ZoneWidth.Long);
- break;
- default:
- return null;
- }
- DATE_FORMATS[format] = formatter;
- return formatter;
- }
- function timezoneToOffset(timezone, fallback) {
- // Support: IE 11 only, Edge 13-15+
- // IE/Edge do not "understand" colon (`:`) in timezone
- timezone = timezone.replace(/:/g, '');
- const requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;
- return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;
- }
- function addDateMinutes(date, minutes) {
- date = new Date(date.getTime());
- date.setMinutes(date.getMinutes() + minutes);
- return date;
- }
- function convertTimezoneToLocal(date, timezone, reverse) {
- const reverseValue = reverse ? -1 : 1;
- const dateTimezoneOffset = date.getTimezoneOffset();
- const timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);
- return addDateMinutes(date, reverseValue * (timezoneOffset - dateTimezoneOffset));
- }
- /**
- * Converts a value to date.
- *
- * Supported input formats:
- * - `Date`
- * - number: timestamp
- * - string: numeric (e.g. "1234"), ISO and date strings in a format supported by
- * [Date.parse()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).
- * Note: ISO strings without time return a date without timeoffset.
- *
- * Throws if unable to convert to a date.
- */
- function toDate(value) {
- if (isDate(value)) {
- return value;
- }
- if (typeof value === 'number' && !isNaN(value)) {
- return new Date(value);
- }
- if (typeof value === 'string') {
- value = value.trim();
- const parsedNb = parseFloat(value);
- // any string that only contains numbers, like "1234" but not like "1234hello"
- if (!isNaN(value - parsedNb)) {
- return new Date(parsedNb);
- }
- if (/^(\d{4}-\d{1,2}-\d{1,2})$/.test(value)) {
- /* For ISO Strings without time the day, month and year must be extracted from the ISO String
- before Date creation to avoid time offset and errors in the new Date.
- If we only replace '-' with ',' in the ISO String ("2015,01,01"), and try to create a new
- date, some browsers (e.g. IE 9) will throw an invalid Date error.
- If we leave the '-' ("2015-01-01") and try to create a new Date("2015-01-01") the timeoffset
- is applied.
- Note: ISO months are 0 for January, 1 for February, ... */
- const [y, m, d] = value.split('-').map((val) => +val);
- return new Date(y, m - 1, d);
- }
- let match;
- if (match = value.match(ISO8601_DATE_REGEX)) {
- return isoStringToDate(match);
- }
- }
- const date = new Date(value);
- if (!isDate(date)) {
- throw new Error(`Unable to convert "${value}" into a date`);
- }
- return date;
- }
- /**
- * Converts a date in ISO8601 to a Date.
- * Used instead of `Date.parse` because of browser discrepancies.
- */
- function isoStringToDate(match) {
- const date = new Date(0);
- let tzHour = 0;
- let tzMin = 0;
- // match[8] means that the string contains "Z" (UTC) or a timezone like "+01:00" or "+0100"
- const dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear;
- const timeSetter = match[8] ? date.setUTCHours : date.setHours;
- // if there is a timezone defined like "+01:00" or "+0100"
- if (match[9]) {
- tzHour = Number(match[9] + match[10]);
- tzMin = Number(match[9] + match[11]);
- }
- dateSetter.call(date, Number(match[1]), Number(match[2]) - 1, Number(match[3]));
- const h = Number(match[4] || 0) - tzHour;
- const m = Number(match[5] || 0) - tzMin;
- const s = Number(match[6] || 0);
- // The ECMAScript specification (https://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.11)
- // defines that `DateTime` milliseconds should always be rounded down, so that `999.9ms`
- // becomes `999ms`.
- const ms = Math.floor(parseFloat('0.' + (match[7] || 0)) * 1000);
- timeSetter.call(date, h, m, s, ms);
- return date;
- }
- function isDate(value) {
- return value instanceof Date && !isNaN(value.valueOf());
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const NUMBER_FORMAT_REGEXP = /^(\d+)?\.((\d+)(-(\d+))?)?$/;
- const MAX_DIGITS = 22;
- const DECIMAL_SEP = '.';
- const ZERO_CHAR = '0';
- const PATTERN_SEP = ';';
- const GROUP_SEP = ',';
- const DIGIT_CHAR = '#';
- const CURRENCY_CHAR = '¤';
- const PERCENT_CHAR = '%';
- /**
- * Transforms a number to a locale string based on a style and a format.
- */
- function formatNumberToLocaleString(value, pattern, locale, groupSymbol, decimalSymbol, digitsInfo, isPercent = false) {
- let formattedText = '';
- let isZero = false;
- if (!isFinite(value)) {
- formattedText = getLocaleNumberSymbol(locale, NumberSymbol.Infinity);
- }
- else {
- let parsedNumber = parseNumber(value);
- if (isPercent) {
- parsedNumber = toPercent(parsedNumber);
- }
- let minInt = pattern.minInt;
- let minFraction = pattern.minFrac;
- let maxFraction = pattern.maxFrac;
- if (digitsInfo) {
- const parts = digitsInfo.match(NUMBER_FORMAT_REGEXP);
- if (parts === null) {
- throw new Error(`${digitsInfo} is not a valid digit info`);
- }
- const minIntPart = parts[1];
- const minFractionPart = parts[3];
- const maxFractionPart = parts[5];
- if (minIntPart != null) {
- minInt = parseIntAutoRadix(minIntPart);
- }
- if (minFractionPart != null) {
- minFraction = parseIntAutoRadix(minFractionPart);
- }
- if (maxFractionPart != null) {
- maxFraction = parseIntAutoRadix(maxFractionPart);
- }
- else if (minFractionPart != null && minFraction > maxFraction) {
- maxFraction = minFraction;
- }
- }
- roundNumber(parsedNumber, minFraction, maxFraction);
- let digits = parsedNumber.digits;
- let integerLen = parsedNumber.integerLen;
- const exponent = parsedNumber.exponent;
- let decimals = [];
- isZero = digits.every(d => !d);
- // pad zeros for small numbers
- for (; integerLen < minInt; integerLen++) {
- digits.unshift(0);
- }
- // pad zeros for small numbers
- for (; integerLen < 0; integerLen++) {
- digits.unshift(0);
- }
- // extract decimals digits
- if (integerLen > 0) {
- decimals = digits.splice(integerLen, digits.length);
- }
- else {
- decimals = digits;
- digits = [0];
- }
- // format the integer digits with grouping separators
- const groups = [];
- if (digits.length >= pattern.lgSize) {
- groups.unshift(digits.splice(-pattern.lgSize, digits.length).join(''));
- }
- while (digits.length > pattern.gSize) {
- groups.unshift(digits.splice(-pattern.gSize, digits.length).join(''));
- }
- if (digits.length) {
- groups.unshift(digits.join(''));
- }
- formattedText = groups.join(getLocaleNumberSymbol(locale, groupSymbol));
- // append the decimal digits
- if (decimals.length) {
- formattedText += getLocaleNumberSymbol(locale, decimalSymbol) + decimals.join('');
- }
- if (exponent) {
- formattedText += getLocaleNumberSymbol(locale, NumberSymbol.Exponential) + '+' + exponent;
- }
- }
- if (value < 0 && !isZero) {
- formattedText = pattern.negPre + formattedText + pattern.negSuf;
- }
- else {
- formattedText = pattern.posPre + formattedText + pattern.posSuf;
- }
- return formattedText;
- }
- /**
- * @ngModule CommonModule
- * @description
- *
- * Formats a number as currency using locale rules.
- *
- * @param value The number to format.
- * @param locale A locale code for the locale format rules to use.
- * @param currency A string containing the currency symbol or its name,
- * such as "$" or "Canadian Dollar". Used in output string, but does not affect the operation
- * of the function.
- * @param currencyCode The [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217)
- * currency code, such as `USD` for the US dollar and `EUR` for the euro.
- * Used to determine the number of digits in the decimal part.
- * @param digitInfo Decimal representation options, specified by a string in the following format:
- * `{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}`. See `DecimalPipe` for more details.
- *
- * @returns The formatted currency value.
- *
- * @see `formatNumber()`
- * @see `DecimalPipe`
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function formatCurrency(value, locale, currency, currencyCode, digitsInfo) {
- const format = getLocaleNumberFormat(locale, NumberFormatStyle.Currency);
- const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
- pattern.minFrac = getNumberOfCurrencyDigits(currencyCode);
- pattern.maxFrac = pattern.minFrac;
- const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.CurrencyGroup, NumberSymbol.CurrencyDecimal, digitsInfo);
- return res
- .replace(CURRENCY_CHAR, currency)
- // if we have 2 time the currency character, the second one is ignored
- .replace(CURRENCY_CHAR, '')
- // If there is a spacing between currency character and the value and
- // the currency character is supressed by passing an empty string, the
- // spacing character would remain as part of the string. Then we
- // should remove it.
- .trim();
- }
- /**
- * @ngModule CommonModule
- * @description
- *
- * Formats a number as a percentage according to locale rules.
- *
- * @param value The number to format.
- * @param locale A locale code for the locale format rules to use.
- * @param digitInfo Decimal representation options, specified by a string in the following format:
- * `{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}`. See `DecimalPipe` for more details.
- *
- * @returns The formatted percentage value.
- *
- * @see `formatNumber()`
- * @see `DecimalPipe`
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- * @publicApi
- *
- */
- function formatPercent(value, locale, digitsInfo) {
- const format = getLocaleNumberFormat(locale, NumberFormatStyle.Percent);
- const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
- const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo, true);
- return res.replace(new RegExp(PERCENT_CHAR, 'g'), getLocaleNumberSymbol(locale, NumberSymbol.PercentSign));
- }
- /**
- * @ngModule CommonModule
- * @description
- *
- * Formats a number as text, with group sizing, separator, and other
- * parameters based on the locale.
- *
- * @param value The number to format.
- * @param locale A locale code for the locale format rules to use.
- * @param digitInfo Decimal representation options, specified by a string in the following format:
- * `{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}`. See `DecimalPipe` for more details.
- *
- * @returns The formatted text string.
- * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
- *
- * @publicApi
- */
- function formatNumber(value, locale, digitsInfo) {
- const format = getLocaleNumberFormat(locale, NumberFormatStyle.Decimal);
- const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
- return formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo);
- }
- function parseNumberFormat(format, minusSign = '-') {
- const p = {
- minInt: 1,
- minFrac: 0,
- maxFrac: 0,
- posPre: '',
- posSuf: '',
- negPre: '',
- negSuf: '',
- gSize: 0,
- lgSize: 0
- };
- const patternParts = format.split(PATTERN_SEP);
- const positive = patternParts[0];
- const negative = patternParts[1];
- const positiveParts = positive.indexOf(DECIMAL_SEP) !== -1 ?
- positive.split(DECIMAL_SEP) :
- [
- positive.substring(0, positive.lastIndexOf(ZERO_CHAR) + 1),
- positive.substring(positive.lastIndexOf(ZERO_CHAR) + 1)
- ], integer = positiveParts[0], fraction = positiveParts[1] || '';
- p.posPre = integer.substr(0, integer.indexOf(DIGIT_CHAR));
- for (let i = 0; i < fraction.length; i++) {
- const ch = fraction.charAt(i);
- if (ch === ZERO_CHAR) {
- p.minFrac = p.maxFrac = i + 1;
- }
- else if (ch === DIGIT_CHAR) {
- p.maxFrac = i + 1;
- }
- else {
- p.posSuf += ch;
- }
- }
- const groups = integer.split(GROUP_SEP);
- p.gSize = groups[1] ? groups[1].length : 0;
- p.lgSize = (groups[2] || groups[1]) ? (groups[2] || groups[1]).length : 0;
- if (negative) {
- const trunkLen = positive.length - p.posPre.length - p.posSuf.length, pos = negative.indexOf(DIGIT_CHAR);
- p.negPre = negative.substr(0, pos).replace(/'/g, '');
- p.negSuf = negative.substr(pos + trunkLen).replace(/'/g, '');
- }
- else {
- p.negPre = minusSign + p.posPre;
- p.negSuf = p.posSuf;
- }
- return p;
- }
- // Transforms a parsed number into a percentage by multiplying it by 100
- function toPercent(parsedNumber) {
- // if the number is 0, don't do anything
- if (parsedNumber.digits[0] === 0) {
- return parsedNumber;
- }
- // Getting the current number of decimals
- const fractionLen = parsedNumber.digits.length - parsedNumber.integerLen;
- if (parsedNumber.exponent) {
- parsedNumber.exponent += 2;
- }
- else {
- if (fractionLen === 0) {
- parsedNumber.digits.push(0, 0);
- }
- else if (fractionLen === 1) {
- parsedNumber.digits.push(0);
- }
- parsedNumber.integerLen += 2;
- }
- return parsedNumber;
- }
- /**
- * Parses a number.
- * Significant bits of this parse algorithm came from https://github.com/MikeMcl/big.js/
- */
- function parseNumber(num) {
- let numStr = Math.abs(num) + '';
- let exponent = 0, digits, integerLen;
- let i, j, zeros;
- // Decimal point?
- if ((integerLen = numStr.indexOf(DECIMAL_SEP)) > -1) {
- numStr = numStr.replace(DECIMAL_SEP, '');
- }
- // Exponential form?
- if ((i = numStr.search(/e/i)) > 0) {
- // Work out the exponent.
- if (integerLen < 0)
- integerLen = i;
- integerLen += +numStr.slice(i + 1);
- numStr = numStr.substring(0, i);
- }
- else if (integerLen < 0) {
- // There was no decimal point or exponent so it is an integer.
- integerLen = numStr.length;
- }
- // Count the number of leading zeros.
- for (i = 0; numStr.charAt(i) === ZERO_CHAR; i++) { /* empty */
- }
- if (i === (zeros = numStr.length)) {
- // The digits are all zero.
- digits = [0];
- integerLen = 1;
- }
- else {
- // Count the number of trailing zeros
- zeros--;
- while (numStr.charAt(zeros) === ZERO_CHAR)
- zeros--;
- // Trailing zeros are insignificant so ignore them
- integerLen -= i;
- digits = [];
- // Convert string to array of digits without leading/trailing zeros.
- for (j = 0; i <= zeros; i++, j++) {
- digits[j] = Number(numStr.charAt(i));
- }
- }
- // If the number overflows the maximum allowed digits then use an exponent.
- if (integerLen > MAX_DIGITS) {
- digits = digits.splice(0, MAX_DIGITS - 1);
- exponent = integerLen - 1;
- integerLen = 1;
- }
- return { digits, exponent, integerLen };
- }
- /**
- * Round the parsed number to the specified number of decimal places
- * This function changes the parsedNumber in-place
- */
- function roundNumber(parsedNumber, minFrac, maxFrac) {
- if (minFrac > maxFrac) {
- throw new Error(`The minimum number of digits after fraction (${minFrac}) is higher than the maximum (${maxFrac}).`);
- }
- let digits = parsedNumber.digits;
- let fractionLen = digits.length - parsedNumber.integerLen;
- const fractionSize = Math.min(Math.max(minFrac, fractionLen), maxFrac);
- // The index of the digit to where rounding is to occur
- let roundAt = fractionSize + parsedNumber.integerLen;
- let digit = digits[roundAt];
- if (roundAt > 0) {
- // Drop fractional digits beyond `roundAt`
- digits.splice(Math.max(parsedNumber.integerLen, roundAt));
- // Set non-fractional digits beyond `roundAt` to 0
- for (let j = roundAt; j < digits.length; j++) {
- digits[j] = 0;
- }
- }
- else {
- // We rounded to zero so reset the parsedNumber
- fractionLen = Math.max(0, fractionLen);
- parsedNumber.integerLen = 1;
- digits.length = Math.max(1, roundAt = fractionSize + 1);
- digits[0] = 0;
- for (let i = 1; i < roundAt; i++)
- digits[i] = 0;
- }
- if (digit >= 5) {
- if (roundAt - 1 < 0) {
- for (let k = 0; k > roundAt; k--) {
- digits.unshift(0);
- parsedNumber.integerLen++;
- }
- digits.unshift(1);
- parsedNumber.integerLen++;
- }
- else {
- digits[roundAt - 1]++;
- }
- }
- // Pad out with zeros to get the required fraction length
- for (; fractionLen < Math.max(0, fractionSize); fractionLen++)
- digits.push(0);
- let dropTrailingZeros = fractionSize !== 0;
- // Minimal length = nb of decimals required + current nb of integers
- // Any number besides that is optional and can be removed if it's a trailing 0
- const minLen = minFrac + parsedNumber.integerLen;
- // Do any carrying, e.g. a digit was rounded up to 10
- const carry = digits.reduceRight(function (carry, d, i, digits) {
- d = d + carry;
- digits[i] = d < 10 ? d : d - 10; // d % 10
- if (dropTrailingZeros) {
- // Do not keep meaningless fractional trailing zeros (e.g. 15.52000 --> 15.52)
- if (digits[i] === 0 && i >= minLen) {
- digits.pop();
- }
- else {
- dropTrailingZeros = false;
- }
- }
- return d >= 10 ? 1 : 0; // Math.floor(d / 10);
- }, 0);
- if (carry) {
- digits.unshift(carry);
- parsedNumber.integerLen++;
- }
- }
- function parseIntAutoRadix(text) {
- const result = parseInt(text);
- if (isNaN(result)) {
- throw new Error('Invalid integer literal when parsing ' + text);
- }
- return result;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @publicApi
- */
- class NgLocalization {
- }
- /**
- * Returns the plural category for a given value.
- * - "=value" when the case exists,
- * - the plural category otherwise
- */
- function getPluralCategory(value, cases, ngLocalization, locale) {
- let key = `=${value}`;
- if (cases.indexOf(key) > -1) {
- return key;
- }
- key = ngLocalization.getPluralCategory(value, locale);
- if (cases.indexOf(key) > -1) {
- return key;
- }
- if (cases.indexOf('other') > -1) {
- return 'other';
- }
- throw new Error(`No plural message found for value "${value}"`);
- }
- /**
- * Returns the plural case based on the locale
- *
- * @publicApi
- */
- class NgLocaleLocalization extends NgLocalization {
- constructor(locale) {
- super();
- this.locale = locale;
- }
- getPluralCategory(value, locale) {
- const plural = getLocalePluralCase(locale || this.locale)(value);
- switch (plural) {
- case Plural.Zero:
- return 'zero';
- case Plural.One:
- return 'one';
- case Plural.Two:
- return 'two';
- case Plural.Few:
- return 'few';
- case Plural.Many:
- return 'many';
- default:
- return 'other';
- }
- }
- }
- NgLocaleLocalization.ɵfac = function NgLocaleLocalization_Factory(t) { return new (t || NgLocaleLocalization)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"])); };
- NgLocaleLocalization.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NgLocaleLocalization, factory: NgLocaleLocalization.ɵfac });
- NgLocaleLocalization.ctorParameters = () => [
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgLocaleLocalization, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
- }] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Register global data to be used internally by Angular. See the
- * ["I18n guide"](guide/i18n#i18n-pipes) to know how to import additional locale data.
- *
- * The signature registerLocaleData(data: any, extraData?: any) is deprecated since v5.1
- *
- * @publicApi
- */
- function registerLocaleData(data, localeId, extraData) {
- return Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵregisterLocaleData"])(data, localeId, extraData);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function parseCookieValue(cookieStr, name) {
- name = encodeURIComponent(name);
- for (const cookie of cookieStr.split(';')) {
- const eqIndex = cookie.indexOf('=');
- const [cookieName, cookieValue] = eqIndex == -1 ? [cookie, ''] : [cookie.slice(0, eqIndex), cookie.slice(eqIndex + 1)];
- if (cookieName.trim() === name) {
- return decodeURIComponent(cookieValue);
- }
- }
- return null;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @ngModule CommonModule
- *
- * @usageNotes
- * ```
- * <some-element [ngClass]="'first second'">...</some-element>
- *
- * <some-element [ngClass]="['first', 'second']">...</some-element>
- *
- * <some-element [ngClass]="{'first': true, 'second': true, 'third': false}">...</some-element>
- *
- * <some-element [ngClass]="stringExp|arrayExp|objExp">...</some-element>
- *
- * <some-element [ngClass]="{'class1 class2 class3' : true}">...</some-element>
- * ```
- *
- * @description
- *
- * Adds and removes CSS classes on an HTML element.
- *
- * The CSS classes are updated as follows, depending on the type of the expression evaluation:
- * - `string` - the CSS classes listed in the string (space delimited) are added,
- * - `Array` - the CSS classes declared as Array elements are added,
- * - `Object` - keys are CSS classes that get added when the expression given in the value
- * evaluates to a truthy value, otherwise they are removed.
- *
- * @publicApi
- */
- class NgClass {
- constructor(_iterableDiffers, _keyValueDiffers, _ngEl, _renderer) {
- this._iterableDiffers = _iterableDiffers;
- this._keyValueDiffers = _keyValueDiffers;
- this._ngEl = _ngEl;
- this._renderer = _renderer;
- this._iterableDiffer = null;
- this._keyValueDiffer = null;
- this._initialClasses = [];
- this._rawClass = null;
- }
- set klass(value) {
- this._removeClasses(this._initialClasses);
- this._initialClasses = typeof value === 'string' ? value.split(/\s+/) : [];
- this._applyClasses(this._initialClasses);
- this._applyClasses(this._rawClass);
- }
- set ngClass(value) {
- this._removeClasses(this._rawClass);
- this._applyClasses(this._initialClasses);
- this._iterableDiffer = null;
- this._keyValueDiffer = null;
- this._rawClass = typeof value === 'string' ? value.split(/\s+/) : value;
- if (this._rawClass) {
- if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵisListLikeIterable"])(this._rawClass)) {
- this._iterableDiffer = this._iterableDiffers.find(this._rawClass).create();
- }
- else {
- this._keyValueDiffer = this._keyValueDiffers.find(this._rawClass).create();
- }
- }
- }
- ngDoCheck() {
- if (this._iterableDiffer) {
- const iterableChanges = this._iterableDiffer.diff(this._rawClass);
- if (iterableChanges) {
- this._applyIterableChanges(iterableChanges);
- }
- }
- else if (this._keyValueDiffer) {
- const keyValueChanges = this._keyValueDiffer.diff(this._rawClass);
- if (keyValueChanges) {
- this._applyKeyValueChanges(keyValueChanges);
- }
- }
- }
- _applyKeyValueChanges(changes) {
- changes.forEachAddedItem((record) => this._toggleClass(record.key, record.currentValue));
- changes.forEachChangedItem((record) => this._toggleClass(record.key, record.currentValue));
- changes.forEachRemovedItem((record) => {
- if (record.previousValue) {
- this._toggleClass(record.key, false);
- }
- });
- }
- _applyIterableChanges(changes) {
- changes.forEachAddedItem((record) => {
- if (typeof record.item === 'string') {
- this._toggleClass(record.item, true);
- }
- else {
- throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵstringify"])(record.item)}`);
- }
- });
- changes.forEachRemovedItem((record) => this._toggleClass(record.item, false));
- }
- /**
- * Applies a collection of CSS classes to the DOM element.
- *
- * For argument of type Set and Array CSS class names contained in those collections are always
- * added.
- * For argument of type Map CSS class name in the map's key is toggled based on the value (added
- * for truthy and removed for falsy).
- */
- _applyClasses(rawClassVal) {
- if (rawClassVal) {
- if (Array.isArray(rawClassVal) || rawClassVal instanceof Set) {
- rawClassVal.forEach((klass) => this._toggleClass(klass, true));
- }
- else {
- Object.keys(rawClassVal).forEach(klass => this._toggleClass(klass, !!rawClassVal[klass]));
- }
- }
- }
- /**
- * Removes a collection of CSS classes from the DOM element. This is mostly useful for cleanup
- * purposes.
- */
- _removeClasses(rawClassVal) {
- if (rawClassVal) {
- if (Array.isArray(rawClassVal) || rawClassVal instanceof Set) {
- rawClassVal.forEach((klass) => this._toggleClass(klass, false));
- }
- else {
- Object.keys(rawClassVal).forEach(klass => this._toggleClass(klass, false));
- }
- }
- }
- _toggleClass(klass, enabled) {
- klass = klass.trim();
- if (klass) {
- klass.split(/\s+/g).forEach(klass => {
- if (enabled) {
- this._renderer.addClass(this._ngEl.nativeElement, klass);
- }
- else {
- this._renderer.removeClass(this._ngEl.nativeElement, klass);
- }
- });
- }
- }
- }
- NgClass.ɵfac = function NgClass_Factory(t) { return new (t || NgClass)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["IterableDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"])); };
- NgClass.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgClass, selectors: [["", "ngClass", ""]], inputs: { klass: ["class", "klass"], ngClass: "ngClass" } });
- NgClass.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["IterableDiffers"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }
- ];
- NgClass.propDecorators = {
- klass: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['class',] }],
- ngClass: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['ngClass',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgClass, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngClass]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["IterableDiffers"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }]; }, { klass: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['class']
- }], ngClass: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['ngClass']
- }] }); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Instantiates a single {@link Component} type and inserts its Host View into current View.
- * `NgComponentOutlet` provides a declarative approach for dynamic component creation.
- *
- * `NgComponentOutlet` requires a component type, if a falsy value is set the view will clear and
- * any existing component will get destroyed.
- *
- * @usageNotes
- *
- * ### Fine tune control
- *
- * You can control the component creation process by using the following optional attributes:
- *
- * * `ngComponentOutletInjector`: Optional custom {@link Injector} that will be used as parent for
- * the Component. Defaults to the injector of the current view container.
- *
- * * `ngComponentOutletContent`: Optional list of projectable nodes to insert into the content
- * section of the component, if exists.
- *
- * * `ngComponentOutletNgModuleFactory`: Optional module factory to allow dynamically loading other
- * module, then load a component from that module.
- *
- * ### Syntax
- *
- * Simple
- * ```
- * <ng-container *ngComponentOutlet="componentTypeExpression"></ng-container>
- * ```
- *
- * Customized injector/content
- * ```
- * <ng-container *ngComponentOutlet="componentTypeExpression;
- * injector: injectorExpression;
- * content: contentNodesExpression;">
- * </ng-container>
- * ```
- *
- * Customized ngModuleFactory
- * ```
- * <ng-container *ngComponentOutlet="componentTypeExpression;
- * ngModuleFactory: moduleFactory;">
- * </ng-container>
- * ```
- *
- * ### A simple example
- *
- * {@example common/ngComponentOutlet/ts/module.ts region='SimpleExample'}
- *
- * A more complete example with additional options:
- *
- * {@example common/ngComponentOutlet/ts/module.ts region='CompleteExample'}
- *
- * @publicApi
- * @ngModule CommonModule
- */
- class NgComponentOutlet {
- constructor(_viewContainerRef) {
- this._viewContainerRef = _viewContainerRef;
- this._componentRef = null;
- this._moduleRef = null;
- }
- ngOnChanges(changes) {
- this._viewContainerRef.clear();
- this._componentRef = null;
- if (this.ngComponentOutlet) {
- const elInjector = this.ngComponentOutletInjector || this._viewContainerRef.parentInjector;
- if (changes['ngComponentOutletNgModuleFactory']) {
- if (this._moduleRef)
- this._moduleRef.destroy();
- if (this.ngComponentOutletNgModuleFactory) {
- const parentModule = elInjector.get(_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModuleRef"]);
- this._moduleRef = this.ngComponentOutletNgModuleFactory.create(parentModule.injector);
- }
- else {
- this._moduleRef = null;
- }
- }
- const componentFactoryResolver = this._moduleRef ? this._moduleRef.componentFactoryResolver :
- elInjector.get(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]);
- const componentFactory = componentFactoryResolver.resolveComponentFactory(this.ngComponentOutlet);
- this._componentRef = this._viewContainerRef.createComponent(componentFactory, this._viewContainerRef.length, elInjector, this.ngComponentOutletContent);
- }
- }
- ngOnDestroy() {
- if (this._moduleRef)
- this._moduleRef.destroy();
- }
- }
- NgComponentOutlet.ɵfac = function NgComponentOutlet_Factory(t) { return new (t || NgComponentOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"])); };
- NgComponentOutlet.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgComponentOutlet, selectors: [["", "ngComponentOutlet", ""]], inputs: { ngComponentOutlet: "ngComponentOutlet", ngComponentOutletInjector: "ngComponentOutletInjector", ngComponentOutletContent: "ngComponentOutletContent", ngComponentOutletNgModuleFactory: "ngComponentOutletNgModuleFactory" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- NgComponentOutlet.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] }
- ];
- NgComponentOutlet.propDecorators = {
- ngComponentOutlet: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ngComponentOutletInjector: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ngComponentOutletContent: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ngComponentOutletNgModuleFactory: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgComponentOutlet, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngComponentOutlet]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] }]; }, { ngComponentOutlet: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ngComponentOutletInjector: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ngComponentOutletContent: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ngComponentOutletNgModuleFactory: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @publicApi
- */
- class NgForOfContext {
- constructor($implicit, ngForOf, index, count) {
- this.$implicit = $implicit;
- this.ngForOf = ngForOf;
- this.index = index;
- this.count = count;
- }
- get first() {
- return this.index === 0;
- }
- get last() {
- return this.index === this.count - 1;
- }
- get even() {
- return this.index % 2 === 0;
- }
- get odd() {
- return !this.even;
- }
- }
- /**
- * A [structural directive](guide/structural-directives) that renders
- * a template for each item in a collection.
- * The directive is placed on an element, which becomes the parent
- * of the cloned templates.
- *
- * The `ngForOf` directive is generally used in the
- * [shorthand form](guide/structural-directives#the-asterisk--prefix) `*ngFor`.
- * In this form, the template to be rendered for each iteration is the content
- * of an anchor element containing the directive.
- *
- * The following example shows the shorthand syntax with some options,
- * contained in an `<li>` element.
- *
- * ```
- * <li *ngFor="let item of items; index as i; trackBy: trackByFn">...</li>
- * ```
- *
- * The shorthand form expands into a long form that uses the `ngForOf` selector
- * on an `<ng-template>` element.
- * The content of the `<ng-template>` element is the `<li>` element that held the
- * short-form directive.
- *
- * Here is the expanded version of the short-form example.
- *
- * ```
- * <ng-template ngFor let-item [ngForOf]="items" let-i="index" [ngForTrackBy]="trackByFn">
- * <li>...</li>
- * </ng-template>
- * ```
- *
- * Angular automatically expands the shorthand syntax as it compiles the template.
- * The context for each embedded view is logically merged to the current component
- * context according to its lexical position.
- *
- * When using the shorthand syntax, Angular allows only [one structural directive
- * on an element](guide/structural-directives#one-structural-directive-per-host-element).
- * If you want to iterate conditionally, for example,
- * put the `*ngIf` on a container element that wraps the `*ngFor` element.
- * For futher discussion, see
- * [Structural Directives](guide/structural-directives#one-per-element).
- *
- * @usageNotes
- *
- * ### Local variables
- *
- * `NgForOf` provides exported values that can be aliased to local variables.
- * For example:
- *
- * ```
- * <li *ngFor="let user of users; index as i; first as isFirst">
- * {{i}}/{{users.length}}. {{user}} <span *ngIf="isFirst">default</span>
- * </li>
- * ```
- *
- * The following exported values can be aliased to local variables:
- *
- * - `$implicit: T`: The value of the individual items in the iterable (`ngForOf`).
- * - `ngForOf: NgIterable<T>`: The value of the iterable expression. Useful when the expression is
- * more complex then a property access, for example when using the async pipe (`userStreams |
- * async`).
- * - `index: number`: The index of the current item in the iterable.
- * - `count: number`: The length of the iterable.
- * - `first: boolean`: True when the item is the first item in the iterable.
- * - `last: boolean`: True when the item is the last item in the iterable.
- * - `even: boolean`: True when the item has an even index in the iterable.
- * - `odd: boolean`: True when the item has an odd index in the iterable.
- *
- * ### Change propagation
- *
- * When the contents of the iterator changes, `NgForOf` makes the corresponding changes to the DOM:
- *
- * * When an item is added, a new instance of the template is added to the DOM.
- * * When an item is removed, its template instance is removed from the DOM.
- * * When items are reordered, their respective templates are reordered in the DOM.
- *
- * Angular uses object identity to track insertions and deletions within the iterator and reproduce
- * those changes in the DOM. This has important implications for animations and any stateful
- * controls that are present, such as `<input>` elements that accept user input. Inserted rows can
- * be animated in, deleted rows can be animated out, and unchanged rows retain any unsaved state
- * such as user input.
- * For more on animations, see [Transitions and Triggers](guide/transition-and-triggers).
- *
- * The identities of elements in the iterator can change while the data does not.
- * This can happen, for example, if the iterator is produced from an RPC to the server, and that
- * RPC is re-run. Even if the data hasn't changed, the second response produces objects with
- * different identities, and Angular must tear down the entire DOM and rebuild it (as if all old
- * elements were deleted and all new elements inserted).
- *
- * To avoid this expensive operation, you can customize the default tracking algorithm.
- * by supplying the `trackBy` option to `NgForOf`.
- * `trackBy` takes a function that has two arguments: `index` and `item`.
- * If `trackBy` is given, Angular tracks changes by the return value of the function.
- *
- * @see [Structural Directives](guide/structural-directives)
- * @ngModule CommonModule
- * @publicApi
- */
- class NgForOf {
- constructor(_viewContainer, _template, _differs) {
- this._viewContainer = _viewContainer;
- this._template = _template;
- this._differs = _differs;
- this._ngForOf = null;
- this._ngForOfDirty = true;
- this._differ = null;
- }
- /**
- * The value of the iterable expression, which can be used as a
- * [template input variable](guide/structural-directives#template-input-variable).
- */
- set ngForOf(ngForOf) {
- this._ngForOf = ngForOf;
- this._ngForOfDirty = true;
- }
- /**
- * A function that defines how to track changes for items in the iterable.
- *
- * When items are added, moved, or removed in the iterable,
- * the directive must re-render the appropriate DOM nodes.
- * To minimize churn in the DOM, only nodes that have changed
- * are re-rendered.
- *
- * By default, the change detector assumes that
- * the object instance identifies the node in the iterable.
- * When this function is supplied, the directive uses
- * the result of calling this function to identify the item node,
- * rather than the identity of the object itself.
- *
- * The function receives two inputs,
- * the iteration index and the associated node data.
- */
- set ngForTrackBy(fn) {
- if ((typeof ngDevMode === 'undefined' || ngDevMode) && fn != null && typeof fn !== 'function') {
- // TODO(vicb): use a log service once there is a public one available
- if (console && console.warn) {
- console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}. ` +
- `See https://angular.io/api/common/NgForOf#change-propagation for more information.`);
- }
- }
- this._trackByFn = fn;
- }
- get ngForTrackBy() {
- return this._trackByFn;
- }
- /**
- * A reference to the template that is stamped out for each item in the iterable.
- * @see [template reference variable](guide/template-reference-variables)
- */
- set ngForTemplate(value) {
- // TODO(TS2.1): make TemplateRef<Partial<NgForRowOf<T>>> once we move to TS v2.1
- // The current type is too restrictive; a template that just uses index, for example,
- // should be acceptable.
- if (value) {
- this._template = value;
- }
- }
- /**
- * Applies the changes when needed.
- */
- ngDoCheck() {
- if (this._ngForOfDirty) {
- this._ngForOfDirty = false;
- // React on ngForOf changes only once all inputs have been initialized
- const value = this._ngForOf;
- if (!this._differ && value) {
- try {
- this._differ = this._differs.find(value).create(this.ngForTrackBy);
- }
- catch (_a) {
- throw new Error(`Cannot find a differ supporting object '${value}' of type '${getTypeName(value)}'. NgFor only supports binding to Iterables such as Arrays.`);
- }
- }
- }
- if (this._differ) {
- const changes = this._differ.diff(this._ngForOf);
- if (changes)
- this._applyChanges(changes);
- }
- }
- _applyChanges(changes) {
- const insertTuples = [];
- changes.forEachOperation((item, adjustedPreviousIndex, currentIndex) => {
- if (item.previousIndex == null) {
- // NgForOf is never "null" or "undefined" here because the differ detected
- // that a new item needs to be inserted from the iterable. This implies that
- // there is an iterable value for "_ngForOf".
- const view = this._viewContainer.createEmbeddedView(this._template, new NgForOfContext(null, this._ngForOf, -1, -1), currentIndex === null ? undefined : currentIndex);
- const tuple = new RecordViewTuple(item, view);
- insertTuples.push(tuple);
- }
- else if (currentIndex == null) {
- this._viewContainer.remove(adjustedPreviousIndex === null ? undefined : adjustedPreviousIndex);
- }
- else if (adjustedPreviousIndex !== null) {
- const view = this._viewContainer.get(adjustedPreviousIndex);
- this._viewContainer.move(view, currentIndex);
- const tuple = new RecordViewTuple(item, view);
- insertTuples.push(tuple);
- }
- });
- for (let i = 0; i < insertTuples.length; i++) {
- this._perViewChange(insertTuples[i].view, insertTuples[i].record);
- }
- for (let i = 0, ilen = this._viewContainer.length; i < ilen; i++) {
- const viewRef = this._viewContainer.get(i);
- viewRef.context.index = i;
- viewRef.context.count = ilen;
- viewRef.context.ngForOf = this._ngForOf;
- }
- changes.forEachIdentityChange((record) => {
- const viewRef = this._viewContainer.get(record.currentIndex);
- viewRef.context.$implicit = record.item;
- });
- }
- _perViewChange(view, record) {
- view.context.$implicit = record.item;
- }
- /**
- * Asserts the correct type of the context for the template that `NgForOf` will render.
- *
- * The presence of this method is a signal to the Ivy template type-check compiler that the
- * `NgForOf` structural directive renders its template with a specific context type.
- */
- static ngTemplateContextGuard(dir, ctx) {
- return true;
- }
- }
- NgForOf.ɵfac = function NgForOf_Factory(t) { return new (t || NgForOf)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["IterableDiffers"])); };
- NgForOf.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgForOf, selectors: [["", "ngFor", "", "ngForOf", ""]], inputs: { ngForOf: "ngForOf", ngForTrackBy: "ngForTrackBy", ngForTemplate: "ngForTemplate" } });
- NgForOf.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["IterableDiffers"] }
- ];
- NgForOf.propDecorators = {
- ngForOf: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ngForTrackBy: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ngForTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgForOf, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngFor][ngForOf]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["IterableDiffers"] }]; }, { ngForOf: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ngForTrackBy: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ngForTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- class RecordViewTuple {
- constructor(record, view) {
- this.record = record;
- this.view = view;
- }
- }
- function getTypeName(type) {
- return type['name'] || typeof type;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * A structural directive that conditionally includes a template based on the value of
- * an expression coerced to Boolean.
- * When the expression evaluates to true, Angular renders the template
- * provided in a `then` clause, and when false or null,
- * Angular renders the template provided in an optional `else` clause. The default
- * template for the `else` clause is blank.
- *
- * A [shorthand form](guide/structural-directives#the-asterisk--prefix) of the directive,
- * `*ngIf="condition"`, is generally used, provided
- * as an attribute of the anchor element for the inserted template.
- * Angular expands this into a more explicit version, in which the anchor element
- * is contained in an `<ng-template>` element.
- *
- * Simple form with shorthand syntax:
- *
- * ```
- * <div *ngIf="condition">Content to render when condition is true.</div>
- * ```
- *
- * Simple form with expanded syntax:
- *
- * ```
- * <ng-template [ngIf]="condition"><div>Content to render when condition is
- * true.</div></ng-template>
- * ```
- *
- * Form with an "else" block:
- *
- * ```
- * <div *ngIf="condition; else elseBlock">Content to render when condition is true.</div>
- * <ng-template #elseBlock>Content to render when condition is false.</ng-template>
- * ```
- *
- * Shorthand form with "then" and "else" blocks:
- *
- * ```
- * <div *ngIf="condition; then thenBlock else elseBlock"></div>
- * <ng-template #thenBlock>Content to render when condition is true.</ng-template>
- * <ng-template #elseBlock>Content to render when condition is false.</ng-template>
- * ```
- *
- * Form with storing the value locally:
- *
- * ```
- * <div *ngIf="condition as value; else elseBlock">{{value}}</div>
- * <ng-template #elseBlock>Content to render when value is null.</ng-template>
- * ```
- *
- * @usageNotes
- *
- * The `*ngIf` directive is most commonly used to conditionally show an inline template,
- * as seen in the following example.
- * The default `else` template is blank.
- *
- * {@example common/ngIf/ts/module.ts region='NgIfSimple'}
- *
- * ### Showing an alternative template using `else`
- *
- * To display a template when `expression` evaluates to false, use an `else` template
- * binding as shown in the following example.
- * The `else` binding points to an `<ng-template>` element labeled `#elseBlock`.
- * The template can be defined anywhere in the component view, but is typically placed right after
- * `ngIf` for readability.
- *
- * {@example common/ngIf/ts/module.ts region='NgIfElse'}
- *
- * ### Using an external `then` template
- *
- * In the previous example, the then-clause template is specified inline, as the content of the
- * tag that contains the `ngIf` directive. You can also specify a template that is defined
- * externally, by referencing a labeled `<ng-template>` element. When you do this, you can
- * change which template to use at runtime, as shown in the following example.
- *
- * {@example common/ngIf/ts/module.ts region='NgIfThenElse'}
- *
- * ### Storing a conditional result in a variable
- *
- * You might want to show a set of properties from the same object. If you are waiting
- * for asynchronous data, the object can be undefined.
- * In this case, you can use `ngIf` and store the result of the condition in a local
- * variable as shown in the the following example.
- *
- * {@example common/ngIf/ts/module.ts region='NgIfAs'}
- *
- * This code uses only one `AsyncPipe`, so only one subscription is created.
- * The conditional statement stores the result of `userStream|async` in the local variable `user`.
- * You can then bind the local `user` repeatedly.
- *
- * The conditional displays the data only if `userStream` returns a value,
- * so you don't need to use the
- * safe-navigation-operator (`?.`)
- * to guard against null values when accessing properties.
- * You can display an alternative template while waiting for the data.
- *
- * ### Shorthand syntax
- *
- * The shorthand syntax `*ngIf` expands into two separate template specifications
- * for the "then" and "else" clauses. For example, consider the following shorthand statement,
- * that is meant to show a loading page while waiting for data to be loaded.
- *
- * ```
- * <div class="hero-list" *ngIf="heroes else loading">
- * ...
- * </div>
- *
- * <ng-template #loading>
- * <div>Loading...</div>
- * </ng-template>
- * ```
- *
- * You can see that the "else" clause references the `<ng-template>`
- * with the `#loading` label, and the template for the "then" clause
- * is provided as the content of the anchor element.
- *
- * However, when Angular expands the shorthand syntax, it creates
- * another `<ng-template>` tag, with `ngIf` and `ngIfElse` directives.
- * The anchor element containing the template for the "then" clause becomes
- * the content of this unlabeled `<ng-template>` tag.
- *
- * ```
- * <ng-template [ngIf]="heroes" [ngIfElse]="loading">
- * <div class="hero-list">
- * ...
- * </div>
- * </ng-template>
- *
- * <ng-template #loading>
- * <div>Loading...</div>
- * </ng-template>
- * ```
- *
- * The presence of the implicit template object has implications for the nesting of
- * structural directives. For more on this subject, see
- * [Structural Directives](https://angular.io/guide/structural-directives#one-per-element).
- *
- * @ngModule CommonModule
- * @publicApi
- */
- class NgIf {
- constructor(_viewContainer, templateRef) {
- this._viewContainer = _viewContainer;
- this._context = new NgIfContext();
- this._thenTemplateRef = null;
- this._elseTemplateRef = null;
- this._thenViewRef = null;
- this._elseViewRef = null;
- this._thenTemplateRef = templateRef;
- }
- /**
- * The Boolean expression to evaluate as the condition for showing a template.
- */
- set ngIf(condition) {
- this._context.$implicit = this._context.ngIf = condition;
- this._updateView();
- }
- /**
- * A template to show if the condition expression evaluates to true.
- */
- set ngIfThen(templateRef) {
- assertTemplate('ngIfThen', templateRef);
- this._thenTemplateRef = templateRef;
- this._thenViewRef = null; // clear previous view if any.
- this._updateView();
- }
- /**
- * A template to show if the condition expression evaluates to false.
- */
- set ngIfElse(templateRef) {
- assertTemplate('ngIfElse', templateRef);
- this._elseTemplateRef = templateRef;
- this._elseViewRef = null; // clear previous view if any.
- this._updateView();
- }
- _updateView() {
- if (this._context.$implicit) {
- if (!this._thenViewRef) {
- this._viewContainer.clear();
- this._elseViewRef = null;
- if (this._thenTemplateRef) {
- this._thenViewRef =
- this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);
- }
- }
- }
- else {
- if (!this._elseViewRef) {
- this._viewContainer.clear();
- this._thenViewRef = null;
- if (this._elseTemplateRef) {
- this._elseViewRef =
- this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);
- }
- }
- }
- }
- /**
- * Asserts the correct type of the context for the template that `NgIf` will render.
- *
- * The presence of this method is a signal to the Ivy template type-check compiler that the
- * `NgIf` structural directive renders its template with a specific context type.
- */
- static ngTemplateContextGuard(dir, ctx) {
- return true;
- }
- }
- NgIf.ɵfac = function NgIf_Factory(t) { return new (t || NgIf)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"])); };
- NgIf.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgIf, selectors: [["", "ngIf", ""]], inputs: { ngIf: "ngIf", ngIfThen: "ngIfThen", ngIfElse: "ngIfElse" } });
- NgIf.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }
- ];
- NgIf.propDecorators = {
- ngIf: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ngIfThen: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ngIfElse: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgIf, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngIf]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }]; }, { ngIf: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ngIfThen: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ngIfElse: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * @publicApi
- */
- class NgIfContext {
- constructor() {
- this.$implicit = null;
- this.ngIf = null;
- }
- }
- function assertTemplate(property, templateRef) {
- const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);
- if (!isTemplateRefOrNull) {
- throw new Error(`${property} must be a TemplateRef, but received '${Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵstringify"])(templateRef)}'.`);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class SwitchView {
- constructor(_viewContainerRef, _templateRef) {
- this._viewContainerRef = _viewContainerRef;
- this._templateRef = _templateRef;
- this._created = false;
- }
- create() {
- this._created = true;
- this._viewContainerRef.createEmbeddedView(this._templateRef);
- }
- destroy() {
- this._created = false;
- this._viewContainerRef.clear();
- }
- enforceState(created) {
- if (created && !this._created) {
- this.create();
- }
- else if (!created && this._created) {
- this.destroy();
- }
- }
- }
- /**
- * @ngModule CommonModule
- *
- * @description
- * The `[ngSwitch]` directive on a container specifies an expression to match against.
- * The expressions to match are provided by `ngSwitchCase` directives on views within the container.
- * - Every view that matches is rendered.
- * - If there are no matches, a view with the `ngSwitchDefault` directive is rendered.
- * - Elements within the `[NgSwitch]` statement but outside of any `NgSwitchCase`
- * or `ngSwitchDefault` directive are preserved at the location.
- *
- * @usageNotes
- * Define a container element for the directive, and specify the switch expression
- * to match against as an attribute:
- *
- * ```
- * <container-element [ngSwitch]="switch_expression">
- * ```
- *
- * Within the container, `*ngSwitchCase` statements specify the match expressions
- * as attributes. Include `*ngSwitchDefault` as the final case.
- *
- * ```
- * <container-element [ngSwitch]="switch_expression">
- * <some-element *ngSwitchCase="match_expression_1">...</some-element>
- * ...
- * <some-element *ngSwitchDefault>...</some-element>
- * </container-element>
- * ```
- *
- * ### Usage Examples
- *
- * The following example shows how to use more than one case to display the same view:
- *
- * ```
- * <container-element [ngSwitch]="switch_expression">
- * <!-- the same view can be shown in more than one case -->
- * <some-element *ngSwitchCase="match_expression_1">...</some-element>
- * <some-element *ngSwitchCase="match_expression_2">...</some-element>
- * <some-other-element *ngSwitchCase="match_expression_3">...</some-other-element>
- * <!--default case when there are no matches -->
- * <some-element *ngSwitchDefault>...</some-element>
- * </container-element>
- * ```
- *
- * The following example shows how cases can be nested:
- * ```
- * <container-element [ngSwitch]="switch_expression">
- * <some-element *ngSwitchCase="match_expression_1">...</some-element>
- * <some-element *ngSwitchCase="match_expression_2">...</some-element>
- * <some-other-element *ngSwitchCase="match_expression_3">...</some-other-element>
- * <ng-container *ngSwitchCase="match_expression_3">
- * <!-- use a ng-container to group multiple root nodes -->
- * <inner-element></inner-element>
- * <inner-other-element></inner-other-element>
- * </ng-container>
- * <some-element *ngSwitchDefault>...</some-element>
- * </container-element>
- * ```
- *
- * @publicApi
- * @see `NgSwitchCase`
- * @see `NgSwitchDefault`
- * @see [Structural Directives](guide/structural-directives)
- *
- */
- class NgSwitch {
- constructor() {
- this._defaultUsed = false;
- this._caseCount = 0;
- this._lastCaseCheckIndex = 0;
- this._lastCasesMatched = false;
- }
- set ngSwitch(newValue) {
- this._ngSwitch = newValue;
- if (this._caseCount === 0) {
- this._updateDefaultCases(true);
- }
- }
- /** @internal */
- _addCase() {
- return this._caseCount++;
- }
- /** @internal */
- _addDefault(view) {
- if (!this._defaultViews) {
- this._defaultViews = [];
- }
- this._defaultViews.push(view);
- }
- /** @internal */
- _matchCase(value) {
- const matched = value == this._ngSwitch;
- this._lastCasesMatched = this._lastCasesMatched || matched;
- this._lastCaseCheckIndex++;
- if (this._lastCaseCheckIndex === this._caseCount) {
- this._updateDefaultCases(!this._lastCasesMatched);
- this._lastCaseCheckIndex = 0;
- this._lastCasesMatched = false;
- }
- return matched;
- }
- _updateDefaultCases(useDefault) {
- if (this._defaultViews && useDefault !== this._defaultUsed) {
- this._defaultUsed = useDefault;
- for (let i = 0; i < this._defaultViews.length; i++) {
- const defaultView = this._defaultViews[i];
- defaultView.enforceState(useDefault);
- }
- }
- }
- }
- NgSwitch.ɵfac = function NgSwitch_Factory(t) { return new (t || NgSwitch)(); };
- NgSwitch.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgSwitch, selectors: [["", "ngSwitch", ""]], inputs: { ngSwitch: "ngSwitch" } });
- NgSwitch.propDecorators = {
- ngSwitch: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgSwitch, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngSwitch]' }]
- }], function () { return []; }, { ngSwitch: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * @ngModule CommonModule
- *
- * @description
- * Provides a switch case expression to match against an enclosing `ngSwitch` expression.
- * When the expressions match, the given `NgSwitchCase` template is rendered.
- * If multiple match expressions match the switch expression value, all of them are displayed.
- *
- * @usageNotes
- *
- * Within a switch container, `*ngSwitchCase` statements specify the match expressions
- * as attributes. Include `*ngSwitchDefault` as the final case.
- *
- * ```
- * <container-element [ngSwitch]="switch_expression">
- * <some-element *ngSwitchCase="match_expression_1">...</some-element>
- * ...
- * <some-element *ngSwitchDefault>...</some-element>
- * </container-element>
- * ```
- *
- * Each switch-case statement contains an in-line HTML template or template reference
- * that defines the subtree to be selected if the value of the match expression
- * matches the value of the switch expression.
- *
- * Unlike JavaScript, which uses strict equality, Angular uses loose equality.
- * This means that the empty string, `""` matches 0.
- *
- * @publicApi
- * @see `NgSwitch`
- * @see `NgSwitchDefault`
- *
- */
- class NgSwitchCase {
- constructor(viewContainer, templateRef, ngSwitch) {
- this.ngSwitch = ngSwitch;
- ngSwitch._addCase();
- this._view = new SwitchView(viewContainer, templateRef);
- }
- /**
- * Performs case matching. For internal use only.
- */
- ngDoCheck() {
- this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase));
- }
- }
- NgSwitchCase.ɵfac = function NgSwitchCase_Factory(t) { return new (t || NgSwitchCase)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgSwitch, 1)); };
- NgSwitchCase.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgSwitchCase, selectors: [["", "ngSwitchCase", ""]], inputs: { ngSwitchCase: "ngSwitchCase" } });
- NgSwitchCase.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] },
- { type: NgSwitch, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"] }] }
- ];
- NgSwitchCase.propDecorators = {
- ngSwitchCase: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgSwitchCase, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngSwitchCase]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }, { type: NgSwitch, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
- }] }]; }, { ngSwitchCase: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * @ngModule CommonModule
- *
- * @description
- *
- * Creates a view that is rendered when no `NgSwitchCase` expressions
- * match the `NgSwitch` expression.
- * This statement should be the final case in an `NgSwitch`.
- *
- * @publicApi
- * @see `NgSwitch`
- * @see `NgSwitchCase`
- *
- */
- class NgSwitchDefault {
- constructor(viewContainer, templateRef, ngSwitch) {
- ngSwitch._addDefault(new SwitchView(viewContainer, templateRef));
- }
- }
- NgSwitchDefault.ɵfac = function NgSwitchDefault_Factory(t) { return new (t || NgSwitchDefault)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgSwitch, 1)); };
- NgSwitchDefault.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgSwitchDefault, selectors: [["", "ngSwitchDefault", ""]] });
- NgSwitchDefault.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] },
- { type: NgSwitch, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgSwitchDefault, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngSwitchDefault]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }, { type: NgSwitch, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
- }] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @ngModule CommonModule
- *
- * @usageNotes
- * ```
- * <some-element [ngPlural]="value">
- * <ng-template ngPluralCase="=0">there is nothing</ng-template>
- * <ng-template ngPluralCase="=1">there is one</ng-template>
- * <ng-template ngPluralCase="few">there are a few</ng-template>
- * </some-element>
- * ```
- *
- * @description
- *
- * Adds / removes DOM sub-trees based on a numeric value. Tailored for pluralization.
- *
- * Displays DOM sub-trees that match the switch expression value, or failing that, DOM sub-trees
- * that match the switch expression's pluralization category.
- *
- * To use this directive you must provide a container element that sets the `[ngPlural]` attribute
- * to a switch expression. Inner elements with a `[ngPluralCase]` will display based on their
- * expression:
- * - if `[ngPluralCase]` is set to a value starting with `=`, it will only display if the value
- * matches the switch expression exactly,
- * - otherwise, the view will be treated as a "category match", and will only display if exact
- * value matches aren't found and the value maps to its category for the defined locale.
- *
- * See http://cldr.unicode.org/index/cldr-spec/plural-rules
- *
- * @publicApi
- */
- class NgPlural {
- constructor(_localization) {
- this._localization = _localization;
- this._caseViews = {};
- }
- set ngPlural(value) {
- this._switchValue = value;
- this._updateView();
- }
- addCase(value, switchView) {
- this._caseViews[value] = switchView;
- }
- _updateView() {
- this._clearViews();
- const cases = Object.keys(this._caseViews);
- const key = getPluralCategory(this._switchValue, cases, this._localization);
- this._activateView(this._caseViews[key]);
- }
- _clearViews() {
- if (this._activeView)
- this._activeView.destroy();
- }
- _activateView(view) {
- if (view) {
- this._activeView = view;
- this._activeView.create();
- }
- }
- }
- NgPlural.ɵfac = function NgPlural_Factory(t) { return new (t || NgPlural)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgLocalization)); };
- NgPlural.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgPlural, selectors: [["", "ngPlural", ""]], inputs: { ngPlural: "ngPlural" } });
- NgPlural.ctorParameters = () => [
- { type: NgLocalization }
- ];
- NgPlural.propDecorators = {
- ngPlural: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgPlural, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngPlural]' }]
- }], function () { return [{ type: NgLocalization }]; }, { ngPlural: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * @ngModule CommonModule
- *
- * @description
- *
- * Creates a view that will be added/removed from the parent {@link NgPlural} when the
- * given expression matches the plural expression according to CLDR rules.
- *
- * @usageNotes
- * ```
- * <some-element [ngPlural]="value">
- * <ng-template ngPluralCase="=0">...</ng-template>
- * <ng-template ngPluralCase="other">...</ng-template>
- * </some-element>
- *```
- *
- * See {@link NgPlural} for more details and example.
- *
- * @publicApi
- */
- class NgPluralCase {
- constructor(value, template, viewContainer, ngPlural) {
- this.value = value;
- const isANumber = !isNaN(Number(value));
- ngPlural.addCase(isANumber ? `=${value}` : value, new SwitchView(viewContainer, template));
- }
- }
- NgPluralCase.ɵfac = function NgPluralCase_Factory(t) { return new (t || NgPluralCase)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinjectAttribute"]('ngPluralCase'), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgPlural, 1)); };
- NgPluralCase.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgPluralCase, selectors: [["", "ngPluralCase", ""]] });
- NgPluralCase.ctorParameters = () => [
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"], args: ['ngPluralCase',] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] },
- { type: NgPlural, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgPluralCase, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngPluralCase]' }]
- }], function () { return [{ type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"],
- args: ['ngPluralCase']
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] }, { type: NgPlural, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
- }] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @ngModule CommonModule
- *
- * @usageNotes
- *
- * Set the font of the containing element to the result of an expression.
- *
- * ```
- * <some-element [ngStyle]="{'font-style': styleExp}">...</some-element>
- * ```
- *
- * Set the width of the containing element to a pixel value returned by an expression.
- *
- * ```
- * <some-element [ngStyle]="{'max-width.px': widthExp}">...</some-element>
- * ```
- *
- * Set a collection of style values using an expression that returns key-value pairs.
- *
- * ```
- * <some-element [ngStyle]="objExp">...</some-element>
- * ```
- *
- * @description
- *
- * An attribute directive that updates styles for the containing HTML element.
- * Sets one or more style properties, specified as colon-separated key-value pairs.
- * The key is a style name, with an optional `.<unit>` suffix
- * (such as 'top.px', 'font-style.em').
- * The value is an expression to be evaluated.
- * The resulting non-null value, expressed in the given unit,
- * is assigned to the given style property.
- * If the result of evaluation is null, the corresponding style is removed.
- *
- * @publicApi
- */
- class NgStyle {
- constructor(_ngEl, _differs, _renderer) {
- this._ngEl = _ngEl;
- this._differs = _differs;
- this._renderer = _renderer;
- this._ngStyle = null;
- this._differ = null;
- }
- set ngStyle(values) {
- this._ngStyle = values;
- if (!this._differ && values) {
- this._differ = this._differs.find(values).create();
- }
- }
- ngDoCheck() {
- if (this._differ) {
- const changes = this._differ.diff(this._ngStyle);
- if (changes) {
- this._applyChanges(changes);
- }
- }
- }
- _setStyle(nameAndUnit, value) {
- const [name, unit] = nameAndUnit.split('.');
- value = value != null && unit ? `${value}${unit}` : value;
- if (value != null) {
- this._renderer.setStyle(this._ngEl.nativeElement, name, value);
- }
- else {
- this._renderer.removeStyle(this._ngEl.nativeElement, name);
- }
- }
- _applyChanges(changes) {
- changes.forEachRemovedItem((record) => this._setStyle(record.key, null));
- changes.forEachAddedItem((record) => this._setStyle(record.key, record.currentValue));
- changes.forEachChangedItem((record) => this._setStyle(record.key, record.currentValue));
- }
- }
- NgStyle.ɵfac = function NgStyle_Factory(t) { return new (t || NgStyle)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"])); };
- NgStyle.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgStyle, selectors: [["", "ngStyle", ""]], inputs: { ngStyle: "ngStyle" } });
- NgStyle.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }
- ];
- NgStyle.propDecorators = {
- ngStyle: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"], args: ['ngStyle',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgStyle, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngStyle]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"] }]; }, { ngStyle: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
- args: ['ngStyle']
- }] }); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @ngModule CommonModule
- *
- * @description
- *
- * Inserts an embedded view from a prepared `TemplateRef`.
- *
- * You can attach a context object to the `EmbeddedViewRef` by setting `[ngTemplateOutletContext]`.
- * `[ngTemplateOutletContext]` should be an object, the object's keys will be available for binding
- * by the local template `let` declarations.
- *
- * @usageNotes
- * ```
- * <ng-container *ngTemplateOutlet="templateRefExp; context: contextExp"></ng-container>
- * ```
- *
- * Using the key `$implicit` in the context object will set its value as default.
- *
- * ### Example
- *
- * {@example common/ngTemplateOutlet/ts/module.ts region='NgTemplateOutlet'}
- *
- * @publicApi
- */
- class NgTemplateOutlet {
- constructor(_viewContainerRef) {
- this._viewContainerRef = _viewContainerRef;
- this._viewRef = null;
- /**
- * A context object to attach to the {@link EmbeddedViewRef}. This should be an
- * object, the object's keys will be available for binding by the local template `let`
- * declarations.
- * Using the key `$implicit` in the context object will set its value as default.
- */
- this.ngTemplateOutletContext = null;
- /**
- * A string defining the template reference and optionally the context object for the template.
- */
- this.ngTemplateOutlet = null;
- }
- ngOnChanges(changes) {
- const recreateView = this._shouldRecreateView(changes);
- if (recreateView) {
- const viewContainerRef = this._viewContainerRef;
- if (this._viewRef) {
- viewContainerRef.remove(viewContainerRef.indexOf(this._viewRef));
- }
- this._viewRef = this.ngTemplateOutlet ?
- viewContainerRef.createEmbeddedView(this.ngTemplateOutlet, this.ngTemplateOutletContext) :
- null;
- }
- else if (this._viewRef && this.ngTemplateOutletContext) {
- this._updateExistingContext(this.ngTemplateOutletContext);
- }
- }
- /**
- * We need to re-create existing embedded view if:
- * - templateRef has changed
- * - context has changes
- *
- * We mark context object as changed when the corresponding object
- * shape changes (new properties are added or existing properties are removed).
- * In other words we consider context with the same properties as "the same" even
- * if object reference changes (see https://github.com/angular/angular/issues/13407).
- */
- _shouldRecreateView(changes) {
- const ctxChange = changes['ngTemplateOutletContext'];
- return !!changes['ngTemplateOutlet'] || (ctxChange && this._hasContextShapeChanged(ctxChange));
- }
- _hasContextShapeChanged(ctxChange) {
- const prevCtxKeys = Object.keys(ctxChange.previousValue || {});
- const currCtxKeys = Object.keys(ctxChange.currentValue || {});
- if (prevCtxKeys.length === currCtxKeys.length) {
- for (let propName of currCtxKeys) {
- if (prevCtxKeys.indexOf(propName) === -1) {
- return true;
- }
- }
- return false;
- }
- return true;
- }
- _updateExistingContext(ctx) {
- for (let propName of Object.keys(ctx)) {
- this._viewRef.context[propName] = this.ngTemplateOutletContext[propName];
- }
- }
- }
- NgTemplateOutlet.ɵfac = function NgTemplateOutlet_Factory(t) { return new (t || NgTemplateOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"])); };
- NgTemplateOutlet.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: NgTemplateOutlet, selectors: [["", "ngTemplateOutlet", ""]], inputs: { ngTemplateOutletContext: "ngTemplateOutletContext", ngTemplateOutlet: "ngTemplateOutlet" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]] });
- NgTemplateOutlet.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] }
- ];
- NgTemplateOutlet.propDecorators = {
- ngTemplateOutletContext: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- ngTemplateOutlet: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgTemplateOutlet, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{ selector: '[ngTemplateOutlet]' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] }]; }, { ngTemplateOutletContext: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], ngTemplateOutlet: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * A collection of Angular directives that are likely to be used in each and every Angular
- * application.
- */
- const COMMON_DIRECTIVES = [
- NgClass,
- NgComponentOutlet,
- NgForOf,
- NgIf,
- NgTemplateOutlet,
- NgStyle,
- NgSwitch,
- NgSwitchCase,
- NgSwitchDefault,
- NgPlural,
- NgPluralCase,
- ];
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function invalidPipeArgumentError(type, value) {
- return Error(`InvalidPipeArgument: '${value}' for pipe '${Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵstringify"])(type)}'`);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class ObservableStrategy {
- createSubscription(async, updateLatestValue) {
- return async.subscribe({
- next: updateLatestValue,
- error: (e) => {
- throw e;
- }
- });
- }
- dispose(subscription) {
- subscription.unsubscribe();
- }
- onDestroy(subscription) {
- subscription.unsubscribe();
- }
- }
- class PromiseStrategy {
- createSubscription(async, updateLatestValue) {
- return async.then(updateLatestValue, e => {
- throw e;
- });
- }
- dispose(subscription) { }
- onDestroy(subscription) { }
- }
- const _promiseStrategy = new PromiseStrategy();
- const _observableStrategy = new ObservableStrategy();
- /**
- * @ngModule CommonModule
- * @description
- *
- * Unwraps a value from an asynchronous primitive.
- *
- * The `async` pipe subscribes to an `Observable` or `Promise` and returns the latest value it has
- * emitted. When a new value is emitted, the `async` pipe marks the component to be checked for
- * changes. When the component gets destroyed, the `async` pipe unsubscribes automatically to avoid
- * potential memory leaks.
- *
- * @usageNotes
- *
- * ### Examples
- *
- * This example binds a `Promise` to the view. Clicking the `Resolve` button resolves the
- * promise.
- *
- * {@example common/pipes/ts/async_pipe.ts region='AsyncPipePromise'}
- *
- * It's also possible to use `async` with Observables. The example below binds the `time` Observable
- * to the view. The Observable continuously updates the view with the current time.
- *
- * {@example common/pipes/ts/async_pipe.ts region='AsyncPipeObservable'}
- *
- * @publicApi
- */
- class AsyncPipe {
- constructor(_ref) {
- this._ref = _ref;
- this._latestValue = null;
- this._subscription = null;
- this._obj = null;
- this._strategy = null;
- }
- ngOnDestroy() {
- if (this._subscription) {
- this._dispose();
- }
- }
- transform(obj) {
- if (!this._obj) {
- if (obj) {
- this._subscribe(obj);
- }
- return this._latestValue;
- }
- if (obj !== this._obj) {
- this._dispose();
- return this.transform(obj);
- }
- return this._latestValue;
- }
- _subscribe(obj) {
- this._obj = obj;
- this._strategy = this._selectStrategy(obj);
- this._subscription = this._strategy.createSubscription(obj, (value) => this._updateLatestValue(obj, value));
- }
- _selectStrategy(obj) {
- if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵisPromise"])(obj)) {
- return _promiseStrategy;
- }
- if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵisObservable"])(obj)) {
- return _observableStrategy;
- }
- throw invalidPipeArgumentError(AsyncPipe, obj);
- }
- _dispose() {
- this._strategy.dispose(this._subscription);
- this._latestValue = null;
- this._subscription = null;
- this._obj = null;
- }
- _updateLatestValue(async, value) {
- if (async === this._obj) {
- this._latestValue = value;
- this._ref.markForCheck();
- }
- }
- }
- AsyncPipe.ɵfac = function AsyncPipe_Factory(t) { return new (t || AsyncPipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinjectPipeChangeDetectorRef"]()); };
- AsyncPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ name: "async", type: AsyncPipe, pure: false });
- AsyncPipe.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AsyncPipe, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
- args: [{ name: 'async', pure: false }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Transforms text to all lower case.
- *
- * @see `UpperCasePipe`
- * @see `TitleCasePipe`
- * @usageNotes
- *
- * The following example defines a view that allows the user to enter
- * text, and then uses the pipe to convert the input text to all lower case.
- *
- * <code-example path="common/pipes/ts/lowerupper_pipe.ts" region='LowerUpperPipe'></code-example>
- *
- * @ngModule CommonModule
- * @publicApi
- */
- class LowerCasePipe {
- transform(value) {
- if (value == null)
- return null;
- if (typeof value !== 'string') {
- throw invalidPipeArgumentError(LowerCasePipe, value);
- }
- return value.toLowerCase();
- }
- }
- LowerCasePipe.ɵfac = function LowerCasePipe_Factory(t) { return new (t || LowerCasePipe)(); };
- LowerCasePipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ name: "lowercase", type: LowerCasePipe, pure: true });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](LowerCasePipe, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
- args: [{ name: 'lowercase' }]
- }], null, null); })();
- //
- // Regex below matches any Unicode word and compatible with ES5. In ES2018 the same result
- // can be achieved by using /\p{L}\S*/gu and also known as Unicode Property Escapes
- // (https://2ality.com/2017/07/regexp-unicode-property-escapes.html). Since there is no
- // transpilation of this functionality down to ES5 without external tool, the only solution is
- // to use already transpiled form. Example can be found here -
- // https://mothereff.in/regexpu#input=var+regex+%3D+/%5Cp%7BL%7D/u%3B&unicodePropertyEscape=1
- //
- const unicodeWordMatch = /(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D])\S*/g;
- /**
- * Transforms text to title case.
- * Capitalizes the first letter of each word and transforms the
- * rest of the word to lower case.
- * Words are delimited by any whitespace character, such as a space, tab, or line-feed character.
- *
- * @see `LowerCasePipe`
- * @see `UpperCasePipe`
- *
- * @usageNotes
- * The following example shows the result of transforming various strings into title case.
- *
- * <code-example path="common/pipes/ts/titlecase_pipe.ts" region='TitleCasePipe'></code-example>
- *
- * @ngModule CommonModule
- * @publicApi
- */
- class TitleCasePipe {
- transform(value) {
- if (value == null)
- return null;
- if (typeof value !== 'string') {
- throw invalidPipeArgumentError(TitleCasePipe, value);
- }
- return value.replace(unicodeWordMatch, (txt => txt[0].toUpperCase() + txt.substr(1).toLowerCase()));
- }
- }
- TitleCasePipe.ɵfac = function TitleCasePipe_Factory(t) { return new (t || TitleCasePipe)(); };
- TitleCasePipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ name: "titlecase", type: TitleCasePipe, pure: true });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](TitleCasePipe, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
- args: [{ name: 'titlecase' }]
- }], null, null); })();
- /**
- * Transforms text to all upper case.
- * @see `LowerCasePipe`
- * @see `TitleCasePipe`
- *
- * @ngModule CommonModule
- * @publicApi
- */
- class UpperCasePipe {
- transform(value) {
- if (value == null)
- return null;
- if (typeof value !== 'string') {
- throw invalidPipeArgumentError(UpperCasePipe, value);
- }
- return value.toUpperCase();
- }
- }
- UpperCasePipe.ɵfac = function UpperCasePipe_Factory(t) { return new (t || UpperCasePipe)(); };
- UpperCasePipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ name: "uppercase", type: UpperCasePipe, pure: true });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](UpperCasePipe, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
- args: [{ name: 'uppercase' }]
- }], null, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // clang-format off
- /**
- * @ngModule CommonModule
- * @description
- *
- * Formats a date value according to locale rules.
- *
- * Only the `en-US` locale data comes with Angular. To localize dates
- * in another language, you must import the corresponding locale data.
- * See the [I18n guide](guide/i18n#i18n-pipes) for more information.
- *
- * @see `formatDate()`
- *
- *
- * @usageNotes
- *
- * The result of this pipe is not reevaluated when the input is mutated. To avoid the need to
- * reformat the date on every change-detection cycle, treat the date as an immutable object
- * and change the reference when the pipe needs to run again.
- *
- * ### Pre-defined format options
- *
- * | Option | Equivalent to | Examples (given in `en-US` locale) |
- * |---------------|-------------------------------------|-------------------------------------------------|
- * | `'short'` | `'M/d/yy, h:mm a'` | `6/15/15, 9:03 AM` |
- * | `'medium'` | `'MMM d, y, h:mm:ss a'` | `Jun 15, 2015, 9:03:01 AM` |
- * | `'long'` | `'MMMM d, y, h:mm:ss a z'` | `June 15, 2015 at 9:03:01 AM GMT+1` |
- * | `'full'` | `'EEEE, MMMM d, y, h:mm:ss a zzzz'` | `Monday, June 15, 2015 at 9:03:01 AM GMT+01:00` |
- * | `'shortDate'` | `'M/d/yy'` | `6/15/15` |
- * | `'mediumDate'`| `'MMM d, y'` | `Jun 15, 2015` |
- * | `'longDate'` | `'MMMM d, y'` | `June 15, 2015` |
- * | `'fullDate'` | `'EEEE, MMMM d, y'` | `Monday, June 15, 2015` |
- * | `'shortTime'` | `'h:mm a'` | `9:03 AM` |
- * | `'mediumTime'`| `'h:mm:ss a'` | `9:03:01 AM` |
- * | `'longTime'` | `'h:mm:ss a z'` | `9:03:01 AM GMT+1` |
- * | `'fullTime'` | `'h:mm:ss a zzzz'` | `9:03:01 AM GMT+01:00` |
- *
- * ### Custom format options
- *
- * You can construct a format string using symbols to specify the components
- * of a date-time value, as described in the following table.
- * Format details depend on the locale.
- * Fields marked with (*) are only available in the extra data set for the given locale.
- *
- * | Field type | Format | Description | Example Value |
- * |--------------------|-------------|---------------------------------------------------------------|------------------------------------------------------------|
- * | Era | G, GG & GGG | Abbreviated | AD |
- * | | GGGG | Wide | Anno Domini |
- * | | GGGGG | Narrow | A |
- * | Year | y | Numeric: minimum digits | 2, 20, 201, 2017, 20173 |
- * | | yy | Numeric: 2 digits + zero padded | 02, 20, 01, 17, 73 |
- * | | yyy | Numeric: 3 digits + zero padded | 002, 020, 201, 2017, 20173 |
- * | | yyyy | Numeric: 4 digits or more + zero padded | 0002, 0020, 0201, 2017, 20173 |
- * | Week-numbering year| Y | Numeric: minimum digits | 2, 20, 201, 2017, 20173 |
- * | | YY | Numeric: 2 digits + zero padded | 02, 20, 01, 17, 73 |
- * | | YYY | Numeric: 3 digits + zero padded | 002, 020, 201, 2017, 20173 |
- * | | YYYY | Numeric: 4 digits or more + zero padded | 0002, 0020, 0201, 2017, 20173 |
- * | Month | M | Numeric: 1 digit | 9, 12 |
- * | | MM | Numeric: 2 digits + zero padded | 09, 12 |
- * | | MMM | Abbreviated | Sep |
- * | | MMMM | Wide | September |
- * | | MMMMM | Narrow | S |
- * | Month standalone | L | Numeric: 1 digit | 9, 12 |
- * | | LL | Numeric: 2 digits + zero padded | 09, 12 |
- * | | LLL | Abbreviated | Sep |
- * | | LLLL | Wide | September |
- * | | LLLLL | Narrow | S |
- * | Week of year | w | Numeric: minimum digits | 1... 53 |
- * | | ww | Numeric: 2 digits + zero padded | 01... 53 |
- * | Week of month | W | Numeric: 1 digit | 1... 5 |
- * | Day of month | d | Numeric: minimum digits | 1 |
- * | | dd | Numeric: 2 digits + zero padded | 01 |
- * | Week day | E, EE & EEE | Abbreviated | Tue |
- * | | EEEE | Wide | Tuesday |
- * | | EEEEE | Narrow | T |
- * | | EEEEEE | Short | Tu |
- * | Period | a, aa & aaa | Abbreviated | am/pm or AM/PM |
- * | | aaaa | Wide (fallback to `a` when missing) | ante meridiem/post meridiem |
- * | | aaaaa | Narrow | a/p |
- * | Period* | B, BB & BBB | Abbreviated | mid. |
- * | | BBBB | Wide | am, pm, midnight, noon, morning, afternoon, evening, night |
- * | | BBBBB | Narrow | md |
- * | Period standalone* | b, bb & bbb | Abbreviated | mid. |
- * | | bbbb | Wide | am, pm, midnight, noon, morning, afternoon, evening, night |
- * | | bbbbb | Narrow | md |
- * | Hour 1-12 | h | Numeric: minimum digits | 1, 12 |
- * | | hh | Numeric: 2 digits + zero padded | 01, 12 |
- * | Hour 0-23 | H | Numeric: minimum digits | 0, 23 |
- * | | HH | Numeric: 2 digits + zero padded | 00, 23 |
- * | Minute | m | Numeric: minimum digits | 8, 59 |
- * | | mm | Numeric: 2 digits + zero padded | 08, 59 |
- * | Second | s | Numeric: minimum digits | 0... 59 |
- * | | ss | Numeric: 2 digits + zero padded | 00... 59 |
- * | Fractional seconds | S | Numeric: 1 digit | 0... 9 |
- * | | SS | Numeric: 2 digits + zero padded | 00... 99 |
- * | | SSS | Numeric: 3 digits + zero padded (= milliseconds) | 000... 999 |
- * | Zone | z, zz & zzz | Short specific non location format (fallback to O) | GMT-8 |
- * | | zzzz | Long specific non location format (fallback to OOOO) | GMT-08:00 |
- * | | Z, ZZ & ZZZ | ISO8601 basic format | -0800 |
- * | | ZZZZ | Long localized GMT format | GMT-8:00 |
- * | | ZZZZZ | ISO8601 extended format + Z indicator for offset 0 (= XXXXX) | -08:00 |
- * | | O, OO & OOO | Short localized GMT format | GMT-8 |
- * | | OOOO | Long localized GMT format | GMT-08:00 |
- *
- * Note that timezone correction is not applied to an ISO string that has no time component, such as "2016-09-19"
- *
- * ### Format examples
- *
- * These examples transform a date into various formats,
- * assuming that `dateObj` is a JavaScript `Date` object for
- * year: 2015, month: 6, day: 15, hour: 21, minute: 43, second: 11,
- * given in the local time for the `en-US` locale.
- *
- * ```
- * {{ dateObj | date }} // output is 'Jun 15, 2015'
- * {{ dateObj | date:'medium' }} // output is 'Jun 15, 2015, 9:43:11 PM'
- * {{ dateObj | date:'shortTime' }} // output is '9:43 PM'
- * {{ dateObj | date:'mm:ss' }} // output is '43:11'
- * ```
- *
- * ### Usage example
- *
- * The following component uses a date pipe to display the current date in different formats.
- *
- * ```
- * @Component({
- * selector: 'date-pipe',
- * template: `<div>
- * <p>Today is {{today | date}}</p>
- * <p>Or if you prefer, {{today | date:'fullDate'}}</p>
- * <p>The time is {{today | date:'h:mm a z'}}</p>
- * </div>`
- * })
- * // Get the current date and time as a date-time value.
- * export class DatePipeComponent {
- * today: number = Date.now();
- * }
- * ```
- *
- * @publicApi
- */
- // clang-format on
- class DatePipe {
- constructor(locale) {
- this.locale = locale;
- }
- transform(value, format = 'mediumDate', timezone, locale) {
- if (value == null || value === '' || value !== value)
- return null;
- try {
- return formatDate(value, format, locale || this.locale, timezone);
- }
- catch (error) {
- throw invalidPipeArgumentError(DatePipe, error.message);
- }
- }
- }
- DatePipe.ɵfac = function DatePipe_Factory(t) { return new (t || DatePipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"])); };
- DatePipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ name: "date", type: DatePipe, pure: true });
- DatePipe.ctorParameters = () => [
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DatePipe, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
- args: [{ name: 'date', pure: true }]
- }], function () { return [{ type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
- }] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const _INTERPOLATION_REGEXP = /#/g;
- /**
- * @ngModule CommonModule
- * @description
- *
- * Maps a value to a string that pluralizes the value according to locale rules.
- *
- * @usageNotes
- *
- * ### Example
- *
- * {@example common/pipes/ts/i18n_pipe.ts region='I18nPluralPipeComponent'}
- *
- * @publicApi
- */
- class I18nPluralPipe {
- constructor(_localization) {
- this._localization = _localization;
- }
- /**
- * @param value the number to be formatted
- * @param pluralMap an object that mimics the ICU format, see
- * http://userguide.icu-project.org/formatparse/messages.
- * @param locale a `string` defining the locale to use (uses the current {@link LOCALE_ID} by
- * default).
- */
- transform(value, pluralMap, locale) {
- if (value == null)
- return '';
- if (typeof pluralMap !== 'object' || pluralMap === null) {
- throw invalidPipeArgumentError(I18nPluralPipe, pluralMap);
- }
- const key = getPluralCategory(value, Object.keys(pluralMap), this._localization, locale);
- return pluralMap[key].replace(_INTERPOLATION_REGEXP, value.toString());
- }
- }
- I18nPluralPipe.ɵfac = function I18nPluralPipe_Factory(t) { return new (t || I18nPluralPipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgLocalization)); };
- I18nPluralPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ name: "i18nPlural", type: I18nPluralPipe, pure: true });
- I18nPluralPipe.ctorParameters = () => [
- { type: NgLocalization }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](I18nPluralPipe, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
- args: [{ name: 'i18nPlural', pure: true }]
- }], function () { return [{ type: NgLocalization }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @ngModule CommonModule
- * @description
- *
- * Generic selector that displays the string that matches the current value.
- *
- * If none of the keys of the `mapping` match the `value`, then the content
- * of the `other` key is returned when present, otherwise an empty string is returned.
- *
- * @usageNotes
- *
- * ### Example
- *
- * {@example common/pipes/ts/i18n_pipe.ts region='I18nSelectPipeComponent'}
- *
- * @publicApi
- */
- class I18nSelectPipe {
- /**
- * @param value a string to be internationalized.
- * @param mapping an object that indicates the text that should be displayed
- * for different values of the provided `value`.
- */
- transform(value, mapping) {
- if (value == null)
- return '';
- if (typeof mapping !== 'object' || typeof value !== 'string') {
- throw invalidPipeArgumentError(I18nSelectPipe, mapping);
- }
- if (mapping.hasOwnProperty(value)) {
- return mapping[value];
- }
- if (mapping.hasOwnProperty('other')) {
- return mapping['other'];
- }
- return '';
- }
- }
- I18nSelectPipe.ɵfac = function I18nSelectPipe_Factory(t) { return new (t || I18nSelectPipe)(); };
- I18nSelectPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ name: "i18nSelect", type: I18nSelectPipe, pure: true });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](I18nSelectPipe, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
- args: [{ name: 'i18nSelect', pure: true }]
- }], null, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @ngModule CommonModule
- * @description
- *
- * Converts a value into its JSON-format representation. Useful for debugging.
- *
- * @usageNotes
- *
- * The following component uses a JSON pipe to convert an object
- * to JSON format, and displays the string in both formats for comparison.
- *
- * {@example common/pipes/ts/json_pipe.ts region='JsonPipe'}
- *
- * @publicApi
- */
- class JsonPipe {
- /**
- * @param value A value of any type to convert into a JSON-format string.
- */
- transform(value) {
- return JSON.stringify(value, null, 2);
- }
- }
- JsonPipe.ɵfac = function JsonPipe_Factory(t) { return new (t || JsonPipe)(); };
- JsonPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ name: "json", type: JsonPipe, pure: false });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](JsonPipe, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
- args: [{ name: 'json', pure: false }]
- }], null, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function makeKeyValuePair(key, value) {
- return { key: key, value: value };
- }
- /**
- * @ngModule CommonModule
- * @description
- *
- * Transforms Object or Map into an array of key value pairs.
- *
- * The output array will be ordered by keys.
- * By default the comparator will be by Unicode point value.
- * You can optionally pass a compareFn if your keys are complex types.
- *
- * @usageNotes
- * ### Examples
- *
- * This examples show how an Object or a Map can be iterated by ngFor with the use of this
- * keyvalue pipe.
- *
- * {@example common/pipes/ts/keyvalue_pipe.ts region='KeyValuePipe'}
- *
- * @publicApi
- */
- class KeyValuePipe {
- constructor(differs) {
- this.differs = differs;
- this.keyValues = [];
- }
- transform(input, compareFn = defaultComparator) {
- if (!input || (!(input instanceof Map) && typeof input !== 'object')) {
- return null;
- }
- if (!this.differ) {
- // make a differ for whatever type we've been passed in
- this.differ = this.differs.find(input).create();
- }
- const differChanges = this.differ.diff(input);
- if (differChanges) {
- this.keyValues = [];
- differChanges.forEachItem((r) => {
- this.keyValues.push(makeKeyValuePair(r.key, r.currentValue));
- });
- this.keyValues.sort(compareFn);
- }
- return this.keyValues;
- }
- }
- KeyValuePipe.ɵfac = function KeyValuePipe_Factory(t) { return new (t || KeyValuePipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"])); };
- KeyValuePipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ name: "keyvalue", type: KeyValuePipe, pure: false });
- KeyValuePipe.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](KeyValuePipe, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
- args: [{ name: 'keyvalue', pure: false }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"] }]; }, null); })();
- function defaultComparator(keyValueA, keyValueB) {
- const a = keyValueA.key;
- const b = keyValueB.key;
- // if same exit with 0;
- if (a === b)
- return 0;
- // make sure that undefined are at the end of the sort.
- if (a === undefined)
- return 1;
- if (b === undefined)
- return -1;
- // make sure that nulls are at the end of the sort.
- if (a === null)
- return 1;
- if (b === null)
- return -1;
- if (typeof a == 'string' && typeof b == 'string') {
- return a < b ? -1 : 1;
- }
- if (typeof a == 'number' && typeof b == 'number') {
- return a - b;
- }
- if (typeof a == 'boolean' && typeof b == 'boolean') {
- return a < b ? -1 : 1;
- }
- // `a` and `b` are of different types. Compare their string values.
- const aString = String(a);
- const bString = String(b);
- return aString == bString ? 0 : aString < bString ? -1 : 1;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @ngModule CommonModule
- * @description
- *
- * Transforms a number into a string,
- * formatted according to locale rules that determine group sizing and
- * separator, decimal-point character, and other locale-specific
- * configurations.
- *
- * If no parameters are specified, the function rounds off to the nearest value using this
- * [rounding method](https://en.wikibooks.org/wiki/Arithmetic/Rounding).
- * The behavior differs from that of the JavaScript ```Math.round()``` function.
- * In the following case for example, the pipe rounds down where
- * ```Math.round()``` rounds up:
- *
- * ```html
- * -2.5 | number:'1.0-0'
- * > -3
- * Math.round(-2.5)
- * > -2
- * ```
- *
- * @see `formatNumber()`
- *
- * @usageNotes
- * The following code shows how the pipe transforms numbers
- * into text strings, according to various format specifications,
- * where the caller's default locale is `en-US`.
- *
- * ### Example
- *
- * <code-example path="common/pipes/ts/number_pipe.ts" region='NumberPipe'></code-example>
- *
- * @publicApi
- */
- class DecimalPipe {
- constructor(_locale) {
- this._locale = _locale;
- }
- transform(value, digitsInfo, locale) {
- if (!isValue(value))
- return null;
- locale = locale || this._locale;
- try {
- const num = strToNumber(value);
- return formatNumber(num, locale, digitsInfo);
- }
- catch (error) {
- throw invalidPipeArgumentError(DecimalPipe, error.message);
- }
- }
- }
- DecimalPipe.ɵfac = function DecimalPipe_Factory(t) { return new (t || DecimalPipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"])); };
- DecimalPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ name: "number", type: DecimalPipe, pure: true });
- DecimalPipe.ctorParameters = () => [
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DecimalPipe, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
- args: [{ name: 'number' }]
- }], function () { return [{ type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
- }] }]; }, null); })();
- /**
- * @ngModule CommonModule
- * @description
- *
- * Transforms a number to a percentage
- * string, formatted according to locale rules that determine group sizing and
- * separator, decimal-point character, and other locale-specific
- * configurations.
- *
- * @see `formatPercent()`
- *
- * @usageNotes
- * The following code shows how the pipe transforms numbers
- * into text strings, according to various format specifications,
- * where the caller's default locale is `en-US`.
- *
- * <code-example path="common/pipes/ts/percent_pipe.ts" region='PercentPipe'></code-example>
- *
- * @publicApi
- */
- class PercentPipe {
- constructor(_locale) {
- this._locale = _locale;
- }
- transform(value, digitsInfo, locale) {
- if (!isValue(value))
- return null;
- locale = locale || this._locale;
- try {
- const num = strToNumber(value);
- return formatPercent(num, locale, digitsInfo);
- }
- catch (error) {
- throw invalidPipeArgumentError(PercentPipe, error.message);
- }
- }
- }
- PercentPipe.ɵfac = function PercentPipe_Factory(t) { return new (t || PercentPipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"])); };
- PercentPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ name: "percent", type: PercentPipe, pure: true });
- PercentPipe.ctorParameters = () => [
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PercentPipe, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
- args: [{ name: 'percent' }]
- }], function () { return [{ type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
- }] }]; }, null); })();
- /**
- * @ngModule CommonModule
- * @description
- *
- * Transforms a number to a currency string, formatted according to locale rules
- * that determine group sizing and separator, decimal-point character,
- * and other locale-specific configurations.
- *
- * {@a currency-code-deprecation}
- * <div class="alert is-helpful">
- *
- * **Deprecation notice:**
- *
- * The default currency code is currently always `USD` but this is deprecated from v9.
- *
- * **In v11 the default currency code will be taken from the current locale identified by
- * the `LOCAL_ID` token. See the [i18n guide](guide/i18n#setting-up-the-locale-of-your-app) for
- * more information.**
- *
- * If you need the previous behavior then set it by creating a `DEFAULT_CURRENCY_CODE` provider in
- * your application `NgModule`:
- *
- * ```ts
- * {provide: DEFAULT_CURRENCY_CODE, useValue: 'USD'}
- * ```
- *
- * </div>
- *
- * @see `getCurrencySymbol()`
- * @see `formatCurrency()`
- *
- * @usageNotes
- * The following code shows how the pipe transforms numbers
- * into text strings, according to various format specifications,
- * where the caller's default locale is `en-US`.
- *
- * <code-example path="common/pipes/ts/currency_pipe.ts" region='CurrencyPipe'></code-example>
- *
- * @publicApi
- */
- class CurrencyPipe {
- constructor(_locale, _defaultCurrencyCode = 'USD') {
- this._locale = _locale;
- this._defaultCurrencyCode = _defaultCurrencyCode;
- }
- transform(value, currencyCode, display = 'symbol', digitsInfo, locale) {
- if (!isValue(value))
- return null;
- locale = locale || this._locale;
- if (typeof display === 'boolean') {
- if ((typeof ngDevMode === 'undefined' || ngDevMode) && console && console.warn) {
- console.warn(`Warning: the currency pipe has been changed in Angular v5. The symbolDisplay option (third parameter) is now a string instead of a boolean. The accepted values are "code", "symbol" or "symbol-narrow".`);
- }
- display = display ? 'symbol' : 'code';
- }
- let currency = currencyCode || this._defaultCurrencyCode;
- if (display !== 'code') {
- if (display === 'symbol' || display === 'symbol-narrow') {
- currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow', locale);
- }
- else {
- currency = display;
- }
- }
- try {
- const num = strToNumber(value);
- return formatCurrency(num, locale, currency, currencyCode, digitsInfo);
- }
- catch (error) {
- throw invalidPipeArgumentError(CurrencyPipe, error.message);
- }
- }
- }
- CurrencyPipe.ɵfac = function CurrencyPipe_Factory(t) { return new (t || CurrencyPipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["DEFAULT_CURRENCY_CODE"])); };
- CurrencyPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ name: "currency", type: CurrencyPipe, pure: true });
- CurrencyPipe.ctorParameters = () => [
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"],] }] },
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["DEFAULT_CURRENCY_CODE"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CurrencyPipe, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
- args: [{ name: 'currency' }]
- }], function () { return [{ type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
- }] }, { type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["DEFAULT_CURRENCY_CODE"]]
- }] }]; }, null); })();
- function isValue(value) {
- return !(value == null || value === '' || value !== value);
- }
- /**
- * Transforms a string into a number (if needed).
- */
- function strToNumber(value) {
- // Convert strings to numbers
- if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {
- return Number(value);
- }
- if (typeof value !== 'number') {
- throw new Error(`${value} is not a number`);
- }
- return value;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @ngModule CommonModule
- * @description
- *
- * Creates a new `Array` or `String` containing a subset (slice) of the elements.
- *
- * @usageNotes
- *
- * All behavior is based on the expected behavior of the JavaScript API `Array.prototype.slice()`
- * and `String.prototype.slice()`.
- *
- * When operating on an `Array`, the returned `Array` is always a copy even when all
- * the elements are being returned.
- *
- * When operating on a blank value, the pipe returns the blank value.
- *
- * ### List Example
- *
- * This `ngFor` example:
- *
- * {@example common/pipes/ts/slice_pipe.ts region='SlicePipe_list'}
- *
- * produces the following:
- *
- * ```html
- * <li>b</li>
- * <li>c</li>
- * ```
- *
- * ### String Examples
- *
- * {@example common/pipes/ts/slice_pipe.ts region='SlicePipe_string'}
- *
- * @publicApi
- */
- class SlicePipe {
- transform(value, start, end) {
- if (value == null)
- return null;
- if (!this.supports(value)) {
- throw invalidPipeArgumentError(SlicePipe, value);
- }
- return value.slice(start, end);
- }
- supports(obj) {
- return typeof obj === 'string' || Array.isArray(obj);
- }
- }
- SlicePipe.ɵfac = function SlicePipe_Factory(t) { return new (t || SlicePipe)(); };
- SlicePipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ name: "slice", type: SlicePipe, pure: false });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](SlicePipe, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
- args: [{ name: 'slice', pure: false }]
- }], null, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * A collection of Angular pipes that are likely to be used in each and every application.
- */
- const COMMON_PIPES = [
- AsyncPipe,
- UpperCasePipe,
- LowerCasePipe,
- JsonPipe,
- SlicePipe,
- DecimalPipe,
- PercentPipe,
- TitleCasePipe,
- CurrencyPipe,
- DatePipe,
- I18nPluralPipe,
- I18nSelectPipe,
- KeyValuePipe,
- ];
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // Note: This does not contain the location providers,
- // as they need some platform specific implementations to work.
- /**
- * Exports all the basic Angular directives and pipes,
- * such as `NgIf`, `NgForOf`, `DecimalPipe`, and so on.
- * Re-exported by `BrowserModule`, which is included automatically in the root
- * `AppModule` when you create a new app with the CLI `new` command.
- *
- * * The `providers` options configure the NgModule's injector to provide
- * localization dependencies to members.
- * * The `exports` options make the declared directives and pipes available for import
- * by other NgModules.
- *
- * @publicApi
- */
- class CommonModule {
- }
- CommonModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: CommonModule });
- CommonModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function CommonModule_Factory(t) { return new (t || CommonModule)(); }, providers: [
- { provide: NgLocalization, useClass: NgLocaleLocalization },
- ] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](CommonModule, { declarations: [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase, AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe], exports: [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase, AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe] }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CommonModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- declarations: [COMMON_DIRECTIVES, COMMON_PIPES],
- exports: [COMMON_DIRECTIVES, COMMON_PIPES],
- providers: [
- { provide: NgLocalization, useClass: NgLocaleLocalization },
- ]
- }]
- }], null, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const PLATFORM_BROWSER_ID = 'browser';
- const PLATFORM_SERVER_ID = 'server';
- const PLATFORM_WORKER_APP_ID = 'browserWorkerApp';
- const PLATFORM_WORKER_UI_ID = 'browserWorkerUi';
- /**
- * Returns whether a platform id represents a browser platform.
- * @publicApi
- */
- function isPlatformBrowser(platformId) {
- return platformId === PLATFORM_BROWSER_ID;
- }
- /**
- * Returns whether a platform id represents a server platform.
- * @publicApi
- */
- function isPlatformServer(platformId) {
- return platformId === PLATFORM_SERVER_ID;
- }
- /**
- * Returns whether a platform id represents a web worker app platform.
- * @publicApi
- */
- function isPlatformWorkerApp(platformId) {
- return platformId === PLATFORM_WORKER_APP_ID;
- }
- /**
- * Returns whether a platform id represents a web worker UI platform.
- * @publicApi
- */
- function isPlatformWorkerUi(platformId) {
- return platformId === PLATFORM_WORKER_UI_ID;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @publicApi
- */
- const VERSION = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["Version"]('11.0.4');
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Defines a scroll position manager. Implemented by `BrowserViewportScroller`.
- *
- * @publicApi
- */
- class ViewportScroller {
- }
- // De-sugared tree-shakable injection
- // See #23917
- /** @nocollapse */
- ViewportScroller.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({
- token: ViewportScroller,
- providedIn: 'root',
- factory: () => new BrowserViewportScroller(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(DOCUMENT), window, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ErrorHandler"]))
- });
- /**
- * Manages the scroll position for a browser window.
- */
- class BrowserViewportScroller {
- constructor(document, window, errorHandler) {
- this.document = document;
- this.window = window;
- this.errorHandler = errorHandler;
- this.offset = () => [0, 0];
- }
- /**
- * Configures the top offset used when scrolling to an anchor.
- * @param offset A position in screen coordinates (a tuple with x and y values)
- * or a function that returns the top offset position.
- *
- */
- setOffset(offset) {
- if (Array.isArray(offset)) {
- this.offset = () => offset;
- }
- else {
- this.offset = offset;
- }
- }
- /**
- * Retrieves the current scroll position.
- * @returns The position in screen coordinates.
- */
- getScrollPosition() {
- if (this.supportsScrolling()) {
- return [this.window.pageXOffset, this.window.pageYOffset];
- }
- else {
- return [0, 0];
- }
- }
- /**
- * Sets the scroll position.
- * @param position The new position in screen coordinates.
- */
- scrollToPosition(position) {
- if (this.supportsScrolling()) {
- this.window.scrollTo(position[0], position[1]);
- }
- }
- /**
- * Scrolls to an anchor element.
- * @param anchor The ID of the anchor element.
- */
- scrollToAnchor(anchor) {
- if (this.supportsScrolling()) {
- const elSelected = this.document.getElementById(anchor) || this.document.getElementsByName(anchor)[0];
- if (elSelected) {
- this.scrollToElement(elSelected);
- }
- }
- }
- /**
- * Disables automatic scroll restoration provided by the browser.
- */
- setHistoryScrollRestoration(scrollRestoration) {
- if (this.supportScrollRestoration()) {
- const history = this.window.history;
- if (history && history.scrollRestoration) {
- history.scrollRestoration = scrollRestoration;
- }
- }
- }
- scrollToElement(el) {
- const rect = el.getBoundingClientRect();
- const left = rect.left + this.window.pageXOffset;
- const top = rect.top + this.window.pageYOffset;
- const offset = this.offset();
- this.window.scrollTo(left - offset[0], top - offset[1]);
- }
- /**
- * We only support scroll restoration when we can get a hold of window.
- * This means that we do not support this behavior when running in a web worker.
- *
- * Lifting this restriction right now would require more changes in the dom adapter.
- * Since webworkers aren't widely used, we will lift it once RouterScroller is
- * battle-tested.
- */
- supportScrollRestoration() {
- try {
- if (!this.supportsScrolling()) {
- return false;
- }
- // The `scrollRestoration` property could be on the `history` instance or its prototype.
- const scrollRestorationDescriptor = getScrollRestorationProperty(this.window.history) ||
- getScrollRestorationProperty(Object.getPrototypeOf(this.window.history));
- // We can write to the `scrollRestoration` property if it is a writable data field or it has a
- // setter function.
- return !!scrollRestorationDescriptor &&
- !!(scrollRestorationDescriptor.writable || scrollRestorationDescriptor.set);
- }
- catch (_a) {
- return false;
- }
- }
- supportsScrolling() {
- try {
- return !!this.window && !!this.window.scrollTo && 'pageXOffset' in this.window;
- }
- catch (_a) {
- return false;
- }
- }
- }
- function getScrollRestorationProperty(obj) {
- return Object.getOwnPropertyDescriptor(obj, 'scrollRestoration');
- }
- /**
- * Provides an empty implementation of the viewport scroller.
- */
- class NullViewportScroller {
- /**
- * Empty implementation
- */
- setOffset(offset) { }
- /**
- * Empty implementation
- */
- getScrollPosition() {
- return [0, 0];
- }
- /**
- * Empty implementation
- */
- scrollToPosition(position) { }
- /**
- * Empty implementation
- */
- scrollToAnchor(anchor) { }
- /**
- * Empty implementation
- */
- setHistoryScrollRestoration(scrollRestoration) { }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // This file only reexports content of the `src` folder. Keep it that way.
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=common.js.map
- /***/ }),
- /***/ "p9/F":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/buffer.js ***!
- \*****************************************************************/
- /*! exports provided: buffer */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buffer", function() { return buffer; });
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function buffer(closingNotifier) {
- return function bufferOperatorFunction(source) {
- return source.lift(new BufferOperator(closingNotifier));
- };
- }
- class BufferOperator {
- constructor(closingNotifier) {
- this.closingNotifier = closingNotifier;
- }
- call(subscriber, source) {
- return source.subscribe(new BufferSubscriber(subscriber, this.closingNotifier));
- }
- }
- class BufferSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__["OuterSubscriber"] {
- constructor(destination, closingNotifier) {
- super(destination);
- this.buffer = [];
- this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(this, closingNotifier));
- }
- _next(value) {
- this.buffer.push(value);
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- const buffer = this.buffer;
- this.buffer = [];
- this.destination.next(buffer);
- }
- }
- //# sourceMappingURL=buffer.js.map
- /***/ }),
- /***/ "pLZG":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/filter.js ***!
- \*****************************************************************/
- /*! exports provided: filter */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "filter", function() { return filter; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function filter(predicate, thisArg) {
- return function filterOperatorFunction(source) {
- return source.lift(new FilterOperator(predicate, thisArg));
- };
- }
- class FilterOperator {
- constructor(predicate, thisArg) {
- this.predicate = predicate;
- this.thisArg = thisArg;
- }
- call(subscriber, source) {
- return source.subscribe(new FilterSubscriber(subscriber, this.predicate, this.thisArg));
- }
- }
- class FilterSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, predicate, thisArg) {
- super(destination);
- this.predicate = predicate;
- this.thisArg = thisArg;
- this.count = 0;
- }
- _next(value) {
- let result;
- try {
- result = this.predicate.call(this.thisArg, value, this.count++);
- }
- catch (err) {
- this.destination.error(err);
- return;
- }
- if (result) {
- this.destination.next(value);
- }
- }
- }
- //# sourceMappingURL=filter.js.map
- /***/ }),
- /***/ "pLzU":
- /*!*************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/subscribeToIterable.js ***!
- \*************************************************************************/
- /*! exports provided: subscribeToIterable */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToIterable", function() { return subscribeToIterable; });
- /* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../symbol/iterator */ "Lhse");
- const subscribeToIterable = (iterable) => (subscriber) => {
- const iterator = iterable[_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__["iterator"]]();
- do {
- const item = iterator.next();
- if (item.done) {
- subscriber.complete();
- break;
- }
- subscriber.next(item.value);
- if (subscriber.closed) {
- break;
- }
- } while (true);
- if (typeof iterator.return === 'function') {
- subscriber.add(() => {
- if (iterator.return) {
- iterator.return();
- }
- });
- }
- return subscriber;
- };
- //# sourceMappingURL=subscribeToIterable.js.map
- /***/ }),
- /***/ "pXlZ":
- /*!*********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/windowWhen.js ***!
- \*********************************************************************/
- /*! exports provided: windowWhen */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowWhen", function() { return windowWhen; });
- /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subject */ "XNiG");
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function windowWhen(closingSelector) {
- return function windowWhenOperatorFunction(source) {
- return source.lift(new WindowOperator(closingSelector));
- };
- }
- class WindowOperator {
- constructor(closingSelector) {
- this.closingSelector = closingSelector;
- }
- call(subscriber, source) {
- return source.subscribe(new WindowSubscriber(subscriber, this.closingSelector));
- }
- }
- class WindowSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"] {
- constructor(destination, closingSelector) {
- super(destination);
- this.destination = destination;
- this.closingSelector = closingSelector;
- this.openWindow();
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.openWindow(innerSub);
- }
- notifyError(error, innerSub) {
- this._error(error);
- }
- notifyComplete(innerSub) {
- this.openWindow(innerSub);
- }
- _next(value) {
- this.window.next(value);
- }
- _error(err) {
- this.window.error(err);
- this.destination.error(err);
- this.unsubscribeClosingNotification();
- }
- _complete() {
- this.window.complete();
- this.destination.complete();
- this.unsubscribeClosingNotification();
- }
- unsubscribeClosingNotification() {
- if (this.closingNotification) {
- this.closingNotification.unsubscribe();
- }
- }
- openWindow(innerSub = null) {
- if (innerSub) {
- this.remove(innerSub);
- innerSub.unsubscribe();
- }
- const prevWindow = this.window;
- if (prevWindow) {
- prevWindow.complete();
- }
- const window = this.window = new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]();
- this.destination.next(window);
- let closingNotifier;
- try {
- const { closingSelector } = this;
- closingNotifier = closingSelector();
- }
- catch (e) {
- this.destination.error(e);
- this.window.error(e);
- return;
- }
- this.add(this.closingNotification = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, closingNotifier));
- }
- }
- //# sourceMappingURL=windowWhen.js.map
- /***/ }),
- /***/ "pjAE":
- /*!*************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/UnsubscriptionError.js ***!
- \*************************************************************************/
- /*! exports provided: UnsubscriptionError */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsubscriptionError", function() { return UnsubscriptionError; });
- const UnsubscriptionErrorImpl = (() => {
- function UnsubscriptionErrorImpl(errors) {
- Error.call(this);
- this.message = errors ?
- `${errors.length} errors occurred during unsubscription:
- ${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\n ')}` : '';
- this.name = 'UnsubscriptionError';
- this.errors = errors;
- return this;
- }
- UnsubscriptionErrorImpl.prototype = Object.create(Error.prototype);
- return UnsubscriptionErrorImpl;
- })();
- const UnsubscriptionError = UnsubscriptionErrorImpl;
- //# sourceMappingURL=UnsubscriptionError.js.map
- /***/ }),
- /***/ "pxpQ":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/observeOn.js ***!
- \********************************************************************/
- /*! exports provided: observeOn, ObserveOnOperator, ObserveOnSubscriber, ObserveOnMessage */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "observeOn", function() { return observeOn; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObserveOnOperator", function() { return ObserveOnOperator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObserveOnSubscriber", function() { return ObserveOnSubscriber; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObserveOnMessage", function() { return ObserveOnMessage; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Notification */ "WMd4");
- function observeOn(scheduler, delay = 0) {
- return function observeOnOperatorFunction(source) {
- return source.lift(new ObserveOnOperator(scheduler, delay));
- };
- }
- class ObserveOnOperator {
- constructor(scheduler, delay = 0) {
- this.scheduler = scheduler;
- this.delay = delay;
- }
- call(subscriber, source) {
- return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));
- }
- }
- class ObserveOnSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, scheduler, delay = 0) {
- super(destination);
- this.scheduler = scheduler;
- this.delay = delay;
- }
- static dispatch(arg) {
- const { notification, destination } = arg;
- notification.observe(destination);
- this.unsubscribe();
- }
- scheduleMessage(notification) {
- const destination = this.destination;
- destination.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));
- }
- _next(value) {
- this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_1__["Notification"].createNext(value));
- }
- _error(err) {
- this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_1__["Notification"].createError(err));
- this.unsubscribe();
- }
- _complete() {
- this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_1__["Notification"].createComplete());
- this.unsubscribe();
- }
- }
- class ObserveOnMessage {
- constructor(notification, destination) {
- this.notification = notification;
- this.destination = destination;
- }
- }
- //# sourceMappingURL=observeOn.js.map
- /***/ }),
- /***/ "q7zd":
- /*!**********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/concatMapTo.js ***!
- \**********************************************************************/
- /*! exports provided: concatMapTo */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concatMapTo", function() { return concatMapTo; });
- /* harmony import */ var _concatMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./concatMap */ "bOdf");
- function concatMapTo(innerObservable, resultSelector) {
- return Object(_concatMap__WEBPACK_IMPORTED_MODULE_0__["concatMap"])(() => innerObservable, resultSelector);
- }
- //# sourceMappingURL=concatMapTo.js.map
- /***/ }),
- /***/ "q92s":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/merge.js ***!
- \****************************************************************/
- /*! exports provided: merge */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return merge; });
- /* harmony import */ var _observable_merge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../observable/merge */ "VRyK");
- function merge(...observables) {
- return (source) => source.lift.call(Object(_observable_merge__WEBPACK_IMPORTED_MODULE_0__["merge"])(source, ...observables));
- }
- //# sourceMappingURL=merge.js.map
- /***/ }),
- /***/ "qCKp":
- /*!*********************************************!*\
- !*** ./node_modules/rxjs/_esm2015/index.js ***!
- \*********************************************/
- /*! exports provided: Observable, ConnectableObservable, GroupedObservable, observable, Subject, BehaviorSubject, ReplaySubject, AsyncSubject, asapScheduler, asyncScheduler, queueScheduler, animationFrameScheduler, VirtualTimeScheduler, VirtualAction, Scheduler, Subscription, Subscriber, Notification, NotificationKind, pipe, noop, identity, isObservable, ArgumentOutOfRangeError, EmptyError, ObjectUnsubscribedError, UnsubscriptionError, TimeoutError, bindCallback, bindNodeCallback, combineLatest, concat, defer, empty, forkJoin, from, fromEvent, fromEventPattern, generate, iif, interval, merge, never, of, onErrorResumeNext, pairs, partition, race, range, throwError, timer, using, zip, scheduled, EMPTY, NEVER, config */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony import */ var _internal_Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./internal/Observable */ "HDdC");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Observable", function() { return _internal_Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]; });
- /* harmony import */ var _internal_observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/observable/ConnectableObservable */ "EQ5u");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ConnectableObservable", function() { return _internal_observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_1__["ConnectableObservable"]; });
- /* harmony import */ var _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./internal/operators/groupBy */ "OQgR");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "GroupedObservable", function() { return _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_2__["GroupedObservable"]; });
- /* harmony import */ var _internal_symbol_observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./internal/symbol/observable */ "kJWO");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "observable", function() { return _internal_symbol_observable__WEBPACK_IMPORTED_MODULE_3__["observable"]; });
- /* harmony import */ var _internal_Subject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./internal/Subject */ "XNiG");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Subject", function() { return _internal_Subject__WEBPACK_IMPORTED_MODULE_4__["Subject"]; });
- /* harmony import */ var _internal_BehaviorSubject__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./internal/BehaviorSubject */ "2Vo4");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BehaviorSubject", function() { return _internal_BehaviorSubject__WEBPACK_IMPORTED_MODULE_5__["BehaviorSubject"]; });
- /* harmony import */ var _internal_ReplaySubject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./internal/ReplaySubject */ "jtHE");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ReplaySubject", function() { return _internal_ReplaySubject__WEBPACK_IMPORTED_MODULE_6__["ReplaySubject"]; });
- /* harmony import */ var _internal_AsyncSubject__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./internal/AsyncSubject */ "NHP+");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AsyncSubject", function() { return _internal_AsyncSubject__WEBPACK_IMPORTED_MODULE_7__["AsyncSubject"]; });
- /* harmony import */ var _internal_scheduler_asap__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./internal/scheduler/asap */ "7Hc7");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "asapScheduler", function() { return _internal_scheduler_asap__WEBPACK_IMPORTED_MODULE_8__["asap"]; });
- /* harmony import */ var _internal_scheduler_async__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./internal/scheduler/async */ "D0XW");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "asyncScheduler", function() { return _internal_scheduler_async__WEBPACK_IMPORTED_MODULE_9__["async"]; });
- /* harmony import */ var _internal_scheduler_queue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./internal/scheduler/queue */ "qgXg");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "queueScheduler", function() { return _internal_scheduler_queue__WEBPACK_IMPORTED_MODULE_10__["queue"]; });
- /* harmony import */ var _internal_scheduler_animationFrame__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./internal/scheduler/animationFrame */ "eNwd");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "animationFrameScheduler", function() { return _internal_scheduler_animationFrame__WEBPACK_IMPORTED_MODULE_11__["animationFrame"]; });
- /* harmony import */ var _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./internal/scheduler/VirtualTimeScheduler */ "iKkX");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VirtualTimeScheduler", function() { return _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__["VirtualTimeScheduler"]; });
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VirtualAction", function() { return _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__["VirtualAction"]; });
- /* harmony import */ var _internal_Scheduler__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./internal/Scheduler */ "Y/cZ");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Scheduler", function() { return _internal_Scheduler__WEBPACK_IMPORTED_MODULE_13__["Scheduler"]; });
- /* harmony import */ var _internal_Subscription__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./internal/Subscription */ "quSY");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Subscription", function() { return _internal_Subscription__WEBPACK_IMPORTED_MODULE_14__["Subscription"]; });
- /* harmony import */ var _internal_Subscriber__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./internal/Subscriber */ "7o/Q");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Subscriber", function() { return _internal_Subscriber__WEBPACK_IMPORTED_MODULE_15__["Subscriber"]; });
- /* harmony import */ var _internal_Notification__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./internal/Notification */ "WMd4");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Notification", function() { return _internal_Notification__WEBPACK_IMPORTED_MODULE_16__["Notification"]; });
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NotificationKind", function() { return _internal_Notification__WEBPACK_IMPORTED_MODULE_16__["NotificationKind"]; });
- /* harmony import */ var _internal_util_pipe__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./internal/util/pipe */ "mCNh");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pipe", function() { return _internal_util_pipe__WEBPACK_IMPORTED_MODULE_17__["pipe"]; });
- /* harmony import */ var _internal_util_noop__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./internal/util/noop */ "KqfI");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "noop", function() { return _internal_util_noop__WEBPACK_IMPORTED_MODULE_18__["noop"]; });
- /* harmony import */ var _internal_util_identity__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./internal/util/identity */ "SpAZ");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return _internal_util_identity__WEBPACK_IMPORTED_MODULE_19__["identity"]; });
- /* harmony import */ var _internal_util_isObservable__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./internal/util/isObservable */ "7+OI");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isObservable", function() { return _internal_util_isObservable__WEBPACK_IMPORTED_MODULE_20__["isObservable"]; });
- /* harmony import */ var _internal_util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./internal/util/ArgumentOutOfRangeError */ "4I5i");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ArgumentOutOfRangeError", function() { return _internal_util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_21__["ArgumentOutOfRangeError"]; });
- /* harmony import */ var _internal_util_EmptyError__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./internal/util/EmptyError */ "sVev");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EmptyError", function() { return _internal_util_EmptyError__WEBPACK_IMPORTED_MODULE_22__["EmptyError"]; });
- /* harmony import */ var _internal_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./internal/util/ObjectUnsubscribedError */ "9ppp");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ObjectUnsubscribedError", function() { return _internal_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_23__["ObjectUnsubscribedError"]; });
- /* harmony import */ var _internal_util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./internal/util/UnsubscriptionError */ "pjAE");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "UnsubscriptionError", function() { return _internal_util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_24__["UnsubscriptionError"]; });
- /* harmony import */ var _internal_util_TimeoutError__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./internal/util/TimeoutError */ "Y6u4");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TimeoutError", function() { return _internal_util_TimeoutError__WEBPACK_IMPORTED_MODULE_25__["TimeoutError"]; });
- /* harmony import */ var _internal_observable_bindCallback__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./internal/observable/bindCallback */ "QqCr");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bindCallback", function() { return _internal_observable_bindCallback__WEBPACK_IMPORTED_MODULE_26__["bindCallback"]; });
- /* harmony import */ var _internal_observable_bindNodeCallback__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./internal/observable/bindNodeCallback */ "4O5X");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bindNodeCallback", function() { return _internal_observable_bindNodeCallback__WEBPACK_IMPORTED_MODULE_27__["bindNodeCallback"]; });
- /* harmony import */ var _internal_observable_combineLatest__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./internal/observable/combineLatest */ "itXk");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return _internal_observable_combineLatest__WEBPACK_IMPORTED_MODULE_28__["combineLatest"]; });
- /* harmony import */ var _internal_observable_concat__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./internal/observable/concat */ "GyhO");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return _internal_observable_concat__WEBPACK_IMPORTED_MODULE_29__["concat"]; });
- /* harmony import */ var _internal_observable_defer__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./internal/observable/defer */ "NXyV");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "defer", function() { return _internal_observable_defer__WEBPACK_IMPORTED_MODULE_30__["defer"]; });
- /* harmony import */ var _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./internal/observable/empty */ "EY2u");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "empty", function() { return _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__["empty"]; });
- /* harmony import */ var _internal_observable_forkJoin__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./internal/observable/forkJoin */ "cp0P");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forkJoin", function() { return _internal_observable_forkJoin__WEBPACK_IMPORTED_MODULE_32__["forkJoin"]; });
- /* harmony import */ var _internal_observable_from__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./internal/observable/from */ "Cfvw");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "from", function() { return _internal_observable_from__WEBPACK_IMPORTED_MODULE_33__["from"]; });
- /* harmony import */ var _internal_observable_fromEvent__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./internal/observable/fromEvent */ "xgIS");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fromEvent", function() { return _internal_observable_fromEvent__WEBPACK_IMPORTED_MODULE_34__["fromEvent"]; });
- /* harmony import */ var _internal_observable_fromEventPattern__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./internal/observable/fromEventPattern */ "04ZW");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fromEventPattern", function() { return _internal_observable_fromEventPattern__WEBPACK_IMPORTED_MODULE_35__["fromEventPattern"]; });
- /* harmony import */ var _internal_observable_generate__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./internal/observable/generate */ "WPMC");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "generate", function() { return _internal_observable_generate__WEBPACK_IMPORTED_MODULE_36__["generate"]; });
- /* harmony import */ var _internal_observable_iif__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./internal/observable/iif */ "r0o6");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "iif", function() { return _internal_observable_iif__WEBPACK_IMPORTED_MODULE_37__["iif"]; });
- /* harmony import */ var _internal_observable_interval__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./internal/observable/interval */ "l5mm");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interval", function() { return _internal_observable_interval__WEBPACK_IMPORTED_MODULE_38__["interval"]; });
- /* harmony import */ var _internal_observable_merge__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./internal/observable/merge */ "VRyK");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return _internal_observable_merge__WEBPACK_IMPORTED_MODULE_39__["merge"]; });
- /* harmony import */ var _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./internal/observable/never */ "5yfJ");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "never", function() { return _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__["never"]; });
- /* harmony import */ var _internal_observable_of__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./internal/observable/of */ "LRne");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "of", function() { return _internal_observable_of__WEBPACK_IMPORTED_MODULE_41__["of"]; });
- /* harmony import */ var _internal_observable_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./internal/observable/onErrorResumeNext */ "Hkhx");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return _internal_observable_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_42__["onErrorResumeNext"]; });
- /* harmony import */ var _internal_observable_pairs__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./internal/observable/pairs */ "hKy8");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pairs", function() { return _internal_observable_pairs__WEBPACK_IMPORTED_MODULE_43__["pairs"]; });
- /* harmony import */ var _internal_observable_partition__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./internal/observable/partition */ "2QGa");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return _internal_observable_partition__WEBPACK_IMPORTED_MODULE_44__["partition"]; });
- /* harmony import */ var _internal_observable_race__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./internal/observable/race */ "Nv8m");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "race", function() { return _internal_observable_race__WEBPACK_IMPORTED_MODULE_45__["race"]; });
- /* harmony import */ var _internal_observable_range__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./internal/observable/range */ "NNCq");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "range", function() { return _internal_observable_range__WEBPACK_IMPORTED_MODULE_46__["range"]; });
- /* harmony import */ var _internal_observable_throwError__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./internal/observable/throwError */ "z6cu");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throwError", function() { return _internal_observable_throwError__WEBPACK_IMPORTED_MODULE_47__["throwError"]; });
- /* harmony import */ var _internal_observable_timer__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./internal/observable/timer */ "PqYM");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timer", function() { return _internal_observable_timer__WEBPACK_IMPORTED_MODULE_48__["timer"]; });
- /* harmony import */ var _internal_observable_using__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./internal/observable/using */ "Qn8I");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "using", function() { return _internal_observable_using__WEBPACK_IMPORTED_MODULE_49__["using"]; });
- /* harmony import */ var _internal_observable_zip__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./internal/observable/zip */ "1uah");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return _internal_observable_zip__WEBPACK_IMPORTED_MODULE_50__["zip"]; });
- /* harmony import */ var _internal_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./internal/scheduled/scheduled */ "7HRe");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scheduled", function() { return _internal_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_51__["scheduled"]; });
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EMPTY", function() { return _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__["EMPTY"]; });
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NEVER", function() { return _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__["NEVER"]; });
- /* harmony import */ var _internal_config__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./internal/config */ "2fFW");
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "config", function() { return _internal_config__WEBPACK_IMPORTED_MODULE_52__["config"]; });
- //# sourceMappingURL=index.js.map
- /***/ }),
- /***/ "qZ0a":
- /*!**********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/publishLast.js ***!
- \**********************************************************************/
- /*! exports provided: publishLast */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishLast", function() { return publishLast; });
- /* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../AsyncSubject */ "NHP+");
- /* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./multicast */ "oB13");
- function publishLast() {
- return (source) => Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(new _AsyncSubject__WEBPACK_IMPORTED_MODULE_0__["AsyncSubject"]())(source);
- }
- //# sourceMappingURL=publishLast.js.map
- /***/ }),
- /***/ "qgXg":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduler/queue.js ***!
- \****************************************************************/
- /*! exports provided: queue */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "queue", function() { return queue; });
- /* harmony import */ var _QueueAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./QueueAction */ "YuR2");
- /* harmony import */ var _QueueScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./QueueScheduler */ "Hh5Z");
- const queue = new _QueueScheduler__WEBPACK_IMPORTED_MODULE_1__["QueueScheduler"](_QueueAction__WEBPACK_IMPORTED_MODULE_0__["QueueAction"]);
- //# sourceMappingURL=queue.js.map
- /***/ }),
- /***/ "quSY":
- /*!*************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/Subscription.js ***!
- \*************************************************************/
- /*! exports provided: Subscription */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Subscription", function() { return Subscription; });
- /* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util/isArray */ "DH7j");
- /* harmony import */ var _util_isObject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/isObject */ "XoHu");
- /* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util/isFunction */ "n6bG");
- /* harmony import */ var _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util/UnsubscriptionError */ "pjAE");
- class Subscription {
- constructor(unsubscribe) {
- this.closed = false;
- this._parentOrParents = null;
- this._subscriptions = null;
- if (unsubscribe) {
- this._unsubscribe = unsubscribe;
- }
- }
- unsubscribe() {
- let errors;
- if (this.closed) {
- return;
- }
- let { _parentOrParents, _unsubscribe, _subscriptions } = this;
- this.closed = true;
- this._parentOrParents = null;
- this._subscriptions = null;
- if (_parentOrParents instanceof Subscription) {
- _parentOrParents.remove(this);
- }
- else if (_parentOrParents !== null) {
- for (let index = 0; index < _parentOrParents.length; ++index) {
- const parent = _parentOrParents[index];
- parent.remove(this);
- }
- }
- if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(_unsubscribe)) {
- try {
- _unsubscribe.call(this);
- }
- catch (e) {
- errors = e instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"] ? flattenUnsubscriptionErrors(e.errors) : [e];
- }
- }
- if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(_subscriptions)) {
- let index = -1;
- let len = _subscriptions.length;
- while (++index < len) {
- const sub = _subscriptions[index];
- if (Object(_util_isObject__WEBPACK_IMPORTED_MODULE_1__["isObject"])(sub)) {
- try {
- sub.unsubscribe();
- }
- catch (e) {
- errors = errors || [];
- if (e instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"]) {
- errors = errors.concat(flattenUnsubscriptionErrors(e.errors));
- }
- else {
- errors.push(e);
- }
- }
- }
- }
- }
- if (errors) {
- throw new _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"](errors);
- }
- }
- add(teardown) {
- let subscription = teardown;
- if (!teardown) {
- return Subscription.EMPTY;
- }
- switch (typeof teardown) {
- case 'function':
- subscription = new Subscription(teardown);
- case 'object':
- if (subscription === this || subscription.closed || typeof subscription.unsubscribe !== 'function') {
- return subscription;
- }
- else if (this.closed) {
- subscription.unsubscribe();
- return subscription;
- }
- else if (!(subscription instanceof Subscription)) {
- const tmp = subscription;
- subscription = new Subscription();
- subscription._subscriptions = [tmp];
- }
- break;
- default: {
- throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');
- }
- }
- let { _parentOrParents } = subscription;
- if (_parentOrParents === null) {
- subscription._parentOrParents = this;
- }
- else if (_parentOrParents instanceof Subscription) {
- if (_parentOrParents === this) {
- return subscription;
- }
- subscription._parentOrParents = [_parentOrParents, this];
- }
- else if (_parentOrParents.indexOf(this) === -1) {
- _parentOrParents.push(this);
- }
- else {
- return subscription;
- }
- const subscriptions = this._subscriptions;
- if (subscriptions === null) {
- this._subscriptions = [subscription];
- }
- else {
- subscriptions.push(subscription);
- }
- return subscription;
- }
- remove(subscription) {
- const subscriptions = this._subscriptions;
- if (subscriptions) {
- const subscriptionIndex = subscriptions.indexOf(subscription);
- if (subscriptionIndex !== -1) {
- subscriptions.splice(subscriptionIndex, 1);
- }
- }
- }
- }
- Subscription.EMPTY = (function (empty) {
- empty.closed = true;
- return empty;
- }(new Subscription()));
- function flattenUnsubscriptionErrors(errors) {
- return errors.reduce((errs, err) => errs.concat((err instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"]) ? err.errors : err), []);
- }
- //# sourceMappingURL=Subscription.js.map
- /***/ }),
- /***/ "r0WS":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/timestamp.js ***!
- \********************************************************************/
- /*! exports provided: timestamp, Timestamp */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timestamp", function() { return timestamp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Timestamp", function() { return Timestamp; });
- /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scheduler/async */ "D0XW");
- /* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./map */ "lJxs");
- function timestamp(scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"]) {
- return Object(_map__WEBPACK_IMPORTED_MODULE_1__["map"])((value) => new Timestamp(value, scheduler.now()));
- }
- class Timestamp {
- constructor(value, timestamp) {
- this.value = value;
- this.timestamp = timestamp;
- }
- }
- //# sourceMappingURL=timestamp.js.map
- /***/ }),
- /***/ "r0o6":
- /*!***************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/iif.js ***!
- \***************************************************************/
- /*! exports provided: iif */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "iif", function() { return iif; });
- /* harmony import */ var _defer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defer */ "NXyV");
- /* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./empty */ "EY2u");
- function iif(condition, trueResult = _empty__WEBPACK_IMPORTED_MODULE_1__["EMPTY"], falseResult = _empty__WEBPACK_IMPORTED_MODULE_1__["EMPTY"]) {
- return Object(_defer__WEBPACK_IMPORTED_MODULE_0__["defer"])(() => condition() ? trueResult : falseResult);
- }
- //# sourceMappingURL=iif.js.map
- /***/ }),
- /***/ "sTY7":
- /*!***********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/windowToggle.js ***!
- \***********************************************************************/
- /*! exports provided: windowToggle */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowToggle", function() { return windowToggle; });
- /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subject */ "XNiG");
- /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Subscription */ "quSY");
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function windowToggle(openings, closingSelector) {
- return (source) => source.lift(new WindowToggleOperator(openings, closingSelector));
- }
- class WindowToggleOperator {
- constructor(openings, closingSelector) {
- this.openings = openings;
- this.closingSelector = closingSelector;
- }
- call(subscriber, source) {
- return source.subscribe(new WindowToggleSubscriber(subscriber, this.openings, this.closingSelector));
- }
- }
- class WindowToggleSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"] {
- constructor(destination, openings, closingSelector) {
- super(destination);
- this.openings = openings;
- this.closingSelector = closingSelector;
- this.contexts = [];
- this.add(this.openSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, openings, openings));
- }
- _next(value) {
- const { contexts } = this;
- if (contexts) {
- const len = contexts.length;
- for (let i = 0; i < len; i++) {
- contexts[i].window.next(value);
- }
- }
- }
- _error(err) {
- const { contexts } = this;
- this.contexts = null;
- if (contexts) {
- const len = contexts.length;
- let index = -1;
- while (++index < len) {
- const context = contexts[index];
- context.window.error(err);
- context.subscription.unsubscribe();
- }
- }
- super._error(err);
- }
- _complete() {
- const { contexts } = this;
- this.contexts = null;
- if (contexts) {
- const len = contexts.length;
- let index = -1;
- while (++index < len) {
- const context = contexts[index];
- context.window.complete();
- context.subscription.unsubscribe();
- }
- }
- super._complete();
- }
- _unsubscribe() {
- const { contexts } = this;
- this.contexts = null;
- if (contexts) {
- const len = contexts.length;
- let index = -1;
- while (++index < len) {
- const context = contexts[index];
- context.window.unsubscribe();
- context.subscription.unsubscribe();
- }
- }
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- if (outerValue === this.openings) {
- let closingNotifier;
- try {
- const { closingSelector } = this;
- closingNotifier = closingSelector(innerValue);
- }
- catch (e) {
- return this.error(e);
- }
- const window = new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]();
- const subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
- const context = { window, subscription };
- this.contexts.push(context);
- const innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, closingNotifier, context);
- if (innerSubscription.closed) {
- this.closeWindow(this.contexts.length - 1);
- }
- else {
- innerSubscription.context = context;
- subscription.add(innerSubscription);
- }
- this.destination.next(window);
- }
- else {
- this.closeWindow(this.contexts.indexOf(outerValue));
- }
- }
- notifyError(err) {
- this.error(err);
- }
- notifyComplete(inner) {
- if (inner !== this.openSubscription) {
- this.closeWindow(this.contexts.indexOf(inner.context));
- }
- }
- closeWindow(index) {
- if (index === -1) {
- return;
- }
- const { contexts } = this;
- const context = contexts[index];
- const { window, subscription } = context;
- contexts.splice(index, 1);
- window.complete();
- subscription.unsubscribe();
- }
- }
- //# sourceMappingURL=windowToggle.js.map
- /***/ }),
- /***/ "sVev":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/EmptyError.js ***!
- \****************************************************************/
- /*! exports provided: EmptyError */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EmptyError", function() { return EmptyError; });
- const EmptyErrorImpl = (() => {
- function EmptyErrorImpl() {
- Error.call(this);
- this.message = 'no elements in sequence';
- this.name = 'EmptyError';
- return this;
- }
- EmptyErrorImpl.prototype = Object.create(Error.prototype);
- return EmptyErrorImpl;
- })();
- const EmptyError = EmptyErrorImpl;
- //# sourceMappingURL=EmptyError.js.map
- /***/ }),
- /***/ "sYmb":
- /*!**************************************************************************************!*\
- !*** ./node_modules/@ngx-translate/core/__ivy_ngcc__/fesm2015/ngx-translate-core.js ***!
- \**************************************************************************************/
- /*! exports provided: DEFAULT_LANGUAGE, FakeMissingTranslationHandler, MissingTranslationHandler, TranslateCompiler, TranslateDefaultParser, TranslateDirective, TranslateFakeCompiler, TranslateFakeLoader, TranslateLoader, TranslateModule, TranslateParser, TranslatePipe, TranslateService, TranslateStore, USE_DEFAULT_LANG, USE_EXTEND, USE_STORE */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEFAULT_LANGUAGE", function() { return DEFAULT_LANGUAGE; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FakeMissingTranslationHandler", function() { return FakeMissingTranslationHandler; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MissingTranslationHandler", function() { return MissingTranslationHandler; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TranslateCompiler", function() { return TranslateCompiler; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TranslateDefaultParser", function() { return TranslateDefaultParser; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TranslateDirective", function() { return TranslateDirective; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TranslateFakeCompiler", function() { return TranslateFakeCompiler; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TranslateFakeLoader", function() { return TranslateFakeLoader; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TranslateLoader", function() { return TranslateLoader; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TranslateModule", function() { return TranslateModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TranslateParser", function() { return TranslateParser; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TranslatePipe", function() { return TranslatePipe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TranslateService", function() { return TranslateService; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TranslateStore", function() { return TranslateStore; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "USE_DEFAULT_LANG", function() { return USE_DEFAULT_LANG; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "USE_EXTEND", function() { return USE_EXTEND; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "USE_STORE", function() { return USE_STORE; });
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "qCKp");
- /* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "kU1M");
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @abstract
- */
- class TranslateLoader {
- }
- if (false) {}
- /**
- * This loader is just a placeholder that does nothing, in case you don't need a loader at all
- */
- class TranslateFakeLoader extends TranslateLoader {
- /**
- * @param {?} lang
- * @return {?}
- */
- getTranslation(lang) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])({});
- }
- }
- TranslateFakeLoader.ɵfac = function TranslateFakeLoader_Factory(t) { return ɵTranslateFakeLoader_BaseFactory(t || TranslateFakeLoader); };
- TranslateFakeLoader.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: TranslateFakeLoader, factory: TranslateFakeLoader.ɵfac });
- const ɵTranslateFakeLoader_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](TranslateFakeLoader);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](TranslateFakeLoader, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @record
- */
- function MissingTranslationHandlerParams() { }
- if (false) {}
- /**
- * @abstract
- */
- class MissingTranslationHandler {
- }
- if (false) {}
- /**
- * This handler is just a placeholder that does nothing, in case you don't need a missing translation handler at all
- */
- class FakeMissingTranslationHandler {
- /**
- * @param {?} params
- * @return {?}
- */
- handle(params) {
- return params.key;
- }
- }
- FakeMissingTranslationHandler.ɵfac = function FakeMissingTranslationHandler_Factory(t) { return new (t || FakeMissingTranslationHandler)(); };
- FakeMissingTranslationHandler.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: FakeMissingTranslationHandler, factory: FakeMissingTranslationHandler.ɵfac });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FakeMissingTranslationHandler, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /* tslint:disable */
- /**
- * Determines if two objects or two values are equivalent.
- *
- * Two objects or values are considered equivalent if at least one of the following is true:
- *
- * * Both objects or values pass `===` comparison.
- * * Both objects or values are of the same type and all of their properties are equal by
- * comparing them with `equals`.
- *
- * @param {?} o1 Object or value to compare.
- * @param {?} o2 Object or value to compare.
- * @return {?} true if arguments are equal.
- */
- function equals(o1, o2) {
- if (o1 === o2)
- return true;
- if (o1 === null || o2 === null)
- return false;
- if (o1 !== o1 && o2 !== o2)
- return true; // NaN === NaN
- // NaN === NaN
- /** @type {?} */
- let t1 = typeof o1;
- /** @type {?} */
- let t2 = typeof o2;
- /** @type {?} */
- let length;
- /** @type {?} */
- let key;
- /** @type {?} */
- let keySet;
- if (t1 == t2 && t1 == 'object') {
- if (Array.isArray(o1)) {
- if (!Array.isArray(o2))
- return false;
- if ((length = o1.length) == o2.length) {
- for (key = 0; key < length; key++) {
- if (!equals(o1[key], o2[key]))
- return false;
- }
- return true;
- }
- }
- else {
- if (Array.isArray(o2)) {
- return false;
- }
- keySet = Object.create(null);
- for (key in o1) {
- if (!equals(o1[key], o2[key])) {
- return false;
- }
- keySet[key] = true;
- }
- for (key in o2) {
- if (!(key in keySet) && typeof o2[key] !== 'undefined') {
- return false;
- }
- }
- return true;
- }
- }
- return false;
- }
- /* tslint:enable */
- /**
- * @param {?} value
- * @return {?}
- */
- function isDefined(value) {
- return typeof value !== 'undefined' && value !== null;
- }
- /**
- * @param {?} item
- * @return {?}
- */
- function isObject(item) {
- return (item && typeof item === 'object' && !Array.isArray(item));
- }
- /**
- * @param {?} target
- * @param {?} source
- * @return {?}
- */
- function mergeDeep(target, source) {
- /** @type {?} */
- let output = Object.assign({}, target);
- if (isObject(target) && isObject(source)) {
- Object.keys(source).forEach((/**
- * @param {?} key
- * @return {?}
- */
- (key) => {
- if (isObject(source[key])) {
- if (!(key in target)) {
- Object.assign(output, { [key]: source[key] });
- }
- else {
- output[key] = mergeDeep(target[key], source[key]);
- }
- }
- else {
- Object.assign(output, { [key]: source[key] });
- }
- }));
- }
- return output;
- }
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @abstract
- */
- class TranslateParser {
- }
- if (false) {}
- class TranslateDefaultParser extends TranslateParser {
- constructor() {
- super(...arguments);
- this.templateMatcher = /{{\s?([^{}\s]*)\s?}}/g;
- }
- /**
- * @param {?} expr
- * @param {?=} params
- * @return {?}
- */
- interpolate(expr, params) {
- /** @type {?} */
- let result;
- if (typeof expr === 'string') {
- result = this.interpolateString(expr, params);
- }
- else if (typeof expr === 'function') {
- result = this.interpolateFunction(expr, params);
- }
- else {
- // this should not happen, but an unrelated TranslateService test depends on it
- result = (/** @type {?} */ (expr));
- }
- return result;
- }
- /**
- * @param {?} target
- * @param {?} key
- * @return {?}
- */
- getValue(target, key) {
- /** @type {?} */
- let keys = typeof key === 'string' ? key.split('.') : [key];
- key = '';
- do {
- key += keys.shift();
- if (isDefined(target) && isDefined(target[key]) && (typeof target[key] === 'object' || !keys.length)) {
- target = target[key];
- key = '';
- }
- else if (!keys.length) {
- target = undefined;
- }
- else {
- key += '.';
- }
- } while (keys.length);
- return target;
- }
- /**
- * @private
- * @param {?} fn
- * @param {?=} params
- * @return {?}
- */
- interpolateFunction(fn, params) {
- return fn(params);
- }
- /**
- * @private
- * @param {?} expr
- * @param {?=} params
- * @return {?}
- */
- interpolateString(expr, params) {
- if (!params) {
- return expr;
- }
- return expr.replace(this.templateMatcher, (/**
- * @param {?} substring
- * @param {?} b
- * @return {?}
- */
- (substring, b) => {
- /** @type {?} */
- let r = this.getValue(params, b);
- return isDefined(r) ? r : substring;
- }));
- }
- }
- TranslateDefaultParser.ɵfac = function TranslateDefaultParser_Factory(t) { return ɵTranslateDefaultParser_BaseFactory(t || TranslateDefaultParser); };
- TranslateDefaultParser.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: TranslateDefaultParser, factory: TranslateDefaultParser.ɵfac });
- const ɵTranslateDefaultParser_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](TranslateDefaultParser);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](TranslateDefaultParser, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @abstract
- */
- class TranslateCompiler {
- }
- if (false) {}
- /**
- * This compiler is just a placeholder that does nothing, in case you don't need a compiler at all
- */
- class TranslateFakeCompiler extends TranslateCompiler {
- /**
- * @param {?} value
- * @param {?} lang
- * @return {?}
- */
- compile(value, lang) {
- return value;
- }
- /**
- * @param {?} translations
- * @param {?} lang
- * @return {?}
- */
- compileTranslations(translations, lang) {
- return translations;
- }
- }
- TranslateFakeCompiler.ɵfac = function TranslateFakeCompiler_Factory(t) { return ɵTranslateFakeCompiler_BaseFactory(t || TranslateFakeCompiler); };
- TranslateFakeCompiler.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: TranslateFakeCompiler, factory: TranslateFakeCompiler.ɵfac });
- const ɵTranslateFakeCompiler_BaseFactory = /*@__PURE__*/ _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](TranslateFakeCompiler);
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](TranslateFakeCompiler, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class TranslateStore {
- constructor() {
- /**
- * The lang currently used
- */
- this.currentLang = this.defaultLang;
- /**
- * a list of translations per lang
- */
- this.translations = {};
- /**
- * an array of langs
- */
- this.langs = [];
- /**
- * An EventEmitter to listen to translation change events
- * onTranslationChange.subscribe((params: TranslationChangeEvent) => {
- * // do something
- * });
- */
- this.onTranslationChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An EventEmitter to listen to lang change events
- * onLangChange.subscribe((params: LangChangeEvent) => {
- * // do something
- * });
- */
- this.onLangChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- /**
- * An EventEmitter to listen to default lang change events
- * onDefaultLangChange.subscribe((params: DefaultLangChangeEvent) => {
- * // do something
- * });
- */
- this.onDefaultLangChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- }
- }
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /** @type {?} */
- const USE_STORE = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('USE_STORE');
- /** @type {?} */
- const USE_DEFAULT_LANG = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('USE_DEFAULT_LANG');
- /** @type {?} */
- const DEFAULT_LANGUAGE = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('DEFAULT_LANGUAGE');
- /** @type {?} */
- const USE_EXTEND = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('USE_EXTEND');
- /**
- * @record
- */
- function TranslationChangeEvent() { }
- if (false) {}
- /**
- * @record
- */
- function LangChangeEvent() { }
- if (false) {}
- /**
- * @record
- */
- function DefaultLangChangeEvent() { }
- if (false) {}
- class TranslateService {
- /**
- *
- * @param {?} store an instance of the store (that is supposed to be unique)
- * @param {?} currentLoader An instance of the loader currently used
- * @param {?} compiler An instance of the compiler currently used
- * @param {?} parser An instance of the parser currently used
- * @param {?} missingTranslationHandler A handler for missing translations.
- * @param {?=} useDefaultLang whether we should use default language translation when current language translation is missing.
- * @param {?=} isolate whether this service should use the store or not
- * @param {?=} extend To make a child module extend (and use) translations from parent modules.
- * @param {?=} defaultLanguage Set the default language using configuration
- */
- constructor(store, currentLoader, compiler, parser, missingTranslationHandler, useDefaultLang = true, isolate = false, extend = false, defaultLanguage) {
- this.store = store;
- this.currentLoader = currentLoader;
- this.compiler = compiler;
- this.parser = parser;
- this.missingTranslationHandler = missingTranslationHandler;
- this.useDefaultLang = useDefaultLang;
- this.isolate = isolate;
- this.extend = extend;
- this.pending = false;
- this._onTranslationChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this._onLangChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this._onDefaultLangChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
- this._langs = [];
- this._translations = {};
- this._translationRequests = {};
- /** set the default language from configuration */
- if (defaultLanguage) {
- this.setDefaultLang(defaultLanguage);
- }
- }
- /**
- * An EventEmitter to listen to translation change events
- * onTranslationChange.subscribe((params: TranslationChangeEvent) => {
- * // do something
- * });
- * @return {?}
- */
- get onTranslationChange() {
- return this.isolate ? this._onTranslationChange : this.store.onTranslationChange;
- }
- /**
- * An EventEmitter to listen to lang change events
- * onLangChange.subscribe((params: LangChangeEvent) => {
- * // do something
- * });
- * @return {?}
- */
- get onLangChange() {
- return this.isolate ? this._onLangChange : this.store.onLangChange;
- }
- /**
- * An EventEmitter to listen to default lang change events
- * onDefaultLangChange.subscribe((params: DefaultLangChangeEvent) => {
- * // do something
- * });
- * @return {?}
- */
- get onDefaultLangChange() {
- return this.isolate ? this._onDefaultLangChange : this.store.onDefaultLangChange;
- }
- /**
- * The default lang to fallback when translations are missing on the current lang
- * @return {?}
- */
- get defaultLang() {
- return this.isolate ? this._defaultLang : this.store.defaultLang;
- }
- /**
- * @param {?} defaultLang
- * @return {?}
- */
- set defaultLang(defaultLang) {
- if (this.isolate) {
- this._defaultLang = defaultLang;
- }
- else {
- this.store.defaultLang = defaultLang;
- }
- }
- /**
- * The lang currently used
- * @return {?}
- */
- get currentLang() {
- return this.isolate ? this._currentLang : this.store.currentLang;
- }
- /**
- * @param {?} currentLang
- * @return {?}
- */
- set currentLang(currentLang) {
- if (this.isolate) {
- this._currentLang = currentLang;
- }
- else {
- this.store.currentLang = currentLang;
- }
- }
- /**
- * an array of langs
- * @return {?}
- */
- get langs() {
- return this.isolate ? this._langs : this.store.langs;
- }
- /**
- * @param {?} langs
- * @return {?}
- */
- set langs(langs) {
- if (this.isolate) {
- this._langs = langs;
- }
- else {
- this.store.langs = langs;
- }
- }
- /**
- * a list of translations per lang
- * @return {?}
- */
- get translations() {
- return this.isolate ? this._translations : this.store.translations;
- }
- /**
- * @param {?} translations
- * @return {?}
- */
- set translations(translations) {
- if (this.isolate) {
- this._translations = translations;
- }
- else {
- this.store.translations = translations;
- }
- }
- /**
- * Sets the default language to use as a fallback
- * @param {?} lang
- * @return {?}
- */
- setDefaultLang(lang) {
- if (lang === this.defaultLang) {
- return;
- }
- /** @type {?} */
- let pending = this.retrieveTranslations(lang);
- if (typeof pending !== "undefined") {
- // on init set the defaultLang immediately
- if (this.defaultLang == null) {
- this.defaultLang = lang;
- }
- pending.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["take"])(1))
- .subscribe((/**
- * @param {?} res
- * @return {?}
- */
- (res) => {
- this.changeDefaultLang(lang);
- }));
- }
- else { // we already have this language
- this.changeDefaultLang(lang);
- }
- }
- /**
- * Gets the default language used
- * @return {?}
- */
- getDefaultLang() {
- return this.defaultLang;
- }
- /**
- * Changes the lang currently used
- * @param {?} lang
- * @return {?}
- */
- use(lang) {
- // don't change the language if the language given is already selected
- if (lang === this.currentLang) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])(this.translations[lang]);
- }
- /** @type {?} */
- let pending = this.retrieveTranslations(lang);
- if (typeof pending !== "undefined") {
- // on init set the currentLang immediately
- if (!this.currentLang) {
- this.currentLang = lang;
- }
- pending.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["take"])(1))
- .subscribe((/**
- * @param {?} res
- * @return {?}
- */
- (res) => {
- this.changeLang(lang);
- }));
- return pending;
- }
- else { // we have this language, return an Observable
- this.changeLang(lang);
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])(this.translations[lang]);
- }
- }
- /**
- * Retrieves the given translations
- * @private
- * @param {?} lang
- * @return {?}
- */
- retrieveTranslations(lang) {
- /** @type {?} */
- let pending;
- // if this language is unavailable or extend is true, ask for it
- if (typeof this.translations[lang] === "undefined" || this.extend) {
- this._translationRequests[lang] = this._translationRequests[lang] || this.getTranslation(lang);
- pending = this._translationRequests[lang];
- }
- return pending;
- }
- /**
- * Gets an object of translations for a given language with the current loader
- * and passes it through the compiler
- * @param {?} lang
- * @return {?}
- */
- getTranslation(lang) {
- this.pending = true;
- /** @type {?} */
- const loadingTranslations = this.currentLoader.getTranslation(lang).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["take"])(1));
- this.loadingTranslations = loadingTranslations.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])((/**
- * @param {?} res
- * @return {?}
- */
- (res) => this.compiler.compileTranslations(res, lang))), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["take"])(1));
- this.loadingTranslations
- .subscribe({
- next: (/**
- * @param {?} res
- * @return {?}
- */
- (res) => {
- this.translations[lang] = this.extend && this.translations[lang] ? Object.assign(Object.assign({}, res), this.translations[lang]) : res;
- this.updateLangs();
- this.pending = false;
- }),
- error: (/**
- * @param {?} err
- * @return {?}
- */
- (err) => {
- this.pending = false;
- })
- });
- return loadingTranslations;
- }
- /**
- * Manually sets an object of translations for a given language
- * after passing it through the compiler
- * @param {?} lang
- * @param {?} translations
- * @param {?=} shouldMerge
- * @return {?}
- */
- setTranslation(lang, translations, shouldMerge = false) {
- translations = this.compiler.compileTranslations(translations, lang);
- if ((shouldMerge || this.extend) && this.translations[lang]) {
- this.translations[lang] = mergeDeep(this.translations[lang], translations);
- }
- else {
- this.translations[lang] = translations;
- }
- this.updateLangs();
- this.onTranslationChange.emit({ lang: lang, translations: this.translations[lang] });
- }
- /**
- * Returns an array of currently available langs
- * @return {?}
- */
- getLangs() {
- return this.langs;
- }
- /**
- * Add available langs
- * @param {?} langs
- * @return {?}
- */
- addLangs(langs) {
- langs.forEach((/**
- * @param {?} lang
- * @return {?}
- */
- (lang) => {
- if (this.langs.indexOf(lang) === -1) {
- this.langs.push(lang);
- }
- }));
- }
- /**
- * Update the list of available langs
- * @private
- * @return {?}
- */
- updateLangs() {
- this.addLangs(Object.keys(this.translations));
- }
- /**
- * Returns the parsed result of the translations
- * @param {?} translations
- * @param {?} key
- * @param {?=} interpolateParams
- * @return {?}
- */
- getParsedResult(translations, key, interpolateParams) {
- /** @type {?} */
- let res;
- if (key instanceof Array) {
- /** @type {?} */
- let result = {};
- /** @type {?} */
- let observables = false;
- for (let k of key) {
- result[k] = this.getParsedResult(translations, k, interpolateParams);
- if (Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["isObservable"])(result[k])) {
- observables = true;
- }
- }
- if (observables) {
- /** @type {?} */
- const sources = key.map((/**
- * @param {?} k
- * @return {?}
- */
- k => Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["isObservable"])(result[k]) ? result[k] : Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])((/** @type {?} */ (result[k])))));
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["forkJoin"])(sources).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])((/**
- * @param {?} arr
- * @return {?}
- */
- (arr) => {
- /** @type {?} */
- let obj = {};
- arr.forEach((/**
- * @param {?} value
- * @param {?} index
- * @return {?}
- */
- (value, index) => {
- obj[key[index]] = value;
- }));
- return obj;
- })));
- }
- return result;
- }
- if (translations) {
- res = this.parser.interpolate(this.parser.getValue(translations, key), interpolateParams);
- }
- if (typeof res === "undefined" && this.defaultLang != null && this.defaultLang !== this.currentLang && this.useDefaultLang) {
- res = this.parser.interpolate(this.parser.getValue(this.translations[this.defaultLang], key), interpolateParams);
- }
- if (typeof res === "undefined") {
- /** @type {?} */
- let params = { key, translateService: this };
- if (typeof interpolateParams !== 'undefined') {
- params.interpolateParams = interpolateParams;
- }
- res = this.missingTranslationHandler.handle(params);
- }
- return typeof res !== "undefined" ? res : key;
- }
- /**
- * Gets the translated value of a key (or an array of keys)
- * @param {?} key
- * @param {?=} interpolateParams
- * @return {?} the translated key, or an object of translated keys
- */
- get(key, interpolateParams) {
- if (!isDefined(key) || !key.length) {
- throw new Error(`Parameter "key" required`);
- }
- // check if we are loading a new translation to use
- if (this.pending) {
- return this.loadingTranslations.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["concatMap"])((/**
- * @param {?} res
- * @return {?}
- */
- (res) => {
- res = this.getParsedResult(res, key, interpolateParams);
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["isObservable"])(res) ? res : Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])(res);
- })));
- }
- else {
- /** @type {?} */
- let res = this.getParsedResult(this.translations[this.currentLang], key, interpolateParams);
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["isObservable"])(res) ? res : Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])(res);
- }
- }
- /**
- * Returns a stream of translated values of a key (or an array of keys) which updates
- * whenever the translation changes.
- * @param {?} key
- * @param {?=} interpolateParams
- * @return {?} A stream of the translated key, or an object of translated keys
- */
- getStreamOnTranslationChange(key, interpolateParams) {
- if (!isDefined(key) || !key.length) {
- throw new Error(`Parameter "key" required`);
- }
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["concat"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["defer"])((/**
- * @return {?}
- */
- () => this.get(key, interpolateParams))), this.onTranslationChange.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])((/**
- * @param {?} event
- * @return {?}
- */
- (event) => {
- /** @type {?} */
- const res = this.getParsedResult(event.translations, key, interpolateParams);
- if (typeof res.subscribe === 'function') {
- return res;
- }
- else {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])(res);
- }
- }))));
- }
- /**
- * Returns a stream of translated values of a key (or an array of keys) which updates
- * whenever the language changes.
- * @param {?} key
- * @param {?=} interpolateParams
- * @return {?} A stream of the translated key, or an object of translated keys
- */
- stream(key, interpolateParams) {
- if (!isDefined(key) || !key.length) {
- throw new Error(`Parameter "key" required`);
- }
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["concat"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["defer"])((/**
- * @return {?}
- */
- () => this.get(key, interpolateParams))), this.onLangChange.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])((/**
- * @param {?} event
- * @return {?}
- */
- (event) => {
- /** @type {?} */
- const res = this.getParsedResult(event.translations, key, interpolateParams);
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["isObservable"])(res) ? res : Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])(res);
- }))));
- }
- /**
- * Returns a translation instantly from the internal state of loaded translation.
- * All rules regarding the current language, the preferred language of even fallback languages will be used except any promise handling.
- * @param {?} key
- * @param {?=} interpolateParams
- * @return {?}
- */
- instant(key, interpolateParams) {
- if (!isDefined(key) || !key.length) {
- throw new Error(`Parameter "key" required`);
- }
- /** @type {?} */
- let res = this.getParsedResult(this.translations[this.currentLang], key, interpolateParams);
- if (Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["isObservable"])(res)) {
- if (key instanceof Array) {
- /** @type {?} */
- let obj = {};
- key.forEach((/**
- * @param {?} value
- * @param {?} index
- * @return {?}
- */
- (value, index) => {
- obj[key[index]] = key[index];
- }));
- return obj;
- }
- return key;
- }
- else {
- return res;
- }
- }
- /**
- * Sets the translated value of a key, after compiling it
- * @param {?} key
- * @param {?} value
- * @param {?=} lang
- * @return {?}
- */
- set(key, value, lang = this.currentLang) {
- this.translations[lang][key] = this.compiler.compile(value, lang);
- this.updateLangs();
- this.onTranslationChange.emit({ lang: lang, translations: this.translations[lang] });
- }
- /**
- * Changes the current lang
- * @private
- * @param {?} lang
- * @return {?}
- */
- changeLang(lang) {
- this.currentLang = lang;
- this.onLangChange.emit({ lang: lang, translations: this.translations[lang] });
- // if there is no default lang, use the one that we just set
- if (this.defaultLang == null) {
- this.changeDefaultLang(lang);
- }
- }
- /**
- * Changes the default lang
- * @private
- * @param {?} lang
- * @return {?}
- */
- changeDefaultLang(lang) {
- this.defaultLang = lang;
- this.onDefaultLangChange.emit({ lang: lang, translations: this.translations[lang] });
- }
- /**
- * Allows to reload the lang file from the file
- * @param {?} lang
- * @return {?}
- */
- reloadLang(lang) {
- this.resetLang(lang);
- return this.getTranslation(lang);
- }
- /**
- * Deletes inner translation
- * @param {?} lang
- * @return {?}
- */
- resetLang(lang) {
- this._translationRequests[lang] = undefined;
- this.translations[lang] = undefined;
- }
- /**
- * Returns the language code name from the browser, e.g. "de"
- * @return {?}
- */
- getBrowserLang() {
- if (typeof window === 'undefined' || typeof window.navigator === 'undefined') {
- return undefined;
- }
- /** @type {?} */
- let browserLang = window.navigator.languages ? window.navigator.languages[0] : null;
- browserLang = browserLang || window.navigator.language || window.navigator.browserLanguage || window.navigator.userLanguage;
- if (typeof browserLang === 'undefined') {
- return undefined;
- }
- if (browserLang.indexOf('-') !== -1) {
- browserLang = browserLang.split('-')[0];
- }
- if (browserLang.indexOf('_') !== -1) {
- browserLang = browserLang.split('_')[0];
- }
- return browserLang;
- }
- /**
- * Returns the culture language code name from the browser, e.g. "de-DE"
- * @return {?}
- */
- getBrowserCultureLang() {
- if (typeof window === 'undefined' || typeof window.navigator === 'undefined') {
- return undefined;
- }
- /** @type {?} */
- let browserCultureLang = window.navigator.languages ? window.navigator.languages[0] : null;
- browserCultureLang = browserCultureLang || window.navigator.language || window.navigator.browserLanguage || window.navigator.userLanguage;
- return browserCultureLang;
- }
- }
- TranslateService.ɵfac = function TranslateService_Factory(t) { return new (t || TranslateService)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](TranslateStore), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](TranslateLoader), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](TranslateCompiler), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](TranslateParser), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](MissingTranslationHandler), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](USE_DEFAULT_LANG), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](USE_STORE), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](USE_EXTEND), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](DEFAULT_LANGUAGE)); };
- TranslateService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: TranslateService, factory: TranslateService.ɵfac });
- /** @nocollapse */
- TranslateService.ctorParameters = () => [
- { type: TranslateStore },
- { type: TranslateLoader },
- { type: TranslateCompiler },
- { type: TranslateParser },
- { type: MissingTranslationHandler },
- { type: Boolean, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [USE_DEFAULT_LANG,] }] },
- { type: Boolean, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [USE_STORE,] }] },
- { type: Boolean, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [USE_EXTEND,] }] },
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [DEFAULT_LANGUAGE,] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](TranslateService, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: TranslateStore }, { type: TranslateLoader }, { type: TranslateCompiler }, { type: TranslateParser }, { type: MissingTranslationHandler }, { type: Boolean, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [USE_DEFAULT_LANG]
- }] }, { type: Boolean, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [USE_STORE]
- }] }, { type: Boolean, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [USE_EXTEND]
- }] }, { type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [DEFAULT_LANGUAGE]
- }] }]; }, null); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class TranslateDirective {
- /**
- * @param {?} translateService
- * @param {?} element
- * @param {?} _ref
- */
- constructor(translateService, element, _ref) {
- this.translateService = translateService;
- this.element = element;
- this._ref = _ref;
- // subscribe to onTranslationChange event, in case the translations of the current lang change
- if (!this.onTranslationChangeSub) {
- this.onTranslationChangeSub = this.translateService.onTranslationChange.subscribe((/**
- * @param {?} event
- * @return {?}
- */
- (event) => {
- if (event.lang === this.translateService.currentLang) {
- this.checkNodes(true, event.translations);
- }
- }));
- }
- // subscribe to onLangChange event, in case the language changes
- if (!this.onLangChangeSub) {
- this.onLangChangeSub = this.translateService.onLangChange.subscribe((/**
- * @param {?} event
- * @return {?}
- */
- (event) => {
- this.checkNodes(true, event.translations);
- }));
- }
- // subscribe to onDefaultLangChange event, in case the default language changes
- if (!this.onDefaultLangChangeSub) {
- this.onDefaultLangChangeSub = this.translateService.onDefaultLangChange.subscribe((/**
- * @param {?} event
- * @return {?}
- */
- (event) => {
- this.checkNodes(true);
- }));
- }
- }
- /**
- * @param {?} key
- * @return {?}
- */
- set translate(key) {
- if (key) {
- this.key = key;
- this.checkNodes();
- }
- }
- /**
- * @param {?} params
- * @return {?}
- */
- set translateParams(params) {
- if (!equals(this.currentParams, params)) {
- this.currentParams = params;
- this.checkNodes(true);
- }
- }
- /**
- * @return {?}
- */
- ngAfterViewChecked() {
- this.checkNodes();
- }
- /**
- * @param {?=} forceUpdate
- * @param {?=} translations
- * @return {?}
- */
- checkNodes(forceUpdate = false, translations) {
- /** @type {?} */
- let nodes = this.element.nativeElement.childNodes;
- // if the element is empty
- if (!nodes.length) {
- // we add the key as content
- this.setContent(this.element.nativeElement, this.key);
- nodes = this.element.nativeElement.childNodes;
- }
- for (let i = 0; i < nodes.length; ++i) {
- /** @type {?} */
- let node = nodes[i];
- if (node.nodeType === 3) { // node type 3 is a text node
- // node type 3 is a text node
- /** @type {?} */
- let key;
- if (forceUpdate) {
- node.lastKey = null;
- }
- if (isDefined(node.lookupKey)) {
- key = node.lookupKey;
- }
- else if (this.key) {
- key = this.key;
- }
- else {
- /** @type {?} */
- let content = this.getContent(node);
- /** @type {?} */
- let trimmedContent = content.trim();
- if (trimmedContent.length) {
- node.lookupKey = trimmedContent;
- // we want to use the content as a key, not the translation value
- if (content !== node.currentValue) {
- key = trimmedContent;
- // the content was changed from the user, we'll use it as a reference if needed
- node.originalContent = content || node.originalContent;
- }
- else if (node.originalContent) { // the content seems ok, but the lang has changed
- // the current content is the translation, not the key, use the last real content as key
- key = node.originalContent.trim();
- }
- else if (content !== node.currentValue) {
- // we want to use the content as a key, not the translation value
- key = trimmedContent;
- // the content was changed from the user, we'll use it as a reference if needed
- node.originalContent = content || node.originalContent;
- }
- }
- }
- this.updateValue(key, node, translations);
- }
- }
- }
- /**
- * @param {?} key
- * @param {?} node
- * @param {?} translations
- * @return {?}
- */
- updateValue(key, node, translations) {
- if (key) {
- if (node.lastKey === key && this.lastParams === this.currentParams) {
- return;
- }
- this.lastParams = this.currentParams;
- /** @type {?} */
- let onTranslation = (/**
- * @param {?} res
- * @return {?}
- */
- (res) => {
- if (res !== key) {
- node.lastKey = key;
- }
- if (!node.originalContent) {
- node.originalContent = this.getContent(node);
- }
- node.currentValue = isDefined(res) ? res : (node.originalContent || key);
- // we replace in the original content to preserve spaces that we might have trimmed
- this.setContent(node, this.key ? node.currentValue : node.originalContent.replace(key, node.currentValue));
- this._ref.markForCheck();
- });
- if (isDefined(translations)) {
- /** @type {?} */
- let res = this.translateService.getParsedResult(translations, key, this.currentParams);
- if (Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["isObservable"])(res)) {
- res.subscribe(onTranslation);
- }
- else {
- onTranslation(res);
- }
- }
- else {
- this.translateService.get(key, this.currentParams).subscribe(onTranslation);
- }
- }
- }
- /**
- * @param {?} node
- * @return {?}
- */
- getContent(node) {
- return isDefined(node.textContent) ? node.textContent : node.data;
- }
- /**
- * @param {?} node
- * @param {?} content
- * @return {?}
- */
- setContent(node, content) {
- if (isDefined(node.textContent)) {
- node.textContent = content;
- }
- else {
- node.data = content;
- }
- }
- /**
- * @return {?}
- */
- ngOnDestroy() {
- if (this.onLangChangeSub) {
- this.onLangChangeSub.unsubscribe();
- }
- if (this.onDefaultLangChangeSub) {
- this.onDefaultLangChangeSub.unsubscribe();
- }
- if (this.onTranslationChangeSub) {
- this.onTranslationChangeSub.unsubscribe();
- }
- }
- }
- TranslateDirective.ɵfac = function TranslateDirective_Factory(t) { return new (t || TranslateDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](TranslateService), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"])); };
- TranslateDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({ type: TranslateDirective, selectors: [["", "translate", ""], ["", "ngx-translate", ""]], inputs: { translate: "translate", translateParams: "translateParams" } });
- /** @nocollapse */
- TranslateDirective.ctorParameters = () => [
- { type: TranslateService },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }
- ];
- TranslateDirective.propDecorators = {
- translate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }],
- translateParams: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](TranslateDirective, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
- args: [{
- selector: '[translate],[ngx-translate]'
- }]
- }], function () { return [{ type: TranslateService }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }]; }, { translate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }], translateParams: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
- }] }); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class TranslatePipe {
- /**
- * @param {?} translate
- * @param {?} _ref
- */
- constructor(translate, _ref) {
- this.translate = translate;
- this._ref = _ref;
- this.value = '';
- }
- /**
- * @param {?} key
- * @param {?=} interpolateParams
- * @param {?=} translations
- * @return {?}
- */
- updateValue(key, interpolateParams, translations) {
- /** @type {?} */
- let onTranslation = (/**
- * @param {?} res
- * @return {?}
- */
- (res) => {
- this.value = res !== undefined ? res : key;
- this.lastKey = key;
- this._ref.markForCheck();
- });
- if (translations) {
- /** @type {?} */
- let res = this.translate.getParsedResult(translations, key, interpolateParams);
- if (Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["isObservable"])(res.subscribe)) {
- res.subscribe(onTranslation);
- }
- else {
- onTranslation(res);
- }
- }
- this.translate.get(key, interpolateParams).subscribe(onTranslation);
- }
- /**
- * @param {?} query
- * @param {...?} args
- * @return {?}
- */
- transform(query, ...args) {
- if (!query || !query.length) {
- return query;
- }
- // if we ask another time for the same key, return the last value
- if (equals(query, this.lastKey) && equals(args, this.lastParams)) {
- return this.value;
- }
- /** @type {?} */
- let interpolateParams;
- if (isDefined(args[0]) && args.length) {
- if (typeof args[0] === 'string' && args[0].length) {
- // we accept objects written in the template such as {n:1}, {'n':1}, {n:'v'}
- // which is why we might need to change it to real JSON objects such as {"n":1} or {"n":"v"}
- /** @type {?} */
- let validArgs = args[0]
- .replace(/(\')?([a-zA-Z0-9_]+)(\')?(\s)?:/g, '"$2":')
- .replace(/:(\s)?(\')(.*?)(\')/g, ':"$3"');
- try {
- interpolateParams = JSON.parse(validArgs);
- }
- catch (e) {
- throw new SyntaxError(`Wrong parameter in TranslatePipe. Expected a valid Object, received: ${args[0]}`);
- }
- }
- else if (typeof args[0] === 'object' && !Array.isArray(args[0])) {
- interpolateParams = args[0];
- }
- }
- // store the query, in case it changes
- this.lastKey = query;
- // store the params, in case they change
- this.lastParams = args;
- // set the value
- this.updateValue(query, interpolateParams);
- // if there is a subscription to onLangChange, clean it
- this._dispose();
- // subscribe to onTranslationChange event, in case the translations change
- if (!this.onTranslationChange) {
- this.onTranslationChange = this.translate.onTranslationChange.subscribe((/**
- * @param {?} event
- * @return {?}
- */
- (event) => {
- if (this.lastKey && event.lang === this.translate.currentLang) {
- this.lastKey = null;
- this.updateValue(query, interpolateParams, event.translations);
- }
- }));
- }
- // subscribe to onLangChange event, in case the language changes
- if (!this.onLangChange) {
- this.onLangChange = this.translate.onLangChange.subscribe((/**
- * @param {?} event
- * @return {?}
- */
- (event) => {
- if (this.lastKey) {
- this.lastKey = null; // we want to make sure it doesn't return the same value until it's been updated
- this.updateValue(query, interpolateParams, event.translations);
- }
- }));
- }
- // subscribe to onDefaultLangChange event, in case the default language changes
- if (!this.onDefaultLangChange) {
- this.onDefaultLangChange = this.translate.onDefaultLangChange.subscribe((/**
- * @return {?}
- */
- () => {
- if (this.lastKey) {
- this.lastKey = null; // we want to make sure it doesn't return the same value until it's been updated
- this.updateValue(query, interpolateParams);
- }
- }));
- }
- return this.value;
- }
- /**
- * Clean any existing subscription to change events
- * @private
- * @return {?}
- */
- _dispose() {
- if (typeof this.onTranslationChange !== 'undefined') {
- this.onTranslationChange.unsubscribe();
- this.onTranslationChange = undefined;
- }
- if (typeof this.onLangChange !== 'undefined') {
- this.onLangChange.unsubscribe();
- this.onLangChange = undefined;
- }
- if (typeof this.onDefaultLangChange !== 'undefined') {
- this.onDefaultLangChange.unsubscribe();
- this.onDefaultLangChange = undefined;
- }
- }
- /**
- * @return {?}
- */
- ngOnDestroy() {
- this._dispose();
- }
- }
- TranslatePipe.ɵfac = function TranslatePipe_Factory(t) { return new (t || TranslatePipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](TranslateService), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinjectPipeChangeDetectorRef"]()); };
- TranslatePipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({ name: "translate", type: TranslatePipe, pure: false });
- TranslatePipe.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: TranslatePipe, factory: TranslatePipe.ɵfac });
- /** @nocollapse */
- TranslatePipe.ctorParameters = () => [
- { type: TranslateService },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](TranslatePipe, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
- args: [{
- name: 'translate',
- pure: false // required to update the value when the promise is resolved
- }]
- }], function () { return [{ type: TranslateService }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"] }]; }, null); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * @record
- */
- function TranslateModuleConfig() { }
- if (false) {}
- class TranslateModule {
- /**
- * Use this method in your root module to provide the TranslateService
- * @param {?=} config
- * @return {?}
- */
- static forRoot(config = {}) {
- return {
- ngModule: TranslateModule,
- providers: [
- config.loader || { provide: TranslateLoader, useClass: TranslateFakeLoader },
- config.compiler || { provide: TranslateCompiler, useClass: TranslateFakeCompiler },
- config.parser || { provide: TranslateParser, useClass: TranslateDefaultParser },
- config.missingTranslationHandler || { provide: MissingTranslationHandler, useClass: FakeMissingTranslationHandler },
- TranslateStore,
- { provide: USE_STORE, useValue: config.isolate },
- { provide: USE_DEFAULT_LANG, useValue: config.useDefaultLang },
- { provide: USE_EXTEND, useValue: config.extend },
- { provide: DEFAULT_LANGUAGE, useValue: config.defaultLanguage },
- TranslateService
- ]
- };
- }
- /**
- * Use this method in your other (non root) modules to import the directive/pipe
- * @param {?=} config
- * @return {?}
- */
- static forChild(config = {}) {
- return {
- ngModule: TranslateModule,
- providers: [
- config.loader || { provide: TranslateLoader, useClass: TranslateFakeLoader },
- config.compiler || { provide: TranslateCompiler, useClass: TranslateFakeCompiler },
- config.parser || { provide: TranslateParser, useClass: TranslateDefaultParser },
- config.missingTranslationHandler || { provide: MissingTranslationHandler, useClass: FakeMissingTranslationHandler },
- { provide: USE_STORE, useValue: config.isolate },
- { provide: USE_DEFAULT_LANG, useValue: config.useDefaultLang },
- { provide: USE_EXTEND, useValue: config.extend },
- { provide: DEFAULT_LANGUAGE, useValue: config.defaultLanguage },
- TranslateService
- ]
- };
- }
- }
- TranslateModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: TranslateModule });
- TranslateModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function TranslateModule_Factory(t) { return new (t || TranslateModule)(); } });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](TranslateModule, { declarations: [TranslatePipe, TranslateDirective], exports: [TranslatePipe, TranslateDirective] }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](TranslateModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- declarations: [
- TranslatePipe,
- TranslateDirective
- ],
- exports: [
- TranslatePipe,
- TranslateDirective
- ]
- }]
- }], null, null); })();
- /**
- * @fileoverview added by tsickle
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- //# sourceMappingURL=ngx-translate-core.js.map
- /***/ }),
- /***/ "syX2":
- /*!**********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/timeoutWith.js ***!
- \**********************************************************************/
- /*! exports provided: timeoutWith */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeoutWith", function() { return timeoutWith; });
- /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scheduler/async */ "D0XW");
- /* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/isDate */ "mlxB");
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function timeoutWith(due, withObservable, scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"]) {
- return (source) => {
- let absoluteTimeout = Object(_util_isDate__WEBPACK_IMPORTED_MODULE_1__["isDate"])(due);
- let waitFor = absoluteTimeout ? (+due - scheduler.now()) : Math.abs(due);
- return source.lift(new TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler));
- };
- }
- class TimeoutWithOperator {
- constructor(waitFor, absoluteTimeout, withObservable, scheduler) {
- this.waitFor = waitFor;
- this.absoluteTimeout = absoluteTimeout;
- this.withObservable = withObservable;
- this.scheduler = scheduler;
- }
- call(subscriber, source) {
- return source.subscribe(new TimeoutWithSubscriber(subscriber, this.absoluteTimeout, this.waitFor, this.withObservable, this.scheduler));
- }
- }
- class TimeoutWithSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"] {
- constructor(destination, absoluteTimeout, waitFor, withObservable, scheduler) {
- super(destination);
- this.absoluteTimeout = absoluteTimeout;
- this.waitFor = waitFor;
- this.withObservable = withObservable;
- this.scheduler = scheduler;
- this.action = null;
- this.scheduleTimeout();
- }
- static dispatchTimeout(subscriber) {
- const { withObservable } = subscriber;
- subscriber._unsubscribeAndRecycle();
- subscriber.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(subscriber, withObservable));
- }
- scheduleTimeout() {
- const { action } = this;
- if (action) {
- this.action = action.schedule(this, this.waitFor);
- }
- else {
- this.add(this.action = this.scheduler.schedule(TimeoutWithSubscriber.dispatchTimeout, this.waitFor, this));
- }
- }
- _next(value) {
- if (!this.absoluteTimeout) {
- this.scheduleTimeout();
- }
- super._next(value);
- }
- _unsubscribe() {
- this.action = null;
- this.scheduler = null;
- this.withObservable = null;
- }
- }
- //# sourceMappingURL=timeoutWith.js.map
- /***/ }),
- /***/ "t9l1":
- /*!***************************************************************************!*\
- !*** ./node_modules/@angular/animations/__ivy_ngcc__/fesm2015/browser.js ***!
- \***************************************************************************/
- /*! exports provided: AnimationDriver, ɵAnimation, ɵAnimationEngine, ɵAnimationStyleNormalizer, ɵCssKeyframesDriver, ɵCssKeyframesPlayer, ɵNoopAnimationDriver, ɵNoopAnimationStyleNormalizer, ɵWebAnimationsDriver, ɵWebAnimationsPlayer, ɵWebAnimationsStyleNormalizer, ɵallowPreviousPlayerStylesMerge, ɵangular_packages_animations_browser_browser_a, ɵcontainsElement, ɵinvokeQuery, ɵmatchesElement, ɵsupportsWebAnimations, ɵvalidateStyleProperty */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationDriver", function() { return AnimationDriver; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵAnimation", function() { return Animation; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵAnimationEngine", function() { return AnimationEngine; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵAnimationStyleNormalizer", function() { return AnimationStyleNormalizer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵCssKeyframesDriver", function() { return CssKeyframesDriver; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵCssKeyframesPlayer", function() { return CssKeyframesPlayer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵNoopAnimationDriver", function() { return NoopAnimationDriver; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵNoopAnimationStyleNormalizer", function() { return NoopAnimationStyleNormalizer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵWebAnimationsDriver", function() { return WebAnimationsDriver; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵWebAnimationsPlayer", function() { return WebAnimationsPlayer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵWebAnimationsStyleNormalizer", function() { return WebAnimationsStyleNormalizer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵallowPreviousPlayerStylesMerge", function() { return allowPreviousPlayerStylesMerge; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_animations_browser_browser_a", function() { return SpecialCasedStyles; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵcontainsElement", function() { return containsElement; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵinvokeQuery", function() { return invokeQuery; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵmatchesElement", function() { return matchesElement; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵsupportsWebAnimations", function() { return supportsWebAnimations; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵvalidateStyleProperty", function() { return validateStyleProperty; });
- /* harmony import */ var _angular_animations__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/animations */ "R0Ic");
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /**
- * @license Angular v11.0.4
- * (c) 2010-2020 Google LLC. https://angular.io/
- * License: MIT
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function isBrowser() {
- return (typeof window !== 'undefined' && typeof window.document !== 'undefined');
- }
- function isNode() {
- // Checking only for `process` isn't enough to identify whether or not we're in a Node
- // environment, because Webpack by default will polyfill the `process`. While we can discern
- // that Webpack polyfilled it by looking at `process.browser`, it's very Webpack-specific and
- // might not be future-proof. Instead we look at the stringified version of `process` which
- // is `[object process]` in Node and `[object Object]` when polyfilled.
- return typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';
- }
- function optimizeGroupPlayer(players) {
- switch (players.length) {
- case 0:
- return new _angular_animations__WEBPACK_IMPORTED_MODULE_0__["NoopAnimationPlayer"]();
- case 1:
- return players[0];
- default:
- return new _angular_animations__WEBPACK_IMPORTED_MODULE_0__["ɵAnimationGroupPlayer"](players);
- }
- }
- function normalizeKeyframes(driver, normalizer, element, keyframes, preStyles = {}, postStyles = {}) {
- const errors = [];
- const normalizedKeyframes = [];
- let previousOffset = -1;
- let previousKeyframe = null;
- keyframes.forEach(kf => {
- const offset = kf['offset'];
- const isSameOffset = offset == previousOffset;
- const normalizedKeyframe = (isSameOffset && previousKeyframe) || {};
- Object.keys(kf).forEach(prop => {
- let normalizedProp = prop;
- let normalizedValue = kf[prop];
- if (prop !== 'offset') {
- normalizedProp = normalizer.normalizePropertyName(normalizedProp, errors);
- switch (normalizedValue) {
- case _angular_animations__WEBPACK_IMPORTED_MODULE_0__["ɵPRE_STYLE"]:
- normalizedValue = preStyles[prop];
- break;
- case _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"]:
- normalizedValue = postStyles[prop];
- break;
- default:
- normalizedValue =
- normalizer.normalizeStyleValue(prop, normalizedProp, normalizedValue, errors);
- break;
- }
- }
- normalizedKeyframe[normalizedProp] = normalizedValue;
- });
- if (!isSameOffset) {
- normalizedKeyframes.push(normalizedKeyframe);
- }
- previousKeyframe = normalizedKeyframe;
- previousOffset = offset;
- });
- if (errors.length) {
- const LINE_START = '\n - ';
- throw new Error(`Unable to animate due to the following errors:${LINE_START}${errors.join(LINE_START)}`);
- }
- return normalizedKeyframes;
- }
- function listenOnPlayer(player, eventName, event, callback) {
- switch (eventName) {
- case 'start':
- player.onStart(() => callback(event && copyAnimationEvent(event, 'start', player)));
- break;
- case 'done':
- player.onDone(() => callback(event && copyAnimationEvent(event, 'done', player)));
- break;
- case 'destroy':
- player.onDestroy(() => callback(event && copyAnimationEvent(event, 'destroy', player)));
- break;
- }
- }
- function copyAnimationEvent(e, phaseName, player) {
- const totalTime = player.totalTime;
- const disabled = player.disabled ? true : false;
- const event = makeAnimationEvent(e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName, totalTime == undefined ? e.totalTime : totalTime, disabled);
- const data = e['_data'];
- if (data != null) {
- event['_data'] = data;
- }
- return event;
- }
- function makeAnimationEvent(element, triggerName, fromState, toState, phaseName = '', totalTime = 0, disabled) {
- return { element, triggerName, fromState, toState, phaseName, totalTime, disabled: !!disabled };
- }
- function getOrSetAsInMap(map, key, defaultValue) {
- let value;
- if (map instanceof Map) {
- value = map.get(key);
- if (!value) {
- map.set(key, value = defaultValue);
- }
- }
- else {
- value = map[key];
- if (!value) {
- value = map[key] = defaultValue;
- }
- }
- return value;
- }
- function parseTimelineCommand(command) {
- const separatorPos = command.indexOf(':');
- const id = command.substring(1, separatorPos);
- const action = command.substr(separatorPos + 1);
- return [id, action];
- }
- let _contains = (elm1, elm2) => false;
- const ɵ0 = _contains;
- let _matches = (element, selector) => false;
- const ɵ1 = _matches;
- let _query = (element, selector, multi) => {
- return [];
- };
- const ɵ2 = _query;
- // Define utility methods for browsers and platform-server(domino) where Element
- // and utility methods exist.
- const _isNode = isNode();
- if (_isNode || typeof Element !== 'undefined') {
- // this is well supported in all browsers
- _contains = (elm1, elm2) => {
- return elm1.contains(elm2);
- };
- _matches = (() => {
- if (_isNode || Element.prototype.matches) {
- return (element, selector) => element.matches(selector);
- }
- else {
- const proto = Element.prototype;
- const fn = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector ||
- proto.oMatchesSelector || proto.webkitMatchesSelector;
- if (fn) {
- return (element, selector) => fn.apply(element, [selector]);
- }
- else {
- return _matches;
- }
- }
- })();
- _query = (element, selector, multi) => {
- let results = [];
- if (multi) {
- // DO NOT REFACTOR TO USE SPREAD SYNTAX.
- // For element queries that return sufficiently large NodeList objects,
- // using spread syntax to populate the results array causes a RangeError
- // due to the call stack limit being reached. `Array.from` can not be used
- // as well, since NodeList is not iterable in IE 11, see
- // https://developer.mozilla.org/en-US/docs/Web/API/NodeList
- // More info is available in #38551.
- const elems = element.querySelectorAll(selector);
- for (let i = 0; i < elems.length; i++) {
- results.push(elems[i]);
- }
- }
- else {
- const elm = element.querySelector(selector);
- if (elm) {
- results.push(elm);
- }
- }
- return results;
- };
- }
- function containsVendorPrefix(prop) {
- // Webkit is the only real popular vendor prefix nowadays
- // cc: http://shouldiprefix.com/
- return prop.substring(1, 6) == 'ebkit'; // webkit or Webkit
- }
- let _CACHED_BODY = null;
- let _IS_WEBKIT = false;
- function validateStyleProperty(prop) {
- if (!_CACHED_BODY) {
- _CACHED_BODY = getBodyNode() || {};
- _IS_WEBKIT = _CACHED_BODY.style ? ('WebkitAppearance' in _CACHED_BODY.style) : false;
- }
- let result = true;
- if (_CACHED_BODY.style && !containsVendorPrefix(prop)) {
- result = prop in _CACHED_BODY.style;
- if (!result && _IS_WEBKIT) {
- const camelProp = 'Webkit' + prop.charAt(0).toUpperCase() + prop.substr(1);
- result = camelProp in _CACHED_BODY.style;
- }
- }
- return result;
- }
- function getBodyNode() {
- if (typeof document != 'undefined') {
- return document.body;
- }
- return null;
- }
- const matchesElement = _matches;
- const containsElement = _contains;
- const invokeQuery = _query;
- function hypenatePropsObject(object) {
- const newObj = {};
- Object.keys(object).forEach(prop => {
- const newProp = prop.replace(/([a-z])([A-Z])/g, '$1-$2');
- newObj[newProp] = object[prop];
- });
- return newObj;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @publicApi
- */
- class NoopAnimationDriver {
- validateStyleProperty(prop) {
- return validateStyleProperty(prop);
- }
- matchesElement(element, selector) {
- return matchesElement(element, selector);
- }
- containsElement(elm1, elm2) {
- return containsElement(elm1, elm2);
- }
- query(element, selector, multi) {
- return invokeQuery(element, selector, multi);
- }
- computeStyle(element, prop, defaultValue) {
- return defaultValue || '';
- }
- animate(element, keyframes, duration, delay, easing, previousPlayers = [], scrubberAccessRequested) {
- return new _angular_animations__WEBPACK_IMPORTED_MODULE_0__["NoopAnimationPlayer"](duration, delay);
- }
- }
- NoopAnimationDriver.ɵfac = function NoopAnimationDriver_Factory(t) { return new (t || NoopAnimationDriver)(); };
- NoopAnimationDriver.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({ token: NoopAnimationDriver, factory: NoopAnimationDriver.ɵfac });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](NoopAnimationDriver, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
- }], null, null); })();
- /**
- * @publicApi
- */
- class AnimationDriver {
- }
- AnimationDriver.NOOP = new NoopAnimationDriver();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ONE_SECOND = 1000;
- const SUBSTITUTION_EXPR_START = '{{';
- const SUBSTITUTION_EXPR_END = '}}';
- const ENTER_CLASSNAME = 'ng-enter';
- const LEAVE_CLASSNAME = 'ng-leave';
- const ENTER_SELECTOR = '.ng-enter';
- const LEAVE_SELECTOR = '.ng-leave';
- const NG_TRIGGER_CLASSNAME = 'ng-trigger';
- const NG_TRIGGER_SELECTOR = '.ng-trigger';
- const NG_ANIMATING_CLASSNAME = 'ng-animating';
- const NG_ANIMATING_SELECTOR = '.ng-animating';
- function resolveTimingValue(value) {
- if (typeof value == 'number')
- return value;
- const matches = value.match(/^(-?[\.\d]+)(m?s)/);
- if (!matches || matches.length < 2)
- return 0;
- return _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);
- }
- function _convertTimeValueToMS(value, unit) {
- switch (unit) {
- case 's':
- return value * ONE_SECOND;
- default: // ms or something else
- return value;
- }
- }
- function resolveTiming(timings, errors, allowNegativeValues) {
- return timings.hasOwnProperty('duration') ?
- timings :
- parseTimeExpression(timings, errors, allowNegativeValues);
- }
- function parseTimeExpression(exp, errors, allowNegativeValues) {
- const regex = /^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i;
- let duration;
- let delay = 0;
- let easing = '';
- if (typeof exp === 'string') {
- const matches = exp.match(regex);
- if (matches === null) {
- errors.push(`The provided timing value "${exp}" is invalid.`);
- return { duration: 0, delay: 0, easing: '' };
- }
- duration = _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);
- const delayMatch = matches[3];
- if (delayMatch != null) {
- delay = _convertTimeValueToMS(parseFloat(delayMatch), matches[4]);
- }
- const easingVal = matches[5];
- if (easingVal) {
- easing = easingVal;
- }
- }
- else {
- duration = exp;
- }
- if (!allowNegativeValues) {
- let containsErrors = false;
- let startIndex = errors.length;
- if (duration < 0) {
- errors.push(`Duration values below 0 are not allowed for this animation step.`);
- containsErrors = true;
- }
- if (delay < 0) {
- errors.push(`Delay values below 0 are not allowed for this animation step.`);
- containsErrors = true;
- }
- if (containsErrors) {
- errors.splice(startIndex, 0, `The provided timing value "${exp}" is invalid.`);
- }
- }
- return { duration, delay, easing };
- }
- function copyObj(obj, destination = {}) {
- Object.keys(obj).forEach(prop => {
- destination[prop] = obj[prop];
- });
- return destination;
- }
- function normalizeStyles(styles) {
- const normalizedStyles = {};
- if (Array.isArray(styles)) {
- styles.forEach(data => copyStyles(data, false, normalizedStyles));
- }
- else {
- copyStyles(styles, false, normalizedStyles);
- }
- return normalizedStyles;
- }
- function copyStyles(styles, readPrototype, destination = {}) {
- if (readPrototype) {
- // we make use of a for-in loop so that the
- // prototypically inherited properties are
- // revealed from the backFill map
- for (let prop in styles) {
- destination[prop] = styles[prop];
- }
- }
- else {
- copyObj(styles, destination);
- }
- return destination;
- }
- function getStyleAttributeString(element, key, value) {
- // Return the key-value pair string to be added to the style attribute for the
- // given CSS style key.
- if (value) {
- return key + ':' + value + ';';
- }
- else {
- return '';
- }
- }
- function writeStyleAttribute(element) {
- // Read the style property of the element and manually reflect it to the
- // style attribute. This is needed because Domino on platform-server doesn't
- // understand the full set of allowed CSS properties and doesn't reflect some
- // of them automatically.
- let styleAttrValue = '';
- for (let i = 0; i < element.style.length; i++) {
- const key = element.style.item(i);
- styleAttrValue += getStyleAttributeString(element, key, element.style.getPropertyValue(key));
- }
- for (const key in element.style) {
- // Skip internal Domino properties that don't need to be reflected.
- if (!element.style.hasOwnProperty(key) || key.startsWith('_')) {
- continue;
- }
- const dashKey = camelCaseToDashCase(key);
- styleAttrValue += getStyleAttributeString(element, dashKey, element.style[key]);
- }
- element.setAttribute('style', styleAttrValue);
- }
- function setStyles(element, styles, formerStyles) {
- if (element['style']) {
- Object.keys(styles).forEach(prop => {
- const camelProp = dashCaseToCamelCase(prop);
- if (formerStyles && !formerStyles.hasOwnProperty(prop)) {
- formerStyles[prop] = element.style[camelProp];
- }
- element.style[camelProp] = styles[prop];
- });
- // On the server set the 'style' attribute since it's not automatically reflected.
- if (isNode()) {
- writeStyleAttribute(element);
- }
- }
- }
- function eraseStyles(element, styles) {
- if (element['style']) {
- Object.keys(styles).forEach(prop => {
- const camelProp = dashCaseToCamelCase(prop);
- element.style[camelProp] = '';
- });
- // On the server set the 'style' attribute since it's not automatically reflected.
- if (isNode()) {
- writeStyleAttribute(element);
- }
- }
- }
- function normalizeAnimationEntry(steps) {
- if (Array.isArray(steps)) {
- if (steps.length == 1)
- return steps[0];
- return Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["sequence"])(steps);
- }
- return steps;
- }
- function validateStyleParams(value, options, errors) {
- const params = options.params || {};
- const matches = extractStyleParams(value);
- if (matches.length) {
- matches.forEach(varName => {
- if (!params.hasOwnProperty(varName)) {
- errors.push(`Unable to resolve the local animation param ${varName} in the given list of values`);
- }
- });
- }
- }
- const PARAM_REGEX = new RegExp(`${SUBSTITUTION_EXPR_START}\\s*(.+?)\\s*${SUBSTITUTION_EXPR_END}`, 'g');
- function extractStyleParams(value) {
- let params = [];
- if (typeof value === 'string') {
- let match;
- while (match = PARAM_REGEX.exec(value)) {
- params.push(match[1]);
- }
- PARAM_REGEX.lastIndex = 0;
- }
- return params;
- }
- function interpolateParams(value, params, errors) {
- const original = value.toString();
- const str = original.replace(PARAM_REGEX, (_, varName) => {
- let localVal = params[varName];
- // this means that the value was never overridden by the data passed in by the user
- if (!params.hasOwnProperty(varName)) {
- errors.push(`Please provide a value for the animation param ${varName}`);
- localVal = '';
- }
- return localVal.toString();
- });
- // we do this to assert that numeric values stay as they are
- return str == original ? value : str;
- }
- function iteratorToArray(iterator) {
- const arr = [];
- let item = iterator.next();
- while (!item.done) {
- arr.push(item.value);
- item = iterator.next();
- }
- return arr;
- }
- function mergeAnimationOptions(source, destination) {
- if (source.params) {
- const p0 = source.params;
- if (!destination.params) {
- destination.params = {};
- }
- const p1 = destination.params;
- Object.keys(p0).forEach(param => {
- if (!p1.hasOwnProperty(param)) {
- p1[param] = p0[param];
- }
- });
- }
- return destination;
- }
- const DASH_CASE_REGEXP = /-+([a-z0-9])/g;
- function dashCaseToCamelCase(input) {
- return input.replace(DASH_CASE_REGEXP, (...m) => m[1].toUpperCase());
- }
- function camelCaseToDashCase(input) {
- return input.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
- }
- function allowPreviousPlayerStylesMerge(duration, delay) {
- return duration === 0 || delay === 0;
- }
- function balancePreviousStylesIntoKeyframes(element, keyframes, previousStyles) {
- const previousStyleProps = Object.keys(previousStyles);
- if (previousStyleProps.length && keyframes.length) {
- let startingKeyframe = keyframes[0];
- let missingStyleProps = [];
- previousStyleProps.forEach(prop => {
- if (!startingKeyframe.hasOwnProperty(prop)) {
- missingStyleProps.push(prop);
- }
- startingKeyframe[prop] = previousStyles[prop];
- });
- if (missingStyleProps.length) {
- // tslint:disable-next-line
- for (var i = 1; i < keyframes.length; i++) {
- let kf = keyframes[i];
- missingStyleProps.forEach(function (prop) {
- kf[prop] = computeStyle(element, prop);
- });
- }
- }
- }
- return keyframes;
- }
- function visitDslNode(visitor, node, context) {
- switch (node.type) {
- case 7 /* Trigger */:
- return visitor.visitTrigger(node, context);
- case 0 /* State */:
- return visitor.visitState(node, context);
- case 1 /* Transition */:
- return visitor.visitTransition(node, context);
- case 2 /* Sequence */:
- return visitor.visitSequence(node, context);
- case 3 /* Group */:
- return visitor.visitGroup(node, context);
- case 4 /* Animate */:
- return visitor.visitAnimate(node, context);
- case 5 /* Keyframes */:
- return visitor.visitKeyframes(node, context);
- case 6 /* Style */:
- return visitor.visitStyle(node, context);
- case 8 /* Reference */:
- return visitor.visitReference(node, context);
- case 9 /* AnimateChild */:
- return visitor.visitAnimateChild(node, context);
- case 10 /* AnimateRef */:
- return visitor.visitAnimateRef(node, context);
- case 11 /* Query */:
- return visitor.visitQuery(node, context);
- case 12 /* Stagger */:
- return visitor.visitStagger(node, context);
- default:
- throw new Error(`Unable to resolve animation metadata node #${node.type}`);
- }
- }
- function computeStyle(element, prop) {
- return window.getComputedStyle(element)[prop];
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ANY_STATE = '*';
- function parseTransitionExpr(transitionValue, errors) {
- const expressions = [];
- if (typeof transitionValue == 'string') {
- transitionValue.split(/\s*,\s*/).forEach(str => parseInnerTransitionStr(str, expressions, errors));
- }
- else {
- expressions.push(transitionValue);
- }
- return expressions;
- }
- function parseInnerTransitionStr(eventStr, expressions, errors) {
- if (eventStr[0] == ':') {
- const result = parseAnimationAlias(eventStr, errors);
- if (typeof result == 'function') {
- expressions.push(result);
- return;
- }
- eventStr = result;
- }
- const match = eventStr.match(/^(\*|[-\w]+)\s*(<?[=-]>)\s*(\*|[-\w]+)$/);
- if (match == null || match.length < 4) {
- errors.push(`The provided transition expression "${eventStr}" is not supported`);
- return expressions;
- }
- const fromState = match[1];
- const separator = match[2];
- const toState = match[3];
- expressions.push(makeLambdaFromStates(fromState, toState));
- const isFullAnyStateExpr = fromState == ANY_STATE && toState == ANY_STATE;
- if (separator[0] == '<' && !isFullAnyStateExpr) {
- expressions.push(makeLambdaFromStates(toState, fromState));
- }
- }
- function parseAnimationAlias(alias, errors) {
- switch (alias) {
- case ':enter':
- return 'void => *';
- case ':leave':
- return '* => void';
- case ':increment':
- return (fromState, toState) => parseFloat(toState) > parseFloat(fromState);
- case ':decrement':
- return (fromState, toState) => parseFloat(toState) < parseFloat(fromState);
- default:
- errors.push(`The transition alias value "${alias}" is not supported`);
- return '* => *';
- }
- }
- // DO NOT REFACTOR ... keep the follow set instantiations
- // with the values intact (closure compiler for some reason
- // removes follow-up lines that add the values outside of
- // the constructor...
- const TRUE_BOOLEAN_VALUES = new Set(['true', '1']);
- const FALSE_BOOLEAN_VALUES = new Set(['false', '0']);
- function makeLambdaFromStates(lhs, rhs) {
- const LHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(lhs) || FALSE_BOOLEAN_VALUES.has(lhs);
- const RHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(rhs) || FALSE_BOOLEAN_VALUES.has(rhs);
- return (fromState, toState) => {
- let lhsMatch = lhs == ANY_STATE || lhs == fromState;
- let rhsMatch = rhs == ANY_STATE || rhs == toState;
- if (!lhsMatch && LHS_MATCH_BOOLEAN && typeof fromState === 'boolean') {
- lhsMatch = fromState ? TRUE_BOOLEAN_VALUES.has(lhs) : FALSE_BOOLEAN_VALUES.has(lhs);
- }
- if (!rhsMatch && RHS_MATCH_BOOLEAN && typeof toState === 'boolean') {
- rhsMatch = toState ? TRUE_BOOLEAN_VALUES.has(rhs) : FALSE_BOOLEAN_VALUES.has(rhs);
- }
- return lhsMatch && rhsMatch;
- };
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const SELF_TOKEN = ':self';
- const SELF_TOKEN_REGEX = new RegExp(`\s*${SELF_TOKEN}\s*,?`, 'g');
- /*
- * [Validation]
- * The visitor code below will traverse the animation AST generated by the animation verb functions
- * (the output is a tree of objects) and attempt to perform a series of validations on the data. The
- * following corner-cases will be validated:
- *
- * 1. Overlap of animations
- * Given that a CSS property cannot be animated in more than one place at the same time, it's
- * important that this behavior is detected and validated. The way in which this occurs is that
- * each time a style property is examined, a string-map containing the property will be updated with
- * the start and end times for when the property is used within an animation step.
- *
- * If there are two or more parallel animations that are currently running (these are invoked by the
- * group()) on the same element then the validator will throw an error. Since the start/end timing
- * values are collected for each property then if the current animation step is animating the same
- * property and its timing values fall anywhere into the window of time that the property is
- * currently being animated within then this is what causes an error.
- *
- * 2. Timing values
- * The validator will validate to see if a timing value of `duration delay easing` or
- * `durationNumber` is valid or not.
- *
- * (note that upon validation the code below will replace the timing data with an object containing
- * {duration,delay,easing}.
- *
- * 3. Offset Validation
- * Each of the style() calls are allowed to have an offset value when placed inside of keyframes().
- * Offsets within keyframes() are considered valid when:
- *
- * - No offsets are used at all
- * - Each style() entry contains an offset value
- * - Each offset is between 0 and 1
- * - Each offset is greater to or equal than the previous one
- *
- * Otherwise an error will be thrown.
- */
- function buildAnimationAst(driver, metadata, errors) {
- return new AnimationAstBuilderVisitor(driver).build(metadata, errors);
- }
- const ROOT_SELECTOR = '';
- class AnimationAstBuilderVisitor {
- constructor(_driver) {
- this._driver = _driver;
- }
- build(metadata, errors) {
- const context = new AnimationAstBuilderContext(errors);
- this._resetContextStyleTimingState(context);
- return visitDslNode(this, normalizeAnimationEntry(metadata), context);
- }
- _resetContextStyleTimingState(context) {
- context.currentQuerySelector = ROOT_SELECTOR;
- context.collectedStyles = {};
- context.collectedStyles[ROOT_SELECTOR] = {};
- context.currentTime = 0;
- }
- visitTrigger(metadata, context) {
- let queryCount = context.queryCount = 0;
- let depCount = context.depCount = 0;
- const states = [];
- const transitions = [];
- if (metadata.name.charAt(0) == '@') {
- context.errors.push('animation triggers cannot be prefixed with an `@` sign (e.g. trigger(\'@foo\', [...]))');
- }
- metadata.definitions.forEach(def => {
- this._resetContextStyleTimingState(context);
- if (def.type == 0 /* State */) {
- const stateDef = def;
- const name = stateDef.name;
- name.toString().split(/\s*,\s*/).forEach(n => {
- stateDef.name = n;
- states.push(this.visitState(stateDef, context));
- });
- stateDef.name = name;
- }
- else if (def.type == 1 /* Transition */) {
- const transition = this.visitTransition(def, context);
- queryCount += transition.queryCount;
- depCount += transition.depCount;
- transitions.push(transition);
- }
- else {
- context.errors.push('only state() and transition() definitions can sit inside of a trigger()');
- }
- });
- return {
- type: 7 /* Trigger */,
- name: metadata.name,
- states,
- transitions,
- queryCount,
- depCount,
- options: null
- };
- }
- visitState(metadata, context) {
- const styleAst = this.visitStyle(metadata.styles, context);
- const astParams = (metadata.options && metadata.options.params) || null;
- if (styleAst.containsDynamicStyles) {
- const missingSubs = new Set();
- const params = astParams || {};
- styleAst.styles.forEach(value => {
- if (isObject(value)) {
- const stylesObj = value;
- Object.keys(stylesObj).forEach(prop => {
- extractStyleParams(stylesObj[prop]).forEach(sub => {
- if (!params.hasOwnProperty(sub)) {
- missingSubs.add(sub);
- }
- });
- });
- }
- });
- if (missingSubs.size) {
- const missingSubsArr = iteratorToArray(missingSubs.values());
- context.errors.push(`state("${metadata
- .name}", ...) must define default values for all the following style substitutions: ${missingSubsArr.join(', ')}`);
- }
- }
- return {
- type: 0 /* State */,
- name: metadata.name,
- style: styleAst,
- options: astParams ? { params: astParams } : null
- };
- }
- visitTransition(metadata, context) {
- context.queryCount = 0;
- context.depCount = 0;
- const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);
- const matchers = parseTransitionExpr(metadata.expr, context.errors);
- return {
- type: 1 /* Transition */,
- matchers,
- animation,
- queryCount: context.queryCount,
- depCount: context.depCount,
- options: normalizeAnimationOptions(metadata.options)
- };
- }
- visitSequence(metadata, context) {
- return {
- type: 2 /* Sequence */,
- steps: metadata.steps.map(s => visitDslNode(this, s, context)),
- options: normalizeAnimationOptions(metadata.options)
- };
- }
- visitGroup(metadata, context) {
- const currentTime = context.currentTime;
- let furthestTime = 0;
- const steps = metadata.steps.map(step => {
- context.currentTime = currentTime;
- const innerAst = visitDslNode(this, step, context);
- furthestTime = Math.max(furthestTime, context.currentTime);
- return innerAst;
- });
- context.currentTime = furthestTime;
- return {
- type: 3 /* Group */,
- steps,
- options: normalizeAnimationOptions(metadata.options)
- };
- }
- visitAnimate(metadata, context) {
- const timingAst = constructTimingAst(metadata.timings, context.errors);
- context.currentAnimateTimings = timingAst;
- let styleAst;
- let styleMetadata = metadata.styles ? metadata.styles : Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["style"])({});
- if (styleMetadata.type == 5 /* Keyframes */) {
- styleAst = this.visitKeyframes(styleMetadata, context);
- }
- else {
- let styleMetadata = metadata.styles;
- let isEmpty = false;
- if (!styleMetadata) {
- isEmpty = true;
- const newStyleData = {};
- if (timingAst.easing) {
- newStyleData['easing'] = timingAst.easing;
- }
- styleMetadata = Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["style"])(newStyleData);
- }
- context.currentTime += timingAst.duration + timingAst.delay;
- const _styleAst = this.visitStyle(styleMetadata, context);
- _styleAst.isEmptyStep = isEmpty;
- styleAst = _styleAst;
- }
- context.currentAnimateTimings = null;
- return {
- type: 4 /* Animate */,
- timings: timingAst,
- style: styleAst,
- options: null
- };
- }
- visitStyle(metadata, context) {
- const ast = this._makeStyleAst(metadata, context);
- this._validateStyleAst(ast, context);
- return ast;
- }
- _makeStyleAst(metadata, context) {
- const styles = [];
- if (Array.isArray(metadata.styles)) {
- metadata.styles.forEach(styleTuple => {
- if (typeof styleTuple == 'string') {
- if (styleTuple == _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"]) {
- styles.push(styleTuple);
- }
- else {
- context.errors.push(`The provided style string value ${styleTuple} is not allowed.`);
- }
- }
- else {
- styles.push(styleTuple);
- }
- });
- }
- else {
- styles.push(metadata.styles);
- }
- let containsDynamicStyles = false;
- let collectedEasing = null;
- styles.forEach(styleData => {
- if (isObject(styleData)) {
- const styleMap = styleData;
- const easing = styleMap['easing'];
- if (easing) {
- collectedEasing = easing;
- delete styleMap['easing'];
- }
- if (!containsDynamicStyles) {
- for (let prop in styleMap) {
- const value = styleMap[prop];
- if (value.toString().indexOf(SUBSTITUTION_EXPR_START) >= 0) {
- containsDynamicStyles = true;
- break;
- }
- }
- }
- }
- });
- return {
- type: 6 /* Style */,
- styles,
- easing: collectedEasing,
- offset: metadata.offset,
- containsDynamicStyles,
- options: null
- };
- }
- _validateStyleAst(ast, context) {
- const timings = context.currentAnimateTimings;
- let endTime = context.currentTime;
- let startTime = context.currentTime;
- if (timings && startTime > 0) {
- startTime -= timings.duration + timings.delay;
- }
- ast.styles.forEach(tuple => {
- if (typeof tuple == 'string')
- return;
- Object.keys(tuple).forEach(prop => {
- if (!this._driver.validateStyleProperty(prop)) {
- context.errors.push(`The provided animation property "${prop}" is not a supported CSS property for animations`);
- return;
- }
- const collectedStyles = context.collectedStyles[context.currentQuerySelector];
- const collectedEntry = collectedStyles[prop];
- let updateCollectedStyle = true;
- if (collectedEntry) {
- if (startTime != endTime && startTime >= collectedEntry.startTime &&
- endTime <= collectedEntry.endTime) {
- context.errors.push(`The CSS property "${prop}" that exists between the times of "${collectedEntry.startTime}ms" and "${collectedEntry
- .endTime}ms" is also being animated in a parallel animation between the times of "${startTime}ms" and "${endTime}ms"`);
- updateCollectedStyle = false;
- }
- // we always choose the smaller start time value since we
- // want to have a record of the entire animation window where
- // the style property is being animated in between
- startTime = collectedEntry.startTime;
- }
- if (updateCollectedStyle) {
- collectedStyles[prop] = { startTime, endTime };
- }
- if (context.options) {
- validateStyleParams(tuple[prop], context.options, context.errors);
- }
- });
- });
- }
- visitKeyframes(metadata, context) {
- const ast = { type: 5 /* Keyframes */, styles: [], options: null };
- if (!context.currentAnimateTimings) {
- context.errors.push(`keyframes() must be placed inside of a call to animate()`);
- return ast;
- }
- const MAX_KEYFRAME_OFFSET = 1;
- let totalKeyframesWithOffsets = 0;
- const offsets = [];
- let offsetsOutOfOrder = false;
- let keyframesOutOfRange = false;
- let previousOffset = 0;
- const keyframes = metadata.steps.map(styles => {
- const style = this._makeStyleAst(styles, context);
- let offsetVal = style.offset != null ? style.offset : consumeOffset(style.styles);
- let offset = 0;
- if (offsetVal != null) {
- totalKeyframesWithOffsets++;
- offset = style.offset = offsetVal;
- }
- keyframesOutOfRange = keyframesOutOfRange || offset < 0 || offset > 1;
- offsetsOutOfOrder = offsetsOutOfOrder || offset < previousOffset;
- previousOffset = offset;
- offsets.push(offset);
- return style;
- });
- if (keyframesOutOfRange) {
- context.errors.push(`Please ensure that all keyframe offsets are between 0 and 1`);
- }
- if (offsetsOutOfOrder) {
- context.errors.push(`Please ensure that all keyframe offsets are in order`);
- }
- const length = metadata.steps.length;
- let generatedOffset = 0;
- if (totalKeyframesWithOffsets > 0 && totalKeyframesWithOffsets < length) {
- context.errors.push(`Not all style() steps within the declared keyframes() contain offsets`);
- }
- else if (totalKeyframesWithOffsets == 0) {
- generatedOffset = MAX_KEYFRAME_OFFSET / (length - 1);
- }
- const limit = length - 1;
- const currentTime = context.currentTime;
- const currentAnimateTimings = context.currentAnimateTimings;
- const animateDuration = currentAnimateTimings.duration;
- keyframes.forEach((kf, i) => {
- const offset = generatedOffset > 0 ? (i == limit ? 1 : (generatedOffset * i)) : offsets[i];
- const durationUpToThisFrame = offset * animateDuration;
- context.currentTime = currentTime + currentAnimateTimings.delay + durationUpToThisFrame;
- currentAnimateTimings.duration = durationUpToThisFrame;
- this._validateStyleAst(kf, context);
- kf.offset = offset;
- ast.styles.push(kf);
- });
- return ast;
- }
- visitReference(metadata, context) {
- return {
- type: 8 /* Reference */,
- animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),
- options: normalizeAnimationOptions(metadata.options)
- };
- }
- visitAnimateChild(metadata, context) {
- context.depCount++;
- return {
- type: 9 /* AnimateChild */,
- options: normalizeAnimationOptions(metadata.options)
- };
- }
- visitAnimateRef(metadata, context) {
- return {
- type: 10 /* AnimateRef */,
- animation: this.visitReference(metadata.animation, context),
- options: normalizeAnimationOptions(metadata.options)
- };
- }
- visitQuery(metadata, context) {
- const parentSelector = context.currentQuerySelector;
- const options = (metadata.options || {});
- context.queryCount++;
- context.currentQuery = metadata;
- const [selector, includeSelf] = normalizeSelector(metadata.selector);
- context.currentQuerySelector =
- parentSelector.length ? (parentSelector + ' ' + selector) : selector;
- getOrSetAsInMap(context.collectedStyles, context.currentQuerySelector, {});
- const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);
- context.currentQuery = null;
- context.currentQuerySelector = parentSelector;
- return {
- type: 11 /* Query */,
- selector,
- limit: options.limit || 0,
- optional: !!options.optional,
- includeSelf,
- animation,
- originalSelector: metadata.selector,
- options: normalizeAnimationOptions(metadata.options)
- };
- }
- visitStagger(metadata, context) {
- if (!context.currentQuery) {
- context.errors.push(`stagger() can only be used inside of query()`);
- }
- const timings = metadata.timings === 'full' ?
- { duration: 0, delay: 0, easing: 'full' } :
- resolveTiming(metadata.timings, context.errors, true);
- return {
- type: 12 /* Stagger */,
- animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),
- timings,
- options: null
- };
- }
- }
- function normalizeSelector(selector) {
- const hasAmpersand = selector.split(/\s*,\s*/).find(token => token == SELF_TOKEN) ? true : false;
- if (hasAmpersand) {
- selector = selector.replace(SELF_TOKEN_REGEX, '');
- }
- // the :enter and :leave selectors are filled in at runtime during timeline building
- selector = selector.replace(/@\*/g, NG_TRIGGER_SELECTOR)
- .replace(/@\w+/g, match => NG_TRIGGER_SELECTOR + '-' + match.substr(1))
- .replace(/:animating/g, NG_ANIMATING_SELECTOR);
- return [selector, hasAmpersand];
- }
- function normalizeParams(obj) {
- return obj ? copyObj(obj) : null;
- }
- class AnimationAstBuilderContext {
- constructor(errors) {
- this.errors = errors;
- this.queryCount = 0;
- this.depCount = 0;
- this.currentTransition = null;
- this.currentQuery = null;
- this.currentQuerySelector = null;
- this.currentAnimateTimings = null;
- this.currentTime = 0;
- this.collectedStyles = {};
- this.options = null;
- }
- }
- function consumeOffset(styles) {
- if (typeof styles == 'string')
- return null;
- let offset = null;
- if (Array.isArray(styles)) {
- styles.forEach(styleTuple => {
- if (isObject(styleTuple) && styleTuple.hasOwnProperty('offset')) {
- const obj = styleTuple;
- offset = parseFloat(obj['offset']);
- delete obj['offset'];
- }
- });
- }
- else if (isObject(styles) && styles.hasOwnProperty('offset')) {
- const obj = styles;
- offset = parseFloat(obj['offset']);
- delete obj['offset'];
- }
- return offset;
- }
- function isObject(value) {
- return !Array.isArray(value) && typeof value == 'object';
- }
- function constructTimingAst(value, errors) {
- let timings = null;
- if (value.hasOwnProperty('duration')) {
- timings = value;
- }
- else if (typeof value == 'number') {
- const duration = resolveTiming(value, errors).duration;
- return makeTimingAst(duration, 0, '');
- }
- const strValue = value;
- const isDynamic = strValue.split(/\s+/).some(v => v.charAt(0) == '{' && v.charAt(1) == '{');
- if (isDynamic) {
- const ast = makeTimingAst(0, 0, '');
- ast.dynamic = true;
- ast.strValue = strValue;
- return ast;
- }
- timings = timings || resolveTiming(strValue, errors);
- return makeTimingAst(timings.duration, timings.delay, timings.easing);
- }
- function normalizeAnimationOptions(options) {
- if (options) {
- options = copyObj(options);
- if (options['params']) {
- options['params'] = normalizeParams(options['params']);
- }
- }
- else {
- options = {};
- }
- return options;
- }
- function makeTimingAst(duration, delay, easing) {
- return { duration, delay, easing };
- }
- function createTimelineInstruction(element, keyframes, preStyleProps, postStyleProps, duration, delay, easing = null, subTimeline = false) {
- return {
- type: 1 /* TimelineAnimation */,
- element,
- keyframes,
- preStyleProps,
- postStyleProps,
- duration,
- delay,
- totalTime: duration + delay,
- easing,
- subTimeline
- };
- }
- class ElementInstructionMap {
- constructor() {
- this._map = new Map();
- }
- consume(element) {
- let instructions = this._map.get(element);
- if (instructions) {
- this._map.delete(element);
- }
- else {
- instructions = [];
- }
- return instructions;
- }
- append(element, instructions) {
- let existingInstructions = this._map.get(element);
- if (!existingInstructions) {
- this._map.set(element, existingInstructions = []);
- }
- existingInstructions.push(...instructions);
- }
- has(element) {
- return this._map.has(element);
- }
- clear() {
- this._map.clear();
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ONE_FRAME_IN_MILLISECONDS = 1;
- const ENTER_TOKEN = ':enter';
- const ENTER_TOKEN_REGEX = new RegExp(ENTER_TOKEN, 'g');
- const LEAVE_TOKEN = ':leave';
- const LEAVE_TOKEN_REGEX = new RegExp(LEAVE_TOKEN, 'g');
- /*
- * The code within this file aims to generate web-animations-compatible keyframes from Angular's
- * animation DSL code.
- *
- * The code below will be converted from:
- *
- * ```
- * sequence([
- * style({ opacity: 0 }),
- * animate(1000, style({ opacity: 0 }))
- * ])
- * ```
- *
- * To:
- * ```
- * keyframes = [{ opacity: 0, offset: 0 }, { opacity: 1, offset: 1 }]
- * duration = 1000
- * delay = 0
- * easing = ''
- * ```
- *
- * For this operation to cover the combination of animation verbs (style, animate, group, etc...) a
- * combination of prototypical inheritance, AST traversal and merge-sort-like algorithms are used.
- *
- * [AST Traversal]
- * Each of the animation verbs, when executed, will return an string-map object representing what
- * type of action it is (style, animate, group, etc...) and the data associated with it. This means
- * that when functional composition mix of these functions is evaluated (like in the example above)
- * then it will end up producing a tree of objects representing the animation itself.
- *
- * When this animation object tree is processed by the visitor code below it will visit each of the
- * verb statements within the visitor. And during each visit it will build the context of the
- * animation keyframes by interacting with the `TimelineBuilder`.
- *
- * [TimelineBuilder]
- * This class is responsible for tracking the styles and building a series of keyframe objects for a
- * timeline between a start and end time. The builder starts off with an initial timeline and each
- * time the AST comes across a `group()`, `keyframes()` or a combination of the two wihtin a
- * `sequence()` then it will generate a sub timeline for each step as well as a new one after
- * they are complete.
- *
- * As the AST is traversed, the timing state on each of the timelines will be incremented. If a sub
- * timeline was created (based on one of the cases above) then the parent timeline will attempt to
- * merge the styles used within the sub timelines into itself (only with group() this will happen).
- * This happens with a merge operation (much like how the merge works in mergesort) and it will only
- * copy the most recently used styles from the sub timelines into the parent timeline. This ensures
- * that if the styles are used later on in another phase of the animation then they will be the most
- * up-to-date values.
- *
- * [How Missing Styles Are Updated]
- * Each timeline has a `backFill` property which is responsible for filling in new styles into
- * already processed keyframes if a new style shows up later within the animation sequence.
- *
- * ```
- * sequence([
- * style({ width: 0 }),
- * animate(1000, style({ width: 100 })),
- * animate(1000, style({ width: 200 })),
- * animate(1000, style({ width: 300 }))
- * animate(1000, style({ width: 400, height: 400 })) // notice how `height` doesn't exist anywhere
- * else
- * ])
- * ```
- *
- * What is happening here is that the `height` value is added later in the sequence, but is missing
- * from all previous animation steps. Therefore when a keyframe is created it would also be missing
- * from all previous keyframes up until where it is first used. For the timeline keyframe generation
- * to properly fill in the style it will place the previous value (the value from the parent
- * timeline) or a default value of `*` into the backFill object. Given that each of the keyframe
- * styles are objects that prototypically inhert from the backFill object, this means that if a
- * value is added into the backFill then it will automatically propagate any missing values to all
- * keyframes. Therefore the missing `height` value will be properly filled into the already
- * processed keyframes.
- *
- * When a sub-timeline is created it will have its own backFill property. This is done so that
- * styles present within the sub-timeline do not accidentally seep into the previous/future timeline
- * keyframes
- *
- * (For prototypically-inherited contents to be detected a `for(i in obj)` loop must be used.)
- *
- * [Validation]
- * The code in this file is not responsible for validation. That functionality happens with within
- * the `AnimationValidatorVisitor` code.
- */
- function buildAnimationTimelines(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles = {}, finalStyles = {}, options, subInstructions, errors = []) {
- return new AnimationTimelineBuilderVisitor().buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors);
- }
- class AnimationTimelineBuilderVisitor {
- buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors = []) {
- subInstructions = subInstructions || new ElementInstructionMap();
- const context = new AnimationTimelineContext(driver, rootElement, subInstructions, enterClassName, leaveClassName, errors, []);
- context.options = options;
- context.currentTimeline.setStyles([startingStyles], null, context.errors, options);
- visitDslNode(this, ast, context);
- // this checks to see if an actual animation happened
- const timelines = context.timelines.filter(timeline => timeline.containsAnimation());
- if (timelines.length && Object.keys(finalStyles).length) {
- const tl = timelines[timelines.length - 1];
- if (!tl.allowOnlyTimelineStyles()) {
- tl.setStyles([finalStyles], null, context.errors, options);
- }
- }
- return timelines.length ? timelines.map(timeline => timeline.buildKeyframes()) :
- [createTimelineInstruction(rootElement, [], [], [], 0, 0, '', false)];
- }
- visitTrigger(ast, context) {
- // these values are not visited in this AST
- }
- visitState(ast, context) {
- // these values are not visited in this AST
- }
- visitTransition(ast, context) {
- // these values are not visited in this AST
- }
- visitAnimateChild(ast, context) {
- const elementInstructions = context.subInstructions.consume(context.element);
- if (elementInstructions) {
- const innerContext = context.createSubContext(ast.options);
- const startTime = context.currentTimeline.currentTime;
- const endTime = this._visitSubInstructions(elementInstructions, innerContext, innerContext.options);
- if (startTime != endTime) {
- // we do this on the upper context because we created a sub context for
- // the sub child animations
- context.transformIntoNewTimeline(endTime);
- }
- }
- context.previousNode = ast;
- }
- visitAnimateRef(ast, context) {
- const innerContext = context.createSubContext(ast.options);
- innerContext.transformIntoNewTimeline();
- this.visitReference(ast.animation, innerContext);
- context.transformIntoNewTimeline(innerContext.currentTimeline.currentTime);
- context.previousNode = ast;
- }
- _visitSubInstructions(instructions, context, options) {
- const startTime = context.currentTimeline.currentTime;
- let furthestTime = startTime;
- // this is a special-case for when a user wants to skip a sub
- // animation from being fired entirely.
- const duration = options.duration != null ? resolveTimingValue(options.duration) : null;
- const delay = options.delay != null ? resolveTimingValue(options.delay) : null;
- if (duration !== 0) {
- instructions.forEach(instruction => {
- const instructionTimings = context.appendInstructionToTimeline(instruction, duration, delay);
- furthestTime =
- Math.max(furthestTime, instructionTimings.duration + instructionTimings.delay);
- });
- }
- return furthestTime;
- }
- visitReference(ast, context) {
- context.updateOptions(ast.options, true);
- visitDslNode(this, ast.animation, context);
- context.previousNode = ast;
- }
- visitSequence(ast, context) {
- const subContextCount = context.subContextCount;
- let ctx = context;
- const options = ast.options;
- if (options && (options.params || options.delay)) {
- ctx = context.createSubContext(options);
- ctx.transformIntoNewTimeline();
- if (options.delay != null) {
- if (ctx.previousNode.type == 6 /* Style */) {
- ctx.currentTimeline.snapshotCurrentStyles();
- ctx.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;
- }
- const delay = resolveTimingValue(options.delay);
- ctx.delayNextStep(delay);
- }
- }
- if (ast.steps.length) {
- ast.steps.forEach(s => visitDslNode(this, s, ctx));
- // this is here just incase the inner steps only contain or end with a style() call
- ctx.currentTimeline.applyStylesToKeyframe();
- // this means that some animation function within the sequence
- // ended up creating a sub timeline (which means the current
- // timeline cannot overlap with the contents of the sequence)
- if (ctx.subContextCount > subContextCount) {
- ctx.transformIntoNewTimeline();
- }
- }
- context.previousNode = ast;
- }
- visitGroup(ast, context) {
- const innerTimelines = [];
- let furthestTime = context.currentTimeline.currentTime;
- const delay = ast.options && ast.options.delay ? resolveTimingValue(ast.options.delay) : 0;
- ast.steps.forEach(s => {
- const innerContext = context.createSubContext(ast.options);
- if (delay) {
- innerContext.delayNextStep(delay);
- }
- visitDslNode(this, s, innerContext);
- furthestTime = Math.max(furthestTime, innerContext.currentTimeline.currentTime);
- innerTimelines.push(innerContext.currentTimeline);
- });
- // this operation is run after the AST loop because otherwise
- // if the parent timeline's collected styles were updated then
- // it would pass in invalid data into the new-to-be forked items
- innerTimelines.forEach(timeline => context.currentTimeline.mergeTimelineCollectedStyles(timeline));
- context.transformIntoNewTimeline(furthestTime);
- context.previousNode = ast;
- }
- _visitTiming(ast, context) {
- if (ast.dynamic) {
- const strValue = ast.strValue;
- const timingValue = context.params ? interpolateParams(strValue, context.params, context.errors) : strValue;
- return resolveTiming(timingValue, context.errors);
- }
- else {
- return { duration: ast.duration, delay: ast.delay, easing: ast.easing };
- }
- }
- visitAnimate(ast, context) {
- const timings = context.currentAnimateTimings = this._visitTiming(ast.timings, context);
- const timeline = context.currentTimeline;
- if (timings.delay) {
- context.incrementTime(timings.delay);
- timeline.snapshotCurrentStyles();
- }
- const style = ast.style;
- if (style.type == 5 /* Keyframes */) {
- this.visitKeyframes(style, context);
- }
- else {
- context.incrementTime(timings.duration);
- this.visitStyle(style, context);
- timeline.applyStylesToKeyframe();
- }
- context.currentAnimateTimings = null;
- context.previousNode = ast;
- }
- visitStyle(ast, context) {
- const timeline = context.currentTimeline;
- const timings = context.currentAnimateTimings;
- // this is a special case for when a style() call
- // directly follows an animate() call (but not inside of an animate() call)
- if (!timings && timeline.getCurrentStyleProperties().length) {
- timeline.forwardFrame();
- }
- const easing = (timings && timings.easing) || ast.easing;
- if (ast.isEmptyStep) {
- timeline.applyEmptyStep(easing);
- }
- else {
- timeline.setStyles(ast.styles, easing, context.errors, context.options);
- }
- context.previousNode = ast;
- }
- visitKeyframes(ast, context) {
- const currentAnimateTimings = context.currentAnimateTimings;
- const startTime = (context.currentTimeline).duration;
- const duration = currentAnimateTimings.duration;
- const innerContext = context.createSubContext();
- const innerTimeline = innerContext.currentTimeline;
- innerTimeline.easing = currentAnimateTimings.easing;
- ast.styles.forEach(step => {
- const offset = step.offset || 0;
- innerTimeline.forwardTime(offset * duration);
- innerTimeline.setStyles(step.styles, step.easing, context.errors, context.options);
- innerTimeline.applyStylesToKeyframe();
- });
- // this will ensure that the parent timeline gets all the styles from
- // the child even if the new timeline below is not used
- context.currentTimeline.mergeTimelineCollectedStyles(innerTimeline);
- // we do this because the window between this timeline and the sub timeline
- // should ensure that the styles within are exactly the same as they were before
- context.transformIntoNewTimeline(startTime + duration);
- context.previousNode = ast;
- }
- visitQuery(ast, context) {
- // in the event that the first step before this is a style step we need
- // to ensure the styles are applied before the children are animated
- const startTime = context.currentTimeline.currentTime;
- const options = (ast.options || {});
- const delay = options.delay ? resolveTimingValue(options.delay) : 0;
- if (delay &&
- (context.previousNode.type === 6 /* Style */ ||
- (startTime == 0 && context.currentTimeline.getCurrentStyleProperties().length))) {
- context.currentTimeline.snapshotCurrentStyles();
- context.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;
- }
- let furthestTime = startTime;
- const elms = context.invokeQuery(ast.selector, ast.originalSelector, ast.limit, ast.includeSelf, options.optional ? true : false, context.errors);
- context.currentQueryTotal = elms.length;
- let sameElementTimeline = null;
- elms.forEach((element, i) => {
- context.currentQueryIndex = i;
- const innerContext = context.createSubContext(ast.options, element);
- if (delay) {
- innerContext.delayNextStep(delay);
- }
- if (element === context.element) {
- sameElementTimeline = innerContext.currentTimeline;
- }
- visitDslNode(this, ast.animation, innerContext);
- // this is here just incase the inner steps only contain or end
- // with a style() call (which is here to signal that this is a preparatory
- // call to style an element before it is animated again)
- innerContext.currentTimeline.applyStylesToKeyframe();
- const endTime = innerContext.currentTimeline.currentTime;
- furthestTime = Math.max(furthestTime, endTime);
- });
- context.currentQueryIndex = 0;
- context.currentQueryTotal = 0;
- context.transformIntoNewTimeline(furthestTime);
- if (sameElementTimeline) {
- context.currentTimeline.mergeTimelineCollectedStyles(sameElementTimeline);
- context.currentTimeline.snapshotCurrentStyles();
- }
- context.previousNode = ast;
- }
- visitStagger(ast, context) {
- const parentContext = context.parentContext;
- const tl = context.currentTimeline;
- const timings = ast.timings;
- const duration = Math.abs(timings.duration);
- const maxTime = duration * (context.currentQueryTotal - 1);
- let delay = duration * context.currentQueryIndex;
- let staggerTransformer = timings.duration < 0 ? 'reverse' : timings.easing;
- switch (staggerTransformer) {
- case 'reverse':
- delay = maxTime - delay;
- break;
- case 'full':
- delay = parentContext.currentStaggerTime;
- break;
- }
- const timeline = context.currentTimeline;
- if (delay) {
- timeline.delayNextStep(delay);
- }
- const startingTime = timeline.currentTime;
- visitDslNode(this, ast.animation, context);
- context.previousNode = ast;
- // time = duration + delay
- // the reason why this computation is so complex is because
- // the inner timeline may either have a delay value or a stretched
- // keyframe depending on if a subtimeline is not used or is used.
- parentContext.currentStaggerTime =
- (tl.currentTime - startingTime) + (tl.startTime - parentContext.currentTimeline.startTime);
- }
- }
- const DEFAULT_NOOP_PREVIOUS_NODE = {};
- class AnimationTimelineContext {
- constructor(_driver, element, subInstructions, _enterClassName, _leaveClassName, errors, timelines, initialTimeline) {
- this._driver = _driver;
- this.element = element;
- this.subInstructions = subInstructions;
- this._enterClassName = _enterClassName;
- this._leaveClassName = _leaveClassName;
- this.errors = errors;
- this.timelines = timelines;
- this.parentContext = null;
- this.currentAnimateTimings = null;
- this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;
- this.subContextCount = 0;
- this.options = {};
- this.currentQueryIndex = 0;
- this.currentQueryTotal = 0;
- this.currentStaggerTime = 0;
- this.currentTimeline = initialTimeline || new TimelineBuilder(this._driver, element, 0);
- timelines.push(this.currentTimeline);
- }
- get params() {
- return this.options.params;
- }
- updateOptions(options, skipIfExists) {
- if (!options)
- return;
- const newOptions = options;
- let optionsToUpdate = this.options;
- // NOTE: this will get patched up when other animation methods support duration overrides
- if (newOptions.duration != null) {
- optionsToUpdate.duration = resolveTimingValue(newOptions.duration);
- }
- if (newOptions.delay != null) {
- optionsToUpdate.delay = resolveTimingValue(newOptions.delay);
- }
- const newParams = newOptions.params;
- if (newParams) {
- let paramsToUpdate = optionsToUpdate.params;
- if (!paramsToUpdate) {
- paramsToUpdate = this.options.params = {};
- }
- Object.keys(newParams).forEach(name => {
- if (!skipIfExists || !paramsToUpdate.hasOwnProperty(name)) {
- paramsToUpdate[name] = interpolateParams(newParams[name], paramsToUpdate, this.errors);
- }
- });
- }
- }
- _copyOptions() {
- const options = {};
- if (this.options) {
- const oldParams = this.options.params;
- if (oldParams) {
- const params = options['params'] = {};
- Object.keys(oldParams).forEach(name => {
- params[name] = oldParams[name];
- });
- }
- }
- return options;
- }
- createSubContext(options = null, element, newTime) {
- const target = element || this.element;
- const context = new AnimationTimelineContext(this._driver, target, this.subInstructions, this._enterClassName, this._leaveClassName, this.errors, this.timelines, this.currentTimeline.fork(target, newTime || 0));
- context.previousNode = this.previousNode;
- context.currentAnimateTimings = this.currentAnimateTimings;
- context.options = this._copyOptions();
- context.updateOptions(options);
- context.currentQueryIndex = this.currentQueryIndex;
- context.currentQueryTotal = this.currentQueryTotal;
- context.parentContext = this;
- this.subContextCount++;
- return context;
- }
- transformIntoNewTimeline(newTime) {
- this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;
- this.currentTimeline = this.currentTimeline.fork(this.element, newTime);
- this.timelines.push(this.currentTimeline);
- return this.currentTimeline;
- }
- appendInstructionToTimeline(instruction, duration, delay) {
- const updatedTimings = {
- duration: duration != null ? duration : instruction.duration,
- delay: this.currentTimeline.currentTime + (delay != null ? delay : 0) + instruction.delay,
- easing: ''
- };
- const builder = new SubTimelineBuilder(this._driver, instruction.element, instruction.keyframes, instruction.preStyleProps, instruction.postStyleProps, updatedTimings, instruction.stretchStartingKeyframe);
- this.timelines.push(builder);
- return updatedTimings;
- }
- incrementTime(time) {
- this.currentTimeline.forwardTime(this.currentTimeline.duration + time);
- }
- delayNextStep(delay) {
- // negative delays are not yet supported
- if (delay > 0) {
- this.currentTimeline.delayNextStep(delay);
- }
- }
- invokeQuery(selector, originalSelector, limit, includeSelf, optional, errors) {
- let results = [];
- if (includeSelf) {
- results.push(this.element);
- }
- if (selector.length > 0) { // if :self is only used then the selector is empty
- selector = selector.replace(ENTER_TOKEN_REGEX, '.' + this._enterClassName);
- selector = selector.replace(LEAVE_TOKEN_REGEX, '.' + this._leaveClassName);
- const multi = limit != 1;
- let elements = this._driver.query(this.element, selector, multi);
- if (limit !== 0) {
- elements = limit < 0 ? elements.slice(elements.length + limit, elements.length) :
- elements.slice(0, limit);
- }
- results.push(...elements);
- }
- if (!optional && results.length == 0) {
- errors.push(`\`query("${originalSelector}")\` returned zero elements. (Use \`query("${originalSelector}", { optional: true })\` if you wish to allow this.)`);
- }
- return results;
- }
- }
- class TimelineBuilder {
- constructor(_driver, element, startTime, _elementTimelineStylesLookup) {
- this._driver = _driver;
- this.element = element;
- this.startTime = startTime;
- this._elementTimelineStylesLookup = _elementTimelineStylesLookup;
- this.duration = 0;
- this._previousKeyframe = {};
- this._currentKeyframe = {};
- this._keyframes = new Map();
- this._styleSummary = {};
- this._pendingStyles = {};
- this._backFill = {};
- this._currentEmptyStepKeyframe = null;
- if (!this._elementTimelineStylesLookup) {
- this._elementTimelineStylesLookup = new Map();
- }
- this._localTimelineStyles = Object.create(this._backFill, {});
- this._globalTimelineStyles = this._elementTimelineStylesLookup.get(element);
- if (!this._globalTimelineStyles) {
- this._globalTimelineStyles = this._localTimelineStyles;
- this._elementTimelineStylesLookup.set(element, this._localTimelineStyles);
- }
- this._loadKeyframe();
- }
- containsAnimation() {
- switch (this._keyframes.size) {
- case 0:
- return false;
- case 1:
- return this.getCurrentStyleProperties().length > 0;
- default:
- return true;
- }
- }
- getCurrentStyleProperties() {
- return Object.keys(this._currentKeyframe);
- }
- get currentTime() {
- return this.startTime + this.duration;
- }
- delayNextStep(delay) {
- // in the event that a style() step is placed right before a stagger()
- // and that style() step is the very first style() value in the animation
- // then we need to make a copy of the keyframe [0, copy, 1] so that the delay
- // properly applies the style() values to work with the stagger...
- const hasPreStyleStep = this._keyframes.size == 1 && Object.keys(this._pendingStyles).length;
- if (this.duration || hasPreStyleStep) {
- this.forwardTime(this.currentTime + delay);
- if (hasPreStyleStep) {
- this.snapshotCurrentStyles();
- }
- }
- else {
- this.startTime += delay;
- }
- }
- fork(element, currentTime) {
- this.applyStylesToKeyframe();
- return new TimelineBuilder(this._driver, element, currentTime || this.currentTime, this._elementTimelineStylesLookup);
- }
- _loadKeyframe() {
- if (this._currentKeyframe) {
- this._previousKeyframe = this._currentKeyframe;
- }
- this._currentKeyframe = this._keyframes.get(this.duration);
- if (!this._currentKeyframe) {
- this._currentKeyframe = Object.create(this._backFill, {});
- this._keyframes.set(this.duration, this._currentKeyframe);
- }
- }
- forwardFrame() {
- this.duration += ONE_FRAME_IN_MILLISECONDS;
- this._loadKeyframe();
- }
- forwardTime(time) {
- this.applyStylesToKeyframe();
- this.duration = time;
- this._loadKeyframe();
- }
- _updateStyle(prop, value) {
- this._localTimelineStyles[prop] = value;
- this._globalTimelineStyles[prop] = value;
- this._styleSummary[prop] = { time: this.currentTime, value };
- }
- allowOnlyTimelineStyles() {
- return this._currentEmptyStepKeyframe !== this._currentKeyframe;
- }
- applyEmptyStep(easing) {
- if (easing) {
- this._previousKeyframe['easing'] = easing;
- }
- // special case for animate(duration):
- // all missing styles are filled with a `*` value then
- // if any destination styles are filled in later on the same
- // keyframe then they will override the overridden styles
- // We use `_globalTimelineStyles` here because there may be
- // styles in previous keyframes that are not present in this timeline
- Object.keys(this._globalTimelineStyles).forEach(prop => {
- this._backFill[prop] = this._globalTimelineStyles[prop] || _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"];
- this._currentKeyframe[prop] = _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"];
- });
- this._currentEmptyStepKeyframe = this._currentKeyframe;
- }
- setStyles(input, easing, errors, options) {
- if (easing) {
- this._previousKeyframe['easing'] = easing;
- }
- const params = (options && options.params) || {};
- const styles = flattenStyles(input, this._globalTimelineStyles);
- Object.keys(styles).forEach(prop => {
- const val = interpolateParams(styles[prop], params, errors);
- this._pendingStyles[prop] = val;
- if (!this._localTimelineStyles.hasOwnProperty(prop)) {
- this._backFill[prop] = this._globalTimelineStyles.hasOwnProperty(prop) ?
- this._globalTimelineStyles[prop] :
- _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"];
- }
- this._updateStyle(prop, val);
- });
- }
- applyStylesToKeyframe() {
- const styles = this._pendingStyles;
- const props = Object.keys(styles);
- if (props.length == 0)
- return;
- this._pendingStyles = {};
- props.forEach(prop => {
- const val = styles[prop];
- this._currentKeyframe[prop] = val;
- });
- Object.keys(this._localTimelineStyles).forEach(prop => {
- if (!this._currentKeyframe.hasOwnProperty(prop)) {
- this._currentKeyframe[prop] = this._localTimelineStyles[prop];
- }
- });
- }
- snapshotCurrentStyles() {
- Object.keys(this._localTimelineStyles).forEach(prop => {
- const val = this._localTimelineStyles[prop];
- this._pendingStyles[prop] = val;
- this._updateStyle(prop, val);
- });
- }
- getFinalKeyframe() {
- return this._keyframes.get(this.duration);
- }
- get properties() {
- const properties = [];
- for (let prop in this._currentKeyframe) {
- properties.push(prop);
- }
- return properties;
- }
- mergeTimelineCollectedStyles(timeline) {
- Object.keys(timeline._styleSummary).forEach(prop => {
- const details0 = this._styleSummary[prop];
- const details1 = timeline._styleSummary[prop];
- if (!details0 || details1.time > details0.time) {
- this._updateStyle(prop, details1.value);
- }
- });
- }
- buildKeyframes() {
- this.applyStylesToKeyframe();
- const preStyleProps = new Set();
- const postStyleProps = new Set();
- const isEmpty = this._keyframes.size === 1 && this.duration === 0;
- let finalKeyframes = [];
- this._keyframes.forEach((keyframe, time) => {
- const finalKeyframe = copyStyles(keyframe, true);
- Object.keys(finalKeyframe).forEach(prop => {
- const value = finalKeyframe[prop];
- if (value == _angular_animations__WEBPACK_IMPORTED_MODULE_0__["ɵPRE_STYLE"]) {
- preStyleProps.add(prop);
- }
- else if (value == _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"]) {
- postStyleProps.add(prop);
- }
- });
- if (!isEmpty) {
- finalKeyframe['offset'] = time / this.duration;
- }
- finalKeyframes.push(finalKeyframe);
- });
- const preProps = preStyleProps.size ? iteratorToArray(preStyleProps.values()) : [];
- const postProps = postStyleProps.size ? iteratorToArray(postStyleProps.values()) : [];
- // special case for a 0-second animation (which is designed just to place styles onscreen)
- if (isEmpty) {
- const kf0 = finalKeyframes[0];
- const kf1 = copyObj(kf0);
- kf0['offset'] = 0;
- kf1['offset'] = 1;
- finalKeyframes = [kf0, kf1];
- }
- return createTimelineInstruction(this.element, finalKeyframes, preProps, postProps, this.duration, this.startTime, this.easing, false);
- }
- }
- class SubTimelineBuilder extends TimelineBuilder {
- constructor(driver, element, keyframes, preStyleProps, postStyleProps, timings, _stretchStartingKeyframe = false) {
- super(driver, element, timings.delay);
- this.element = element;
- this.keyframes = keyframes;
- this.preStyleProps = preStyleProps;
- this.postStyleProps = postStyleProps;
- this._stretchStartingKeyframe = _stretchStartingKeyframe;
- this.timings = { duration: timings.duration, delay: timings.delay, easing: timings.easing };
- }
- containsAnimation() {
- return this.keyframes.length > 1;
- }
- buildKeyframes() {
- let keyframes = this.keyframes;
- let { delay, duration, easing } = this.timings;
- if (this._stretchStartingKeyframe && delay) {
- const newKeyframes = [];
- const totalTime = duration + delay;
- const startingGap = delay / totalTime;
- // the original starting keyframe now starts once the delay is done
- const newFirstKeyframe = copyStyles(keyframes[0], false);
- newFirstKeyframe['offset'] = 0;
- newKeyframes.push(newFirstKeyframe);
- const oldFirstKeyframe = copyStyles(keyframes[0], false);
- oldFirstKeyframe['offset'] = roundOffset(startingGap);
- newKeyframes.push(oldFirstKeyframe);
- /*
- When the keyframe is stretched then it means that the delay before the animation
- starts is gone. Instead the first keyframe is placed at the start of the animation
- and it is then copied to where it starts when the original delay is over. This basically
- means nothing animates during that delay, but the styles are still renderered. For this
- to work the original offset values that exist in the original keyframes must be "warped"
- so that they can take the new keyframe + delay into account.
-
- delay=1000, duration=1000, keyframes = 0 .5 1
-
- turns into
-
- delay=0, duration=2000, keyframes = 0 .33 .66 1
- */
- // offsets between 1 ... n -1 are all warped by the keyframe stretch
- const limit = keyframes.length - 1;
- for (let i = 1; i <= limit; i++) {
- let kf = copyStyles(keyframes[i], false);
- const oldOffset = kf['offset'];
- const timeAtKeyframe = delay + oldOffset * duration;
- kf['offset'] = roundOffset(timeAtKeyframe / totalTime);
- newKeyframes.push(kf);
- }
- // the new starting keyframe should be added at the start
- duration = totalTime;
- delay = 0;
- easing = '';
- keyframes = newKeyframes;
- }
- return createTimelineInstruction(this.element, keyframes, this.preStyleProps, this.postStyleProps, duration, delay, easing, true);
- }
- }
- function roundOffset(offset, decimalPoints = 3) {
- const mult = Math.pow(10, decimalPoints - 1);
- return Math.round(offset * mult) / mult;
- }
- function flattenStyles(input, allStyles) {
- const styles = {};
- let allProperties;
- input.forEach(token => {
- if (token === '*') {
- allProperties = allProperties || Object.keys(allStyles);
- allProperties.forEach(prop => {
- styles[prop] = _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"];
- });
- }
- else {
- copyStyles(token, false, styles);
- }
- });
- return styles;
- }
- class Animation {
- constructor(_driver, input) {
- this._driver = _driver;
- const errors = [];
- const ast = buildAnimationAst(_driver, input, errors);
- if (errors.length) {
- const errorMessage = `animation validation failed:\n${errors.join('\n')}`;
- throw new Error(errorMessage);
- }
- this._animationAst = ast;
- }
- buildTimelines(element, startingStyles, destinationStyles, options, subInstructions) {
- const start = Array.isArray(startingStyles) ? normalizeStyles(startingStyles) :
- startingStyles;
- const dest = Array.isArray(destinationStyles) ? normalizeStyles(destinationStyles) :
- destinationStyles;
- const errors = [];
- subInstructions = subInstructions || new ElementInstructionMap();
- const result = buildAnimationTimelines(this._driver, element, this._animationAst, ENTER_CLASSNAME, LEAVE_CLASSNAME, start, dest, options, subInstructions, errors);
- if (errors.length) {
- const errorMessage = `animation building failed:\n${errors.join('\n')}`;
- throw new Error(errorMessage);
- }
- return result;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @publicApi
- */
- class AnimationStyleNormalizer {
- }
- /**
- * @publicApi
- */
- class NoopAnimationStyleNormalizer {
- normalizePropertyName(propertyName, errors) {
- return propertyName;
- }
- normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) {
- return value;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class WebAnimationsStyleNormalizer extends AnimationStyleNormalizer {
- normalizePropertyName(propertyName, errors) {
- return dashCaseToCamelCase(propertyName);
- }
- normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) {
- let unit = '';
- const strVal = value.toString().trim();
- if (DIMENSIONAL_PROP_MAP[normalizedProperty] && value !== 0 && value !== '0') {
- if (typeof value === 'number') {
- unit = 'px';
- }
- else {
- const valAndSuffixMatch = value.match(/^[+-]?[\d\.]+([a-z]*)$/);
- if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) {
- errors.push(`Please provide a CSS unit value for ${userProvidedProperty}:${value}`);
- }
- }
- }
- return strVal + unit;
- }
- }
- const ɵ0$1 = () => makeBooleanMap('width,height,minWidth,minHeight,maxWidth,maxHeight,left,top,bottom,right,fontSize,outlineWidth,outlineOffset,paddingTop,paddingLeft,paddingBottom,paddingRight,marginTop,marginLeft,marginBottom,marginRight,borderRadius,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,textIndent,perspective'
- .split(','));
- const DIMENSIONAL_PROP_MAP = (ɵ0$1)();
- function makeBooleanMap(keys) {
- const map = {};
- keys.forEach(key => map[key] = true);
- return map;
- }
- function createTransitionInstruction(element, triggerName, fromState, toState, isRemovalTransition, fromStyles, toStyles, timelines, queriedElements, preStyleProps, postStyleProps, totalTime, errors) {
- return {
- type: 0 /* TransitionAnimation */,
- element,
- triggerName,
- isRemovalTransition,
- fromState,
- fromStyles,
- toState,
- toStyles,
- timelines,
- queriedElements,
- preStyleProps,
- postStyleProps,
- totalTime,
- errors
- };
- }
- const EMPTY_OBJECT = {};
- class AnimationTransitionFactory {
- constructor(_triggerName, ast, _stateStyles) {
- this._triggerName = _triggerName;
- this.ast = ast;
- this._stateStyles = _stateStyles;
- }
- match(currentState, nextState, element, params) {
- return oneOrMoreTransitionsMatch(this.ast.matchers, currentState, nextState, element, params);
- }
- buildStyles(stateName, params, errors) {
- const backupStateStyler = this._stateStyles['*'];
- const stateStyler = this._stateStyles[stateName];
- const backupStyles = backupStateStyler ? backupStateStyler.buildStyles(params, errors) : {};
- return stateStyler ? stateStyler.buildStyles(params, errors) : backupStyles;
- }
- build(driver, element, currentState, nextState, enterClassName, leaveClassName, currentOptions, nextOptions, subInstructions, skipAstBuild) {
- const errors = [];
- const transitionAnimationParams = this.ast.options && this.ast.options.params || EMPTY_OBJECT;
- const currentAnimationParams = currentOptions && currentOptions.params || EMPTY_OBJECT;
- const currentStateStyles = this.buildStyles(currentState, currentAnimationParams, errors);
- const nextAnimationParams = nextOptions && nextOptions.params || EMPTY_OBJECT;
- const nextStateStyles = this.buildStyles(nextState, nextAnimationParams, errors);
- const queriedElements = new Set();
- const preStyleMap = new Map();
- const postStyleMap = new Map();
- const isRemoval = nextState === 'void';
- const animationOptions = { params: Object.assign(Object.assign({}, transitionAnimationParams), nextAnimationParams) };
- const timelines = skipAstBuild ?
- [] :
- buildAnimationTimelines(driver, element, this.ast.animation, enterClassName, leaveClassName, currentStateStyles, nextStateStyles, animationOptions, subInstructions, errors);
- let totalTime = 0;
- timelines.forEach(tl => {
- totalTime = Math.max(tl.duration + tl.delay, totalTime);
- });
- if (errors.length) {
- return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, [], [], preStyleMap, postStyleMap, totalTime, errors);
- }
- timelines.forEach(tl => {
- const elm = tl.element;
- const preProps = getOrSetAsInMap(preStyleMap, elm, {});
- tl.preStyleProps.forEach(prop => preProps[prop] = true);
- const postProps = getOrSetAsInMap(postStyleMap, elm, {});
- tl.postStyleProps.forEach(prop => postProps[prop] = true);
- if (elm !== element) {
- queriedElements.add(elm);
- }
- });
- const queriedElementsList = iteratorToArray(queriedElements.values());
- return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, timelines, queriedElementsList, preStyleMap, postStyleMap, totalTime);
- }
- }
- function oneOrMoreTransitionsMatch(matchFns, currentState, nextState, element, params) {
- return matchFns.some(fn => fn(currentState, nextState, element, params));
- }
- class AnimationStateStyles {
- constructor(styles, defaultParams) {
- this.styles = styles;
- this.defaultParams = defaultParams;
- }
- buildStyles(params, errors) {
- const finalStyles = {};
- const combinedParams = copyObj(this.defaultParams);
- Object.keys(params).forEach(key => {
- const value = params[key];
- if (value != null) {
- combinedParams[key] = value;
- }
- });
- this.styles.styles.forEach(value => {
- if (typeof value !== 'string') {
- const styleObj = value;
- Object.keys(styleObj).forEach(prop => {
- let val = styleObj[prop];
- if (val.length > 1) {
- val = interpolateParams(val, combinedParams, errors);
- }
- finalStyles[prop] = val;
- });
- }
- });
- return finalStyles;
- }
- }
- /**
- * @publicApi
- */
- function buildTrigger(name, ast) {
- return new AnimationTrigger(name, ast);
- }
- /**
- * @publicApi
- */
- class AnimationTrigger {
- constructor(name, ast) {
- this.name = name;
- this.ast = ast;
- this.transitionFactories = [];
- this.states = {};
- ast.states.forEach(ast => {
- const defaultParams = (ast.options && ast.options.params) || {};
- this.states[ast.name] = new AnimationStateStyles(ast.style, defaultParams);
- });
- balanceProperties(this.states, 'true', '1');
- balanceProperties(this.states, 'false', '0');
- ast.transitions.forEach(ast => {
- this.transitionFactories.push(new AnimationTransitionFactory(name, ast, this.states));
- });
- this.fallbackTransition = createFallbackTransition(name, this.states);
- }
- get containsQueries() {
- return this.ast.queryCount > 0;
- }
- matchTransition(currentState, nextState, element, params) {
- const entry = this.transitionFactories.find(f => f.match(currentState, nextState, element, params));
- return entry || null;
- }
- matchStyles(currentState, params, errors) {
- return this.fallbackTransition.buildStyles(currentState, params, errors);
- }
- }
- function createFallbackTransition(triggerName, states) {
- const matchers = [(fromState, toState) => true];
- const animation = { type: 2 /* Sequence */, steps: [], options: null };
- const transition = {
- type: 1 /* Transition */,
- animation,
- matchers,
- options: null,
- queryCount: 0,
- depCount: 0
- };
- return new AnimationTransitionFactory(triggerName, transition, states);
- }
- function balanceProperties(obj, key1, key2) {
- if (obj.hasOwnProperty(key1)) {
- if (!obj.hasOwnProperty(key2)) {
- obj[key2] = obj[key1];
- }
- }
- else if (obj.hasOwnProperty(key2)) {
- obj[key1] = obj[key2];
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const EMPTY_INSTRUCTION_MAP = new ElementInstructionMap();
- class TimelineAnimationEngine {
- constructor(bodyNode, _driver, _normalizer) {
- this.bodyNode = bodyNode;
- this._driver = _driver;
- this._normalizer = _normalizer;
- this._animations = {};
- this._playersById = {};
- this.players = [];
- }
- register(id, metadata) {
- const errors = [];
- const ast = buildAnimationAst(this._driver, metadata, errors);
- if (errors.length) {
- throw new Error(`Unable to build the animation due to the following errors: ${errors.join('\n')}`);
- }
- else {
- this._animations[id] = ast;
- }
- }
- _buildPlayer(i, preStyles, postStyles) {
- const element = i.element;
- const keyframes = normalizeKeyframes(this._driver, this._normalizer, element, i.keyframes, preStyles, postStyles);
- return this._driver.animate(element, keyframes, i.duration, i.delay, i.easing, [], true);
- }
- create(id, element, options = {}) {
- const errors = [];
- const ast = this._animations[id];
- let instructions;
- const autoStylesMap = new Map();
- if (ast) {
- instructions = buildAnimationTimelines(this._driver, element, ast, ENTER_CLASSNAME, LEAVE_CLASSNAME, {}, {}, options, EMPTY_INSTRUCTION_MAP, errors);
- instructions.forEach(inst => {
- const styles = getOrSetAsInMap(autoStylesMap, inst.element, {});
- inst.postStyleProps.forEach(prop => styles[prop] = null);
- });
- }
- else {
- errors.push('The requested animation doesn\'t exist or has already been destroyed');
- instructions = [];
- }
- if (errors.length) {
- throw new Error(`Unable to create the animation due to the following errors: ${errors.join('\n')}`);
- }
- autoStylesMap.forEach((styles, element) => {
- Object.keys(styles).forEach(prop => {
- styles[prop] = this._driver.computeStyle(element, prop, _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"]);
- });
- });
- const players = instructions.map(i => {
- const styles = autoStylesMap.get(i.element);
- return this._buildPlayer(i, {}, styles);
- });
- const player = optimizeGroupPlayer(players);
- this._playersById[id] = player;
- player.onDestroy(() => this.destroy(id));
- this.players.push(player);
- return player;
- }
- destroy(id) {
- const player = this._getPlayer(id);
- player.destroy();
- delete this._playersById[id];
- const index = this.players.indexOf(player);
- if (index >= 0) {
- this.players.splice(index, 1);
- }
- }
- _getPlayer(id) {
- const player = this._playersById[id];
- if (!player) {
- throw new Error(`Unable to find the timeline player referenced by ${id}`);
- }
- return player;
- }
- listen(id, element, eventName, callback) {
- // triggerName, fromState, toState are all ignored for timeline animations
- const baseEvent = makeAnimationEvent(element, '', '', '');
- listenOnPlayer(this._getPlayer(id), eventName, baseEvent, callback);
- return () => { };
- }
- command(id, element, command, args) {
- if (command == 'register') {
- this.register(id, args[0]);
- return;
- }
- if (command == 'create') {
- const options = (args[0] || {});
- this.create(id, element, options);
- return;
- }
- const player = this._getPlayer(id);
- switch (command) {
- case 'play':
- player.play();
- break;
- case 'pause':
- player.pause();
- break;
- case 'reset':
- player.reset();
- break;
- case 'restart':
- player.restart();
- break;
- case 'finish':
- player.finish();
- break;
- case 'init':
- player.init();
- break;
- case 'setPosition':
- player.setPosition(parseFloat(args[0]));
- break;
- case 'destroy':
- this.destroy(id);
- break;
- }
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const QUEUED_CLASSNAME = 'ng-animate-queued';
- const QUEUED_SELECTOR = '.ng-animate-queued';
- const DISABLED_CLASSNAME = 'ng-animate-disabled';
- const DISABLED_SELECTOR = '.ng-animate-disabled';
- const STAR_CLASSNAME = 'ng-star-inserted';
- const STAR_SELECTOR = '.ng-star-inserted';
- const EMPTY_PLAYER_ARRAY = [];
- const NULL_REMOVAL_STATE = {
- namespaceId: '',
- setForRemoval: false,
- setForMove: false,
- hasAnimation: false,
- removedBeforeQueried: false
- };
- const NULL_REMOVED_QUERIED_STATE = {
- namespaceId: '',
- setForMove: false,
- setForRemoval: false,
- hasAnimation: false,
- removedBeforeQueried: true
- };
- const REMOVAL_FLAG = '__ng_removed';
- class StateValue {
- constructor(input, namespaceId = '') {
- this.namespaceId = namespaceId;
- const isObj = input && input.hasOwnProperty('value');
- const value = isObj ? input['value'] : input;
- this.value = normalizeTriggerValue(value);
- if (isObj) {
- const options = copyObj(input);
- delete options['value'];
- this.options = options;
- }
- else {
- this.options = {};
- }
- if (!this.options.params) {
- this.options.params = {};
- }
- }
- get params() {
- return this.options.params;
- }
- absorbOptions(options) {
- const newParams = options.params;
- if (newParams) {
- const oldParams = this.options.params;
- Object.keys(newParams).forEach(prop => {
- if (oldParams[prop] == null) {
- oldParams[prop] = newParams[prop];
- }
- });
- }
- }
- }
- const VOID_VALUE = 'void';
- const DEFAULT_STATE_VALUE = new StateValue(VOID_VALUE);
- class AnimationTransitionNamespace {
- constructor(id, hostElement, _engine) {
- this.id = id;
- this.hostElement = hostElement;
- this._engine = _engine;
- this.players = [];
- this._triggers = {};
- this._queue = [];
- this._elementListeners = new Map();
- this._hostClassName = 'ng-tns-' + id;
- addClass(hostElement, this._hostClassName);
- }
- listen(element, name, phase, callback) {
- if (!this._triggers.hasOwnProperty(name)) {
- throw new Error(`Unable to listen on the animation trigger event "${phase}" because the animation trigger "${name}" doesn\'t exist!`);
- }
- if (phase == null || phase.length == 0) {
- throw new Error(`Unable to listen on the animation trigger "${name}" because the provided event is undefined!`);
- }
- if (!isTriggerEventValid(phase)) {
- throw new Error(`The provided animation trigger event "${phase}" for the animation trigger "${name}" is not supported!`);
- }
- const listeners = getOrSetAsInMap(this._elementListeners, element, []);
- const data = { name, phase, callback };
- listeners.push(data);
- const triggersWithStates = getOrSetAsInMap(this._engine.statesByElement, element, {});
- if (!triggersWithStates.hasOwnProperty(name)) {
- addClass(element, NG_TRIGGER_CLASSNAME);
- addClass(element, NG_TRIGGER_CLASSNAME + '-' + name);
- triggersWithStates[name] = DEFAULT_STATE_VALUE;
- }
- return () => {
- // the event listener is removed AFTER the flush has occurred such
- // that leave animations callbacks can fire (otherwise if the node
- // is removed in between then the listeners would be deregistered)
- this._engine.afterFlush(() => {
- const index = listeners.indexOf(data);
- if (index >= 0) {
- listeners.splice(index, 1);
- }
- if (!this._triggers[name]) {
- delete triggersWithStates[name];
- }
- });
- };
- }
- register(name, ast) {
- if (this._triggers[name]) {
- // throw
- return false;
- }
- else {
- this._triggers[name] = ast;
- return true;
- }
- }
- _getTrigger(name) {
- const trigger = this._triggers[name];
- if (!trigger) {
- throw new Error(`The provided animation trigger "${name}" has not been registered!`);
- }
- return trigger;
- }
- trigger(element, triggerName, value, defaultToFallback = true) {
- const trigger = this._getTrigger(triggerName);
- const player = new TransitionAnimationPlayer(this.id, triggerName, element);
- let triggersWithStates = this._engine.statesByElement.get(element);
- if (!triggersWithStates) {
- addClass(element, NG_TRIGGER_CLASSNAME);
- addClass(element, NG_TRIGGER_CLASSNAME + '-' + triggerName);
- this._engine.statesByElement.set(element, triggersWithStates = {});
- }
- let fromState = triggersWithStates[triggerName];
- const toState = new StateValue(value, this.id);
- const isObj = value && value.hasOwnProperty('value');
- if (!isObj && fromState) {
- toState.absorbOptions(fromState.options);
- }
- triggersWithStates[triggerName] = toState;
- if (!fromState) {
- fromState = DEFAULT_STATE_VALUE;
- }
- const isRemoval = toState.value === VOID_VALUE;
- // normally this isn't reached by here, however, if an object expression
- // is passed in then it may be a new object each time. Comparing the value
- // is important since that will stay the same despite there being a new object.
- // The removal arc here is special cased because the same element is triggered
- // twice in the event that it contains animations on the outer/inner portions
- // of the host container
- if (!isRemoval && fromState.value === toState.value) {
- // this means that despite the value not changing, some inner params
- // have changed which means that the animation final styles need to be applied
- if (!objEquals(fromState.params, toState.params)) {
- const errors = [];
- const fromStyles = trigger.matchStyles(fromState.value, fromState.params, errors);
- const toStyles = trigger.matchStyles(toState.value, toState.params, errors);
- if (errors.length) {
- this._engine.reportError(errors);
- }
- else {
- this._engine.afterFlush(() => {
- eraseStyles(element, fromStyles);
- setStyles(element, toStyles);
- });
- }
- }
- return;
- }
- const playersOnElement = getOrSetAsInMap(this._engine.playersByElement, element, []);
- playersOnElement.forEach(player => {
- // only remove the player if it is queued on the EXACT same trigger/namespace
- // we only also deal with queued players here because if the animation has
- // started then we want to keep the player alive until the flush happens
- // (which is where the previousPlayers are passed into the new palyer)
- if (player.namespaceId == this.id && player.triggerName == triggerName && player.queued) {
- player.destroy();
- }
- });
- let transition = trigger.matchTransition(fromState.value, toState.value, element, toState.params);
- let isFallbackTransition = false;
- if (!transition) {
- if (!defaultToFallback)
- return;
- transition = trigger.fallbackTransition;
- isFallbackTransition = true;
- }
- this._engine.totalQueuedPlayers++;
- this._queue.push({ element, triggerName, transition, fromState, toState, player, isFallbackTransition });
- if (!isFallbackTransition) {
- addClass(element, QUEUED_CLASSNAME);
- player.onStart(() => {
- removeClass(element, QUEUED_CLASSNAME);
- });
- }
- player.onDone(() => {
- let index = this.players.indexOf(player);
- if (index >= 0) {
- this.players.splice(index, 1);
- }
- const players = this._engine.playersByElement.get(element);
- if (players) {
- let index = players.indexOf(player);
- if (index >= 0) {
- players.splice(index, 1);
- }
- }
- });
- this.players.push(player);
- playersOnElement.push(player);
- return player;
- }
- deregister(name) {
- delete this._triggers[name];
- this._engine.statesByElement.forEach((stateMap, element) => {
- delete stateMap[name];
- });
- this._elementListeners.forEach((listeners, element) => {
- this._elementListeners.set(element, listeners.filter(entry => {
- return entry.name != name;
- }));
- });
- }
- clearElementCache(element) {
- this._engine.statesByElement.delete(element);
- this._elementListeners.delete(element);
- const elementPlayers = this._engine.playersByElement.get(element);
- if (elementPlayers) {
- elementPlayers.forEach(player => player.destroy());
- this._engine.playersByElement.delete(element);
- }
- }
- _signalRemovalForInnerTriggers(rootElement, context) {
- const elements = this._engine.driver.query(rootElement, NG_TRIGGER_SELECTOR, true);
- // emulate a leave animation for all inner nodes within this node.
- // If there are no animations found for any of the nodes then clear the cache
- // for the element.
- elements.forEach(elm => {
- // this means that an inner remove() operation has already kicked off
- // the animation on this element...
- if (elm[REMOVAL_FLAG])
- return;
- const namespaces = this._engine.fetchNamespacesByElement(elm);
- if (namespaces.size) {
- namespaces.forEach(ns => ns.triggerLeaveAnimation(elm, context, false, true));
- }
- else {
- this.clearElementCache(elm);
- }
- });
- // If the child elements were removed along with the parent, their animations might not
- // have completed. Clear all the elements from the cache so we don't end up with a memory leak.
- this._engine.afterFlushAnimationsDone(() => elements.forEach(elm => this.clearElementCache(elm)));
- }
- triggerLeaveAnimation(element, context, destroyAfterComplete, defaultToFallback) {
- const triggerStates = this._engine.statesByElement.get(element);
- if (triggerStates) {
- const players = [];
- Object.keys(triggerStates).forEach(triggerName => {
- // this check is here in the event that an element is removed
- // twice (both on the host level and the component level)
- if (this._triggers[triggerName]) {
- const player = this.trigger(element, triggerName, VOID_VALUE, defaultToFallback);
- if (player) {
- players.push(player);
- }
- }
- });
- if (players.length) {
- this._engine.markElementAsRemoved(this.id, element, true, context);
- if (destroyAfterComplete) {
- optimizeGroupPlayer(players).onDone(() => this._engine.processLeaveNode(element));
- }
- return true;
- }
- }
- return false;
- }
- prepareLeaveAnimationListeners(element) {
- const listeners = this._elementListeners.get(element);
- if (listeners) {
- const visitedTriggers = new Set();
- listeners.forEach(listener => {
- const triggerName = listener.name;
- if (visitedTriggers.has(triggerName))
- return;
- visitedTriggers.add(triggerName);
- const trigger = this._triggers[triggerName];
- const transition = trigger.fallbackTransition;
- const elementStates = this._engine.statesByElement.get(element);
- const fromState = elementStates[triggerName] || DEFAULT_STATE_VALUE;
- const toState = new StateValue(VOID_VALUE);
- const player = new TransitionAnimationPlayer(this.id, triggerName, element);
- this._engine.totalQueuedPlayers++;
- this._queue.push({
- element,
- triggerName,
- transition,
- fromState,
- toState,
- player,
- isFallbackTransition: true
- });
- });
- }
- }
- removeNode(element, context) {
- const engine = this._engine;
- if (element.childElementCount) {
- this._signalRemovalForInnerTriggers(element, context);
- }
- // this means that a * => VOID animation was detected and kicked off
- if (this.triggerLeaveAnimation(element, context, true))
- return;
- // find the player that is animating and make sure that the
- // removal is delayed until that player has completed
- let containsPotentialParentTransition = false;
- if (engine.totalAnimations) {
- const currentPlayers = engine.players.length ? engine.playersByQueriedElement.get(element) : [];
- // when this `if statement` does not continue forward it means that
- // a previous animation query has selected the current element and
- // is animating it. In this situation want to continue forwards and
- // allow the element to be queued up for animation later.
- if (currentPlayers && currentPlayers.length) {
- containsPotentialParentTransition = true;
- }
- else {
- let parent = element;
- while (parent = parent.parentNode) {
- const triggers = engine.statesByElement.get(parent);
- if (triggers) {
- containsPotentialParentTransition = true;
- break;
- }
- }
- }
- }
- // at this stage we know that the element will either get removed
- // during flush or will be picked up by a parent query. Either way
- // we need to fire the listeners for this element when it DOES get
- // removed (once the query parent animation is done or after flush)
- this.prepareLeaveAnimationListeners(element);
- // whether or not a parent has an animation we need to delay the deferral of the leave
- // operation until we have more information (which we do after flush() has been called)
- if (containsPotentialParentTransition) {
- engine.markElementAsRemoved(this.id, element, false, context);
- }
- else {
- const removalFlag = element[REMOVAL_FLAG];
- if (!removalFlag || removalFlag === NULL_REMOVAL_STATE) {
- // we do this after the flush has occurred such
- // that the callbacks can be fired
- engine.afterFlush(() => this.clearElementCache(element));
- engine.destroyInnerAnimations(element);
- engine._onRemovalComplete(element, context);
- }
- }
- }
- insertNode(element, parent) {
- addClass(element, this._hostClassName);
- }
- drainQueuedTransitions(microtaskId) {
- const instructions = [];
- this._queue.forEach(entry => {
- const player = entry.player;
- if (player.destroyed)
- return;
- const element = entry.element;
- const listeners = this._elementListeners.get(element);
- if (listeners) {
- listeners.forEach((listener) => {
- if (listener.name == entry.triggerName) {
- const baseEvent = makeAnimationEvent(element, entry.triggerName, entry.fromState.value, entry.toState.value);
- baseEvent['_data'] = microtaskId;
- listenOnPlayer(entry.player, listener.phase, baseEvent, listener.callback);
- }
- });
- }
- if (player.markedForDestroy) {
- this._engine.afterFlush(() => {
- // now we can destroy the element properly since the event listeners have
- // been bound to the player
- player.destroy();
- });
- }
- else {
- instructions.push(entry);
- }
- });
- this._queue = [];
- return instructions.sort((a, b) => {
- // if depCount == 0 them move to front
- // otherwise if a contains b then move back
- const d0 = a.transition.ast.depCount;
- const d1 = b.transition.ast.depCount;
- if (d0 == 0 || d1 == 0) {
- return d0 - d1;
- }
- return this._engine.driver.containsElement(a.element, b.element) ? 1 : -1;
- });
- }
- destroy(context) {
- this.players.forEach(p => p.destroy());
- this._signalRemovalForInnerTriggers(this.hostElement, context);
- }
- elementContainsData(element) {
- let containsData = false;
- if (this._elementListeners.has(element))
- containsData = true;
- containsData =
- (this._queue.find(entry => entry.element === element) ? true : false) || containsData;
- return containsData;
- }
- }
- class TransitionAnimationEngine {
- constructor(bodyNode, driver, _normalizer) {
- this.bodyNode = bodyNode;
- this.driver = driver;
- this._normalizer = _normalizer;
- this.players = [];
- this.newHostElements = new Map();
- this.playersByElement = new Map();
- this.playersByQueriedElement = new Map();
- this.statesByElement = new Map();
- this.disabledNodes = new Set();
- this.totalAnimations = 0;
- this.totalQueuedPlayers = 0;
- this._namespaceLookup = {};
- this._namespaceList = [];
- this._flushFns = [];
- this._whenQuietFns = [];
- this.namespacesByHostElement = new Map();
- this.collectedEnterElements = [];
- this.collectedLeaveElements = [];
- // this method is designed to be overridden by the code that uses this engine
- this.onRemovalComplete = (element, context) => { };
- }
- /** @internal */
- _onRemovalComplete(element, context) {
- this.onRemovalComplete(element, context);
- }
- get queuedPlayers() {
- const players = [];
- this._namespaceList.forEach(ns => {
- ns.players.forEach(player => {
- if (player.queued) {
- players.push(player);
- }
- });
- });
- return players;
- }
- createNamespace(namespaceId, hostElement) {
- const ns = new AnimationTransitionNamespace(namespaceId, hostElement, this);
- if (hostElement.parentNode) {
- this._balanceNamespaceList(ns, hostElement);
- }
- else {
- // defer this later until flush during when the host element has
- // been inserted so that we know exactly where to place it in
- // the namespace list
- this.newHostElements.set(hostElement, ns);
- // given that this host element is apart of the animation code, it
- // may or may not be inserted by a parent node that is an of an
- // animation renderer type. If this happens then we can still have
- // access to this item when we query for :enter nodes. If the parent
- // is a renderer then the set data-structure will normalize the entry
- this.collectEnterElement(hostElement);
- }
- return this._namespaceLookup[namespaceId] = ns;
- }
- _balanceNamespaceList(ns, hostElement) {
- const limit = this._namespaceList.length - 1;
- if (limit >= 0) {
- let found = false;
- for (let i = limit; i >= 0; i--) {
- const nextNamespace = this._namespaceList[i];
- if (this.driver.containsElement(nextNamespace.hostElement, hostElement)) {
- this._namespaceList.splice(i + 1, 0, ns);
- found = true;
- break;
- }
- }
- if (!found) {
- this._namespaceList.splice(0, 0, ns);
- }
- }
- else {
- this._namespaceList.push(ns);
- }
- this.namespacesByHostElement.set(hostElement, ns);
- return ns;
- }
- register(namespaceId, hostElement) {
- let ns = this._namespaceLookup[namespaceId];
- if (!ns) {
- ns = this.createNamespace(namespaceId, hostElement);
- }
- return ns;
- }
- registerTrigger(namespaceId, name, trigger) {
- let ns = this._namespaceLookup[namespaceId];
- if (ns && ns.register(name, trigger)) {
- this.totalAnimations++;
- }
- }
- destroy(namespaceId, context) {
- if (!namespaceId)
- return;
- const ns = this._fetchNamespace(namespaceId);
- this.afterFlush(() => {
- this.namespacesByHostElement.delete(ns.hostElement);
- delete this._namespaceLookup[namespaceId];
- const index = this._namespaceList.indexOf(ns);
- if (index >= 0) {
- this._namespaceList.splice(index, 1);
- }
- });
- this.afterFlushAnimationsDone(() => ns.destroy(context));
- }
- _fetchNamespace(id) {
- return this._namespaceLookup[id];
- }
- fetchNamespacesByElement(element) {
- // normally there should only be one namespace per element, however
- // if @triggers are placed on both the component element and then
- // its host element (within the component code) then there will be
- // two namespaces returned. We use a set here to simply the dedupe
- // of namespaces incase there are multiple triggers both the elm and host
- const namespaces = new Set();
- const elementStates = this.statesByElement.get(element);
- if (elementStates) {
- const keys = Object.keys(elementStates);
- for (let i = 0; i < keys.length; i++) {
- const nsId = elementStates[keys[i]].namespaceId;
- if (nsId) {
- const ns = this._fetchNamespace(nsId);
- if (ns) {
- namespaces.add(ns);
- }
- }
- }
- }
- return namespaces;
- }
- trigger(namespaceId, element, name, value) {
- if (isElementNode(element)) {
- const ns = this._fetchNamespace(namespaceId);
- if (ns) {
- ns.trigger(element, name, value);
- return true;
- }
- }
- return false;
- }
- insertNode(namespaceId, element, parent, insertBefore) {
- if (!isElementNode(element))
- return;
- // special case for when an element is removed and reinserted (move operation)
- // when this occurs we do not want to use the element for deletion later
- const details = element[REMOVAL_FLAG];
- if (details && details.setForRemoval) {
- details.setForRemoval = false;
- details.setForMove = true;
- const index = this.collectedLeaveElements.indexOf(element);
- if (index >= 0) {
- this.collectedLeaveElements.splice(index, 1);
- }
- }
- // in the event that the namespaceId is blank then the caller
- // code does not contain any animation code in it, but it is
- // just being called so that the node is marked as being inserted
- if (namespaceId) {
- const ns = this._fetchNamespace(namespaceId);
- // This if-statement is a workaround for router issue #21947.
- // The router sometimes hits a race condition where while a route
- // is being instantiated a new navigation arrives, triggering leave
- // animation of DOM that has not been fully initialized, until this
- // is resolved, we need to handle the scenario when DOM is not in a
- // consistent state during the animation.
- if (ns) {
- ns.insertNode(element, parent);
- }
- }
- // only *directives and host elements are inserted before
- if (insertBefore) {
- this.collectEnterElement(element);
- }
- }
- collectEnterElement(element) {
- this.collectedEnterElements.push(element);
- }
- markElementAsDisabled(element, value) {
- if (value) {
- if (!this.disabledNodes.has(element)) {
- this.disabledNodes.add(element);
- addClass(element, DISABLED_CLASSNAME);
- }
- }
- else if (this.disabledNodes.has(element)) {
- this.disabledNodes.delete(element);
- removeClass(element, DISABLED_CLASSNAME);
- }
- }
- removeNode(namespaceId, element, isHostElement, context) {
- if (isElementNode(element)) {
- const ns = namespaceId ? this._fetchNamespace(namespaceId) : null;
- if (ns) {
- ns.removeNode(element, context);
- }
- else {
- this.markElementAsRemoved(namespaceId, element, false, context);
- }
- if (isHostElement) {
- const hostNS = this.namespacesByHostElement.get(element);
- if (hostNS && hostNS.id !== namespaceId) {
- hostNS.removeNode(element, context);
- }
- }
- }
- else {
- this._onRemovalComplete(element, context);
- }
- }
- markElementAsRemoved(namespaceId, element, hasAnimation, context) {
- this.collectedLeaveElements.push(element);
- element[REMOVAL_FLAG] =
- { namespaceId, setForRemoval: context, hasAnimation, removedBeforeQueried: false };
- }
- listen(namespaceId, element, name, phase, callback) {
- if (isElementNode(element)) {
- return this._fetchNamespace(namespaceId).listen(element, name, phase, callback);
- }
- return () => { };
- }
- _buildInstruction(entry, subTimelines, enterClassName, leaveClassName, skipBuildAst) {
- return entry.transition.build(this.driver, entry.element, entry.fromState.value, entry.toState.value, enterClassName, leaveClassName, entry.fromState.options, entry.toState.options, subTimelines, skipBuildAst);
- }
- destroyInnerAnimations(containerElement) {
- let elements = this.driver.query(containerElement, NG_TRIGGER_SELECTOR, true);
- elements.forEach(element => this.destroyActiveAnimationsForElement(element));
- if (this.playersByQueriedElement.size == 0)
- return;
- elements = this.driver.query(containerElement, NG_ANIMATING_SELECTOR, true);
- elements.forEach(element => this.finishActiveQueriedAnimationOnElement(element));
- }
- destroyActiveAnimationsForElement(element) {
- const players = this.playersByElement.get(element);
- if (players) {
- players.forEach(player => {
- // special case for when an element is set for destruction, but hasn't started.
- // in this situation we want to delay the destruction until the flush occurs
- // so that any event listeners attached to the player are triggered.
- if (player.queued) {
- player.markedForDestroy = true;
- }
- else {
- player.destroy();
- }
- });
- }
- }
- finishActiveQueriedAnimationOnElement(element) {
- const players = this.playersByQueriedElement.get(element);
- if (players) {
- players.forEach(player => player.finish());
- }
- }
- whenRenderingDone() {
- return new Promise(resolve => {
- if (this.players.length) {
- return optimizeGroupPlayer(this.players).onDone(() => resolve());
- }
- else {
- resolve();
- }
- });
- }
- processLeaveNode(element) {
- const details = element[REMOVAL_FLAG];
- if (details && details.setForRemoval) {
- // this will prevent it from removing it twice
- element[REMOVAL_FLAG] = NULL_REMOVAL_STATE;
- if (details.namespaceId) {
- this.destroyInnerAnimations(element);
- const ns = this._fetchNamespace(details.namespaceId);
- if (ns) {
- ns.clearElementCache(element);
- }
- }
- this._onRemovalComplete(element, details.setForRemoval);
- }
- if (this.driver.matchesElement(element, DISABLED_SELECTOR)) {
- this.markElementAsDisabled(element, false);
- }
- this.driver.query(element, DISABLED_SELECTOR, true).forEach(node => {
- this.markElementAsDisabled(node, false);
- });
- }
- flush(microtaskId = -1) {
- let players = [];
- if (this.newHostElements.size) {
- this.newHostElements.forEach((ns, element) => this._balanceNamespaceList(ns, element));
- this.newHostElements.clear();
- }
- if (this.totalAnimations && this.collectedEnterElements.length) {
- for (let i = 0; i < this.collectedEnterElements.length; i++) {
- const elm = this.collectedEnterElements[i];
- addClass(elm, STAR_CLASSNAME);
- }
- }
- if (this._namespaceList.length &&
- (this.totalQueuedPlayers || this.collectedLeaveElements.length)) {
- const cleanupFns = [];
- try {
- players = this._flushAnimations(cleanupFns, microtaskId);
- }
- finally {
- for (let i = 0; i < cleanupFns.length; i++) {
- cleanupFns[i]();
- }
- }
- }
- else {
- for (let i = 0; i < this.collectedLeaveElements.length; i++) {
- const element = this.collectedLeaveElements[i];
- this.processLeaveNode(element);
- }
- }
- this.totalQueuedPlayers = 0;
- this.collectedEnterElements.length = 0;
- this.collectedLeaveElements.length = 0;
- this._flushFns.forEach(fn => fn());
- this._flushFns = [];
- if (this._whenQuietFns.length) {
- // we move these over to a variable so that
- // if any new callbacks are registered in another
- // flush they do not populate the existing set
- const quietFns = this._whenQuietFns;
- this._whenQuietFns = [];
- if (players.length) {
- optimizeGroupPlayer(players).onDone(() => {
- quietFns.forEach(fn => fn());
- });
- }
- else {
- quietFns.forEach(fn => fn());
- }
- }
- }
- reportError(errors) {
- throw new Error(`Unable to process animations due to the following failed trigger transitions\n ${errors.join('\n')}`);
- }
- _flushAnimations(cleanupFns, microtaskId) {
- const subTimelines = new ElementInstructionMap();
- const skippedPlayers = [];
- const skippedPlayersMap = new Map();
- const queuedInstructions = [];
- const queriedElements = new Map();
- const allPreStyleElements = new Map();
- const allPostStyleElements = new Map();
- const disabledElementsSet = new Set();
- this.disabledNodes.forEach(node => {
- disabledElementsSet.add(node);
- const nodesThatAreDisabled = this.driver.query(node, QUEUED_SELECTOR, true);
- for (let i = 0; i < nodesThatAreDisabled.length; i++) {
- disabledElementsSet.add(nodesThatAreDisabled[i]);
- }
- });
- const bodyNode = this.bodyNode;
- const allTriggerElements = Array.from(this.statesByElement.keys());
- const enterNodeMap = buildRootMap(allTriggerElements, this.collectedEnterElements);
- // this must occur before the instructions are built below such that
- // the :enter queries match the elements (since the timeline queries
- // are fired during instruction building).
- const enterNodeMapIds = new Map();
- let i = 0;
- enterNodeMap.forEach((nodes, root) => {
- const className = ENTER_CLASSNAME + i++;
- enterNodeMapIds.set(root, className);
- nodes.forEach(node => addClass(node, className));
- });
- const allLeaveNodes = [];
- const mergedLeaveNodes = new Set();
- const leaveNodesWithoutAnimations = new Set();
- for (let i = 0; i < this.collectedLeaveElements.length; i++) {
- const element = this.collectedLeaveElements[i];
- const details = element[REMOVAL_FLAG];
- if (details && details.setForRemoval) {
- allLeaveNodes.push(element);
- mergedLeaveNodes.add(element);
- if (details.hasAnimation) {
- this.driver.query(element, STAR_SELECTOR, true).forEach(elm => mergedLeaveNodes.add(elm));
- }
- else {
- leaveNodesWithoutAnimations.add(element);
- }
- }
- }
- const leaveNodeMapIds = new Map();
- const leaveNodeMap = buildRootMap(allTriggerElements, Array.from(mergedLeaveNodes));
- leaveNodeMap.forEach((nodes, root) => {
- const className = LEAVE_CLASSNAME + i++;
- leaveNodeMapIds.set(root, className);
- nodes.forEach(node => addClass(node, className));
- });
- cleanupFns.push(() => {
- enterNodeMap.forEach((nodes, root) => {
- const className = enterNodeMapIds.get(root);
- nodes.forEach(node => removeClass(node, className));
- });
- leaveNodeMap.forEach((nodes, root) => {
- const className = leaveNodeMapIds.get(root);
- nodes.forEach(node => removeClass(node, className));
- });
- allLeaveNodes.forEach(element => {
- this.processLeaveNode(element);
- });
- });
- const allPlayers = [];
- const erroneousTransitions = [];
- for (let i = this._namespaceList.length - 1; i >= 0; i--) {
- const ns = this._namespaceList[i];
- ns.drainQueuedTransitions(microtaskId).forEach(entry => {
- const player = entry.player;
- const element = entry.element;
- allPlayers.push(player);
- if (this.collectedEnterElements.length) {
- const details = element[REMOVAL_FLAG];
- // move animations are currently not supported...
- if (details && details.setForMove) {
- player.destroy();
- return;
- }
- }
- const nodeIsOrphaned = !bodyNode || !this.driver.containsElement(bodyNode, element);
- const leaveClassName = leaveNodeMapIds.get(element);
- const enterClassName = enterNodeMapIds.get(element);
- const instruction = this._buildInstruction(entry, subTimelines, enterClassName, leaveClassName, nodeIsOrphaned);
- if (instruction.errors && instruction.errors.length) {
- erroneousTransitions.push(instruction);
- return;
- }
- // even though the element may not be apart of the DOM, it may
- // still be added at a later point (due to the mechanics of content
- // projection and/or dynamic component insertion) therefore it's
- // important we still style the element.
- if (nodeIsOrphaned) {
- player.onStart(() => eraseStyles(element, instruction.fromStyles));
- player.onDestroy(() => setStyles(element, instruction.toStyles));
- skippedPlayers.push(player);
- return;
- }
- // if a unmatched transition is queued to go then it SHOULD NOT render
- // an animation and cancel the previously running animations.
- if (entry.isFallbackTransition) {
- player.onStart(() => eraseStyles(element, instruction.fromStyles));
- player.onDestroy(() => setStyles(element, instruction.toStyles));
- skippedPlayers.push(player);
- return;
- }
- // this means that if a parent animation uses this animation as a sub trigger
- // then it will instruct the timeline builder to not add a player delay, but
- // instead stretch the first keyframe gap up until the animation starts. The
- // reason this is important is to prevent extra initialization styles from being
- // required by the user in the animation.
- instruction.timelines.forEach(tl => tl.stretchStartingKeyframe = true);
- subTimelines.append(element, instruction.timelines);
- const tuple = { instruction, player, element };
- queuedInstructions.push(tuple);
- instruction.queriedElements.forEach(element => getOrSetAsInMap(queriedElements, element, []).push(player));
- instruction.preStyleProps.forEach((stringMap, element) => {
- const props = Object.keys(stringMap);
- if (props.length) {
- let setVal = allPreStyleElements.get(element);
- if (!setVal) {
- allPreStyleElements.set(element, setVal = new Set());
- }
- props.forEach(prop => setVal.add(prop));
- }
- });
- instruction.postStyleProps.forEach((stringMap, element) => {
- const props = Object.keys(stringMap);
- let setVal = allPostStyleElements.get(element);
- if (!setVal) {
- allPostStyleElements.set(element, setVal = new Set());
- }
- props.forEach(prop => setVal.add(prop));
- });
- });
- }
- if (erroneousTransitions.length) {
- const errors = [];
- erroneousTransitions.forEach(instruction => {
- errors.push(`@${instruction.triggerName} has failed due to:\n`);
- instruction.errors.forEach(error => errors.push(`- ${error}\n`));
- });
- allPlayers.forEach(player => player.destroy());
- this.reportError(errors);
- }
- const allPreviousPlayersMap = new Map();
- // this map works to tell which element in the DOM tree is contained by
- // which animation. Further down below this map will get populated once
- // the players are built and in doing so it can efficiently figure out
- // if a sub player is skipped due to a parent player having priority.
- const animationElementMap = new Map();
- queuedInstructions.forEach(entry => {
- const element = entry.element;
- if (subTimelines.has(element)) {
- animationElementMap.set(element, element);
- this._beforeAnimationBuild(entry.player.namespaceId, entry.instruction, allPreviousPlayersMap);
- }
- });
- skippedPlayers.forEach(player => {
- const element = player.element;
- const previousPlayers = this._getPreviousPlayers(element, false, player.namespaceId, player.triggerName, null);
- previousPlayers.forEach(prevPlayer => {
- getOrSetAsInMap(allPreviousPlayersMap, element, []).push(prevPlayer);
- prevPlayer.destroy();
- });
- });
- // this is a special case for nodes that will be removed (either by)
- // having their own leave animations or by being queried in a container
- // that will be removed once a parent animation is complete. The idea
- // here is that * styles must be identical to ! styles because of
- // backwards compatibility (* is also filled in by default in many places).
- // Otherwise * styles will return an empty value or auto since the element
- // that is being getComputedStyle'd will not be visible (since * = destination)
- const replaceNodes = allLeaveNodes.filter(node => {
- return replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements);
- });
- // POST STAGE: fill the * styles
- const postStylesMap = new Map();
- const allLeaveQueriedNodes = cloakAndComputeStyles(postStylesMap, this.driver, leaveNodesWithoutAnimations, allPostStyleElements, _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"]);
- allLeaveQueriedNodes.forEach(node => {
- if (replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements)) {
- replaceNodes.push(node);
- }
- });
- // PRE STAGE: fill the ! styles
- const preStylesMap = new Map();
- enterNodeMap.forEach((nodes, root) => {
- cloakAndComputeStyles(preStylesMap, this.driver, new Set(nodes), allPreStyleElements, _angular_animations__WEBPACK_IMPORTED_MODULE_0__["ɵPRE_STYLE"]);
- });
- replaceNodes.forEach(node => {
- const post = postStylesMap.get(node);
- const pre = preStylesMap.get(node);
- postStylesMap.set(node, Object.assign(Object.assign({}, post), pre));
- });
- const rootPlayers = [];
- const subPlayers = [];
- const NO_PARENT_ANIMATION_ELEMENT_DETECTED = {};
- queuedInstructions.forEach(entry => {
- const { element, player, instruction } = entry;
- // this means that it was never consumed by a parent animation which
- // means that it is independent and therefore should be set for animation
- if (subTimelines.has(element)) {
- if (disabledElementsSet.has(element)) {
- player.onDestroy(() => setStyles(element, instruction.toStyles));
- player.disabled = true;
- player.overrideTotalTime(instruction.totalTime);
- skippedPlayers.push(player);
- return;
- }
- // this will flow up the DOM and query the map to figure out
- // if a parent animation has priority over it. In the situation
- // that a parent is detected then it will cancel the loop. If
- // nothing is detected, or it takes a few hops to find a parent,
- // then it will fill in the missing nodes and signal them as having
- // a detected parent (or a NO_PARENT value via a special constant).
- let parentWithAnimation = NO_PARENT_ANIMATION_ELEMENT_DETECTED;
- if (animationElementMap.size > 1) {
- let elm = element;
- const parentsToAdd = [];
- while (elm = elm.parentNode) {
- const detectedParent = animationElementMap.get(elm);
- if (detectedParent) {
- parentWithAnimation = detectedParent;
- break;
- }
- parentsToAdd.push(elm);
- }
- parentsToAdd.forEach(parent => animationElementMap.set(parent, parentWithAnimation));
- }
- const innerPlayer = this._buildAnimation(player.namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap);
- player.setRealPlayer(innerPlayer);
- if (parentWithAnimation === NO_PARENT_ANIMATION_ELEMENT_DETECTED) {
- rootPlayers.push(player);
- }
- else {
- const parentPlayers = this.playersByElement.get(parentWithAnimation);
- if (parentPlayers && parentPlayers.length) {
- player.parentPlayer = optimizeGroupPlayer(parentPlayers);
- }
- skippedPlayers.push(player);
- }
- }
- else {
- eraseStyles(element, instruction.fromStyles);
- player.onDestroy(() => setStyles(element, instruction.toStyles));
- // there still might be a ancestor player animating this
- // element therefore we will still add it as a sub player
- // even if its animation may be disabled
- subPlayers.push(player);
- if (disabledElementsSet.has(element)) {
- skippedPlayers.push(player);
- }
- }
- });
- // find all of the sub players' corresponding inner animation player
- subPlayers.forEach(player => {
- // even if any players are not found for a sub animation then it
- // will still complete itself after the next tick since it's Noop
- const playersForElement = skippedPlayersMap.get(player.element);
- if (playersForElement && playersForElement.length) {
- const innerPlayer = optimizeGroupPlayer(playersForElement);
- player.setRealPlayer(innerPlayer);
- }
- });
- // the reason why we don't actually play the animation is
- // because all that a skipped player is designed to do is to
- // fire the start/done transition callback events
- skippedPlayers.forEach(player => {
- if (player.parentPlayer) {
- player.syncPlayerEvents(player.parentPlayer);
- }
- else {
- player.destroy();
- }
- });
- // run through all of the queued removals and see if they
- // were picked up by a query. If not then perform the removal
- // operation right away unless a parent animation is ongoing.
- for (let i = 0; i < allLeaveNodes.length; i++) {
- const element = allLeaveNodes[i];
- const details = element[REMOVAL_FLAG];
- removeClass(element, LEAVE_CLASSNAME);
- // this means the element has a removal animation that is being
- // taken care of and therefore the inner elements will hang around
- // until that animation is over (or the parent queried animation)
- if (details && details.hasAnimation)
- continue;
- let players = [];
- // if this element is queried or if it contains queried children
- // then we want for the element not to be removed from the page
- // until the queried animations have finished
- if (queriedElements.size) {
- let queriedPlayerResults = queriedElements.get(element);
- if (queriedPlayerResults && queriedPlayerResults.length) {
- players.push(...queriedPlayerResults);
- }
- let queriedInnerElements = this.driver.query(element, NG_ANIMATING_SELECTOR, true);
- for (let j = 0; j < queriedInnerElements.length; j++) {
- let queriedPlayers = queriedElements.get(queriedInnerElements[j]);
- if (queriedPlayers && queriedPlayers.length) {
- players.push(...queriedPlayers);
- }
- }
- }
- const activePlayers = players.filter(p => !p.destroyed);
- if (activePlayers.length) {
- removeNodesAfterAnimationDone(this, element, activePlayers);
- }
- else {
- this.processLeaveNode(element);
- }
- }
- // this is required so the cleanup method doesn't remove them
- allLeaveNodes.length = 0;
- rootPlayers.forEach(player => {
- this.players.push(player);
- player.onDone(() => {
- player.destroy();
- const index = this.players.indexOf(player);
- this.players.splice(index, 1);
- });
- player.play();
- });
- return rootPlayers;
- }
- elementContainsData(namespaceId, element) {
- let containsData = false;
- const details = element[REMOVAL_FLAG];
- if (details && details.setForRemoval)
- containsData = true;
- if (this.playersByElement.has(element))
- containsData = true;
- if (this.playersByQueriedElement.has(element))
- containsData = true;
- if (this.statesByElement.has(element))
- containsData = true;
- return this._fetchNamespace(namespaceId).elementContainsData(element) || containsData;
- }
- afterFlush(callback) {
- this._flushFns.push(callback);
- }
- afterFlushAnimationsDone(callback) {
- this._whenQuietFns.push(callback);
- }
- _getPreviousPlayers(element, isQueriedElement, namespaceId, triggerName, toStateValue) {
- let players = [];
- if (isQueriedElement) {
- const queriedElementPlayers = this.playersByQueriedElement.get(element);
- if (queriedElementPlayers) {
- players = queriedElementPlayers;
- }
- }
- else {
- const elementPlayers = this.playersByElement.get(element);
- if (elementPlayers) {
- const isRemovalAnimation = !toStateValue || toStateValue == VOID_VALUE;
- elementPlayers.forEach(player => {
- if (player.queued)
- return;
- if (!isRemovalAnimation && player.triggerName != triggerName)
- return;
- players.push(player);
- });
- }
- }
- if (namespaceId || triggerName) {
- players = players.filter(player => {
- if (namespaceId && namespaceId != player.namespaceId)
- return false;
- if (triggerName && triggerName != player.triggerName)
- return false;
- return true;
- });
- }
- return players;
- }
- _beforeAnimationBuild(namespaceId, instruction, allPreviousPlayersMap) {
- const triggerName = instruction.triggerName;
- const rootElement = instruction.element;
- // when a removal animation occurs, ALL previous players are collected
- // and destroyed (even if they are outside of the current namespace)
- const targetNameSpaceId = instruction.isRemovalTransition ? undefined : namespaceId;
- const targetTriggerName = instruction.isRemovalTransition ? undefined : triggerName;
- for (const timelineInstruction of instruction.timelines) {
- const element = timelineInstruction.element;
- const isQueriedElement = element !== rootElement;
- const players = getOrSetAsInMap(allPreviousPlayersMap, element, []);
- const previousPlayers = this._getPreviousPlayers(element, isQueriedElement, targetNameSpaceId, targetTriggerName, instruction.toState);
- previousPlayers.forEach(player => {
- const realPlayer = player.getRealPlayer();
- if (realPlayer.beforeDestroy) {
- realPlayer.beforeDestroy();
- }
- player.destroy();
- players.push(player);
- });
- }
- // this needs to be done so that the PRE/POST styles can be
- // computed properly without interfering with the previous animation
- eraseStyles(rootElement, instruction.fromStyles);
- }
- _buildAnimation(namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap) {
- const triggerName = instruction.triggerName;
- const rootElement = instruction.element;
- // we first run this so that the previous animation player
- // data can be passed into the successive animation players
- const allQueriedPlayers = [];
- const allConsumedElements = new Set();
- const allSubElements = new Set();
- const allNewPlayers = instruction.timelines.map(timelineInstruction => {
- const element = timelineInstruction.element;
- allConsumedElements.add(element);
- // FIXME (matsko): make sure to-be-removed animations are removed properly
- const details = element[REMOVAL_FLAG];
- if (details && details.removedBeforeQueried)
- return new _angular_animations__WEBPACK_IMPORTED_MODULE_0__["NoopAnimationPlayer"](timelineInstruction.duration, timelineInstruction.delay);
- const isQueriedElement = element !== rootElement;
- const previousPlayers = flattenGroupPlayers((allPreviousPlayersMap.get(element) || EMPTY_PLAYER_ARRAY)
- .map(p => p.getRealPlayer()))
- .filter(p => {
- // the `element` is not apart of the AnimationPlayer definition, but
- // Mock/WebAnimations
- // use the element within their implementation. This will be added in Angular5 to
- // AnimationPlayer
- const pp = p;
- return pp.element ? pp.element === element : false;
- });
- const preStyles = preStylesMap.get(element);
- const postStyles = postStylesMap.get(element);
- const keyframes = normalizeKeyframes(this.driver, this._normalizer, element, timelineInstruction.keyframes, preStyles, postStyles);
- const player = this._buildPlayer(timelineInstruction, keyframes, previousPlayers);
- // this means that this particular player belongs to a sub trigger. It is
- // important that we match this player up with the corresponding (@trigger.listener)
- if (timelineInstruction.subTimeline && skippedPlayersMap) {
- allSubElements.add(element);
- }
- if (isQueriedElement) {
- const wrappedPlayer = new TransitionAnimationPlayer(namespaceId, triggerName, element);
- wrappedPlayer.setRealPlayer(player);
- allQueriedPlayers.push(wrappedPlayer);
- }
- return player;
- });
- allQueriedPlayers.forEach(player => {
- getOrSetAsInMap(this.playersByQueriedElement, player.element, []).push(player);
- player.onDone(() => deleteOrUnsetInMap(this.playersByQueriedElement, player.element, player));
- });
- allConsumedElements.forEach(element => addClass(element, NG_ANIMATING_CLASSNAME));
- const player = optimizeGroupPlayer(allNewPlayers);
- player.onDestroy(() => {
- allConsumedElements.forEach(element => removeClass(element, NG_ANIMATING_CLASSNAME));
- setStyles(rootElement, instruction.toStyles);
- });
- // this basically makes all of the callbacks for sub element animations
- // be dependent on the upper players for when they finish
- allSubElements.forEach(element => {
- getOrSetAsInMap(skippedPlayersMap, element, []).push(player);
- });
- return player;
- }
- _buildPlayer(instruction, keyframes, previousPlayers) {
- if (keyframes.length > 0) {
- return this.driver.animate(instruction.element, keyframes, instruction.duration, instruction.delay, instruction.easing, previousPlayers);
- }
- // special case for when an empty transition|definition is provided
- // ... there is no point in rendering an empty animation
- return new _angular_animations__WEBPACK_IMPORTED_MODULE_0__["NoopAnimationPlayer"](instruction.duration, instruction.delay);
- }
- }
- class TransitionAnimationPlayer {
- constructor(namespaceId, triggerName, element) {
- this.namespaceId = namespaceId;
- this.triggerName = triggerName;
- this.element = element;
- this._player = new _angular_animations__WEBPACK_IMPORTED_MODULE_0__["NoopAnimationPlayer"]();
- this._containsRealPlayer = false;
- this._queuedCallbacks = {};
- this.destroyed = false;
- this.markedForDestroy = false;
- this.disabled = false;
- this.queued = true;
- this.totalTime = 0;
- }
- setRealPlayer(player) {
- if (this._containsRealPlayer)
- return;
- this._player = player;
- Object.keys(this._queuedCallbacks).forEach(phase => {
- this._queuedCallbacks[phase].forEach(callback => listenOnPlayer(player, phase, undefined, callback));
- });
- this._queuedCallbacks = {};
- this._containsRealPlayer = true;
- this.overrideTotalTime(player.totalTime);
- this.queued = false;
- }
- getRealPlayer() {
- return this._player;
- }
- overrideTotalTime(totalTime) {
- this.totalTime = totalTime;
- }
- syncPlayerEvents(player) {
- const p = this._player;
- if (p.triggerCallback) {
- player.onStart(() => p.triggerCallback('start'));
- }
- player.onDone(() => this.finish());
- player.onDestroy(() => this.destroy());
- }
- _queueEvent(name, callback) {
- getOrSetAsInMap(this._queuedCallbacks, name, []).push(callback);
- }
- onDone(fn) {
- if (this.queued) {
- this._queueEvent('done', fn);
- }
- this._player.onDone(fn);
- }
- onStart(fn) {
- if (this.queued) {
- this._queueEvent('start', fn);
- }
- this._player.onStart(fn);
- }
- onDestroy(fn) {
- if (this.queued) {
- this._queueEvent('destroy', fn);
- }
- this._player.onDestroy(fn);
- }
- init() {
- this._player.init();
- }
- hasStarted() {
- return this.queued ? false : this._player.hasStarted();
- }
- play() {
- !this.queued && this._player.play();
- }
- pause() {
- !this.queued && this._player.pause();
- }
- restart() {
- !this.queued && this._player.restart();
- }
- finish() {
- this._player.finish();
- }
- destroy() {
- this.destroyed = true;
- this._player.destroy();
- }
- reset() {
- !this.queued && this._player.reset();
- }
- setPosition(p) {
- if (!this.queued) {
- this._player.setPosition(p);
- }
- }
- getPosition() {
- return this.queued ? 0 : this._player.getPosition();
- }
- /** @internal */
- triggerCallback(phaseName) {
- const p = this._player;
- if (p.triggerCallback) {
- p.triggerCallback(phaseName);
- }
- }
- }
- function deleteOrUnsetInMap(map, key, value) {
- let currentValues;
- if (map instanceof Map) {
- currentValues = map.get(key);
- if (currentValues) {
- if (currentValues.length) {
- const index = currentValues.indexOf(value);
- currentValues.splice(index, 1);
- }
- if (currentValues.length == 0) {
- map.delete(key);
- }
- }
- }
- else {
- currentValues = map[key];
- if (currentValues) {
- if (currentValues.length) {
- const index = currentValues.indexOf(value);
- currentValues.splice(index, 1);
- }
- if (currentValues.length == 0) {
- delete map[key];
- }
- }
- }
- return currentValues;
- }
- function normalizeTriggerValue(value) {
- // we use `!= null` here because it's the most simple
- // way to test against a "falsy" value without mixing
- // in empty strings or a zero value. DO NOT OPTIMIZE.
- return value != null ? value : null;
- }
- function isElementNode(node) {
- return node && node['nodeType'] === 1;
- }
- function isTriggerEventValid(eventName) {
- return eventName == 'start' || eventName == 'done';
- }
- function cloakElement(element, value) {
- const oldValue = element.style.display;
- element.style.display = value != null ? value : 'none';
- return oldValue;
- }
- function cloakAndComputeStyles(valuesMap, driver, elements, elementPropsMap, defaultStyle) {
- const cloakVals = [];
- elements.forEach(element => cloakVals.push(cloakElement(element)));
- const failedElements = [];
- elementPropsMap.forEach((props, element) => {
- const styles = {};
- props.forEach(prop => {
- const value = styles[prop] = driver.computeStyle(element, prop, defaultStyle);
- // there is no easy way to detect this because a sub element could be removed
- // by a parent animation element being detached.
- if (!value || value.length == 0) {
- element[REMOVAL_FLAG] = NULL_REMOVED_QUERIED_STATE;
- failedElements.push(element);
- }
- });
- valuesMap.set(element, styles);
- });
- // we use a index variable here since Set.forEach(a, i) does not return
- // an index value for the closure (but instead just the value)
- let i = 0;
- elements.forEach(element => cloakElement(element, cloakVals[i++]));
- return failedElements;
- }
- /*
- Since the Angular renderer code will return a collection of inserted
- nodes in all areas of a DOM tree, it's up to this algorithm to figure
- out which nodes are roots for each animation @trigger.
- By placing each inserted node into a Set and traversing upwards, it
- is possible to find the @trigger elements and well any direct *star
- insertion nodes, if a @trigger root is found then the enter element
- is placed into the Map[@trigger] spot.
- */
- function buildRootMap(roots, nodes) {
- const rootMap = new Map();
- roots.forEach(root => rootMap.set(root, []));
- if (nodes.length == 0)
- return rootMap;
- const NULL_NODE = 1;
- const nodeSet = new Set(nodes);
- const localRootMap = new Map();
- function getRoot(node) {
- if (!node)
- return NULL_NODE;
- let root = localRootMap.get(node);
- if (root)
- return root;
- const parent = node.parentNode;
- if (rootMap.has(parent)) { // ngIf inside @trigger
- root = parent;
- }
- else if (nodeSet.has(parent)) { // ngIf inside ngIf
- root = NULL_NODE;
- }
- else { // recurse upwards
- root = getRoot(parent);
- }
- localRootMap.set(node, root);
- return root;
- }
- nodes.forEach(node => {
- const root = getRoot(node);
- if (root !== NULL_NODE) {
- rootMap.get(root).push(node);
- }
- });
- return rootMap;
- }
- const CLASSES_CACHE_KEY = '$$classes';
- function containsClass(element, className) {
- if (element.classList) {
- return element.classList.contains(className);
- }
- else {
- const classes = element[CLASSES_CACHE_KEY];
- return classes && classes[className];
- }
- }
- function addClass(element, className) {
- if (element.classList) {
- element.classList.add(className);
- }
- else {
- let classes = element[CLASSES_CACHE_KEY];
- if (!classes) {
- classes = element[CLASSES_CACHE_KEY] = {};
- }
- classes[className] = true;
- }
- }
- function removeClass(element, className) {
- if (element.classList) {
- element.classList.remove(className);
- }
- else {
- let classes = element[CLASSES_CACHE_KEY];
- if (classes) {
- delete classes[className];
- }
- }
- }
- function removeNodesAfterAnimationDone(engine, element, players) {
- optimizeGroupPlayer(players).onDone(() => engine.processLeaveNode(element));
- }
- function flattenGroupPlayers(players) {
- const finalPlayers = [];
- _flattenGroupPlayersRecur(players, finalPlayers);
- return finalPlayers;
- }
- function _flattenGroupPlayersRecur(players, finalPlayers) {
- for (let i = 0; i < players.length; i++) {
- const player = players[i];
- if (player instanceof _angular_animations__WEBPACK_IMPORTED_MODULE_0__["ɵAnimationGroupPlayer"]) {
- _flattenGroupPlayersRecur(player.players, finalPlayers);
- }
- else {
- finalPlayers.push(player);
- }
- }
- }
- function objEquals(a, b) {
- const k1 = Object.keys(a);
- const k2 = Object.keys(b);
- if (k1.length != k2.length)
- return false;
- for (let i = 0; i < k1.length; i++) {
- const prop = k1[i];
- if (!b.hasOwnProperty(prop) || a[prop] !== b[prop])
- return false;
- }
- return true;
- }
- function replacePostStylesAsPre(element, allPreStyleElements, allPostStyleElements) {
- const postEntry = allPostStyleElements.get(element);
- if (!postEntry)
- return false;
- let preEntry = allPreStyleElements.get(element);
- if (preEntry) {
- postEntry.forEach(data => preEntry.add(data));
- }
- else {
- allPreStyleElements.set(element, postEntry);
- }
- allPostStyleElements.delete(element);
- return true;
- }
- class AnimationEngine {
- constructor(bodyNode, _driver, normalizer) {
- this.bodyNode = bodyNode;
- this._driver = _driver;
- this._triggerCache = {};
- // this method is designed to be overridden by the code that uses this engine
- this.onRemovalComplete = (element, context) => { };
- this._transitionEngine = new TransitionAnimationEngine(bodyNode, _driver, normalizer);
- this._timelineEngine = new TimelineAnimationEngine(bodyNode, _driver, normalizer);
- this._transitionEngine.onRemovalComplete = (element, context) => this.onRemovalComplete(element, context);
- }
- registerTrigger(componentId, namespaceId, hostElement, name, metadata) {
- const cacheKey = componentId + '-' + name;
- let trigger = this._triggerCache[cacheKey];
- if (!trigger) {
- const errors = [];
- const ast = buildAnimationAst(this._driver, metadata, errors);
- if (errors.length) {
- throw new Error(`The animation trigger "${name}" has failed to build due to the following errors:\n - ${errors.join('\n - ')}`);
- }
- trigger = buildTrigger(name, ast);
- this._triggerCache[cacheKey] = trigger;
- }
- this._transitionEngine.registerTrigger(namespaceId, name, trigger);
- }
- register(namespaceId, hostElement) {
- this._transitionEngine.register(namespaceId, hostElement);
- }
- destroy(namespaceId, context) {
- this._transitionEngine.destroy(namespaceId, context);
- }
- onInsert(namespaceId, element, parent, insertBefore) {
- this._transitionEngine.insertNode(namespaceId, element, parent, insertBefore);
- }
- onRemove(namespaceId, element, context, isHostElement) {
- this._transitionEngine.removeNode(namespaceId, element, isHostElement || false, context);
- }
- disableAnimations(element, disable) {
- this._transitionEngine.markElementAsDisabled(element, disable);
- }
- process(namespaceId, element, property, value) {
- if (property.charAt(0) == '@') {
- const [id, action] = parseTimelineCommand(property);
- const args = value;
- this._timelineEngine.command(id, element, action, args);
- }
- else {
- this._transitionEngine.trigger(namespaceId, element, property, value);
- }
- }
- listen(namespaceId, element, eventName, eventPhase, callback) {
- // @@listen
- if (eventName.charAt(0) == '@') {
- const [id, action] = parseTimelineCommand(eventName);
- return this._timelineEngine.listen(id, element, action, callback);
- }
- return this._transitionEngine.listen(namespaceId, element, eventName, eventPhase, callback);
- }
- flush(microtaskId = -1) {
- this._transitionEngine.flush(microtaskId);
- }
- get players() {
- return this._transitionEngine.players
- .concat(this._timelineEngine.players);
- }
- whenRenderingDone() {
- return this._transitionEngine.whenRenderingDone();
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Returns an instance of `SpecialCasedStyles` if and when any special (non animateable) styles are
- * detected.
- *
- * In CSS there exist properties that cannot be animated within a keyframe animation
- * (whether it be via CSS keyframes or web-animations) and the animation implementation
- * will ignore them. This function is designed to detect those special cased styles and
- * return a container that will be executed at the start and end of the animation.
- *
- * @returns an instance of `SpecialCasedStyles` if any special styles are detected otherwise `null`
- */
- function packageNonAnimatableStyles(element, styles) {
- let startStyles = null;
- let endStyles = null;
- if (Array.isArray(styles) && styles.length) {
- startStyles = filterNonAnimatableStyles(styles[0]);
- if (styles.length > 1) {
- endStyles = filterNonAnimatableStyles(styles[styles.length - 1]);
- }
- }
- else if (styles) {
- startStyles = filterNonAnimatableStyles(styles);
- }
- return (startStyles || endStyles) ? new SpecialCasedStyles(element, startStyles, endStyles) :
- null;
- }
- /**
- * Designed to be executed during a keyframe-based animation to apply any special-cased styles.
- *
- * When started (when the `start()` method is run) then the provided `startStyles`
- * will be applied. When finished (when the `finish()` method is called) the
- * `endStyles` will be applied as well any any starting styles. Finally when
- * `destroy()` is called then all styles will be removed.
- */
- class SpecialCasedStyles {
- constructor(_element, _startStyles, _endStyles) {
- this._element = _element;
- this._startStyles = _startStyles;
- this._endStyles = _endStyles;
- this._state = 0 /* Pending */;
- let initialStyles = SpecialCasedStyles.initialStylesByElement.get(_element);
- if (!initialStyles) {
- SpecialCasedStyles.initialStylesByElement.set(_element, initialStyles = {});
- }
- this._initialStyles = initialStyles;
- }
- start() {
- if (this._state < 1 /* Started */) {
- if (this._startStyles) {
- setStyles(this._element, this._startStyles, this._initialStyles);
- }
- this._state = 1 /* Started */;
- }
- }
- finish() {
- this.start();
- if (this._state < 2 /* Finished */) {
- setStyles(this._element, this._initialStyles);
- if (this._endStyles) {
- setStyles(this._element, this._endStyles);
- this._endStyles = null;
- }
- this._state = 1 /* Started */;
- }
- }
- destroy() {
- this.finish();
- if (this._state < 3 /* Destroyed */) {
- SpecialCasedStyles.initialStylesByElement.delete(this._element);
- if (this._startStyles) {
- eraseStyles(this._element, this._startStyles);
- this._endStyles = null;
- }
- if (this._endStyles) {
- eraseStyles(this._element, this._endStyles);
- this._endStyles = null;
- }
- setStyles(this._element, this._initialStyles);
- this._state = 3 /* Destroyed */;
- }
- }
- }
- SpecialCasedStyles.initialStylesByElement = new WeakMap();
- function filterNonAnimatableStyles(styles) {
- let result = null;
- const props = Object.keys(styles);
- for (let i = 0; i < props.length; i++) {
- const prop = props[i];
- if (isNonAnimatableStyle(prop)) {
- result = result || {};
- result[prop] = styles[prop];
- }
- }
- return result;
- }
- function isNonAnimatableStyle(prop) {
- return prop === 'display' || prop === 'position';
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;
- const ANIMATION_PROP = 'animation';
- const ANIMATIONEND_EVENT = 'animationend';
- const ONE_SECOND$1 = 1000;
- class ElementAnimationStyleHandler {
- constructor(_element, _name, _duration, _delay, _easing, _fillMode, _onDoneFn) {
- this._element = _element;
- this._name = _name;
- this._duration = _duration;
- this._delay = _delay;
- this._easing = _easing;
- this._fillMode = _fillMode;
- this._onDoneFn = _onDoneFn;
- this._finished = false;
- this._destroyed = false;
- this._startTime = 0;
- this._position = 0;
- this._eventFn = (e) => this._handleCallback(e);
- }
- apply() {
- applyKeyframeAnimation(this._element, `${this._duration}ms ${this._easing} ${this._delay}ms 1 normal ${this._fillMode} ${this._name}`);
- addRemoveAnimationEvent(this._element, this._eventFn, false);
- this._startTime = Date.now();
- }
- pause() {
- playPauseAnimation(this._element, this._name, 'paused');
- }
- resume() {
- playPauseAnimation(this._element, this._name, 'running');
- }
- setPosition(position) {
- const index = findIndexForAnimation(this._element, this._name);
- this._position = position * this._duration;
- setAnimationStyle(this._element, 'Delay', `-${this._position}ms`, index);
- }
- getPosition() {
- return this._position;
- }
- _handleCallback(event) {
- const timestamp = event._ngTestManualTimestamp || Date.now();
- const elapsedTime = parseFloat(event.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES)) * ONE_SECOND$1;
- if (event.animationName == this._name &&
- Math.max(timestamp - this._startTime, 0) >= this._delay && elapsedTime >= this._duration) {
- this.finish();
- }
- }
- finish() {
- if (this._finished)
- return;
- this._finished = true;
- this._onDoneFn();
- addRemoveAnimationEvent(this._element, this._eventFn, true);
- }
- destroy() {
- if (this._destroyed)
- return;
- this._destroyed = true;
- this.finish();
- removeKeyframeAnimation(this._element, this._name);
- }
- }
- function playPauseAnimation(element, name, status) {
- const index = findIndexForAnimation(element, name);
- setAnimationStyle(element, 'PlayState', status, index);
- }
- function applyKeyframeAnimation(element, value) {
- const anim = getAnimationStyle(element, '').trim();
- let index = 0;
- if (anim.length) {
- index = countChars(anim, ',') + 1;
- value = `${anim}, ${value}`;
- }
- setAnimationStyle(element, '', value);
- return index;
- }
- function removeKeyframeAnimation(element, name) {
- const anim = getAnimationStyle(element, '');
- const tokens = anim.split(',');
- const index = findMatchingTokenIndex(tokens, name);
- if (index >= 0) {
- tokens.splice(index, 1);
- const newValue = tokens.join(',');
- setAnimationStyle(element, '', newValue);
- }
- }
- function findIndexForAnimation(element, value) {
- const anim = getAnimationStyle(element, '');
- if (anim.indexOf(',') > 0) {
- const tokens = anim.split(',');
- return findMatchingTokenIndex(tokens, value);
- }
- return findMatchingTokenIndex([anim], value);
- }
- function findMatchingTokenIndex(tokens, searchToken) {
- for (let i = 0; i < tokens.length; i++) {
- if (tokens[i].indexOf(searchToken) >= 0) {
- return i;
- }
- }
- return -1;
- }
- function addRemoveAnimationEvent(element, fn, doRemove) {
- doRemove ? element.removeEventListener(ANIMATIONEND_EVENT, fn) :
- element.addEventListener(ANIMATIONEND_EVENT, fn);
- }
- function setAnimationStyle(element, name, value, index) {
- const prop = ANIMATION_PROP + name;
- if (index != null) {
- const oldValue = element.style[prop];
- if (oldValue.length) {
- const tokens = oldValue.split(',');
- tokens[index] = value;
- value = tokens.join(',');
- }
- }
- element.style[prop] = value;
- }
- function getAnimationStyle(element, name) {
- return element.style[ANIMATION_PROP + name] || '';
- }
- function countChars(value, char) {
- let count = 0;
- for (let i = 0; i < value.length; i++) {
- const c = value.charAt(i);
- if (c === char)
- count++;
- }
- return count;
- }
- const DEFAULT_FILL_MODE = 'forwards';
- const DEFAULT_EASING = 'linear';
- class CssKeyframesPlayer {
- constructor(element, keyframes, animationName, _duration, _delay, easing, _finalStyles, _specialStyles) {
- this.element = element;
- this.keyframes = keyframes;
- this.animationName = animationName;
- this._duration = _duration;
- this._delay = _delay;
- this._finalStyles = _finalStyles;
- this._specialStyles = _specialStyles;
- this._onDoneFns = [];
- this._onStartFns = [];
- this._onDestroyFns = [];
- this._started = false;
- this.currentSnapshot = {};
- this._state = 0;
- this.easing = easing || DEFAULT_EASING;
- this.totalTime = _duration + _delay;
- this._buildStyler();
- }
- onStart(fn) {
- this._onStartFns.push(fn);
- }
- onDone(fn) {
- this._onDoneFns.push(fn);
- }
- onDestroy(fn) {
- this._onDestroyFns.push(fn);
- }
- destroy() {
- this.init();
- if (this._state >= 4 /* DESTROYED */)
- return;
- this._state = 4 /* DESTROYED */;
- this._styler.destroy();
- this._flushStartFns();
- this._flushDoneFns();
- if (this._specialStyles) {
- this._specialStyles.destroy();
- }
- this._onDestroyFns.forEach(fn => fn());
- this._onDestroyFns = [];
- }
- _flushDoneFns() {
- this._onDoneFns.forEach(fn => fn());
- this._onDoneFns = [];
- }
- _flushStartFns() {
- this._onStartFns.forEach(fn => fn());
- this._onStartFns = [];
- }
- finish() {
- this.init();
- if (this._state >= 3 /* FINISHED */)
- return;
- this._state = 3 /* FINISHED */;
- this._styler.finish();
- this._flushStartFns();
- if (this._specialStyles) {
- this._specialStyles.finish();
- }
- this._flushDoneFns();
- }
- setPosition(value) {
- this._styler.setPosition(value);
- }
- getPosition() {
- return this._styler.getPosition();
- }
- hasStarted() {
- return this._state >= 2 /* STARTED */;
- }
- init() {
- if (this._state >= 1 /* INITIALIZED */)
- return;
- this._state = 1 /* INITIALIZED */;
- const elm = this.element;
- this._styler.apply();
- if (this._delay) {
- this._styler.pause();
- }
- }
- play() {
- this.init();
- if (!this.hasStarted()) {
- this._flushStartFns();
- this._state = 2 /* STARTED */;
- if (this._specialStyles) {
- this._specialStyles.start();
- }
- }
- this._styler.resume();
- }
- pause() {
- this.init();
- this._styler.pause();
- }
- restart() {
- this.reset();
- this.play();
- }
- reset() {
- this._styler.destroy();
- this._buildStyler();
- this._styler.apply();
- }
- _buildStyler() {
- this._styler = new ElementAnimationStyleHandler(this.element, this.animationName, this._duration, this._delay, this.easing, DEFAULT_FILL_MODE, () => this.finish());
- }
- /** @internal */
- triggerCallback(phaseName) {
- const methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns;
- methods.forEach(fn => fn());
- methods.length = 0;
- }
- beforeDestroy() {
- this.init();
- const styles = {};
- if (this.hasStarted()) {
- const finished = this._state >= 3 /* FINISHED */;
- Object.keys(this._finalStyles).forEach(prop => {
- if (prop != 'offset') {
- styles[prop] = finished ? this._finalStyles[prop] : computeStyle(this.element, prop);
- }
- });
- }
- this.currentSnapshot = styles;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class DirectStylePlayer extends _angular_animations__WEBPACK_IMPORTED_MODULE_0__["NoopAnimationPlayer"] {
- constructor(element, styles) {
- super();
- this.element = element;
- this._startingStyles = {};
- this.__initialized = false;
- this._styles = hypenatePropsObject(styles);
- }
- init() {
- if (this.__initialized || !this._startingStyles)
- return;
- this.__initialized = true;
- Object.keys(this._styles).forEach(prop => {
- this._startingStyles[prop] = this.element.style[prop];
- });
- super.init();
- }
- play() {
- if (!this._startingStyles)
- return;
- this.init();
- Object.keys(this._styles)
- .forEach(prop => this.element.style.setProperty(prop, this._styles[prop]));
- super.play();
- }
- destroy() {
- if (!this._startingStyles)
- return;
- Object.keys(this._startingStyles).forEach(prop => {
- const value = this._startingStyles[prop];
- if (value) {
- this.element.style.setProperty(prop, value);
- }
- else {
- this.element.style.removeProperty(prop);
- }
- });
- this._startingStyles = null;
- super.destroy();
- }
- }
- const KEYFRAMES_NAME_PREFIX = 'gen_css_kf_';
- const TAB_SPACE = ' ';
- class CssKeyframesDriver {
- constructor() {
- this._count = 0;
- this._head = document.querySelector('head');
- }
- validateStyleProperty(prop) {
- return validateStyleProperty(prop);
- }
- matchesElement(element, selector) {
- return matchesElement(element, selector);
- }
- containsElement(elm1, elm2) {
- return containsElement(elm1, elm2);
- }
- query(element, selector, multi) {
- return invokeQuery(element, selector, multi);
- }
- computeStyle(element, prop, defaultValue) {
- return window.getComputedStyle(element)[prop];
- }
- buildKeyframeElement(element, name, keyframes) {
- keyframes = keyframes.map(kf => hypenatePropsObject(kf));
- let keyframeStr = `@keyframes ${name} {\n`;
- let tab = '';
- keyframes.forEach(kf => {
- tab = TAB_SPACE;
- const offset = parseFloat(kf['offset']);
- keyframeStr += `${tab}${offset * 100}% {\n`;
- tab += TAB_SPACE;
- Object.keys(kf).forEach(prop => {
- const value = kf[prop];
- switch (prop) {
- case 'offset':
- return;
- case 'easing':
- if (value) {
- keyframeStr += `${tab}animation-timing-function: ${value};\n`;
- }
- return;
- default:
- keyframeStr += `${tab}${prop}: ${value};\n`;
- return;
- }
- });
- keyframeStr += `${tab}}\n`;
- });
- keyframeStr += `}\n`;
- const kfElm = document.createElement('style');
- kfElm.textContent = keyframeStr;
- return kfElm;
- }
- animate(element, keyframes, duration, delay, easing, previousPlayers = [], scrubberAccessRequested) {
- if ((typeof ngDevMode === 'undefined' || ngDevMode) && scrubberAccessRequested) {
- notifyFaultyScrubber();
- }
- const previousCssKeyframePlayers = previousPlayers.filter(player => player instanceof CssKeyframesPlayer);
- const previousStyles = {};
- if (allowPreviousPlayerStylesMerge(duration, delay)) {
- previousCssKeyframePlayers.forEach(player => {
- let styles = player.currentSnapshot;
- Object.keys(styles).forEach(prop => previousStyles[prop] = styles[prop]);
- });
- }
- keyframes = balancePreviousStylesIntoKeyframes(element, keyframes, previousStyles);
- const finalStyles = flattenKeyframesIntoStyles(keyframes);
- // if there is no animation then there is no point in applying
- // styles and waiting for an event to get fired. This causes lag.
- // It's better to just directly apply the styles to the element
- // via the direct styling animation player.
- if (duration == 0) {
- return new DirectStylePlayer(element, finalStyles);
- }
- const animationName = `${KEYFRAMES_NAME_PREFIX}${this._count++}`;
- const kfElm = this.buildKeyframeElement(element, animationName, keyframes);
- document.querySelector('head').appendChild(kfElm);
- const specialStyles = packageNonAnimatableStyles(element, keyframes);
- const player = new CssKeyframesPlayer(element, keyframes, animationName, duration, delay, easing, finalStyles, specialStyles);
- player.onDestroy(() => removeElement(kfElm));
- return player;
- }
- }
- function flattenKeyframesIntoStyles(keyframes) {
- let flatKeyframes = {};
- if (keyframes) {
- const kfs = Array.isArray(keyframes) ? keyframes : [keyframes];
- kfs.forEach(kf => {
- Object.keys(kf).forEach(prop => {
- if (prop == 'offset' || prop == 'easing')
- return;
- flatKeyframes[prop] = kf[prop];
- });
- });
- }
- return flatKeyframes;
- }
- function removeElement(node) {
- node.parentNode.removeChild(node);
- }
- let warningIssued = false;
- function notifyFaultyScrubber() {
- if (warningIssued)
- return;
- console.warn('@angular/animations: please load the web-animations.js polyfill to allow programmatic access...\n', ' visit https://bit.ly/IWukam to learn more about using the web-animation-js polyfill.');
- warningIssued = true;
- }
- class WebAnimationsPlayer {
- constructor(element, keyframes, options, _specialStyles) {
- this.element = element;
- this.keyframes = keyframes;
- this.options = options;
- this._specialStyles = _specialStyles;
- this._onDoneFns = [];
- this._onStartFns = [];
- this._onDestroyFns = [];
- this._initialized = false;
- this._finished = false;
- this._started = false;
- this._destroyed = false;
- this.time = 0;
- this.parentPlayer = null;
- this.currentSnapshot = {};
- this._duration = options['duration'];
- this._delay = options['delay'] || 0;
- this.time = this._duration + this._delay;
- }
- _onFinish() {
- if (!this._finished) {
- this._finished = true;
- this._onDoneFns.forEach(fn => fn());
- this._onDoneFns = [];
- }
- }
- init() {
- this._buildPlayer();
- this._preparePlayerBeforeStart();
- }
- _buildPlayer() {
- if (this._initialized)
- return;
- this._initialized = true;
- const keyframes = this.keyframes;
- this.domPlayer =
- this._triggerWebAnimation(this.element, keyframes, this.options);
- this._finalKeyframe = keyframes.length ? keyframes[keyframes.length - 1] : {};
- this.domPlayer.addEventListener('finish', () => this._onFinish());
- }
- _preparePlayerBeforeStart() {
- // this is required so that the player doesn't start to animate right away
- if (this._delay) {
- this._resetDomPlayerState();
- }
- else {
- this.domPlayer.pause();
- }
- }
- /** @internal */
- _triggerWebAnimation(element, keyframes, options) {
- // jscompiler doesn't seem to know animate is a native property because it's not fully
- // supported yet across common browsers (we polyfill it for Edge/Safari) [CL #143630929]
- return element['animate'](keyframes, options);
- }
- onStart(fn) {
- this._onStartFns.push(fn);
- }
- onDone(fn) {
- this._onDoneFns.push(fn);
- }
- onDestroy(fn) {
- this._onDestroyFns.push(fn);
- }
- play() {
- this._buildPlayer();
- if (!this.hasStarted()) {
- this._onStartFns.forEach(fn => fn());
- this._onStartFns = [];
- this._started = true;
- if (this._specialStyles) {
- this._specialStyles.start();
- }
- }
- this.domPlayer.play();
- }
- pause() {
- this.init();
- this.domPlayer.pause();
- }
- finish() {
- this.init();
- if (this._specialStyles) {
- this._specialStyles.finish();
- }
- this._onFinish();
- this.domPlayer.finish();
- }
- reset() {
- this._resetDomPlayerState();
- this._destroyed = false;
- this._finished = false;
- this._started = false;
- }
- _resetDomPlayerState() {
- if (this.domPlayer) {
- this.domPlayer.cancel();
- }
- }
- restart() {
- this.reset();
- this.play();
- }
- hasStarted() {
- return this._started;
- }
- destroy() {
- if (!this._destroyed) {
- this._destroyed = true;
- this._resetDomPlayerState();
- this._onFinish();
- if (this._specialStyles) {
- this._specialStyles.destroy();
- }
- this._onDestroyFns.forEach(fn => fn());
- this._onDestroyFns = [];
- }
- }
- setPosition(p) {
- this.domPlayer.currentTime = p * this.time;
- }
- getPosition() {
- return this.domPlayer.currentTime / this.time;
- }
- get totalTime() {
- return this._delay + this._duration;
- }
- beforeDestroy() {
- const styles = {};
- if (this.hasStarted()) {
- Object.keys(this._finalKeyframe).forEach(prop => {
- if (prop != 'offset') {
- styles[prop] =
- this._finished ? this._finalKeyframe[prop] : computeStyle(this.element, prop);
- }
- });
- }
- this.currentSnapshot = styles;
- }
- /** @internal */
- triggerCallback(phaseName) {
- const methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns;
- methods.forEach(fn => fn());
- methods.length = 0;
- }
- }
- class WebAnimationsDriver {
- constructor() {
- this._isNativeImpl = /\{\s*\[native\s+code\]\s*\}/.test(getElementAnimateFn().toString());
- this._cssKeyframesDriver = new CssKeyframesDriver();
- }
- validateStyleProperty(prop) {
- return validateStyleProperty(prop);
- }
- matchesElement(element, selector) {
- return matchesElement(element, selector);
- }
- containsElement(elm1, elm2) {
- return containsElement(elm1, elm2);
- }
- query(element, selector, multi) {
- return invokeQuery(element, selector, multi);
- }
- computeStyle(element, prop, defaultValue) {
- return window.getComputedStyle(element)[prop];
- }
- overrideWebAnimationsSupport(supported) {
- this._isNativeImpl = supported;
- }
- animate(element, keyframes, duration, delay, easing, previousPlayers = [], scrubberAccessRequested) {
- const useKeyframes = !scrubberAccessRequested && !this._isNativeImpl;
- if (useKeyframes) {
- return this._cssKeyframesDriver.animate(element, keyframes, duration, delay, easing, previousPlayers);
- }
- const fill = delay == 0 ? 'both' : 'forwards';
- const playerOptions = { duration, delay, fill };
- // we check for this to avoid having a null|undefined value be present
- // for the easing (which results in an error for certain browsers #9752)
- if (easing) {
- playerOptions['easing'] = easing;
- }
- const previousStyles = {};
- const previousWebAnimationPlayers = previousPlayers.filter(player => player instanceof WebAnimationsPlayer);
- if (allowPreviousPlayerStylesMerge(duration, delay)) {
- previousWebAnimationPlayers.forEach(player => {
- let styles = player.currentSnapshot;
- Object.keys(styles).forEach(prop => previousStyles[prop] = styles[prop]);
- });
- }
- keyframes = keyframes.map(styles => copyStyles(styles, false));
- keyframes = balancePreviousStylesIntoKeyframes(element, keyframes, previousStyles);
- const specialStyles = packageNonAnimatableStyles(element, keyframes);
- return new WebAnimationsPlayer(element, keyframes, playerOptions, specialStyles);
- }
- }
- function supportsWebAnimations() {
- return typeof getElementAnimateFn() === 'function';
- }
- function getElementAnimateFn() {
- return (isBrowser() && Element.prototype['animate']) || {};
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=browser.js.map
- /***/ }),
- /***/ "tS1D":
- /*!******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/timeout.js ***!
- \******************************************************************/
- /*! exports provided: timeout */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeout", function() { return timeout; });
- /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scheduler/async */ "D0XW");
- /* harmony import */ var _util_TimeoutError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/TimeoutError */ "Y6u4");
- /* harmony import */ var _timeoutWith__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./timeoutWith */ "syX2");
- /* harmony import */ var _observable_throwError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../observable/throwError */ "z6cu");
- function timeout(due, scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"]) {
- return Object(_timeoutWith__WEBPACK_IMPORTED_MODULE_2__["timeoutWith"])(due, Object(_observable_throwError__WEBPACK_IMPORTED_MODULE_3__["throwError"])(new _util_TimeoutError__WEBPACK_IMPORTED_MODULE_1__["TimeoutError"]()), scheduler);
- }
- //# sourceMappingURL=timeout.js.map
- /***/ }),
- /***/ "tf+s":
- /*!**********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/subscribeOn.js ***!
- \**********************************************************************/
- /*! exports provided: subscribeOn */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeOn", function() { return subscribeOn; });
- /* harmony import */ var _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../observable/SubscribeOnObservable */ "O4y0");
- function subscribeOn(scheduler, delay = 0) {
- return function subscribeOnOperatorFunction(source) {
- return source.lift(new SubscribeOnOperator(scheduler, delay));
- };
- }
- class SubscribeOnOperator {
- constructor(scheduler, delay) {
- this.scheduler = scheduler;
- this.delay = delay;
- }
- call(subscriber, source) {
- return new _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__["SubscribeOnObservable"](source, this.delay, this.scheduler).subscribe(subscriber);
- }
- }
- //# sourceMappingURL=subscribeOn.js.map
- /***/ }),
- /***/ "tk/3":
- /*!********************************************************************!*\
- !*** ./node_modules/@angular/common/__ivy_ngcc__/fesm2015/http.js ***!
- \********************************************************************/
- /*! exports provided: HTTP_INTERCEPTORS, HttpBackend, HttpClient, HttpClientJsonpModule, HttpClientModule, HttpClientXsrfModule, HttpErrorResponse, HttpEventType, HttpHandler, HttpHeaderResponse, HttpHeaders, HttpParams, HttpRequest, HttpResponse, HttpResponseBase, HttpUrlEncodingCodec, HttpXhrBackend, HttpXsrfTokenExtractor, JsonpClientBackend, JsonpInterceptor, XhrFactory, ɵHttpInterceptingHandler, ɵangular_packages_common_http_http_a, ɵangular_packages_common_http_http_b, ɵangular_packages_common_http_http_c, ɵangular_packages_common_http_http_d, ɵangular_packages_common_http_http_e, ɵangular_packages_common_http_http_f, ɵangular_packages_common_http_http_g, ɵangular_packages_common_http_http_h */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HTTP_INTERCEPTORS", function() { return HTTP_INTERCEPTORS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpBackend", function() { return HttpBackend; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpClient", function() { return HttpClient; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpClientJsonpModule", function() { return HttpClientJsonpModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpClientModule", function() { return HttpClientModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpClientXsrfModule", function() { return HttpClientXsrfModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpErrorResponse", function() { return HttpErrorResponse; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpEventType", function() { return HttpEventType; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpHandler", function() { return HttpHandler; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpHeaderResponse", function() { return HttpHeaderResponse; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpHeaders", function() { return HttpHeaders; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpParams", function() { return HttpParams; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpRequest", function() { return HttpRequest; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpResponse", function() { return HttpResponse; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpResponseBase", function() { return HttpResponseBase; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpUrlEncodingCodec", function() { return HttpUrlEncodingCodec; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpXhrBackend", function() { return HttpXhrBackend; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpXsrfTokenExtractor", function() { return HttpXsrfTokenExtractor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "JsonpClientBackend", function() { return JsonpClientBackend; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "JsonpInterceptor", function() { return JsonpInterceptor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "XhrFactory", function() { return XhrFactory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵHttpInterceptingHandler", function() { return HttpInterceptingHandler; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_http_http_a", function() { return NoopInterceptor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_http_http_b", function() { return JsonpCallbackContext; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_http_http_c", function() { return jsonpCallbackContext; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_http_http_d", function() { return BrowserXhr; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_http_http_e", function() { return XSRF_COOKIE_NAME; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_http_http_f", function() { return XSRF_HEADER_NAME; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_http_http_g", function() { return HttpXsrfCookieExtractor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_http_http_h", function() { return HttpXsrfInterceptor; });
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "qCKp");
- /* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "kU1M");
- /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/common */ "ofXK");
- /**
- * @license Angular v11.0.4
- * (c) 2010-2020 Google LLC. https://angular.io/
- * License: MIT
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Transforms an `HttpRequest` into a stream of `HttpEvent`s, one of which will likely be a
- * `HttpResponse`.
- *
- * `HttpHandler` is injectable. When injected, the handler instance dispatches requests to the
- * first interceptor in the chain, which dispatches to the second, etc, eventually reaching the
- * `HttpBackend`.
- *
- * In an `HttpInterceptor`, the `HttpHandler` parameter is the next interceptor in the chain.
- *
- * @publicApi
- */
- class HttpHandler {
- }
- /**
- * A final `HttpHandler` which will dispatch the request via browser HTTP APIs to a backend.
- *
- * Interceptors sit between the `HttpClient` interface and the `HttpBackend`.
- *
- * When injected, `HttpBackend` dispatches requests directly to the backend, without going
- * through the interceptor chain.
- *
- * @publicApi
- */
- class HttpBackend {
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Represents the header configuration options for an HTTP request.
- * Instances are immutable. Modifying methods return a cloned
- * instance with the change. The original object is never changed.
- *
- * @publicApi
- */
- class HttpHeaders {
- /** Constructs a new HTTP header object with the given values.*/
- constructor(headers) {
- /**
- * Internal map of lowercased header names to the normalized
- * form of the name (the form seen first).
- */
- this.normalizedNames = new Map();
- /**
- * Queued updates to be materialized the next initialization.
- */
- this.lazyUpdate = null;
- if (!headers) {
- this.headers = new Map();
- }
- else if (typeof headers === 'string') {
- this.lazyInit = () => {
- this.headers = new Map();
- headers.split('\n').forEach(line => {
- const index = line.indexOf(':');
- if (index > 0) {
- const name = line.slice(0, index);
- const key = name.toLowerCase();
- const value = line.slice(index + 1).trim();
- this.maybeSetNormalizedName(name, key);
- if (this.headers.has(key)) {
- this.headers.get(key).push(value);
- }
- else {
- this.headers.set(key, [value]);
- }
- }
- });
- };
- }
- else {
- this.lazyInit = () => {
- this.headers = new Map();
- Object.keys(headers).forEach(name => {
- let values = headers[name];
- const key = name.toLowerCase();
- if (typeof values === 'string') {
- values = [values];
- }
- if (values.length > 0) {
- this.headers.set(key, values);
- this.maybeSetNormalizedName(name, key);
- }
- });
- };
- }
- }
- /**
- * Checks for existence of a given header.
- *
- * @param name The header name to check for existence.
- *
- * @returns True if the header exists, false otherwise.
- */
- has(name) {
- this.init();
- return this.headers.has(name.toLowerCase());
- }
- /**
- * Retrieves the first value of a given header.
- *
- * @param name The header name.
- *
- * @returns The value string if the header exists, null otherwise
- */
- get(name) {
- this.init();
- const values = this.headers.get(name.toLowerCase());
- return values && values.length > 0 ? values[0] : null;
- }
- /**
- * Retrieves the names of the headers.
- *
- * @returns A list of header names.
- */
- keys() {
- this.init();
- return Array.from(this.normalizedNames.values());
- }
- /**
- * Retrieves a list of values for a given header.
- *
- * @param name The header name from which to retrieve values.
- *
- * @returns A string of values if the header exists, null otherwise.
- */
- getAll(name) {
- this.init();
- return this.headers.get(name.toLowerCase()) || null;
- }
- /**
- * Appends a new value to the existing set of values for a header
- * and returns them in a clone of the original instance.
- *
- * @param name The header name for which to append the values.
- * @param value The value to append.
- *
- * @returns A clone of the HTTP headers object with the value appended to the given header.
- */
- append(name, value) {
- return this.clone({ name, value, op: 'a' });
- }
- /**
- * Sets or modifies a value for a given header in a clone of the original instance.
- * If the header already exists, its value is replaced with the given value
- * in the returned object.
- *
- * @param name The header name.
- * @param value The value or values to set or overide for the given header.
- *
- * @returns A clone of the HTTP headers object with the newly set header value.
- */
- set(name, value) {
- return this.clone({ name, value, op: 's' });
- }
- /**
- * Deletes values for a given header in a clone of the original instance.
- *
- * @param name The header name.
- * @param value The value or values to delete for the given header.
- *
- * @returns A clone of the HTTP headers object with the given value deleted.
- */
- delete(name, value) {
- return this.clone({ name, value, op: 'd' });
- }
- maybeSetNormalizedName(name, lcName) {
- if (!this.normalizedNames.has(lcName)) {
- this.normalizedNames.set(lcName, name);
- }
- }
- init() {
- if (!!this.lazyInit) {
- if (this.lazyInit instanceof HttpHeaders) {
- this.copyFrom(this.lazyInit);
- }
- else {
- this.lazyInit();
- }
- this.lazyInit = null;
- if (!!this.lazyUpdate) {
- this.lazyUpdate.forEach(update => this.applyUpdate(update));
- this.lazyUpdate = null;
- }
- }
- }
- copyFrom(other) {
- other.init();
- Array.from(other.headers.keys()).forEach(key => {
- this.headers.set(key, other.headers.get(key));
- this.normalizedNames.set(key, other.normalizedNames.get(key));
- });
- }
- clone(update) {
- const clone = new HttpHeaders();
- clone.lazyInit =
- (!!this.lazyInit && this.lazyInit instanceof HttpHeaders) ? this.lazyInit : this;
- clone.lazyUpdate = (this.lazyUpdate || []).concat([update]);
- return clone;
- }
- applyUpdate(update) {
- const key = update.name.toLowerCase();
- switch (update.op) {
- case 'a':
- case 's':
- let value = update.value;
- if (typeof value === 'string') {
- value = [value];
- }
- if (value.length === 0) {
- return;
- }
- this.maybeSetNormalizedName(update.name, key);
- const base = (update.op === 'a' ? this.headers.get(key) : undefined) || [];
- base.push(...value);
- this.headers.set(key, base);
- break;
- case 'd':
- const toDelete = update.value;
- if (!toDelete) {
- this.headers.delete(key);
- this.normalizedNames.delete(key);
- }
- else {
- let existing = this.headers.get(key);
- if (!existing) {
- return;
- }
- existing = existing.filter(value => toDelete.indexOf(value) === -1);
- if (existing.length === 0) {
- this.headers.delete(key);
- this.normalizedNames.delete(key);
- }
- else {
- this.headers.set(key, existing);
- }
- }
- break;
- }
- }
- /**
- * @internal
- */
- forEach(fn) {
- this.init();
- Array.from(this.normalizedNames.keys())
- .forEach(key => fn(this.normalizedNames.get(key), this.headers.get(key)));
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Provides encoding and decoding of URL parameter and query-string values.
- *
- * Serializes and parses URL parameter keys and values to encode and decode them.
- * If you pass URL query parameters without encoding,
- * the query parameters can be misinterpreted at the receiving end.
- *
- *
- * @publicApi
- */
- class HttpUrlEncodingCodec {
- /**
- * Encodes a key name for a URL parameter or query-string.
- * @param key The key name.
- * @returns The encoded key name.
- */
- encodeKey(key) {
- return standardEncoding(key);
- }
- /**
- * Encodes the value of a URL parameter or query-string.
- * @param value The value.
- * @returns The encoded value.
- */
- encodeValue(value) {
- return standardEncoding(value);
- }
- /**
- * Decodes an encoded URL parameter or query-string key.
- * @param key The encoded key name.
- * @returns The decoded key name.
- */
- decodeKey(key) {
- return decodeURIComponent(key);
- }
- /**
- * Decodes an encoded URL parameter or query-string value.
- * @param value The encoded value.
- * @returns The decoded value.
- */
- decodeValue(value) {
- return decodeURIComponent(value);
- }
- }
- function paramParser(rawParams, codec) {
- const map = new Map();
- if (rawParams.length > 0) {
- const params = rawParams.split('&');
- params.forEach((param) => {
- const eqIdx = param.indexOf('=');
- const [key, val] = eqIdx == -1 ?
- [codec.decodeKey(param), ''] :
- [codec.decodeKey(param.slice(0, eqIdx)), codec.decodeValue(param.slice(eqIdx + 1))];
- const list = map.get(key) || [];
- list.push(val);
- map.set(key, list);
- });
- }
- return map;
- }
- function standardEncoding(v) {
- return encodeURIComponent(v)
- .replace(/%40/gi, '@')
- .replace(/%3A/gi, ':')
- .replace(/%24/gi, '$')
- .replace(/%2C/gi, ',')
- .replace(/%3B/gi, ';')
- .replace(/%2B/gi, '+')
- .replace(/%3D/gi, '=')
- .replace(/%3F/gi, '?')
- .replace(/%2F/gi, '/');
- }
- /**
- * An HTTP request/response body that represents serialized parameters,
- * per the MIME type `application/x-www-form-urlencoded`.
- *
- * This class is immutable; all mutation operations return a new instance.
- *
- * @publicApi
- */
- class HttpParams {
- constructor(options = {}) {
- this.updates = null;
- this.cloneFrom = null;
- this.encoder = options.encoder || new HttpUrlEncodingCodec();
- if (!!options.fromString) {
- if (!!options.fromObject) {
- throw new Error(`Cannot specify both fromString and fromObject.`);
- }
- this.map = paramParser(options.fromString, this.encoder);
- }
- else if (!!options.fromObject) {
- this.map = new Map();
- Object.keys(options.fromObject).forEach(key => {
- const value = options.fromObject[key];
- this.map.set(key, Array.isArray(value) ? value : [value]);
- });
- }
- else {
- this.map = null;
- }
- }
- /**
- * Reports whether the body includes one or more values for a given parameter.
- * @param param The parameter name.
- * @returns True if the parameter has one or more values,
- * false if it has no value or is not present.
- */
- has(param) {
- this.init();
- return this.map.has(param);
- }
- /**
- * Retrieves the first value for a parameter.
- * @param param The parameter name.
- * @returns The first value of the given parameter,
- * or `null` if the parameter is not present.
- */
- get(param) {
- this.init();
- const res = this.map.get(param);
- return !!res ? res[0] : null;
- }
- /**
- * Retrieves all values for a parameter.
- * @param param The parameter name.
- * @returns All values in a string array,
- * or `null` if the parameter not present.
- */
- getAll(param) {
- this.init();
- return this.map.get(param) || null;
- }
- /**
- * Retrieves all the parameters for this body.
- * @returns The parameter names in a string array.
- */
- keys() {
- this.init();
- return Array.from(this.map.keys());
- }
- /**
- * Appends a new value to existing values for a parameter.
- * @param param The parameter name.
- * @param value The new value to add.
- * @return A new body with the appended value.
- */
- append(param, value) {
- return this.clone({ param, value, op: 'a' });
- }
- /**
- * Replaces the value for a parameter.
- * @param param The parameter name.
- * @param value The new value.
- * @return A new body with the new value.
- */
- set(param, value) {
- return this.clone({ param, value, op: 's' });
- }
- /**
- * Removes a given value or all values from a parameter.
- * @param param The parameter name.
- * @param value The value to remove, if provided.
- * @return A new body with the given value removed, or with all values
- * removed if no value is specified.
- */
- delete(param, value) {
- return this.clone({ param, value, op: 'd' });
- }
- /**
- * Serializes the body to an encoded string, where key-value pairs (separated by `=`) are
- * separated by `&`s.
- */
- toString() {
- this.init();
- return this.keys()
- .map(key => {
- const eKey = this.encoder.encodeKey(key);
- // `a: ['1']` produces `'a=1'`
- // `b: []` produces `''`
- // `c: ['1', '2']` produces `'c=1&c=2'`
- return this.map.get(key).map(value => eKey + '=' + this.encoder.encodeValue(value))
- .join('&');
- })
- // filter out empty values because `b: []` produces `''`
- // which results in `a=1&&c=1&c=2` instead of `a=1&c=1&c=2` if we don't
- .filter(param => param !== '')
- .join('&');
- }
- clone(update) {
- const clone = new HttpParams({ encoder: this.encoder });
- clone.cloneFrom = this.cloneFrom || this;
- clone.updates = (this.updates || []).concat([update]);
- return clone;
- }
- init() {
- if (this.map === null) {
- this.map = new Map();
- }
- if (this.cloneFrom !== null) {
- this.cloneFrom.init();
- this.cloneFrom.keys().forEach(key => this.map.set(key, this.cloneFrom.map.get(key)));
- this.updates.forEach(update => {
- switch (update.op) {
- case 'a':
- case 's':
- const base = (update.op === 'a' ? this.map.get(update.param) : undefined) || [];
- base.push(update.value);
- this.map.set(update.param, base);
- break;
- case 'd':
- if (update.value !== undefined) {
- let base = this.map.get(update.param) || [];
- const idx = base.indexOf(update.value);
- if (idx !== -1) {
- base.splice(idx, 1);
- }
- if (base.length > 0) {
- this.map.set(update.param, base);
- }
- else {
- this.map.delete(update.param);
- }
- }
- else {
- this.map.delete(update.param);
- break;
- }
- }
- });
- this.cloneFrom = this.updates = null;
- }
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Determine whether the given HTTP method may include a body.
- */
- function mightHaveBody(method) {
- switch (method) {
- case 'DELETE':
- case 'GET':
- case 'HEAD':
- case 'OPTIONS':
- case 'JSONP':
- return false;
- default:
- return true;
- }
- }
- /**
- * Safely assert whether the given value is an ArrayBuffer.
- *
- * In some execution environments ArrayBuffer is not defined.
- */
- function isArrayBuffer(value) {
- return typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer;
- }
- /**
- * Safely assert whether the given value is a Blob.
- *
- * In some execution environments Blob is not defined.
- */
- function isBlob(value) {
- return typeof Blob !== 'undefined' && value instanceof Blob;
- }
- /**
- * Safely assert whether the given value is a FormData instance.
- *
- * In some execution environments FormData is not defined.
- */
- function isFormData(value) {
- return typeof FormData !== 'undefined' && value instanceof FormData;
- }
- /**
- * An outgoing HTTP request with an optional typed body.
- *
- * `HttpRequest` represents an outgoing request, including URL, method,
- * headers, body, and other request configuration options. Instances should be
- * assumed to be immutable. To modify a `HttpRequest`, the `clone`
- * method should be used.
- *
- * @publicApi
- */
- class HttpRequest {
- constructor(method, url, third, fourth) {
- this.url = url;
- /**
- * The request body, or `null` if one isn't set.
- *
- * Bodies are not enforced to be immutable, as they can include a reference to any
- * user-defined data type. However, interceptors should take care to preserve
- * idempotence by treating them as such.
- */
- this.body = null;
- /**
- * Whether this request should be made in a way that exposes progress events.
- *
- * Progress events are expensive (change detection runs on each event) and so
- * they should only be requested if the consumer intends to monitor them.
- */
- this.reportProgress = false;
- /**
- * Whether this request should be sent with outgoing credentials (cookies).
- */
- this.withCredentials = false;
- /**
- * The expected response type of the server.
- *
- * This is used to parse the response appropriately before returning it to
- * the requestee.
- */
- this.responseType = 'json';
- this.method = method.toUpperCase();
- // Next, need to figure out which argument holds the HttpRequestInit
- // options, if any.
- let options;
- // Check whether a body argument is expected. The only valid way to omit
- // the body argument is to use a known no-body method like GET.
- if (mightHaveBody(this.method) || !!fourth) {
- // Body is the third argument, options are the fourth.
- this.body = (third !== undefined) ? third : null;
- options = fourth;
- }
- else {
- // No body required, options are the third argument. The body stays null.
- options = third;
- }
- // If options have been passed, interpret them.
- if (options) {
- // Normalize reportProgress and withCredentials.
- this.reportProgress = !!options.reportProgress;
- this.withCredentials = !!options.withCredentials;
- // Override default response type of 'json' if one is provided.
- if (!!options.responseType) {
- this.responseType = options.responseType;
- }
- // Override headers if they're provided.
- if (!!options.headers) {
- this.headers = options.headers;
- }
- if (!!options.params) {
- this.params = options.params;
- }
- }
- // If no headers have been passed in, construct a new HttpHeaders instance.
- if (!this.headers) {
- this.headers = new HttpHeaders();
- }
- // If no parameters have been passed in, construct a new HttpUrlEncodedParams instance.
- if (!this.params) {
- this.params = new HttpParams();
- this.urlWithParams = url;
- }
- else {
- // Encode the parameters to a string in preparation for inclusion in the URL.
- const params = this.params.toString();
- if (params.length === 0) {
- // No parameters, the visible URL is just the URL given at creation time.
- this.urlWithParams = url;
- }
- else {
- // Does the URL already have query parameters? Look for '?'.
- const qIdx = url.indexOf('?');
- // There are 3 cases to handle:
- // 1) No existing parameters -> append '?' followed by params.
- // 2) '?' exists and is followed by existing query string ->
- // append '&' followed by params.
- // 3) '?' exists at the end of the url -> append params directly.
- // This basically amounts to determining the character, if any, with
- // which to join the URL and parameters.
- const sep = qIdx === -1 ? '?' : (qIdx < url.length - 1 ? '&' : '');
- this.urlWithParams = url + sep + params;
- }
- }
- }
- /**
- * Transform the free-form body into a serialized format suitable for
- * transmission to the server.
- */
- serializeBody() {
- // If no body is present, no need to serialize it.
- if (this.body === null) {
- return null;
- }
- // Check whether the body is already in a serialized form. If so,
- // it can just be returned directly.
- if (isArrayBuffer(this.body) || isBlob(this.body) || isFormData(this.body) ||
- typeof this.body === 'string') {
- return this.body;
- }
- // Check whether the body is an instance of HttpUrlEncodedParams.
- if (this.body instanceof HttpParams) {
- return this.body.toString();
- }
- // Check whether the body is an object or array, and serialize with JSON if so.
- if (typeof this.body === 'object' || typeof this.body === 'boolean' ||
- Array.isArray(this.body)) {
- return JSON.stringify(this.body);
- }
- // Fall back on toString() for everything else.
- return this.body.toString();
- }
- /**
- * Examine the body and attempt to infer an appropriate MIME type
- * for it.
- *
- * If no such type can be inferred, this method will return `null`.
- */
- detectContentTypeHeader() {
- // An empty body has no content type.
- if (this.body === null) {
- return null;
- }
- // FormData bodies rely on the browser's content type assignment.
- if (isFormData(this.body)) {
- return null;
- }
- // Blobs usually have their own content type. If it doesn't, then
- // no type can be inferred.
- if (isBlob(this.body)) {
- return this.body.type || null;
- }
- // Array buffers have unknown contents and thus no type can be inferred.
- if (isArrayBuffer(this.body)) {
- return null;
- }
- // Technically, strings could be a form of JSON data, but it's safe enough
- // to assume they're plain strings.
- if (typeof this.body === 'string') {
- return 'text/plain';
- }
- // `HttpUrlEncodedParams` has its own content-type.
- if (this.body instanceof HttpParams) {
- return 'application/x-www-form-urlencoded;charset=UTF-8';
- }
- // Arrays, objects, and numbers will be encoded as JSON.
- if (typeof this.body === 'object' || typeof this.body === 'number' ||
- Array.isArray(this.body)) {
- return 'application/json';
- }
- // No type could be inferred.
- return null;
- }
- clone(update = {}) {
- // For method, url, and responseType, take the current value unless
- // it is overridden in the update hash.
- const method = update.method || this.method;
- const url = update.url || this.url;
- const responseType = update.responseType || this.responseType;
- // The body is somewhat special - a `null` value in update.body means
- // whatever current body is present is being overridden with an empty
- // body, whereas an `undefined` value in update.body implies no
- // override.
- const body = (update.body !== undefined) ? update.body : this.body;
- // Carefully handle the boolean options to differentiate between
- // `false` and `undefined` in the update args.
- const withCredentials = (update.withCredentials !== undefined) ? update.withCredentials : this.withCredentials;
- const reportProgress = (update.reportProgress !== undefined) ? update.reportProgress : this.reportProgress;
- // Headers and params may be appended to if `setHeaders` or
- // `setParams` are used.
- let headers = update.headers || this.headers;
- let params = update.params || this.params;
- // Check whether the caller has asked to add headers.
- if (update.setHeaders !== undefined) {
- // Set every requested header.
- headers =
- Object.keys(update.setHeaders)
- .reduce((headers, name) => headers.set(name, update.setHeaders[name]), headers);
- }
- // Check whether the caller has asked to set params.
- if (update.setParams) {
- // Set every requested param.
- params = Object.keys(update.setParams)
- .reduce((params, param) => params.set(param, update.setParams[param]), params);
- }
- // Finally, construct the new HttpRequest using the pieces from above.
- return new HttpRequest(method, url, body, {
- params,
- headers,
- reportProgress,
- responseType,
- withCredentials,
- });
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Type enumeration for the different kinds of `HttpEvent`.
- *
- * @publicApi
- */
- var HttpEventType;
- (function (HttpEventType) {
- /**
- * The request was sent out over the wire.
- */
- HttpEventType[HttpEventType["Sent"] = 0] = "Sent";
- /**
- * An upload progress event was received.
- */
- HttpEventType[HttpEventType["UploadProgress"] = 1] = "UploadProgress";
- /**
- * The response status code and headers were received.
- */
- HttpEventType[HttpEventType["ResponseHeader"] = 2] = "ResponseHeader";
- /**
- * A download progress event was received.
- */
- HttpEventType[HttpEventType["DownloadProgress"] = 3] = "DownloadProgress";
- /**
- * The full response including the body was received.
- */
- HttpEventType[HttpEventType["Response"] = 4] = "Response";
- /**
- * A custom event from an interceptor or a backend.
- */
- HttpEventType[HttpEventType["User"] = 5] = "User";
- })(HttpEventType || (HttpEventType = {}));
- /**
- * Base class for both `HttpResponse` and `HttpHeaderResponse`.
- *
- * @publicApi
- */
- class HttpResponseBase {
- /**
- * Super-constructor for all responses.
- *
- * The single parameter accepted is an initialization hash. Any properties
- * of the response passed there will override the default values.
- */
- constructor(init, defaultStatus = 200, defaultStatusText = 'OK') {
- // If the hash has values passed, use them to initialize the response.
- // Otherwise use the default values.
- this.headers = init.headers || new HttpHeaders();
- this.status = init.status !== undefined ? init.status : defaultStatus;
- this.statusText = init.statusText || defaultStatusText;
- this.url = init.url || null;
- // Cache the ok value to avoid defining a getter.
- this.ok = this.status >= 200 && this.status < 300;
- }
- }
- /**
- * A partial HTTP response which only includes the status and header data,
- * but no response body.
- *
- * `HttpHeaderResponse` is a `HttpEvent` available on the response
- * event stream, only when progress events are requested.
- *
- * @publicApi
- */
- class HttpHeaderResponse extends HttpResponseBase {
- /**
- * Create a new `HttpHeaderResponse` with the given parameters.
- */
- constructor(init = {}) {
- super(init);
- this.type = HttpEventType.ResponseHeader;
- }
- /**
- * Copy this `HttpHeaderResponse`, overriding its contents with the
- * given parameter hash.
- */
- clone(update = {}) {
- // Perform a straightforward initialization of the new HttpHeaderResponse,
- // overriding the current parameters with new ones if given.
- return new HttpHeaderResponse({
- headers: update.headers || this.headers,
- status: update.status !== undefined ? update.status : this.status,
- statusText: update.statusText || this.statusText,
- url: update.url || this.url || undefined,
- });
- }
- }
- /**
- * A full HTTP response, including a typed response body (which may be `null`
- * if one was not returned).
- *
- * `HttpResponse` is a `HttpEvent` available on the response event
- * stream.
- *
- * @publicApi
- */
- class HttpResponse extends HttpResponseBase {
- /**
- * Construct a new `HttpResponse`.
- */
- constructor(init = {}) {
- super(init);
- this.type = HttpEventType.Response;
- this.body = init.body !== undefined ? init.body : null;
- }
- clone(update = {}) {
- return new HttpResponse({
- body: (update.body !== undefined) ? update.body : this.body,
- headers: update.headers || this.headers,
- status: (update.status !== undefined) ? update.status : this.status,
- statusText: update.statusText || this.statusText,
- url: update.url || this.url || undefined,
- });
- }
- }
- /**
- * A response that represents an error or failure, either from a
- * non-successful HTTP status, an error while executing the request,
- * or some other failure which occurred during the parsing of the response.
- *
- * Any error returned on the `Observable` response stream will be
- * wrapped in an `HttpErrorResponse` to provide additional context about
- * the state of the HTTP layer when the error occurred. The error property
- * will contain either a wrapped Error object or the error response returned
- * from the server.
- *
- * @publicApi
- */
- class HttpErrorResponse extends HttpResponseBase {
- constructor(init) {
- // Initialize with a default status of 0 / Unknown Error.
- super(init, 0, 'Unknown Error');
- this.name = 'HttpErrorResponse';
- /**
- * Errors are never okay, even when the status code is in the 2xx success range.
- */
- this.ok = false;
- // If the response was successful, then this was a parse error. Otherwise, it was
- // a protocol-level failure of some sort. Either the request failed in transit
- // or the server returned an unsuccessful status code.
- if (this.status >= 200 && this.status < 300) {
- this.message = `Http failure during parsing for ${init.url || '(unknown url)'}`;
- }
- else {
- this.message = `Http failure response for ${init.url || '(unknown url)'}: ${init.status} ${init.statusText}`;
- }
- this.error = init.error || null;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Constructs an instance of `HttpRequestOptions<T>` from a source `HttpMethodOptions` and
- * the given `body`. This function clones the object and adds the body.
- *
- * Note that the `responseType` *options* value is a String that identifies the
- * single data type of the response.
- * A single overload version of the method handles each response type.
- * The value of `responseType` cannot be a union, as the combined signature could imply.
- *
- */
- function addBody(options, body) {
- return {
- body,
- headers: options.headers,
- observe: options.observe,
- params: options.params,
- reportProgress: options.reportProgress,
- responseType: options.responseType,
- withCredentials: options.withCredentials,
- };
- }
- /**
- * Performs HTTP requests.
- * This service is available as an injectable class, with methods to perform HTTP requests.
- * Each request method has multiple signatures, and the return type varies based on
- * the signature that is called (mainly the values of `observe` and `responseType`).
- *
- * Note that the `responseType` *options* value is a String that identifies the
- * single data type of the response.
- * A single overload version of the method handles each response type.
- * The value of `responseType` cannot be a union, as the combined signature could imply.
- *
- * @usageNotes
- * Sample HTTP requests for the [Tour of Heroes](/tutorial/toh-pt0) application.
- *
- * ### HTTP Request Example
- *
- * ```
- * // GET heroes whose name contains search term
- * searchHeroes(term: string): observable<Hero[]>{
- *
- * const params = new HttpParams({fromString: 'name=term'});
- * return this.httpClient.request('GET', this.heroesUrl, {responseType:'json', params});
- * }
- * ```
- * ### JSONP Example
- * ```
- * requestJsonp(url, callback = 'callback') {
- * return this.httpClient.jsonp(this.heroesURL, callback);
- * }
- * ```
- *
- * ### PATCH Example
- * ```
- * // PATCH one of the heroes' name
- * patchHero (id: number, heroName: string): Observable<{}> {
- * const url = `${this.heroesUrl}/${id}`; // PATCH api/heroes/42
- * return this.httpClient.patch(url, {name: heroName}, httpOptions)
- * .pipe(catchError(this.handleError('patchHero')));
- * }
- * ```
- *
- * @see [HTTP Guide](guide/http)
- *
- * @publicApi
- */
- class HttpClient {
- constructor(handler) {
- this.handler = handler;
- }
- /**
- * Constructs an observable for a generic HTTP request that, when subscribed,
- * fires the request through the chain of registered interceptors and on to the
- * server.
- *
- * You can pass an `HttpRequest` directly as the only parameter. In this case,
- * the call returns an observable of the raw `HttpEvent` stream.
- *
- * Alternatively you can pass an HTTP method as the first parameter,
- * a URL string as the second, and an options hash containing the request body as the third.
- * See `addBody()`. In this case, the specified `responseType` and `observe` options determine the
- * type of returned observable.
- * * The `responseType` value determines how a successful response body is parsed.
- * * If `responseType` is the default `json`, you can pass a type interface for the resulting
- * object as a type parameter to the call.
- *
- * The `observe` value determines the return type, according to what you are interested in
- * observing.
- * * An `observe` value of events returns an observable of the raw `HttpEvent` stream, including
- * progress events by default.
- * * An `observe` value of response returns an observable of `HttpResponse<T>`,
- * where the `T` parameter depends on the `responseType` and any optionally provided type
- * parameter.
- * * An `observe` value of body returns an observable of `<T>` with the same `T` body type.
- *
- */
- request(first, url, options = {}) {
- let req;
- // First, check whether the primary argument is an instance of `HttpRequest`.
- if (first instanceof HttpRequest) {
- // It is. The other arguments must be undefined (per the signatures) and can be
- // ignored.
- req = first;
- }
- else {
- // It's a string, so it represents a URL. Construct a request based on it,
- // and incorporate the remaining arguments (assuming `GET` unless a method is
- // provided.
- // Figure out the headers.
- let headers = undefined;
- if (options.headers instanceof HttpHeaders) {
- headers = options.headers;
- }
- else {
- headers = new HttpHeaders(options.headers);
- }
- // Sort out parameters.
- let params = undefined;
- if (!!options.params) {
- if (options.params instanceof HttpParams) {
- params = options.params;
- }
- else {
- params = new HttpParams({ fromObject: options.params });
- }
- }
- // Construct the request.
- req = new HttpRequest(first, url, (options.body !== undefined ? options.body : null), {
- headers,
- params,
- reportProgress: options.reportProgress,
- // By default, JSON is assumed to be returned for all calls.
- responseType: options.responseType || 'json',
- withCredentials: options.withCredentials,
- });
- }
- // Start with an Observable.of() the initial request, and run the handler (which
- // includes all interceptors) inside a concatMap(). This way, the handler runs
- // inside an Observable chain, which causes interceptors to be re-run on every
- // subscription (this also makes retries re-run the handler, including interceptors).
- const events$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])(req).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["concatMap"])((req) => this.handler.handle(req)));
- // If coming via the API signature which accepts a previously constructed HttpRequest,
- // the only option is to get the event stream. Otherwise, return the event stream if
- // that is what was requested.
- if (first instanceof HttpRequest || options.observe === 'events') {
- return events$;
- }
- // The requested stream contains either the full response or the body. In either
- // case, the first step is to filter the event stream to extract a stream of
- // responses(s).
- const res$ = events$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])((event) => event instanceof HttpResponse));
- // Decide which stream to return.
- switch (options.observe || 'body') {
- case 'body':
- // The requested stream is the body. Map the response stream to the response
- // body. This could be done more simply, but a misbehaving interceptor might
- // transform the response body into a different format and ignore the requested
- // responseType. Guard against this by validating that the response is of the
- // requested type.
- switch (req.responseType) {
- case 'arraybuffer':
- return res$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])((res) => {
- // Validate that the body is an ArrayBuffer.
- if (res.body !== null && !(res.body instanceof ArrayBuffer)) {
- throw new Error('Response is not an ArrayBuffer.');
- }
- return res.body;
- }));
- case 'blob':
- return res$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])((res) => {
- // Validate that the body is a Blob.
- if (res.body !== null && !(res.body instanceof Blob)) {
- throw new Error('Response is not a Blob.');
- }
- return res.body;
- }));
- case 'text':
- return res$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])((res) => {
- // Validate that the body is a string.
- if (res.body !== null && typeof res.body !== 'string') {
- throw new Error('Response is not a string.');
- }
- return res.body;
- }));
- case 'json':
- default:
- // No validation needed for JSON responses, as they can be of any type.
- return res$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])((res) => res.body));
- }
- case 'response':
- // The response stream was requested directly, so return it.
- return res$;
- default:
- // Guard against new future observe types being added.
- throw new Error(`Unreachable: unhandled observe type ${options.observe}}`);
- }
- }
- /**
- * Constructs an observable that, when subscribed, causes the configured
- * `DELETE` request to execute on the server. See the individual overloads for
- * details on the return type.
- *
- * @param url The endpoint URL.
- * @param options The HTTP options to send with the request.
- *
- */
- delete(url, options = {}) {
- return this.request('DELETE', url, options);
- }
- /**
- * Constructs an observable that, when subscribed, causes the configured
- * `GET` request to execute on the server. See the individual overloads for
- * details on the return type.
- */
- get(url, options = {}) {
- return this.request('GET', url, options);
- }
- /**
- * Constructs an observable that, when subscribed, causes the configured
- * `HEAD` request to execute on the server. The `HEAD` method returns
- * meta information about the resource without transferring the
- * resource itself. See the individual overloads for
- * details on the return type.
- */
- head(url, options = {}) {
- return this.request('HEAD', url, options);
- }
- /**
- * Constructs an `Observable` that, when subscribed, causes a request with the special method
- * `JSONP` to be dispatched via the interceptor pipeline.
- * The [JSONP pattern](https://en.wikipedia.org/wiki/JSONP) works around limitations of certain
- * API endpoints that don't support newer,
- * and preferable [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) protocol.
- * JSONP treats the endpoint API as a JavaScript file and tricks the browser to process the
- * requests even if the API endpoint is not located on the same domain (origin) as the client-side
- * application making the request.
- * The endpoint API must support JSONP callback for JSONP requests to work.
- * The resource API returns the JSON response wrapped in a callback function.
- * You can pass the callback function name as one of the query parameters.
- * Note that JSONP requests can only be used with `GET` requests.
- *
- * @param url The resource URL.
- * @param callbackParam The callback function name.
- *
- */
- jsonp(url, callbackParam) {
- return this.request('JSONP', url, {
- params: new HttpParams().append(callbackParam, 'JSONP_CALLBACK'),
- observe: 'body',
- responseType: 'json',
- });
- }
- /**
- * Constructs an `Observable` that, when subscribed, causes the configured
- * `OPTIONS` request to execute on the server. This method allows the client
- * to determine the supported HTTP methods and other capabilites of an endpoint,
- * without implying a resource action. See the individual overloads for
- * details on the return type.
- */
- options(url, options = {}) {
- return this.request('OPTIONS', url, options);
- }
- /**
- * Constructs an observable that, when subscribed, causes the configured
- * `PATCH` request to execute on the server. See the individual overloads for
- * details on the return type.
- */
- patch(url, body, options = {}) {
- return this.request('PATCH', url, addBody(options, body));
- }
- /**
- * Constructs an observable that, when subscribed, causes the configured
- * `POST` request to execute on the server. The server responds with the location of
- * the replaced resource. See the individual overloads for
- * details on the return type.
- */
- post(url, body, options = {}) {
- return this.request('POST', url, addBody(options, body));
- }
- /**
- * Constructs an observable that, when subscribed, causes the configured
- * `PUT` request to execute on the server. The `PUT` method replaces an existing resource
- * with a new set of values.
- * See the individual overloads for details on the return type.
- */
- put(url, body, options = {}) {
- return this.request('PUT', url, addBody(options, body));
- }
- }
- HttpClient.ɵfac = function HttpClient_Factory(t) { return new (t || HttpClient)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](HttpHandler)); };
- HttpClient.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: HttpClient, factory: HttpClient.ɵfac });
- HttpClient.ctorParameters = () => [
- { type: HttpHandler }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HttpClient, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: HttpHandler }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * `HttpHandler` which applies an `HttpInterceptor` to an `HttpRequest`.
- *
- *
- */
- class HttpInterceptorHandler {
- constructor(next, interceptor) {
- this.next = next;
- this.interceptor = interceptor;
- }
- handle(req) {
- return this.interceptor.intercept(req, this.next);
- }
- }
- /**
- * A multi-provider token that represents the array of registered
- * `HttpInterceptor` objects.
- *
- * @publicApi
- */
- const HTTP_INTERCEPTORS = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('HTTP_INTERCEPTORS');
- class NoopInterceptor {
- intercept(req, next) {
- return next.handle(req);
- }
- }
- NoopInterceptor.ɵfac = function NoopInterceptor_Factory(t) { return new (t || NoopInterceptor)(); };
- NoopInterceptor.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: NoopInterceptor, factory: NoopInterceptor.ɵfac });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NoopInterceptor, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], null, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // Every request made through JSONP needs a callback name that's unique across the
- // whole page. Each request is assigned an id and the callback name is constructed
- // from that. The next id to be assigned is tracked in a global variable here that
- // is shared among all applications on the page.
- let nextRequestId = 0;
- // Error text given when a JSONP script is injected, but doesn't invoke the callback
- // passed in its URL.
- const JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.';
- // Error text given when a request is passed to the JsonpClientBackend that doesn't
- // have a request method JSONP.
- const JSONP_ERR_WRONG_METHOD = 'JSONP requests must use JSONP request method.';
- const JSONP_ERR_WRONG_RESPONSE_TYPE = 'JSONP requests must use Json response type.';
- /**
- * DI token/abstract type representing a map of JSONP callbacks.
- *
- * In the browser, this should always be the `window` object.
- *
- *
- */
- class JsonpCallbackContext {
- }
- /**
- * Processes an `HttpRequest` with the JSONP method,
- * by performing JSONP style requests.
- * @see `HttpHandler`
- * @see `HttpXhrBackend`
- *
- * @publicApi
- */
- class JsonpClientBackend {
- constructor(callbackMap, document) {
- this.callbackMap = callbackMap;
- this.document = document;
- /**
- * A resolved promise that can be used to schedule microtasks in the event handlers.
- */
- this.resolvedPromise = Promise.resolve();
- }
- /**
- * Get the name of the next callback method, by incrementing the global `nextRequestId`.
- */
- nextCallback() {
- return `ng_jsonp_callback_${nextRequestId++}`;
- }
- /**
- * Processes a JSONP request and returns an event stream of the results.
- * @param req The request object.
- * @returns An observable of the response events.
- *
- */
- handle(req) {
- // Firstly, check both the method and response type. If either doesn't match
- // then the request was improperly routed here and cannot be handled.
- if (req.method !== 'JSONP') {
- throw new Error(JSONP_ERR_WRONG_METHOD);
- }
- else if (req.responseType !== 'json') {
- throw new Error(JSONP_ERR_WRONG_RESPONSE_TYPE);
- }
- // Everything else happens inside the Observable boundary.
- return new rxjs__WEBPACK_IMPORTED_MODULE_1__["Observable"]((observer) => {
- // The first step to make a request is to generate the callback name, and replace the
- // callback placeholder in the URL with the name. Care has to be taken here to ensure
- // a trailing &, if matched, gets inserted back into the URL in the correct place.
- const callback = this.nextCallback();
- const url = req.urlWithParams.replace(/=JSONP_CALLBACK(&|$)/, `=${callback}$1`);
- // Construct the <script> tag and point it at the URL.
- const node = this.document.createElement('script');
- node.src = url;
- // A JSONP request requires waiting for multiple callbacks. These variables
- // are closed over and track state across those callbacks.
- // The response object, if one has been received, or null otherwise.
- let body = null;
- // Whether the response callback has been called.
- let finished = false;
- // Whether the request has been cancelled (and thus any other callbacks)
- // should be ignored.
- let cancelled = false;
- // Set the response callback in this.callbackMap (which will be the window
- // object in the browser. The script being loaded via the <script> tag will
- // eventually call this callback.
- this.callbackMap[callback] = (data) => {
- // Data has been received from the JSONP script. Firstly, delete this callback.
- delete this.callbackMap[callback];
- // Next, make sure the request wasn't cancelled in the meantime.
- if (cancelled) {
- return;
- }
- // Set state to indicate data was received.
- body = data;
- finished = true;
- };
- // cleanup() is a utility closure that removes the <script> from the page and
- // the response callback from the window. This logic is used in both the
- // success, error, and cancellation paths, so it's extracted out for convenience.
- const cleanup = () => {
- // Remove the <script> tag if it's still on the page.
- if (node.parentNode) {
- node.parentNode.removeChild(node);
- }
- // Remove the response callback from the callbackMap (window object in the
- // browser).
- delete this.callbackMap[callback];
- };
- // onLoad() is the success callback which runs after the response callback
- // if the JSONP script loads successfully. The event itself is unimportant.
- // If something went wrong, onLoad() may run without the response callback
- // having been invoked.
- const onLoad = (event) => {
- // Do nothing if the request has been cancelled.
- if (cancelled) {
- return;
- }
- // We wrap it in an extra Promise, to ensure the microtask
- // is scheduled after the loaded endpoint has executed any potential microtask itself,
- // which is not guaranteed in Internet Explorer and EdgeHTML. See issue #39496
- this.resolvedPromise.then(() => {
- // Cleanup the page.
- cleanup();
- // Check whether the response callback has run.
- if (!finished) {
- // It hasn't, something went wrong with the request. Return an error via
- // the Observable error path. All JSONP errors have status 0.
- observer.error(new HttpErrorResponse({
- url,
- status: 0,
- statusText: 'JSONP Error',
- error: new Error(JSONP_ERR_NO_CALLBACK),
- }));
- return;
- }
- // Success. body either contains the response body or null if none was
- // returned.
- observer.next(new HttpResponse({
- body,
- status: 200,
- statusText: 'OK',
- url,
- }));
- // Complete the stream, the response is over.
- observer.complete();
- });
- };
- // onError() is the error callback, which runs if the script returned generates
- // a Javascript error. It emits the error via the Observable error channel as
- // a HttpErrorResponse.
- const onError = (error) => {
- // If the request was already cancelled, no need to emit anything.
- if (cancelled) {
- return;
- }
- cleanup();
- // Wrap the error in a HttpErrorResponse.
- observer.error(new HttpErrorResponse({
- error,
- status: 0,
- statusText: 'JSONP Error',
- url,
- }));
- };
- // Subscribe to both the success (load) and error events on the <script> tag,
- // and add it to the page.
- node.addEventListener('load', onLoad);
- node.addEventListener('error', onError);
- this.document.body.appendChild(node);
- // The request has now been successfully sent.
- observer.next({ type: HttpEventType.Sent });
- // Cancellation handler.
- return () => {
- // Track the cancellation so event listeners won't do anything even if already scheduled.
- cancelled = true;
- // Remove the event listeners so they won't run if the events later fire.
- node.removeEventListener('load', onLoad);
- node.removeEventListener('error', onError);
- // And finally, clean up the page.
- cleanup();
- };
- });
- }
- }
- JsonpClientBackend.ɵfac = function JsonpClientBackend_Factory(t) { return new (t || JsonpClientBackend)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](JsonpCallbackContext), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"])); };
- JsonpClientBackend.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: JsonpClientBackend, factory: JsonpClientBackend.ɵfac });
- JsonpClientBackend.ctorParameters = () => [
- { type: JsonpCallbackContext },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"],] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](JsonpClientBackend, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: JsonpCallbackContext }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"]]
- }] }]; }, null); })();
- /**
- * Identifies requests with the method JSONP and
- * shifts them to the `JsonpClientBackend`.
- *
- * @see `HttpInterceptor`
- *
- * @publicApi
- */
- class JsonpInterceptor {
- constructor(jsonp) {
- this.jsonp = jsonp;
- }
- /**
- * Identifies and handles a given JSONP request.
- * @param req The outgoing request object to handle.
- * @param next The next interceptor in the chain, or the backend
- * if no interceptors remain in the chain.
- * @returns An observable of the event stream.
- */
- intercept(req, next) {
- if (req.method === 'JSONP') {
- return this.jsonp.handle(req);
- }
- // Fall through for normal HTTP requests.
- return next.handle(req);
- }
- }
- JsonpInterceptor.ɵfac = function JsonpInterceptor_Factory(t) { return new (t || JsonpInterceptor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](JsonpClientBackend)); };
- JsonpInterceptor.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: JsonpInterceptor, factory: JsonpInterceptor.ɵfac });
- JsonpInterceptor.ctorParameters = () => [
- { type: JsonpClientBackend }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](JsonpInterceptor, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: JsonpClientBackend }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const XSSI_PREFIX = /^\)\]\}',?\n/;
- /**
- * Determine an appropriate URL for the response, by checking either
- * XMLHttpRequest.responseURL or the X-Request-URL header.
- */
- function getResponseUrl(xhr) {
- if ('responseURL' in xhr && xhr.responseURL) {
- return xhr.responseURL;
- }
- if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {
- return xhr.getResponseHeader('X-Request-URL');
- }
- return null;
- }
- /**
- * A wrapper around the `XMLHttpRequest` constructor.
- *
- * @publicApi
- */
- class XhrFactory {
- }
- /**
- * A factory for `HttpXhrBackend` that uses the `XMLHttpRequest` browser API.
- *
- */
- class BrowserXhr {
- constructor() { }
- build() {
- return (new XMLHttpRequest());
- }
- }
- BrowserXhr.ɵfac = function BrowserXhr_Factory(t) { return new (t || BrowserXhr)(); };
- BrowserXhr.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: BrowserXhr, factory: BrowserXhr.ɵfac });
- BrowserXhr.ctorParameters = () => [];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BrowserXhr, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return []; }, null); })();
- /**
- * Uses `XMLHttpRequest` to send requests to a backend server.
- * @see `HttpHandler`
- * @see `JsonpClientBackend`
- *
- * @publicApi
- */
- class HttpXhrBackend {
- constructor(xhrFactory) {
- this.xhrFactory = xhrFactory;
- }
- /**
- * Processes a request and returns a stream of response events.
- * @param req The request object.
- * @returns An observable of the response events.
- */
- handle(req) {
- // Quick check to give a better error message when a user attempts to use
- // HttpClient.jsonp() without installing the HttpClientJsonpModule
- if (req.method === 'JSONP') {
- throw new Error(`Attempted to construct Jsonp request without HttpClientJsonpModule installed.`);
- }
- // Everything happens on Observable subscription.
- return new rxjs__WEBPACK_IMPORTED_MODULE_1__["Observable"]((observer) => {
- // Start by setting up the XHR object with request method, URL, and withCredentials flag.
- const xhr = this.xhrFactory.build();
- xhr.open(req.method, req.urlWithParams);
- if (!!req.withCredentials) {
- xhr.withCredentials = true;
- }
- // Add all the requested headers.
- req.headers.forEach((name, values) => xhr.setRequestHeader(name, values.join(',')));
- // Add an Accept header if one isn't present already.
- if (!req.headers.has('Accept')) {
- xhr.setRequestHeader('Accept', 'application/json, text/plain, */*');
- }
- // Auto-detect the Content-Type header if one isn't present already.
- if (!req.headers.has('Content-Type')) {
- const detectedType = req.detectContentTypeHeader();
- // Sometimes Content-Type detection fails.
- if (detectedType !== null) {
- xhr.setRequestHeader('Content-Type', detectedType);
- }
- }
- // Set the responseType if one was requested.
- if (req.responseType) {
- const responseType = req.responseType.toLowerCase();
- // JSON responses need to be processed as text. This is because if the server
- // returns an XSSI-prefixed JSON response, the browser will fail to parse it,
- // xhr.response will be null, and xhr.responseText cannot be accessed to
- // retrieve the prefixed JSON data in order to strip the prefix. Thus, all JSON
- // is parsed by first requesting text and then applying JSON.parse.
- xhr.responseType = ((responseType !== 'json') ? responseType : 'text');
- }
- // Serialize the request body if one is present. If not, this will be set to null.
- const reqBody = req.serializeBody();
- // If progress events are enabled, response headers will be delivered
- // in two events - the HttpHeaderResponse event and the full HttpResponse
- // event. However, since response headers don't change in between these
- // two events, it doesn't make sense to parse them twice. So headerResponse
- // caches the data extracted from the response whenever it's first parsed,
- // to ensure parsing isn't duplicated.
- let headerResponse = null;
- // partialFromXhr extracts the HttpHeaderResponse from the current XMLHttpRequest
- // state, and memoizes it into headerResponse.
- const partialFromXhr = () => {
- if (headerResponse !== null) {
- return headerResponse;
- }
- // Read status and normalize an IE9 bug (https://bugs.jquery.com/ticket/1450).
- const status = xhr.status === 1223 ? 204 : xhr.status;
- const statusText = xhr.statusText || 'OK';
- // Parse headers from XMLHttpRequest - this step is lazy.
- const headers = new HttpHeaders(xhr.getAllResponseHeaders());
- // Read the response URL from the XMLHttpResponse instance and fall back on the
- // request URL.
- const url = getResponseUrl(xhr) || req.url;
- // Construct the HttpHeaderResponse and memoize it.
- headerResponse = new HttpHeaderResponse({ headers, status, statusText, url });
- return headerResponse;
- };
- // Next, a few closures are defined for the various events which XMLHttpRequest can
- // emit. This allows them to be unregistered as event listeners later.
- // First up is the load event, which represents a response being fully available.
- const onLoad = () => {
- // Read response state from the memoized partial data.
- let { headers, status, statusText, url } = partialFromXhr();
- // The body will be read out if present.
- let body = null;
- if (status !== 204) {
- // Use XMLHttpRequest.response if set, responseText otherwise.
- body = (typeof xhr.response === 'undefined') ? xhr.responseText : xhr.response;
- }
- // Normalize another potential bug (this one comes from CORS).
- if (status === 0) {
- status = !!body ? 200 : 0;
- }
- // ok determines whether the response will be transmitted on the event or
- // error channel. Unsuccessful status codes (not 2xx) will always be errors,
- // but a successful status code can still result in an error if the user
- // asked for JSON data and the body cannot be parsed as such.
- let ok = status >= 200 && status < 300;
- // Check whether the body needs to be parsed as JSON (in many cases the browser
- // will have done that already).
- if (req.responseType === 'json' && typeof body === 'string') {
- // Save the original body, before attempting XSSI prefix stripping.
- const originalBody = body;
- body = body.replace(XSSI_PREFIX, '');
- try {
- // Attempt the parse. If it fails, a parse error should be delivered to the user.
- body = body !== '' ? JSON.parse(body) : null;
- }
- catch (error) {
- // Since the JSON.parse failed, it's reasonable to assume this might not have been a
- // JSON response. Restore the original body (including any XSSI prefix) to deliver
- // a better error response.
- body = originalBody;
- // If this was an error request to begin with, leave it as a string, it probably
- // just isn't JSON. Otherwise, deliver the parsing error to the user.
- if (ok) {
- // Even though the response status was 2xx, this is still an error.
- ok = false;
- // The parse error contains the text of the body that failed to parse.
- body = { error, text: body };
- }
- }
- }
- if (ok) {
- // A successful response is delivered on the event stream.
- observer.next(new HttpResponse({
- body,
- headers,
- status,
- statusText,
- url: url || undefined,
- }));
- // The full body has been received and delivered, no further events
- // are possible. This request is complete.
- observer.complete();
- }
- else {
- // An unsuccessful request is delivered on the error channel.
- observer.error(new HttpErrorResponse({
- // The error in this case is the response body (error from the server).
- error: body,
- headers,
- status,
- statusText,
- url: url || undefined,
- }));
- }
- };
- // The onError callback is called when something goes wrong at the network level.
- // Connection timeout, DNS error, offline, etc. These are actual errors, and are
- // transmitted on the error channel.
- const onError = (error) => {
- const { url } = partialFromXhr();
- const res = new HttpErrorResponse({
- error,
- status: xhr.status || 0,
- statusText: xhr.statusText || 'Unknown Error',
- url: url || undefined,
- });
- observer.error(res);
- };
- // The sentHeaders flag tracks whether the HttpResponseHeaders event
- // has been sent on the stream. This is necessary to track if progress
- // is enabled since the event will be sent on only the first download
- // progerss event.
- let sentHeaders = false;
- // The download progress event handler, which is only registered if
- // progress events are enabled.
- const onDownProgress = (event) => {
- // Send the HttpResponseHeaders event if it hasn't been sent already.
- if (!sentHeaders) {
- observer.next(partialFromXhr());
- sentHeaders = true;
- }
- // Start building the download progress event to deliver on the response
- // event stream.
- let progressEvent = {
- type: HttpEventType.DownloadProgress,
- loaded: event.loaded,
- };
- // Set the total number of bytes in the event if it's available.
- if (event.lengthComputable) {
- progressEvent.total = event.total;
- }
- // If the request was for text content and a partial response is
- // available on XMLHttpRequest, include it in the progress event
- // to allow for streaming reads.
- if (req.responseType === 'text' && !!xhr.responseText) {
- progressEvent.partialText = xhr.responseText;
- }
- // Finally, fire the event.
- observer.next(progressEvent);
- };
- // The upload progress event handler, which is only registered if
- // progress events are enabled.
- const onUpProgress = (event) => {
- // Upload progress events are simpler. Begin building the progress
- // event.
- let progress = {
- type: HttpEventType.UploadProgress,
- loaded: event.loaded,
- };
- // If the total number of bytes being uploaded is available, include
- // it.
- if (event.lengthComputable) {
- progress.total = event.total;
- }
- // Send the event.
- observer.next(progress);
- };
- // By default, register for load and error events.
- xhr.addEventListener('load', onLoad);
- xhr.addEventListener('error', onError);
- // Progress events are only enabled if requested.
- if (req.reportProgress) {
- // Download progress is always enabled if requested.
- xhr.addEventListener('progress', onDownProgress);
- // Upload progress depends on whether there is a body to upload.
- if (reqBody !== null && xhr.upload) {
- xhr.upload.addEventListener('progress', onUpProgress);
- }
- }
- // Fire the request, and notify the event stream that it was fired.
- xhr.send(reqBody);
- observer.next({ type: HttpEventType.Sent });
- // This is the return from the Observable function, which is the
- // request cancellation handler.
- return () => {
- // On a cancellation, remove all registered event listeners.
- xhr.removeEventListener('error', onError);
- xhr.removeEventListener('load', onLoad);
- if (req.reportProgress) {
- xhr.removeEventListener('progress', onDownProgress);
- if (reqBody !== null && xhr.upload) {
- xhr.upload.removeEventListener('progress', onUpProgress);
- }
- }
- // Finally, abort the in-flight request.
- if (xhr.readyState !== xhr.DONE) {
- xhr.abort();
- }
- };
- });
- }
- }
- HttpXhrBackend.ɵfac = function HttpXhrBackend_Factory(t) { return new (t || HttpXhrBackend)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](XhrFactory)); };
- HttpXhrBackend.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: HttpXhrBackend, factory: HttpXhrBackend.ɵfac });
- HttpXhrBackend.ctorParameters = () => [
- { type: XhrFactory }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HttpXhrBackend, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: XhrFactory }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const XSRF_COOKIE_NAME = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('XSRF_COOKIE_NAME');
- const XSRF_HEADER_NAME = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('XSRF_HEADER_NAME');
- /**
- * Retrieves the current XSRF token to use with the next outgoing request.
- *
- * @publicApi
- */
- class HttpXsrfTokenExtractor {
- }
- /**
- * `HttpXsrfTokenExtractor` which retrieves the token from a cookie.
- */
- class HttpXsrfCookieExtractor {
- constructor(doc, platform, cookieName) {
- this.doc = doc;
- this.platform = platform;
- this.cookieName = cookieName;
- this.lastCookieString = '';
- this.lastToken = null;
- /**
- * @internal for testing
- */
- this.parseCount = 0;
- }
- getToken() {
- if (this.platform === 'server') {
- return null;
- }
- const cookieString = this.doc.cookie || '';
- if (cookieString !== this.lastCookieString) {
- this.parseCount++;
- this.lastToken = Object(_angular_common__WEBPACK_IMPORTED_MODULE_3__["ɵparseCookieValue"])(cookieString, this.cookieName);
- this.lastCookieString = cookieString;
- }
- return this.lastToken;
- }
- }
- HttpXsrfCookieExtractor.ɵfac = function HttpXsrfCookieExtractor_Factory(t) { return new (t || HttpXsrfCookieExtractor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](XSRF_COOKIE_NAME)); };
- HttpXsrfCookieExtractor.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: HttpXsrfCookieExtractor, factory: HttpXsrfCookieExtractor.ɵfac });
- HttpXsrfCookieExtractor.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"],] }] },
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"],] }] },
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [XSRF_COOKIE_NAME,] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HttpXsrfCookieExtractor, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"]]
- }] }, { type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
- }] }, { type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [XSRF_COOKIE_NAME]
- }] }]; }, null); })();
- /**
- * `HttpInterceptor` which adds an XSRF token to eligible outgoing requests.
- */
- class HttpXsrfInterceptor {
- constructor(tokenService, headerName) {
- this.tokenService = tokenService;
- this.headerName = headerName;
- }
- intercept(req, next) {
- const lcUrl = req.url.toLowerCase();
- // Skip both non-mutating requests and absolute URLs.
- // Non-mutating requests don't require a token, and absolute URLs require special handling
- // anyway as the cookie set
- // on our origin is not the same as the token expected by another origin.
- if (req.method === 'GET' || req.method === 'HEAD' || lcUrl.startsWith('http://') ||
- lcUrl.startsWith('https://')) {
- return next.handle(req);
- }
- const token = this.tokenService.getToken();
- // Be careful not to overwrite an existing header of the same name.
- if (token !== null && !req.headers.has(this.headerName)) {
- req = req.clone({ headers: req.headers.set(this.headerName, token) });
- }
- return next.handle(req);
- }
- }
- HttpXsrfInterceptor.ɵfac = function HttpXsrfInterceptor_Factory(t) { return new (t || HttpXsrfInterceptor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](HttpXsrfTokenExtractor), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](XSRF_HEADER_NAME)); };
- HttpXsrfInterceptor.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: HttpXsrfInterceptor, factory: HttpXsrfInterceptor.ɵfac });
- HttpXsrfInterceptor.ctorParameters = () => [
- { type: HttpXsrfTokenExtractor },
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"], args: [XSRF_HEADER_NAME,] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HttpXsrfInterceptor, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: HttpXsrfTokenExtractor }, { type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
- args: [XSRF_HEADER_NAME]
- }] }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * An injectable `HttpHandler` that applies multiple interceptors
- * to a request before passing it to the given `HttpBackend`.
- *
- * The interceptors are loaded lazily from the injector, to allow
- * interceptors to themselves inject classes depending indirectly
- * on `HttpInterceptingHandler` itself.
- * @see `HttpInterceptor`
- */
- class HttpInterceptingHandler {
- constructor(backend, injector) {
- this.backend = backend;
- this.injector = injector;
- this.chain = null;
- }
- handle(req) {
- if (this.chain === null) {
- const interceptors = this.injector.get(HTTP_INTERCEPTORS, []);
- this.chain = interceptors.reduceRight((next, interceptor) => new HttpInterceptorHandler(next, interceptor), this.backend);
- }
- return this.chain.handle(req);
- }
- }
- HttpInterceptingHandler.ɵfac = function HttpInterceptingHandler_Factory(t) { return new (t || HttpInterceptingHandler)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](HttpBackend), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"])); };
- HttpInterceptingHandler.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: HttpInterceptingHandler, factory: HttpInterceptingHandler.ɵfac });
- HttpInterceptingHandler.ctorParameters = () => [
- { type: HttpBackend },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HttpInterceptingHandler, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
- }], function () { return [{ type: HttpBackend }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"] }]; }, null); })();
- /**
- * Constructs an `HttpHandler` that applies interceptors
- * to a request before passing it to the given `HttpBackend`.
- *
- * Use as a factory function within `HttpClientModule`.
- *
- *
- */
- function interceptingHandler(backend, interceptors = []) {
- if (!interceptors) {
- return backend;
- }
- return interceptors.reduceRight((next, interceptor) => new HttpInterceptorHandler(next, interceptor), backend);
- }
- /**
- * Factory function that determines where to store JSONP callbacks.
- *
- * Ordinarily JSONP callbacks are stored on the `window` object, but this may not exist
- * in test environments. In that case, callbacks are stored on an anonymous object instead.
- *
- *
- */
- function jsonpCallbackContext() {
- if (typeof window === 'object') {
- return window;
- }
- return {};
- }
- /**
- * Configures XSRF protection support for outgoing requests.
- *
- * For a server that supports a cookie-based XSRF protection system,
- * use directly to configure XSRF protection with the correct
- * cookie and header names.
- *
- * If no names are supplied, the default cookie name is `XSRF-TOKEN`
- * and the default header name is `X-XSRF-TOKEN`.
- *
- * @publicApi
- */
- class HttpClientXsrfModule {
- /**
- * Disable the default XSRF protection.
- */
- static disable() {
- return {
- ngModule: HttpClientXsrfModule,
- providers: [
- { provide: HttpXsrfInterceptor, useClass: NoopInterceptor },
- ],
- };
- }
- /**
- * Configure XSRF protection.
- * @param options An object that can specify either or both
- * cookie name or header name.
- * - Cookie name default is `XSRF-TOKEN`.
- * - Header name default is `X-XSRF-TOKEN`.
- *
- */
- static withOptions(options = {}) {
- return {
- ngModule: HttpClientXsrfModule,
- providers: [
- options.cookieName ? { provide: XSRF_COOKIE_NAME, useValue: options.cookieName } : [],
- options.headerName ? { provide: XSRF_HEADER_NAME, useValue: options.headerName } : [],
- ],
- };
- }
- }
- HttpClientXsrfModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: HttpClientXsrfModule });
- HttpClientXsrfModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function HttpClientXsrfModule_Factory(t) { return new (t || HttpClientXsrfModule)(); }, providers: [
- HttpXsrfInterceptor,
- { provide: HTTP_INTERCEPTORS, useExisting: HttpXsrfInterceptor, multi: true },
- { provide: HttpXsrfTokenExtractor, useClass: HttpXsrfCookieExtractor },
- { provide: XSRF_COOKIE_NAME, useValue: 'XSRF-TOKEN' },
- { provide: XSRF_HEADER_NAME, useValue: 'X-XSRF-TOKEN' },
- ] });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HttpClientXsrfModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- providers: [
- HttpXsrfInterceptor,
- { provide: HTTP_INTERCEPTORS, useExisting: HttpXsrfInterceptor, multi: true },
- { provide: HttpXsrfTokenExtractor, useClass: HttpXsrfCookieExtractor },
- { provide: XSRF_COOKIE_NAME, useValue: 'XSRF-TOKEN' },
- { provide: XSRF_HEADER_NAME, useValue: 'X-XSRF-TOKEN' },
- ]
- }]
- }], null, null); })();
- /**
- * Configures the [dependency injector](guide/glossary#injector) for `HttpClient`
- * with supporting services for XSRF. Automatically imported by `HttpClientModule`.
- *
- * You can add interceptors to the chain behind `HttpClient` by binding them to the
- * multiprovider for built-in [DI token](guide/glossary#di-token) `HTTP_INTERCEPTORS`.
- *
- * @publicApi
- */
- class HttpClientModule {
- }
- HttpClientModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: HttpClientModule });
- HttpClientModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function HttpClientModule_Factory(t) { return new (t || HttpClientModule)(); }, providers: [
- HttpClient,
- { provide: HttpHandler, useClass: HttpInterceptingHandler },
- HttpXhrBackend,
- { provide: HttpBackend, useExisting: HttpXhrBackend },
- BrowserXhr,
- { provide: XhrFactory, useExisting: BrowserXhr },
- ], imports: [[
- HttpClientXsrfModule.withOptions({
- cookieName: 'XSRF-TOKEN',
- headerName: 'X-XSRF-TOKEN'
- }),
- ]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](HttpClientModule, { imports: [HttpClientXsrfModule] }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HttpClientModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- /**
- * Optional configuration for XSRF protection.
- */
- imports: [
- HttpClientXsrfModule.withOptions({
- cookieName: 'XSRF-TOKEN',
- headerName: 'X-XSRF-TOKEN'
- }),
- ],
- /**
- * Configures the [dependency injector](guide/glossary#injector) where it is imported
- * with supporting services for HTTP communications.
- */
- providers: [
- HttpClient,
- { provide: HttpHandler, useClass: HttpInterceptingHandler },
- HttpXhrBackend,
- { provide: HttpBackend, useExisting: HttpXhrBackend },
- BrowserXhr,
- { provide: XhrFactory, useExisting: BrowserXhr },
- ]
- }]
- }], null, null); })();
- /**
- * Configures the [dependency injector](guide/glossary#injector) for `HttpClient`
- * with supporting services for JSONP.
- * Without this module, Jsonp requests reach the backend
- * with method JSONP, where they are rejected.
- *
- * You can add interceptors to the chain behind `HttpClient` by binding them to the
- * multiprovider for built-in [DI token](guide/glossary#di-token) `HTTP_INTERCEPTORS`.
- *
- * @publicApi
- */
- class HttpClientJsonpModule {
- }
- HttpClientJsonpModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: HttpClientJsonpModule });
- HttpClientJsonpModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function HttpClientJsonpModule_Factory(t) { return new (t || HttpClientJsonpModule)(); }, providers: [
- JsonpClientBackend,
- { provide: JsonpCallbackContext, useFactory: jsonpCallbackContext },
- { provide: HTTP_INTERCEPTORS, useClass: JsonpInterceptor, multi: true },
- ] });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HttpClientJsonpModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
- args: [{
- providers: [
- JsonpClientBackend,
- { provide: JsonpCallbackContext, useFactory: jsonpCallbackContext },
- { provide: HTTP_INTERCEPTORS, useClass: JsonpInterceptor, multi: true },
- ]
- }]
- }], null, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=http.js.map
- /***/ }),
- /***/ "tnsW":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/audit.js ***!
- \****************************************************************/
- /*! exports provided: audit */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "audit", function() { return audit; });
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function audit(durationSelector) {
- return function auditOperatorFunction(source) {
- return source.lift(new AuditOperator(durationSelector));
- };
- }
- class AuditOperator {
- constructor(durationSelector) {
- this.durationSelector = durationSelector;
- }
- call(subscriber, source) {
- return source.subscribe(new AuditSubscriber(subscriber, this.durationSelector));
- }
- }
- class AuditSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__["OuterSubscriber"] {
- constructor(destination, durationSelector) {
- super(destination);
- this.durationSelector = durationSelector;
- this.hasValue = false;
- }
- _next(value) {
- this.value = value;
- this.hasValue = true;
- if (!this.throttled) {
- let duration;
- try {
- const { durationSelector } = this;
- duration = durationSelector(value);
- }
- catch (err) {
- return this.destination.error(err);
- }
- const innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(this, duration);
- if (!innerSubscription || innerSubscription.closed) {
- this.clearThrottle();
- }
- else {
- this.add(this.throttled = innerSubscription);
- }
- }
- }
- clearThrottle() {
- const { value, hasValue, throttled } = this;
- if (throttled) {
- this.remove(throttled);
- this.throttled = null;
- throttled.unsubscribe();
- }
- if (hasValue) {
- this.value = null;
- this.hasValue = false;
- this.destination.next(value);
- }
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex) {
- this.clearThrottle();
- }
- notifyComplete() {
- this.clearThrottle();
- }
- }
- //# sourceMappingURL=audit.js.map
- /***/ }),
- /***/ "tyNb":
- /*!**********************************************************************!*\
- !*** ./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js ***!
- \**********************************************************************/
- /*! exports provided: ActivatedRoute, ActivatedRouteSnapshot, ActivationEnd, ActivationStart, BaseRouteReuseStrategy, ChildActivationEnd, ChildActivationStart, ChildrenOutletContexts, DefaultUrlSerializer, GuardsCheckEnd, GuardsCheckStart, NavigationCancel, NavigationEnd, NavigationError, NavigationStart, NoPreloading, OutletContext, PRIMARY_OUTLET, PreloadAllModules, PreloadingStrategy, ROUTER_CONFIGURATION, ROUTER_INITIALIZER, ROUTES, ResolveEnd, ResolveStart, RouteConfigLoadEnd, RouteConfigLoadStart, RouteReuseStrategy, Router, RouterEvent, RouterLink, RouterLinkActive, RouterLinkWithHref, RouterModule, RouterOutlet, RouterPreloader, RouterState, RouterStateSnapshot, RoutesRecognized, Scroll, UrlHandlingStrategy, UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree, VERSION, convertToParamMap, provideRoutes, ɵEmptyOutletComponent, ɵROUTER_PROVIDERS, ɵangular_packages_router_router_a, ɵangular_packages_router_router_b, ɵangular_packages_router_router_c, ɵangular_packages_router_router_d, ɵangular_packages_router_router_e, ɵangular_packages_router_router_f, ɵangular_packages_router_router_g, ɵangular_packages_router_router_h, ɵangular_packages_router_router_i, ɵangular_packages_router_router_j, ɵangular_packages_router_router_k, ɵangular_packages_router_router_l, ɵangular_packages_router_router_m, ɵangular_packages_router_router_n, ɵangular_packages_router_router_o, ɵassignExtraOptionsToRouter, ɵflatten */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ActivatedRoute", function() { return ActivatedRoute; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ActivatedRouteSnapshot", function() { return ActivatedRouteSnapshot; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ActivationEnd", function() { return ActivationEnd; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ActivationStart", function() { return ActivationStart; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BaseRouteReuseStrategy", function() { return BaseRouteReuseStrategy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ChildActivationEnd", function() { return ChildActivationEnd; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ChildActivationStart", function() { return ChildActivationStart; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ChildrenOutletContexts", function() { return ChildrenOutletContexts; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DefaultUrlSerializer", function() { return DefaultUrlSerializer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GuardsCheckEnd", function() { return GuardsCheckEnd; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GuardsCheckStart", function() { return GuardsCheckStart; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NavigationCancel", function() { return NavigationCancel; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NavigationEnd", function() { return NavigationEnd; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NavigationError", function() { return NavigationError; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NavigationStart", function() { return NavigationStart; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NoPreloading", function() { return NoPreloading; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OutletContext", function() { return OutletContext; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PRIMARY_OUTLET", function() { return PRIMARY_OUTLET; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PreloadAllModules", function() { return PreloadAllModules; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PreloadingStrategy", function() { return PreloadingStrategy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ROUTER_CONFIGURATION", function() { return ROUTER_CONFIGURATION; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ROUTER_INITIALIZER", function() { return ROUTER_INITIALIZER; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ROUTES", function() { return ROUTES; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ResolveEnd", function() { return ResolveEnd; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ResolveStart", function() { return ResolveStart; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RouteConfigLoadEnd", function() { return RouteConfigLoadEnd; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RouteConfigLoadStart", function() { return RouteConfigLoadStart; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RouteReuseStrategy", function() { return RouteReuseStrategy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Router", function() { return Router; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RouterEvent", function() { return RouterEvent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RouterLink", function() { return RouterLink; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RouterLinkActive", function() { return RouterLinkActive; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RouterLinkWithHref", function() { return RouterLinkWithHref; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RouterModule", function() { return RouterModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RouterOutlet", function() { return RouterOutlet; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RouterPreloader", function() { return RouterPreloader; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RouterState", function() { return RouterState; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RouterStateSnapshot", function() { return RouterStateSnapshot; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RoutesRecognized", function() { return RoutesRecognized; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Scroll", function() { return Scroll; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UrlHandlingStrategy", function() { return UrlHandlingStrategy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UrlSegment", function() { return UrlSegment; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UrlSegmentGroup", function() { return UrlSegmentGroup; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UrlSerializer", function() { return UrlSerializer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UrlTree", function() { return UrlTree; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VERSION", function() { return VERSION; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "convertToParamMap", function() { return convertToParamMap; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "provideRoutes", function() { return provideRoutes; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵEmptyOutletComponent", function() { return ɵEmptyOutletComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵROUTER_PROVIDERS", function() { return ROUTER_PROVIDERS; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_a", function() { return ROUTER_FORROOT_GUARD; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_b", function() { return routerNgProbeToken; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_c", function() { return createRouterScroller; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_d", function() { return provideLocationStrategy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_e", function() { return provideForRootGuard; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_f", function() { return setupRouter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_g", function() { return rootRoute; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_h", function() { return RouterInitializer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_i", function() { return getAppInitializer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_j", function() { return getBootstrapListener; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_k", function() { return provideRouterInitializer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_l", function() { return ɵEmptyOutletComponent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_m", function() { return Tree; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_n", function() { return TreeNode; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_o", function() { return RouterScroller; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵassignExtraOptionsToRouter", function() { return assignExtraOptionsToRouter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ɵflatten", function() { return flatten; });
- /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/common */ "ofXK");
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ "qCKp");
- /* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ "kU1M");
- /**
- * @license Angular v11.0.4
- * (c) 2010-2020 Google LLC. https://angular.io/
- * License: MIT
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Base for events the router goes through, as opposed to events tied to a specific
- * route. Fired one time for any given navigation.
- *
- * The following code shows how a class subscribes to router events.
- *
- * ```ts
- * class MyService {
- * constructor(public router: Router, logger: Logger) {
- * router.events.pipe(
- * filter((e: Event): e is RouterEvent => e instanceof RouterEvent)
- * ).subscribe((e: RouterEvent) => {
- * logger.log(e.id, e.url);
- * });
- * }
- * }
- * ```
- *
- * @see `Event`
- * @see [Router events summary](guide/router#router-events)
- * @publicApi
- */
- class RouterEvent {
- constructor(
- /** A unique ID that the router assigns to every router navigation. */
- id,
- /** The URL that is the destination for this navigation. */
- url) {
- this.id = id;
- this.url = url;
- }
- }
- /**
- * An event triggered when a navigation starts.
- *
- * @publicApi
- */
- class NavigationStart extends RouterEvent {
- constructor(
- /** @docsNotRequired */
- id,
- /** @docsNotRequired */
- url,
- /** @docsNotRequired */
- navigationTrigger = 'imperative',
- /** @docsNotRequired */
- restoredState = null) {
- super(id, url);
- this.navigationTrigger = navigationTrigger;
- this.restoredState = restoredState;
- }
- /** @docsNotRequired */
- toString() {
- return `NavigationStart(id: ${this.id}, url: '${this.url}')`;
- }
- }
- /**
- * An event triggered when a navigation ends successfully.
- *
- * @see `NavigationStart`
- * @see `NavigationCancel`
- * @see `NavigationError`
- *
- * @publicApi
- */
- class NavigationEnd extends RouterEvent {
- constructor(
- /** @docsNotRequired */
- id,
- /** @docsNotRequired */
- url,
- /** @docsNotRequired */
- urlAfterRedirects) {
- super(id, url);
- this.urlAfterRedirects = urlAfterRedirects;
- }
- /** @docsNotRequired */
- toString() {
- return `NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`;
- }
- }
- /**
- * An event triggered when a navigation is canceled, directly or indirectly.
- * This can happen when a route guard
- * returns `false` or initiates a redirect by returning a `UrlTree`.
- *
- * @see `NavigationStart`
- * @see `NavigationEnd`
- * @see `NavigationError`
- *
- * @publicApi
- */
- class NavigationCancel extends RouterEvent {
- constructor(
- /** @docsNotRequired */
- id,
- /** @docsNotRequired */
- url,
- /** @docsNotRequired */
- reason) {
- super(id, url);
- this.reason = reason;
- }
- /** @docsNotRequired */
- toString() {
- return `NavigationCancel(id: ${this.id}, url: '${this.url}')`;
- }
- }
- /**
- * An event triggered when a navigation fails due to an unexpected error.
- *
- * @see `NavigationStart`
- * @see `NavigationEnd`
- * @see `NavigationCancel`
- *
- * @publicApi
- */
- class NavigationError extends RouterEvent {
- constructor(
- /** @docsNotRequired */
- id,
- /** @docsNotRequired */
- url,
- /** @docsNotRequired */
- error) {
- super(id, url);
- this.error = error;
- }
- /** @docsNotRequired */
- toString() {
- return `NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`;
- }
- }
- /**
- * An event triggered when routes are recognized.
- *
- * @publicApi
- */
- class RoutesRecognized extends RouterEvent {
- constructor(
- /** @docsNotRequired */
- id,
- /** @docsNotRequired */
- url,
- /** @docsNotRequired */
- urlAfterRedirects,
- /** @docsNotRequired */
- state) {
- super(id, url);
- this.urlAfterRedirects = urlAfterRedirects;
- this.state = state;
- }
- /** @docsNotRequired */
- toString() {
- return `RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;
- }
- }
- /**
- * An event triggered at the start of the Guard phase of routing.
- *
- * @see `GuardsCheckEnd`
- *
- * @publicApi
- */
- class GuardsCheckStart extends RouterEvent {
- constructor(
- /** @docsNotRequired */
- id,
- /** @docsNotRequired */
- url,
- /** @docsNotRequired */
- urlAfterRedirects,
- /** @docsNotRequired */
- state) {
- super(id, url);
- this.urlAfterRedirects = urlAfterRedirects;
- this.state = state;
- }
- toString() {
- return `GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;
- }
- }
- /**
- * An event triggered at the end of the Guard phase of routing.
- *
- * @see `GuardsCheckStart`
- *
- * @publicApi
- */
- class GuardsCheckEnd extends RouterEvent {
- constructor(
- /** @docsNotRequired */
- id,
- /** @docsNotRequired */
- url,
- /** @docsNotRequired */
- urlAfterRedirects,
- /** @docsNotRequired */
- state,
- /** @docsNotRequired */
- shouldActivate) {
- super(id, url);
- this.urlAfterRedirects = urlAfterRedirects;
- this.state = state;
- this.shouldActivate = shouldActivate;
- }
- toString() {
- return `GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`;
- }
- }
- /**
- * An event triggered at the the start of the Resolve phase of routing.
- *
- * Runs in the "resolve" phase whether or not there is anything to resolve.
- * In future, may change to only run when there are things to be resolved.
- *
- * @see `ResolveEnd`
- *
- * @publicApi
- */
- class ResolveStart extends RouterEvent {
- constructor(
- /** @docsNotRequired */
- id,
- /** @docsNotRequired */
- url,
- /** @docsNotRequired */
- urlAfterRedirects,
- /** @docsNotRequired */
- state) {
- super(id, url);
- this.urlAfterRedirects = urlAfterRedirects;
- this.state = state;
- }
- toString() {
- return `ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;
- }
- }
- /**
- * An event triggered at the end of the Resolve phase of routing.
- * @see `ResolveStart`.
- *
- * @publicApi
- */
- class ResolveEnd extends RouterEvent {
- constructor(
- /** @docsNotRequired */
- id,
- /** @docsNotRequired */
- url,
- /** @docsNotRequired */
- urlAfterRedirects,
- /** @docsNotRequired */
- state) {
- super(id, url);
- this.urlAfterRedirects = urlAfterRedirects;
- this.state = state;
- }
- toString() {
- return `ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;
- }
- }
- /**
- * An event triggered before lazy loading a route configuration.
- *
- * @see `RouteConfigLoadEnd`
- *
- * @publicApi
- */
- class RouteConfigLoadStart {
- constructor(
- /** @docsNotRequired */
- route) {
- this.route = route;
- }
- toString() {
- return `RouteConfigLoadStart(path: ${this.route.path})`;
- }
- }
- /**
- * An event triggered when a route has been lazy loaded.
- *
- * @see `RouteConfigLoadStart`
- *
- * @publicApi
- */
- class RouteConfigLoadEnd {
- constructor(
- /** @docsNotRequired */
- route) {
- this.route = route;
- }
- toString() {
- return `RouteConfigLoadEnd(path: ${this.route.path})`;
- }
- }
- /**
- * An event triggered at the start of the child-activation
- * part of the Resolve phase of routing.
- * @see `ChildActivationEnd`
- * @see `ResolveStart`
- *
- * @publicApi
- */
- class ChildActivationStart {
- constructor(
- /** @docsNotRequired */
- snapshot) {
- this.snapshot = snapshot;
- }
- toString() {
- const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';
- return `ChildActivationStart(path: '${path}')`;
- }
- }
- /**
- * An event triggered at the end of the child-activation part
- * of the Resolve phase of routing.
- * @see `ChildActivationStart`
- * @see `ResolveStart`
- * @publicApi
- */
- class ChildActivationEnd {
- constructor(
- /** @docsNotRequired */
- snapshot) {
- this.snapshot = snapshot;
- }
- toString() {
- const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';
- return `ChildActivationEnd(path: '${path}')`;
- }
- }
- /**
- * An event triggered at the start of the activation part
- * of the Resolve phase of routing.
- * @see `ActivationEnd`
- * @see `ResolveStart`
- *
- * @publicApi
- */
- class ActivationStart {
- constructor(
- /** @docsNotRequired */
- snapshot) {
- this.snapshot = snapshot;
- }
- toString() {
- const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';
- return `ActivationStart(path: '${path}')`;
- }
- }
- /**
- * An event triggered at the end of the activation part
- * of the Resolve phase of routing.
- * @see `ActivationStart`
- * @see `ResolveStart`
- *
- * @publicApi
- */
- class ActivationEnd {
- constructor(
- /** @docsNotRequired */
- snapshot) {
- this.snapshot = snapshot;
- }
- toString() {
- const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';
- return `ActivationEnd(path: '${path}')`;
- }
- }
- /**
- * An event triggered by scrolling.
- *
- * @publicApi
- */
- class Scroll {
- constructor(
- /** @docsNotRequired */
- routerEvent,
- /** @docsNotRequired */
- position,
- /** @docsNotRequired */
- anchor) {
- this.routerEvent = routerEvent;
- this.position = position;
- this.anchor = anchor;
- }
- toString() {
- const pos = this.position ? `${this.position[0]}, ${this.position[1]}` : null;
- return `Scroll(anchor: '${this.anchor}', position: '${pos}')`;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * The primary routing outlet.
- *
- * @publicApi
- */
- const PRIMARY_OUTLET = 'primary';
- class ParamsAsMap {
- constructor(params) {
- this.params = params || {};
- }
- has(name) {
- return Object.prototype.hasOwnProperty.call(this.params, name);
- }
- get(name) {
- if (this.has(name)) {
- const v = this.params[name];
- return Array.isArray(v) ? v[0] : v;
- }
- return null;
- }
- getAll(name) {
- if (this.has(name)) {
- const v = this.params[name];
- return Array.isArray(v) ? v : [v];
- }
- return [];
- }
- get keys() {
- return Object.keys(this.params);
- }
- }
- /**
- * Converts a `Params` instance to a `ParamMap`.
- * @param params The instance to convert.
- * @returns The new map instance.
- *
- * @publicApi
- */
- function convertToParamMap(params) {
- return new ParamsAsMap(params);
- }
- const NAVIGATION_CANCELING_ERROR = 'ngNavigationCancelingError';
- function navigationCancelingError(message) {
- const error = Error('NavigationCancelingError: ' + message);
- error[NAVIGATION_CANCELING_ERROR] = true;
- return error;
- }
- function isNavigationCancelingError(error) {
- return error && error[NAVIGATION_CANCELING_ERROR];
- }
- // Matches the route configuration (`route`) against the actual URL (`segments`).
- function defaultUrlMatcher(segments, segmentGroup, route) {
- const parts = route.path.split('/');
- if (parts.length > segments.length) {
- // The actual URL is shorter than the config, no match
- return null;
- }
- if (route.pathMatch === 'full' &&
- (segmentGroup.hasChildren() || parts.length < segments.length)) {
- // The config is longer than the actual URL but we are looking for a full match, return null
- return null;
- }
- const posParams = {};
- // Check each config part against the actual URL
- for (let index = 0; index < parts.length; index++) {
- const part = parts[index];
- const segment = segments[index];
- const isParameter = part.startsWith(':');
- if (isParameter) {
- posParams[part.substring(1)] = segment;
- }
- else if (part !== segment.path) {
- // The actual URL part does not match the config, no match
- return null;
- }
- }
- return { consumed: segments.slice(0, parts.length), posParams };
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function shallowEqualArrays(a, b) {
- if (a.length !== b.length)
- return false;
- for (let i = 0; i < a.length; ++i) {
- if (!shallowEqual(a[i], b[i]))
- return false;
- }
- return true;
- }
- function shallowEqual(a, b) {
- // Casting Object.keys return values to include `undefined` as there are some cases
- // in IE 11 where this can happen. Cannot provide a test because the behavior only
- // exists in certain circumstances in IE 11, therefore doing this cast ensures the
- // logic is correct for when this edge case is hit.
- const k1 = Object.keys(a);
- const k2 = Object.keys(b);
- if (!k1 || !k2 || k1.length != k2.length) {
- return false;
- }
- let key;
- for (let i = 0; i < k1.length; i++) {
- key = k1[i];
- if (!equalArraysOrString(a[key], b[key])) {
- return false;
- }
- }
- return true;
- }
- /**
- * Test equality for arrays of strings or a string.
- */
- function equalArraysOrString(a, b) {
- if (Array.isArray(a) && Array.isArray(b)) {
- if (a.length !== b.length)
- return false;
- const aSorted = [...a].sort();
- const bSorted = [...b].sort();
- return aSorted.every((val, index) => bSorted[index] === val);
- }
- else {
- return a === b;
- }
- }
- /**
- * Flattens single-level nested arrays.
- */
- function flatten(arr) {
- return Array.prototype.concat.apply([], arr);
- }
- /**
- * Return the last element of an array.
- */
- function last(a) {
- return a.length > 0 ? a[a.length - 1] : null;
- }
- /**
- * Verifys all booleans in an array are `true`.
- */
- function and(bools) {
- return !bools.some(v => !v);
- }
- function forEach(map, callback) {
- for (const prop in map) {
- if (map.hasOwnProperty(prop)) {
- callback(map[prop], prop);
- }
- }
- }
- function waitForMap(obj, fn) {
- if (Object.keys(obj).length === 0) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])({});
- }
- const waitHead = [];
- const waitTail = [];
- const res = {};
- forEach(obj, (a, k) => {
- const mapped = fn(k, a).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])((r) => res[k] = r));
- if (k === PRIMARY_OUTLET) {
- waitHead.push(mapped);
- }
- else {
- waitTail.push(mapped);
- }
- });
- // Closure compiler has problem with using spread operator here. So we use "Array.concat".
- // Note that we also need to cast the new promise because TypeScript cannot infer the type
- // when calling the "of" function through "Function.apply"
- return rxjs__WEBPACK_IMPORTED_MODULE_2__["of"].apply(null, waitHead.concat(waitTail))
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["concatAll"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["last"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(() => res));
- }
- function wrapIntoObservable(value) {
- if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵisObservable"])(value)) {
- return value;
- }
- if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵisPromise"])(value)) {
- // Use `Promise.resolve()` to wrap promise-like instances.
- // Required ie when a Resolver returns a AngularJS `$q` promise to correctly trigger the
- // change detection.
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(Promise.resolve(value));
- }
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(value);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function createEmptyUrlTree() {
- return new UrlTree(new UrlSegmentGroup([], {}), {}, null);
- }
- function containsTree(container, containee, exact) {
- if (exact) {
- return equalQueryParams(container.queryParams, containee.queryParams) &&
- equalSegmentGroups(container.root, containee.root);
- }
- return containsQueryParams(container.queryParams, containee.queryParams) &&
- containsSegmentGroup(container.root, containee.root);
- }
- function equalQueryParams(container, containee) {
- // TODO: This does not handle array params correctly.
- return shallowEqual(container, containee);
- }
- function equalSegmentGroups(container, containee) {
- if (!equalPath(container.segments, containee.segments))
- return false;
- if (container.numberOfChildren !== containee.numberOfChildren)
- return false;
- for (const c in containee.children) {
- if (!container.children[c])
- return false;
- if (!equalSegmentGroups(container.children[c], containee.children[c]))
- return false;
- }
- return true;
- }
- function containsQueryParams(container, containee) {
- return Object.keys(containee).length <= Object.keys(container).length &&
- Object.keys(containee).every(key => equalArraysOrString(container[key], containee[key]));
- }
- function containsSegmentGroup(container, containee) {
- return containsSegmentGroupHelper(container, containee, containee.segments);
- }
- function containsSegmentGroupHelper(container, containee, containeePaths) {
- if (container.segments.length > containeePaths.length) {
- const current = container.segments.slice(0, containeePaths.length);
- if (!equalPath(current, containeePaths))
- return false;
- if (containee.hasChildren())
- return false;
- return true;
- }
- else if (container.segments.length === containeePaths.length) {
- if (!equalPath(container.segments, containeePaths))
- return false;
- for (const c in containee.children) {
- if (!container.children[c])
- return false;
- if (!containsSegmentGroup(container.children[c], containee.children[c]))
- return false;
- }
- return true;
- }
- else {
- const current = containeePaths.slice(0, container.segments.length);
- const next = containeePaths.slice(container.segments.length);
- if (!equalPath(container.segments, current))
- return false;
- if (!container.children[PRIMARY_OUTLET])
- return false;
- return containsSegmentGroupHelper(container.children[PRIMARY_OUTLET], containee, next);
- }
- }
- /**
- * @description
- *
- * Represents the parsed URL.
- *
- * Since a router state is a tree, and the URL is nothing but a serialized state, the URL is a
- * serialized tree.
- * UrlTree is a data structure that provides a lot of affordances in dealing with URLs
- *
- * @usageNotes
- * ### Example
- *
- * ```
- * @Component({templateUrl:'template.html'})
- * class MyComponent {
- * constructor(router: Router) {
- * const tree: UrlTree =
- * router.parseUrl('/team/33/(user/victor//support:help)?debug=true#fragment');
- * const f = tree.fragment; // return 'fragment'
- * const q = tree.queryParams; // returns {debug: 'true'}
- * const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];
- * const s: UrlSegment[] = g.segments; // returns 2 segments 'team' and '33'
- * g.children[PRIMARY_OUTLET].segments; // returns 2 segments 'user' and 'victor'
- * g.children['support'].segments; // return 1 segment 'help'
- * }
- * }
- * ```
- *
- * @publicApi
- */
- class UrlTree {
- /** @internal */
- constructor(
- /** The root segment group of the URL tree */
- root,
- /** The query params of the URL */
- queryParams,
- /** The fragment of the URL */
- fragment) {
- this.root = root;
- this.queryParams = queryParams;
- this.fragment = fragment;
- }
- get queryParamMap() {
- if (!this._queryParamMap) {
- this._queryParamMap = convertToParamMap(this.queryParams);
- }
- return this._queryParamMap;
- }
- /** @docsNotRequired */
- toString() {
- return DEFAULT_SERIALIZER.serialize(this);
- }
- }
- /**
- * @description
- *
- * Represents the parsed URL segment group.
- *
- * See `UrlTree` for more information.
- *
- * @publicApi
- */
- class UrlSegmentGroup {
- constructor(
- /** The URL segments of this group. See `UrlSegment` for more information */
- segments,
- /** The list of children of this group */
- children) {
- this.segments = segments;
- this.children = children;
- /** The parent node in the url tree */
- this.parent = null;
- forEach(children, (v, k) => v.parent = this);
- }
- /** Whether the segment has child segments */
- hasChildren() {
- return this.numberOfChildren > 0;
- }
- /** Number of child segments */
- get numberOfChildren() {
- return Object.keys(this.children).length;
- }
- /** @docsNotRequired */
- toString() {
- return serializePaths(this);
- }
- }
- /**
- * @description
- *
- * Represents a single URL segment.
- *
- * A UrlSegment is a part of a URL between the two slashes. It contains a path and the matrix
- * parameters associated with the segment.
- *
- * @usageNotes
- * ### Example
- *
- * ```
- * @Component({templateUrl:'template.html'})
- * class MyComponent {
- * constructor(router: Router) {
- * const tree: UrlTree = router.parseUrl('/team;id=33');
- * const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];
- * const s: UrlSegment[] = g.segments;
- * s[0].path; // returns 'team'
- * s[0].parameters; // returns {id: 33}
- * }
- * }
- * ```
- *
- * @publicApi
- */
- class UrlSegment {
- constructor(
- /** The path part of a URL segment */
- path,
- /** The matrix parameters associated with a segment */
- parameters) {
- this.path = path;
- this.parameters = parameters;
- }
- get parameterMap() {
- if (!this._parameterMap) {
- this._parameterMap = convertToParamMap(this.parameters);
- }
- return this._parameterMap;
- }
- /** @docsNotRequired */
- toString() {
- return serializePath(this);
- }
- }
- function equalSegments(as, bs) {
- return equalPath(as, bs) && as.every((a, i) => shallowEqual(a.parameters, bs[i].parameters));
- }
- function equalPath(as, bs) {
- if (as.length !== bs.length)
- return false;
- return as.every((a, i) => a.path === bs[i].path);
- }
- function mapChildrenIntoArray(segment, fn) {
- let res = [];
- forEach(segment.children, (child, childOutlet) => {
- if (childOutlet === PRIMARY_OUTLET) {
- res = res.concat(fn(child, childOutlet));
- }
- });
- forEach(segment.children, (child, childOutlet) => {
- if (childOutlet !== PRIMARY_OUTLET) {
- res = res.concat(fn(child, childOutlet));
- }
- });
- return res;
- }
- /**
- * @description
- *
- * Serializes and deserializes a URL string into a URL tree.
- *
- * The url serialization strategy is customizable. You can
- * make all URLs case insensitive by providing a custom UrlSerializer.
- *
- * See `DefaultUrlSerializer` for an example of a URL serializer.
- *
- * @publicApi
- */
- class UrlSerializer {
- }
- /**
- * @description
- *
- * A default implementation of the `UrlSerializer`.
- *
- * Example URLs:
- *
- * ```
- * /inbox/33(popup:compose)
- * /inbox/33;open=true/messages/44
- * ```
- *
- * DefaultUrlSerializer uses parentheses to serialize secondary segments (e.g., popup:compose), the
- * colon syntax to specify the outlet, and the ';parameter=value' syntax (e.g., open=true) to
- * specify route specific parameters.
- *
- * @publicApi
- */
- class DefaultUrlSerializer {
- /** Parses a url into a `UrlTree` */
- parse(url) {
- const p = new UrlParser(url);
- return new UrlTree(p.parseRootSegment(), p.parseQueryParams(), p.parseFragment());
- }
- /** Converts a `UrlTree` into a url */
- serialize(tree) {
- const segment = `/${serializeSegment(tree.root, true)}`;
- const query = serializeQueryParams(tree.queryParams);
- const fragment = typeof tree.fragment === `string` ? `#${encodeUriFragment(tree.fragment)}` : '';
- return `${segment}${query}${fragment}`;
- }
- }
- const DEFAULT_SERIALIZER = new DefaultUrlSerializer();
- function serializePaths(segment) {
- return segment.segments.map(p => serializePath(p)).join('/');
- }
- function serializeSegment(segment, root) {
- if (!segment.hasChildren()) {
- return serializePaths(segment);
- }
- if (root) {
- const primary = segment.children[PRIMARY_OUTLET] ?
- serializeSegment(segment.children[PRIMARY_OUTLET], false) :
- '';
- const children = [];
- forEach(segment.children, (v, k) => {
- if (k !== PRIMARY_OUTLET) {
- children.push(`${k}:${serializeSegment(v, false)}`);
- }
- });
- return children.length > 0 ? `${primary}(${children.join('//')})` : primary;
- }
- else {
- const children = mapChildrenIntoArray(segment, (v, k) => {
- if (k === PRIMARY_OUTLET) {
- return [serializeSegment(segment.children[PRIMARY_OUTLET], false)];
- }
- return [`${k}:${serializeSegment(v, false)}`];
- });
- // use no parenthesis if the only child is a primary outlet route
- if (Object.keys(segment.children).length === 1 && segment.children[PRIMARY_OUTLET] != null) {
- return `${serializePaths(segment)}/${children[0]}`;
- }
- return `${serializePaths(segment)}/(${children.join('//')})`;
- }
- }
- /**
- * Encodes a URI string with the default encoding. This function will only ever be called from
- * `encodeUriQuery` or `encodeUriSegment` as it's the base set of encodings to be used. We need
- * a custom encoding because encodeURIComponent is too aggressive and encodes stuff that doesn't
- * have to be encoded per https://url.spec.whatwg.org.
- */
- function encodeUriString(s) {
- return encodeURIComponent(s)
- .replace(/%40/g, '@')
- .replace(/%3A/gi, ':')
- .replace(/%24/g, '$')
- .replace(/%2C/gi, ',');
- }
- /**
- * This function should be used to encode both keys and values in a query string key/value. In
- * the following URL, you need to call encodeUriQuery on "k" and "v":
- *
- * http://www.site.org/html;mk=mv?k=v#f
- */
- function encodeUriQuery(s) {
- return encodeUriString(s).replace(/%3B/gi, ';');
- }
- /**
- * This function should be used to encode a URL fragment. In the following URL, you need to call
- * encodeUriFragment on "f":
- *
- * http://www.site.org/html;mk=mv?k=v#f
- */
- function encodeUriFragment(s) {
- return encodeURI(s);
- }
- /**
- * This function should be run on any URI segment as well as the key and value in a key/value
- * pair for matrix params. In the following URL, you need to call encodeUriSegment on "html",
- * "mk", and "mv":
- *
- * http://www.site.org/html;mk=mv?k=v#f
- */
- function encodeUriSegment(s) {
- return encodeUriString(s).replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/%26/gi, '&');
- }
- function decode(s) {
- return decodeURIComponent(s);
- }
- // Query keys/values should have the "+" replaced first, as "+" in a query string is " ".
- // decodeURIComponent function will not decode "+" as a space.
- function decodeQuery(s) {
- return decode(s.replace(/\+/g, '%20'));
- }
- function serializePath(path) {
- return `${encodeUriSegment(path.path)}${serializeMatrixParams(path.parameters)}`;
- }
- function serializeMatrixParams(params) {
- return Object.keys(params)
- .map(key => `;${encodeUriSegment(key)}=${encodeUriSegment(params[key])}`)
- .join('');
- }
- function serializeQueryParams(params) {
- const strParams = Object.keys(params).map((name) => {
- const value = params[name];
- return Array.isArray(value) ?
- value.map(v => `${encodeUriQuery(name)}=${encodeUriQuery(v)}`).join('&') :
- `${encodeUriQuery(name)}=${encodeUriQuery(value)}`;
- });
- return strParams.length ? `?${strParams.join('&')}` : '';
- }
- const SEGMENT_RE = /^[^\/()?;=#]+/;
- function matchSegments(str) {
- const match = str.match(SEGMENT_RE);
- return match ? match[0] : '';
- }
- const QUERY_PARAM_RE = /^[^=?&#]+/;
- // Return the name of the query param at the start of the string or an empty string
- function matchQueryParams(str) {
- const match = str.match(QUERY_PARAM_RE);
- return match ? match[0] : '';
- }
- const QUERY_PARAM_VALUE_RE = /^[^?&#]+/;
- // Return the value of the query param at the start of the string or an empty string
- function matchUrlQueryParamValue(str) {
- const match = str.match(QUERY_PARAM_VALUE_RE);
- return match ? match[0] : '';
- }
- class UrlParser {
- constructor(url) {
- this.url = url;
- this.remaining = url;
- }
- parseRootSegment() {
- this.consumeOptional('/');
- if (this.remaining === '' || this.peekStartsWith('?') || this.peekStartsWith('#')) {
- return new UrlSegmentGroup([], {});
- }
- // The root segment group never has segments
- return new UrlSegmentGroup([], this.parseChildren());
- }
- parseQueryParams() {
- const params = {};
- if (this.consumeOptional('?')) {
- do {
- this.parseQueryParam(params);
- } while (this.consumeOptional('&'));
- }
- return params;
- }
- parseFragment() {
- return this.consumeOptional('#') ? decodeURIComponent(this.remaining) : null;
- }
- parseChildren() {
- if (this.remaining === '') {
- return {};
- }
- this.consumeOptional('/');
- const segments = [];
- if (!this.peekStartsWith('(')) {
- segments.push(this.parseSegment());
- }
- while (this.peekStartsWith('/') && !this.peekStartsWith('//') && !this.peekStartsWith('/(')) {
- this.capture('/');
- segments.push(this.parseSegment());
- }
- let children = {};
- if (this.peekStartsWith('/(')) {
- this.capture('/');
- children = this.parseParens(true);
- }
- let res = {};
- if (this.peekStartsWith('(')) {
- res = this.parseParens(false);
- }
- if (segments.length > 0 || Object.keys(children).length > 0) {
- res[PRIMARY_OUTLET] = new UrlSegmentGroup(segments, children);
- }
- return res;
- }
- // parse a segment with its matrix parameters
- // ie `name;k1=v1;k2`
- parseSegment() {
- const path = matchSegments(this.remaining);
- if (path === '' && this.peekStartsWith(';')) {
- throw new Error(`Empty path url segment cannot have parameters: '${this.remaining}'.`);
- }
- this.capture(path);
- return new UrlSegment(decode(path), this.parseMatrixParams());
- }
- parseMatrixParams() {
- const params = {};
- while (this.consumeOptional(';')) {
- this.parseParam(params);
- }
- return params;
- }
- parseParam(params) {
- const key = matchSegments(this.remaining);
- if (!key) {
- return;
- }
- this.capture(key);
- let value = '';
- if (this.consumeOptional('=')) {
- const valueMatch = matchSegments(this.remaining);
- if (valueMatch) {
- value = valueMatch;
- this.capture(value);
- }
- }
- params[decode(key)] = decode(value);
- }
- // Parse a single query parameter `name[=value]`
- parseQueryParam(params) {
- const key = matchQueryParams(this.remaining);
- if (!key) {
- return;
- }
- this.capture(key);
- let value = '';
- if (this.consumeOptional('=')) {
- const valueMatch = matchUrlQueryParamValue(this.remaining);
- if (valueMatch) {
- value = valueMatch;
- this.capture(value);
- }
- }
- const decodedKey = decodeQuery(key);
- const decodedVal = decodeQuery(value);
- if (params.hasOwnProperty(decodedKey)) {
- // Append to existing values
- let currentVal = params[decodedKey];
- if (!Array.isArray(currentVal)) {
- currentVal = [currentVal];
- params[decodedKey] = currentVal;
- }
- currentVal.push(decodedVal);
- }
- else {
- // Create a new value
- params[decodedKey] = decodedVal;
- }
- }
- // parse `(a/b//outlet_name:c/d)`
- parseParens(allowPrimary) {
- const segments = {};
- this.capture('(');
- while (!this.consumeOptional(')') && this.remaining.length > 0) {
- const path = matchSegments(this.remaining);
- const next = this.remaining[path.length];
- // if is is not one of these characters, then the segment was unescaped
- // or the group was not closed
- if (next !== '/' && next !== ')' && next !== ';') {
- throw new Error(`Cannot parse url '${this.url}'`);
- }
- let outletName = undefined;
- if (path.indexOf(':') > -1) {
- outletName = path.substr(0, path.indexOf(':'));
- this.capture(outletName);
- this.capture(':');
- }
- else if (allowPrimary) {
- outletName = PRIMARY_OUTLET;
- }
- const children = this.parseChildren();
- segments[outletName] = Object.keys(children).length === 1 ? children[PRIMARY_OUTLET] :
- new UrlSegmentGroup([], children);
- this.consumeOptional('//');
- }
- return segments;
- }
- peekStartsWith(str) {
- return this.remaining.startsWith(str);
- }
- // Consumes the prefix when it is present and returns whether it has been consumed
- consumeOptional(str) {
- if (this.peekStartsWith(str)) {
- this.remaining = this.remaining.substring(str.length);
- return true;
- }
- return false;
- }
- capture(str) {
- if (!this.consumeOptional(str)) {
- throw new Error(`Expected "${str}".`);
- }
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class Tree {
- constructor(root) {
- this._root = root;
- }
- get root() {
- return this._root.value;
- }
- /**
- * @internal
- */
- parent(t) {
- const p = this.pathFromRoot(t);
- return p.length > 1 ? p[p.length - 2] : null;
- }
- /**
- * @internal
- */
- children(t) {
- const n = findNode(t, this._root);
- return n ? n.children.map(t => t.value) : [];
- }
- /**
- * @internal
- */
- firstChild(t) {
- const n = findNode(t, this._root);
- return n && n.children.length > 0 ? n.children[0].value : null;
- }
- /**
- * @internal
- */
- siblings(t) {
- const p = findPath(t, this._root);
- if (p.length < 2)
- return [];
- const c = p[p.length - 2].children.map(c => c.value);
- return c.filter(cc => cc !== t);
- }
- /**
- * @internal
- */
- pathFromRoot(t) {
- return findPath(t, this._root).map(s => s.value);
- }
- }
- // DFS for the node matching the value
- function findNode(value, node) {
- if (value === node.value)
- return node;
- for (const child of node.children) {
- const node = findNode(value, child);
- if (node)
- return node;
- }
- return null;
- }
- // Return the path to the node with the given value using DFS
- function findPath(value, node) {
- if (value === node.value)
- return [node];
- for (const child of node.children) {
- const path = findPath(value, child);
- if (path.length) {
- path.unshift(node);
- return path;
- }
- }
- return [];
- }
- class TreeNode {
- constructor(value, children) {
- this.value = value;
- this.children = children;
- }
- toString() {
- return `TreeNode(${this.value})`;
- }
- }
- // Return the list of T indexed by outlet name
- function nodeChildrenAsMap(node) {
- const map = {};
- if (node) {
- node.children.forEach(child => map[child.value.outlet] = child);
- }
- return map;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Represents the state of the router as a tree of activated routes.
- *
- * @usageNotes
- *
- * Every node in the route tree is an `ActivatedRoute` instance
- * that knows about the "consumed" URL segments, the extracted parameters,
- * and the resolved data.
- * Use the `ActivatedRoute` properties to traverse the tree from any node.
- *
- * The following fragment shows how a component gets the root node
- * of the current state to establish its own route tree:
- *
- * ```
- * @Component({templateUrl:'template.html'})
- * class MyComponent {
- * constructor(router: Router) {
- * const state: RouterState = router.routerState;
- * const root: ActivatedRoute = state.root;
- * const child = root.firstChild;
- * const id: Observable<string> = child.params.map(p => p.id);
- * //...
- * }
- * }
- * ```
- *
- * @see `ActivatedRoute`
- * @see [Getting route information](guide/router#getting-route-information)
- *
- * @publicApi
- */
- class RouterState extends Tree {
- /** @internal */
- constructor(root,
- /** The current snapshot of the router state */
- snapshot) {
- super(root);
- this.snapshot = snapshot;
- setRouterState(this, root);
- }
- toString() {
- return this.snapshot.toString();
- }
- }
- function createEmptyState(urlTree, rootComponent) {
- const snapshot = createEmptyStateSnapshot(urlTree, rootComponent);
- const emptyUrl = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"]([new UrlSegment('', {})]);
- const emptyParams = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"]({});
- const emptyData = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"]({});
- const emptyQueryParams = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"]({});
- const fragment = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"]('');
- const activated = new ActivatedRoute(emptyUrl, emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, snapshot.root);
- activated.snapshot = snapshot.root;
- return new RouterState(new TreeNode(activated, []), snapshot);
- }
- function createEmptyStateSnapshot(urlTree, rootComponent) {
- const emptyParams = {};
- const emptyData = {};
- const emptyQueryParams = {};
- const fragment = '';
- const activated = new ActivatedRouteSnapshot([], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null, urlTree.root, -1, {});
- return new RouterStateSnapshot('', new TreeNode(activated, []));
- }
- /**
- * Provides access to information about a route associated with a component
- * that is loaded in an outlet.
- * Use to traverse the `RouterState` tree and extract information from nodes.
- *
- * The following example shows how to construct a component using information from a
- * currently activated route.
- *
- * {@example router/activated-route/module.ts region="activated-route"
- * header="activated-route.component.ts"}
- *
- * @see [Getting route information](guide/router#getting-route-information)
- *
- * @publicApi
- */
- class ActivatedRoute {
- /** @internal */
- constructor(
- /** An observable of the URL segments matched by this route. */
- url,
- /** An observable of the matrix parameters scoped to this route. */
- params,
- /** An observable of the query parameters shared by all the routes. */
- queryParams,
- /** An observable of the URL fragment shared by all the routes. */
- fragment,
- /** An observable of the static and resolved data of this route. */
- data,
- /** The outlet name of the route, a constant. */
- outlet,
- /** The component of the route, a constant. */
- // TODO(vsavkin): remove |string
- component, futureSnapshot) {
- this.url = url;
- this.params = params;
- this.queryParams = queryParams;
- this.fragment = fragment;
- this.data = data;
- this.outlet = outlet;
- this.component = component;
- this._futureSnapshot = futureSnapshot;
- }
- /** The configuration used to match this route. */
- get routeConfig() {
- return this._futureSnapshot.routeConfig;
- }
- /** The root of the router state. */
- get root() {
- return this._routerState.root;
- }
- /** The parent of this route in the router state tree. */
- get parent() {
- return this._routerState.parent(this);
- }
- /** The first child of this route in the router state tree. */
- get firstChild() {
- return this._routerState.firstChild(this);
- }
- /** The children of this route in the router state tree. */
- get children() {
- return this._routerState.children(this);
- }
- /** The path from the root of the router state tree to this route. */
- get pathFromRoot() {
- return this._routerState.pathFromRoot(this);
- }
- /**
- * An Observable that contains a map of the required and optional parameters
- * specific to the route.
- * The map supports retrieving single and multiple values from the same parameter.
- */
- get paramMap() {
- if (!this._paramMap) {
- this._paramMap = this.params.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])((p) => convertToParamMap(p)));
- }
- return this._paramMap;
- }
- /**
- * An Observable that contains a map of the query parameters available to all routes.
- * The map supports retrieving single and multiple values from the query parameter.
- */
- get queryParamMap() {
- if (!this._queryParamMap) {
- this._queryParamMap =
- this.queryParams.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])((p) => convertToParamMap(p)));
- }
- return this._queryParamMap;
- }
- toString() {
- return this.snapshot ? this.snapshot.toString() : `Future(${this._futureSnapshot})`;
- }
- }
- /**
- * Returns the inherited params, data, and resolve for a given route.
- * By default, this only inherits values up to the nearest path-less or component-less route.
- * @internal
- */
- function inheritedParamsDataResolve(route, paramsInheritanceStrategy = 'emptyOnly') {
- const pathFromRoot = route.pathFromRoot;
- let inheritingStartingFrom = 0;
- if (paramsInheritanceStrategy !== 'always') {
- inheritingStartingFrom = pathFromRoot.length - 1;
- while (inheritingStartingFrom >= 1) {
- const current = pathFromRoot[inheritingStartingFrom];
- const parent = pathFromRoot[inheritingStartingFrom - 1];
- // current route is an empty path => inherits its parent's params and data
- if (current.routeConfig && current.routeConfig.path === '') {
- inheritingStartingFrom--;
- // parent is componentless => current route should inherit its params and data
- }
- else if (!parent.component) {
- inheritingStartingFrom--;
- }
- else {
- break;
- }
- }
- }
- return flattenInherited(pathFromRoot.slice(inheritingStartingFrom));
- }
- /** @internal */
- function flattenInherited(pathFromRoot) {
- return pathFromRoot.reduce((res, curr) => {
- const params = Object.assign(Object.assign({}, res.params), curr.params);
- const data = Object.assign(Object.assign({}, res.data), curr.data);
- const resolve = Object.assign(Object.assign({}, res.resolve), curr._resolvedData);
- return { params, data, resolve };
- }, { params: {}, data: {}, resolve: {} });
- }
- /**
- * @description
- *
- * Contains the information about a route associated with a component loaded in an
- * outlet at a particular moment in time. ActivatedRouteSnapshot can also be used to
- * traverse the router state tree.
- *
- * The following example initializes a component with route information extracted
- * from the snapshot of the root node at the time of creation.
- *
- * ```
- * @Component({templateUrl:'./my-component.html'})
- * class MyComponent {
- * constructor(route: ActivatedRoute) {
- * const id: string = route.snapshot.params.id;
- * const url: string = route.snapshot.url.join('');
- * const user = route.snapshot.data.user;
- * }
- * }
- * ```
- *
- * @publicApi
- */
- class ActivatedRouteSnapshot {
- /** @internal */
- constructor(
- /** The URL segments matched by this route */
- url,
- /** The matrix parameters scoped to this route */
- params,
- /** The query parameters shared by all the routes */
- queryParams,
- /** The URL fragment shared by all the routes */
- fragment,
- /** The static and resolved data of this route */
- data,
- /** The outlet name of the route */
- outlet,
- /** The component of the route */
- component, routeConfig, urlSegment, lastPathIndex, resolve) {
- this.url = url;
- this.params = params;
- this.queryParams = queryParams;
- this.fragment = fragment;
- this.data = data;
- this.outlet = outlet;
- this.component = component;
- this.routeConfig = routeConfig;
- this._urlSegment = urlSegment;
- this._lastPathIndex = lastPathIndex;
- this._resolve = resolve;
- }
- /** The root of the router state */
- get root() {
- return this._routerState.root;
- }
- /** The parent of this route in the router state tree */
- get parent() {
- return this._routerState.parent(this);
- }
- /** The first child of this route in the router state tree */
- get firstChild() {
- return this._routerState.firstChild(this);
- }
- /** The children of this route in the router state tree */
- get children() {
- return this._routerState.children(this);
- }
- /** The path from the root of the router state tree to this route */
- get pathFromRoot() {
- return this._routerState.pathFromRoot(this);
- }
- get paramMap() {
- if (!this._paramMap) {
- this._paramMap = convertToParamMap(this.params);
- }
- return this._paramMap;
- }
- get queryParamMap() {
- if (!this._queryParamMap) {
- this._queryParamMap = convertToParamMap(this.queryParams);
- }
- return this._queryParamMap;
- }
- toString() {
- const url = this.url.map(segment => segment.toString()).join('/');
- const matched = this.routeConfig ? this.routeConfig.path : '';
- return `Route(url:'${url}', path:'${matched}')`;
- }
- }
- /**
- * @description
- *
- * Represents the state of the router at a moment in time.
- *
- * This is a tree of activated route snapshots. Every node in this tree knows about
- * the "consumed" URL segments, the extracted parameters, and the resolved data.
- *
- * The following example shows how a component is initialized with information
- * from the snapshot of the root node's state at the time of creation.
- *
- * ```
- * @Component({templateUrl:'template.html'})
- * class MyComponent {
- * constructor(router: Router) {
- * const state: RouterState = router.routerState;
- * const snapshot: RouterStateSnapshot = state.snapshot;
- * const root: ActivatedRouteSnapshot = snapshot.root;
- * const child = root.firstChild;
- * const id: Observable<string> = child.params.map(p => p.id);
- * //...
- * }
- * }
- * ```
- *
- * @publicApi
- */
- class RouterStateSnapshot extends Tree {
- /** @internal */
- constructor(
- /** The url from which this snapshot was created */
- url, root) {
- super(root);
- this.url = url;
- setRouterState(this, root);
- }
- toString() {
- return serializeNode(this._root);
- }
- }
- function setRouterState(state, node) {
- node.value._routerState = state;
- node.children.forEach(c => setRouterState(state, c));
- }
- function serializeNode(node) {
- const c = node.children.length > 0 ? ` { ${node.children.map(serializeNode).join(', ')} } ` : '';
- return `${node.value}${c}`;
- }
- /**
- * The expectation is that the activate route is created with the right set of parameters.
- * So we push new values into the observables only when they are not the initial values.
- * And we detect that by checking if the snapshot field is set.
- */
- function advanceActivatedRoute(route) {
- if (route.snapshot) {
- const currentSnapshot = route.snapshot;
- const nextSnapshot = route._futureSnapshot;
- route.snapshot = nextSnapshot;
- if (!shallowEqual(currentSnapshot.queryParams, nextSnapshot.queryParams)) {
- route.queryParams.next(nextSnapshot.queryParams);
- }
- if (currentSnapshot.fragment !== nextSnapshot.fragment) {
- route.fragment.next(nextSnapshot.fragment);
- }
- if (!shallowEqual(currentSnapshot.params, nextSnapshot.params)) {
- route.params.next(nextSnapshot.params);
- }
- if (!shallowEqualArrays(currentSnapshot.url, nextSnapshot.url)) {
- route.url.next(nextSnapshot.url);
- }
- if (!shallowEqual(currentSnapshot.data, nextSnapshot.data)) {
- route.data.next(nextSnapshot.data);
- }
- }
- else {
- route.snapshot = route._futureSnapshot;
- // this is for resolved data
- route.data.next(route._futureSnapshot.data);
- }
- }
- function equalParamsAndUrlSegments(a, b) {
- const equalUrlParams = shallowEqual(a.params, b.params) && equalSegments(a.url, b.url);
- const parentsMismatch = !a.parent !== !b.parent;
- return equalUrlParams && !parentsMismatch &&
- (!a.parent || equalParamsAndUrlSegments(a.parent, b.parent));
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function createRouterState(routeReuseStrategy, curr, prevState) {
- const root = createNode(routeReuseStrategy, curr._root, prevState ? prevState._root : undefined);
- return new RouterState(root, curr);
- }
- function createNode(routeReuseStrategy, curr, prevState) {
- // reuse an activated route that is currently displayed on the screen
- if (prevState && routeReuseStrategy.shouldReuseRoute(curr.value, prevState.value.snapshot)) {
- const value = prevState.value;
- value._futureSnapshot = curr.value;
- const children = createOrReuseChildren(routeReuseStrategy, curr, prevState);
- return new TreeNode(value, children);
- // retrieve an activated route that is used to be displayed, but is not currently displayed
- }
- else {
- const detachedRouteHandle = routeReuseStrategy.retrieve(curr.value);
- if (detachedRouteHandle) {
- const tree = detachedRouteHandle.route;
- setFutureSnapshotsOfActivatedRoutes(curr, tree);
- return tree;
- }
- else {
- const value = createActivatedRoute(curr.value);
- const children = curr.children.map(c => createNode(routeReuseStrategy, c));
- return new TreeNode(value, children);
- }
- }
- }
- function setFutureSnapshotsOfActivatedRoutes(curr, result) {
- if (curr.value.routeConfig !== result.value.routeConfig) {
- throw new Error('Cannot reattach ActivatedRouteSnapshot created from a different route');
- }
- if (curr.children.length !== result.children.length) {
- throw new Error('Cannot reattach ActivatedRouteSnapshot with a different number of children');
- }
- result.value._futureSnapshot = curr.value;
- for (let i = 0; i < curr.children.length; ++i) {
- setFutureSnapshotsOfActivatedRoutes(curr.children[i], result.children[i]);
- }
- }
- function createOrReuseChildren(routeReuseStrategy, curr, prevState) {
- return curr.children.map(child => {
- for (const p of prevState.children) {
- if (routeReuseStrategy.shouldReuseRoute(child.value, p.value.snapshot)) {
- return createNode(routeReuseStrategy, child, p);
- }
- }
- return createNode(routeReuseStrategy, child);
- });
- }
- function createActivatedRoute(c) {
- return new ActivatedRoute(new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](c.url), new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](c.params), new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](c.queryParams), new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](c.fragment), new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](c.data), c.outlet, c.component, c);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function createUrlTree(route, urlTree, commands, queryParams, fragment) {
- if (commands.length === 0) {
- return tree(urlTree.root, urlTree.root, urlTree, queryParams, fragment);
- }
- const nav = computeNavigation(commands);
- if (nav.toRoot()) {
- return tree(urlTree.root, new UrlSegmentGroup([], {}), urlTree, queryParams, fragment);
- }
- const startingPosition = findStartingPosition(nav, urlTree, route);
- const segmentGroup = startingPosition.processChildren ?
- updateSegmentGroupChildren(startingPosition.segmentGroup, startingPosition.index, nav.commands) :
- updateSegmentGroup(startingPosition.segmentGroup, startingPosition.index, nav.commands);
- return tree(startingPosition.segmentGroup, segmentGroup, urlTree, queryParams, fragment);
- }
- function isMatrixParams(command) {
- return typeof command === 'object' && command != null && !command.outlets && !command.segmentPath;
- }
- /**
- * Determines if a given command has an `outlets` map. When we encounter a command
- * with an outlets k/v map, we need to apply each outlet individually to the existing segment.
- */
- function isCommandWithOutlets(command) {
- return typeof command === 'object' && command != null && command.outlets;
- }
- function tree(oldSegmentGroup, newSegmentGroup, urlTree, queryParams, fragment) {
- let qp = {};
- if (queryParams) {
- forEach(queryParams, (value, name) => {
- qp[name] = Array.isArray(value) ? value.map((v) => `${v}`) : `${value}`;
- });
- }
- if (urlTree.root === oldSegmentGroup) {
- return new UrlTree(newSegmentGroup, qp, fragment);
- }
- return new UrlTree(replaceSegment(urlTree.root, oldSegmentGroup, newSegmentGroup), qp, fragment);
- }
- function replaceSegment(current, oldSegment, newSegment) {
- const children = {};
- forEach(current.children, (c, outletName) => {
- if (c === oldSegment) {
- children[outletName] = newSegment;
- }
- else {
- children[outletName] = replaceSegment(c, oldSegment, newSegment);
- }
- });
- return new UrlSegmentGroup(current.segments, children);
- }
- class Navigation {
- constructor(isAbsolute, numberOfDoubleDots, commands) {
- this.isAbsolute = isAbsolute;
- this.numberOfDoubleDots = numberOfDoubleDots;
- this.commands = commands;
- if (isAbsolute && commands.length > 0 && isMatrixParams(commands[0])) {
- throw new Error('Root segment cannot have matrix parameters');
- }
- const cmdWithOutlet = commands.find(isCommandWithOutlets);
- if (cmdWithOutlet && cmdWithOutlet !== last(commands)) {
- throw new Error('{outlets:{}} has to be the last command');
- }
- }
- toRoot() {
- return this.isAbsolute && this.commands.length === 1 && this.commands[0] == '/';
- }
- }
- /** Transforms commands to a normalized `Navigation` */
- function computeNavigation(commands) {
- if ((typeof commands[0] === 'string') && commands.length === 1 && commands[0] === '/') {
- return new Navigation(true, 0, commands);
- }
- let numberOfDoubleDots = 0;
- let isAbsolute = false;
- const res = commands.reduce((res, cmd, cmdIdx) => {
- if (typeof cmd === 'object' && cmd != null) {
- if (cmd.outlets) {
- const outlets = {};
- forEach(cmd.outlets, (commands, name) => {
- outlets[name] = typeof commands === 'string' ? commands.split('/') : commands;
- });
- return [...res, { outlets }];
- }
- if (cmd.segmentPath) {
- return [...res, cmd.segmentPath];
- }
- }
- if (!(typeof cmd === 'string')) {
- return [...res, cmd];
- }
- if (cmdIdx === 0) {
- cmd.split('/').forEach((urlPart, partIndex) => {
- if (partIndex == 0 && urlPart === '.') {
- // skip './a'
- }
- else if (partIndex == 0 && urlPart === '') { // '/a'
- isAbsolute = true;
- }
- else if (urlPart === '..') { // '../a'
- numberOfDoubleDots++;
- }
- else if (urlPart != '') {
- res.push(urlPart);
- }
- });
- return res;
- }
- return [...res, cmd];
- }, []);
- return new Navigation(isAbsolute, numberOfDoubleDots, res);
- }
- class Position {
- constructor(segmentGroup, processChildren, index) {
- this.segmentGroup = segmentGroup;
- this.processChildren = processChildren;
- this.index = index;
- }
- }
- function findStartingPosition(nav, tree, route) {
- if (nav.isAbsolute) {
- return new Position(tree.root, true, 0);
- }
- if (route.snapshot._lastPathIndex === -1) {
- const segmentGroup = route.snapshot._urlSegment;
- // Pathless ActivatedRoute has _lastPathIndex === -1 but should not process children
- // see issue #26224, #13011, #35687
- // However, if the ActivatedRoute is the root we should process children like above.
- const processChildren = segmentGroup === tree.root;
- return new Position(segmentGroup, processChildren, 0);
- }
- const modifier = isMatrixParams(nav.commands[0]) ? 0 : 1;
- const index = route.snapshot._lastPathIndex + modifier;
- return createPositionApplyingDoubleDots(route.snapshot._urlSegment, index, nav.numberOfDoubleDots);
- }
- function createPositionApplyingDoubleDots(group, index, numberOfDoubleDots) {
- let g = group;
- let ci = index;
- let dd = numberOfDoubleDots;
- while (dd > ci) {
- dd -= ci;
- g = g.parent;
- if (!g) {
- throw new Error('Invalid number of \'../\'');
- }
- ci = g.segments.length;
- }
- return new Position(g, false, ci - dd);
- }
- function getOutlets(commands) {
- if (isCommandWithOutlets(commands[0])) {
- return commands[0].outlets;
- }
- return { [PRIMARY_OUTLET]: commands };
- }
- function updateSegmentGroup(segmentGroup, startIndex, commands) {
- if (!segmentGroup) {
- segmentGroup = new UrlSegmentGroup([], {});
- }
- if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {
- return updateSegmentGroupChildren(segmentGroup, startIndex, commands);
- }
- const m = prefixedWith(segmentGroup, startIndex, commands);
- const slicedCommands = commands.slice(m.commandIndex);
- if (m.match && m.pathIndex < segmentGroup.segments.length) {
- const g = new UrlSegmentGroup(segmentGroup.segments.slice(0, m.pathIndex), {});
- g.children[PRIMARY_OUTLET] =
- new UrlSegmentGroup(segmentGroup.segments.slice(m.pathIndex), segmentGroup.children);
- return updateSegmentGroupChildren(g, 0, slicedCommands);
- }
- else if (m.match && slicedCommands.length === 0) {
- return new UrlSegmentGroup(segmentGroup.segments, {});
- }
- else if (m.match && !segmentGroup.hasChildren()) {
- return createNewSegmentGroup(segmentGroup, startIndex, commands);
- }
- else if (m.match) {
- return updateSegmentGroupChildren(segmentGroup, 0, slicedCommands);
- }
- else {
- return createNewSegmentGroup(segmentGroup, startIndex, commands);
- }
- }
- function updateSegmentGroupChildren(segmentGroup, startIndex, commands) {
- if (commands.length === 0) {
- return new UrlSegmentGroup(segmentGroup.segments, {});
- }
- else {
- const outlets = getOutlets(commands);
- const children = {};
- forEach(outlets, (commands, outlet) => {
- if (typeof commands === 'string') {
- commands = [commands];
- }
- if (commands !== null) {
- children[outlet] = updateSegmentGroup(segmentGroup.children[outlet], startIndex, commands);
- }
- });
- forEach(segmentGroup.children, (child, childOutlet) => {
- if (outlets[childOutlet] === undefined) {
- children[childOutlet] = child;
- }
- });
- return new UrlSegmentGroup(segmentGroup.segments, children);
- }
- }
- function prefixedWith(segmentGroup, startIndex, commands) {
- let currentCommandIndex = 0;
- let currentPathIndex = startIndex;
- const noMatch = { match: false, pathIndex: 0, commandIndex: 0 };
- while (currentPathIndex < segmentGroup.segments.length) {
- if (currentCommandIndex >= commands.length)
- return noMatch;
- const path = segmentGroup.segments[currentPathIndex];
- const command = commands[currentCommandIndex];
- // Do not try to consume command as part of the prefixing if it has outlets because it can
- // contain outlets other than the one being processed. Consuming the outlets command would
- // result in other outlets being ignored.
- if (isCommandWithOutlets(command)) {
- break;
- }
- const curr = `${command}`;
- const next = currentCommandIndex < commands.length - 1 ? commands[currentCommandIndex + 1] : null;
- if (currentPathIndex > 0 && curr === undefined)
- break;
- if (curr && next && (typeof next === 'object') && next.outlets === undefined) {
- if (!compare(curr, next, path))
- return noMatch;
- currentCommandIndex += 2;
- }
- else {
- if (!compare(curr, {}, path))
- return noMatch;
- currentCommandIndex++;
- }
- currentPathIndex++;
- }
- return { match: true, pathIndex: currentPathIndex, commandIndex: currentCommandIndex };
- }
- function createNewSegmentGroup(segmentGroup, startIndex, commands) {
- const paths = segmentGroup.segments.slice(0, startIndex);
- let i = 0;
- while (i < commands.length) {
- const command = commands[i];
- if (isCommandWithOutlets(command)) {
- const children = createNewSegmentChildren(command.outlets);
- return new UrlSegmentGroup(paths, children);
- }
- // if we start with an object literal, we need to reuse the path part from the segment
- if (i === 0 && isMatrixParams(commands[0])) {
- const p = segmentGroup.segments[startIndex];
- paths.push(new UrlSegment(p.path, commands[0]));
- i++;
- continue;
- }
- const curr = isCommandWithOutlets(command) ? command.outlets[PRIMARY_OUTLET] : `${command}`;
- const next = (i < commands.length - 1) ? commands[i + 1] : null;
- if (curr && next && isMatrixParams(next)) {
- paths.push(new UrlSegment(curr, stringify(next)));
- i += 2;
- }
- else {
- paths.push(new UrlSegment(curr, {}));
- i++;
- }
- }
- return new UrlSegmentGroup(paths, {});
- }
- function createNewSegmentChildren(outlets) {
- const children = {};
- forEach(outlets, (commands, outlet) => {
- if (typeof commands === 'string') {
- commands = [commands];
- }
- if (commands !== null) {
- children[outlet] = createNewSegmentGroup(new UrlSegmentGroup([], {}), 0, commands);
- }
- });
- return children;
- }
- function stringify(params) {
- const res = {};
- forEach(params, (v, k) => res[k] = `${v}`);
- return res;
- }
- function compare(path, params, segment) {
- return path == segment.path && shallowEqual(params, segment.parameters);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const activateRoutes = (rootContexts, routeReuseStrategy, forwardEvent) => Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(t => {
- new ActivateRoutes(routeReuseStrategy, t.targetRouterState, t.currentRouterState, forwardEvent)
- .activate(rootContexts);
- return t;
- });
- class ActivateRoutes {
- constructor(routeReuseStrategy, futureState, currState, forwardEvent) {
- this.routeReuseStrategy = routeReuseStrategy;
- this.futureState = futureState;
- this.currState = currState;
- this.forwardEvent = forwardEvent;
- }
- activate(parentContexts) {
- const futureRoot = this.futureState._root;
- const currRoot = this.currState ? this.currState._root : null;
- this.deactivateChildRoutes(futureRoot, currRoot, parentContexts);
- advanceActivatedRoute(this.futureState.root);
- this.activateChildRoutes(futureRoot, currRoot, parentContexts);
- }
- // De-activate the child route that are not re-used for the future state
- deactivateChildRoutes(futureNode, currNode, contexts) {
- const children = nodeChildrenAsMap(currNode);
- // Recurse on the routes active in the future state to de-activate deeper children
- futureNode.children.forEach(futureChild => {
- const childOutletName = futureChild.value.outlet;
- this.deactivateRoutes(futureChild, children[childOutletName], contexts);
- delete children[childOutletName];
- });
- // De-activate the routes that will not be re-used
- forEach(children, (v, childName) => {
- this.deactivateRouteAndItsChildren(v, contexts);
- });
- }
- deactivateRoutes(futureNode, currNode, parentContext) {
- const future = futureNode.value;
- const curr = currNode ? currNode.value : null;
- if (future === curr) {
- // Reusing the node, check to see if the children need to be de-activated
- if (future.component) {
- // If we have a normal route, we need to go through an outlet.
- const context = parentContext.getContext(future.outlet);
- if (context) {
- this.deactivateChildRoutes(futureNode, currNode, context.children);
- }
- }
- else {
- // if we have a componentless route, we recurse but keep the same outlet map.
- this.deactivateChildRoutes(futureNode, currNode, parentContext);
- }
- }
- else {
- if (curr) {
- // Deactivate the current route which will not be re-used
- this.deactivateRouteAndItsChildren(currNode, parentContext);
- }
- }
- }
- deactivateRouteAndItsChildren(route, parentContexts) {
- if (this.routeReuseStrategy.shouldDetach(route.value.snapshot)) {
- this.detachAndStoreRouteSubtree(route, parentContexts);
- }
- else {
- this.deactivateRouteAndOutlet(route, parentContexts);
- }
- }
- detachAndStoreRouteSubtree(route, parentContexts) {
- const context = parentContexts.getContext(route.value.outlet);
- if (context && context.outlet) {
- const componentRef = context.outlet.detach();
- const contexts = context.children.onOutletDeactivated();
- this.routeReuseStrategy.store(route.value.snapshot, { componentRef, route, contexts });
- }
- }
- deactivateRouteAndOutlet(route, parentContexts) {
- const context = parentContexts.getContext(route.value.outlet);
- if (context) {
- const children = nodeChildrenAsMap(route);
- const contexts = route.value.component ? context.children : parentContexts;
- forEach(children, (v, k) => this.deactivateRouteAndItsChildren(v, contexts));
- if (context.outlet) {
- // Destroy the component
- context.outlet.deactivate();
- // Destroy the contexts for all the outlets that were in the component
- context.children.onOutletDeactivated();
- }
- }
- }
- activateChildRoutes(futureNode, currNode, contexts) {
- const children = nodeChildrenAsMap(currNode);
- futureNode.children.forEach(c => {
- this.activateRoutes(c, children[c.value.outlet], contexts);
- this.forwardEvent(new ActivationEnd(c.value.snapshot));
- });
- if (futureNode.children.length) {
- this.forwardEvent(new ChildActivationEnd(futureNode.value.snapshot));
- }
- }
- activateRoutes(futureNode, currNode, parentContexts) {
- const future = futureNode.value;
- const curr = currNode ? currNode.value : null;
- advanceActivatedRoute(future);
- // reusing the node
- if (future === curr) {
- if (future.component) {
- // If we have a normal route, we need to go through an outlet.
- const context = parentContexts.getOrCreateContext(future.outlet);
- this.activateChildRoutes(futureNode, currNode, context.children);
- }
- else {
- // if we have a componentless route, we recurse but keep the same outlet map.
- this.activateChildRoutes(futureNode, currNode, parentContexts);
- }
- }
- else {
- if (future.component) {
- // if we have a normal route, we need to place the component into the outlet and recurse.
- const context = parentContexts.getOrCreateContext(future.outlet);
- if (this.routeReuseStrategy.shouldAttach(future.snapshot)) {
- const stored = this.routeReuseStrategy.retrieve(future.snapshot);
- this.routeReuseStrategy.store(future.snapshot, null);
- context.children.onOutletReAttached(stored.contexts);
- context.attachRef = stored.componentRef;
- context.route = stored.route.value;
- if (context.outlet) {
- // Attach right away when the outlet has already been instantiated
- // Otherwise attach from `RouterOutlet.ngOnInit` when it is instantiated
- context.outlet.attach(stored.componentRef, stored.route.value);
- }
- advanceActivatedRouteNodeAndItsChildren(stored.route);
- }
- else {
- const config = parentLoadedConfig(future.snapshot);
- const cmpFactoryResolver = config ? config.module.componentFactoryResolver : null;
- context.attachRef = null;
- context.route = future;
- context.resolver = cmpFactoryResolver;
- if (context.outlet) {
- // Activate the outlet when it has already been instantiated
- // Otherwise it will get activated from its `ngOnInit` when instantiated
- context.outlet.activateWith(future, cmpFactoryResolver);
- }
- this.activateChildRoutes(futureNode, null, context.children);
- }
- }
- else {
- // if we have a componentless route, we recurse but keep the same outlet map.
- this.activateChildRoutes(futureNode, null, parentContexts);
- }
- }
- }
- }
- function advanceActivatedRouteNodeAndItsChildren(node) {
- advanceActivatedRoute(node.value);
- node.children.forEach(advanceActivatedRouteNodeAndItsChildren);
- }
- function parentLoadedConfig(snapshot) {
- for (let s = snapshot.parent; s; s = s.parent) {
- const route = s.routeConfig;
- if (route && route._loadedConfig)
- return route._loadedConfig;
- if (route && route.component)
- return null;
- }
- return null;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class LoadedRouterConfig {
- constructor(routes, module) {
- this.routes = routes;
- this.module = module;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Simple function check, but generic so type inference will flow. Example:
- *
- * function product(a: number, b: number) {
- * return a * b;
- * }
- *
- * if (isFunction<product>(fn)) {
- * return fn(1, 2);
- * } else {
- * throw "Must provide the `product` function";
- * }
- */
- function isFunction(v) {
- return typeof v === 'function';
- }
- function isBoolean(v) {
- return typeof v === 'boolean';
- }
- function isUrlTree(v) {
- return v instanceof UrlTree;
- }
- function isCanLoad(guard) {
- return guard && isFunction(guard.canLoad);
- }
- function isCanActivate(guard) {
- return guard && isFunction(guard.canActivate);
- }
- function isCanActivateChild(guard) {
- return guard && isFunction(guard.canActivateChild);
- }
- function isCanDeactivate(guard) {
- return guard && isFunction(guard.canDeactivate);
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- const INITIAL_VALUE = Symbol('INITIAL_VALUE');
- function prioritizedGuardValue() {
- return Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(obs => {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["combineLatest"])(...obs.map(o => o.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["startWith"])(INITIAL_VALUE))))
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["scan"])((acc, list) => {
- let isPending = false;
- return list.reduce((innerAcc, val, i) => {
- if (innerAcc !== INITIAL_VALUE)
- return innerAcc;
- // Toggle pending flag if any values haven't been set yet
- if (val === INITIAL_VALUE)
- isPending = true;
- // Any other return values are only valid if we haven't yet hit a pending
- // call. This guarantees that in the case of a guard at the bottom of the
- // tree that returns a redirect, we will wait for the higher priority
- // guard at the top to finish before performing the redirect.
- if (!isPending) {
- // Early return when we hit a `false` value as that should always
- // cancel navigation
- if (val === false)
- return val;
- if (i === list.length - 1 || isUrlTree(val)) {
- return val;
- }
- }
- return innerAcc;
- }, acc);
- }, INITIAL_VALUE), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(item => item !== INITIAL_VALUE), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(item => isUrlTree(item) ? item : item === true), //
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1));
- });
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * This component is used internally within the router to be a placeholder when an empty
- * router-outlet is needed. For example, with a config such as:
- *
- * `{path: 'parent', outlet: 'nav', children: [...]}`
- *
- * In order to render, there needs to be a component on this config, which will default
- * to this `EmptyOutletComponent`.
- */
- class ɵEmptyOutletComponent {
- }
- ɵEmptyOutletComponent.ɵfac = function ɵEmptyOutletComponent_Factory(t) { return new (t || ɵEmptyOutletComponent)(); };
- ɵEmptyOutletComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({ type: ɵEmptyOutletComponent, selectors: [["ng-component"]], decls: 1, vars: 0, template: function ɵEmptyOutletComponent_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](0, "router-outlet");
- } }, directives: function () { return [RouterOutlet]; }, encapsulation: 2 });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ɵEmptyOutletComponent, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
- args: [{ template: `<router-outlet></router-outlet>` }]
- }], null, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function validateConfig(config, parentPath = '') {
- // forEach doesn't iterate undefined values
- for (let i = 0; i < config.length; i++) {
- const route = config[i];
- const fullPath = getFullPath(parentPath, route);
- validateNode(route, fullPath);
- }
- }
- function validateNode(route, fullPath) {
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
- if (!route) {
- throw new Error(`
- Invalid configuration of route '${fullPath}': Encountered undefined route.
- The reason might be an extra comma.
- Example:
- const routes: Routes = [
- { path: '', redirectTo: '/dashboard', pathMatch: 'full' },
- { path: 'dashboard', component: DashboardComponent },, << two commas
- { path: 'detail/:id', component: HeroDetailComponent }
- ];
- `);
- }
- if (Array.isArray(route)) {
- throw new Error(`Invalid configuration of route '${fullPath}': Array cannot be specified`);
- }
- if (!route.component && !route.children && !route.loadChildren &&
- (route.outlet && route.outlet !== PRIMARY_OUTLET)) {
- throw new Error(`Invalid configuration of route '${fullPath}': a componentless route without children or loadChildren cannot have a named outlet set`);
- }
- if (route.redirectTo && route.children) {
- throw new Error(`Invalid configuration of route '${fullPath}': redirectTo and children cannot be used together`);
- }
- if (route.redirectTo && route.loadChildren) {
- throw new Error(`Invalid configuration of route '${fullPath}': redirectTo and loadChildren cannot be used together`);
- }
- if (route.children && route.loadChildren) {
- throw new Error(`Invalid configuration of route '${fullPath}': children and loadChildren cannot be used together`);
- }
- if (route.redirectTo && route.component) {
- throw new Error(`Invalid configuration of route '${fullPath}': redirectTo and component cannot be used together`);
- }
- if (route.path && route.matcher) {
- throw new Error(`Invalid configuration of route '${fullPath}': path and matcher cannot be used together`);
- }
- if (route.redirectTo === void 0 && !route.component && !route.children && !route.loadChildren) {
- throw new Error(`Invalid configuration of route '${fullPath}'. One of the following must be provided: component, redirectTo, children or loadChildren`);
- }
- if (route.path === void 0 && route.matcher === void 0) {
- throw new Error(`Invalid configuration of route '${fullPath}': routes must have either a path or a matcher specified`);
- }
- if (typeof route.path === 'string' && route.path.charAt(0) === '/') {
- throw new Error(`Invalid configuration of route '${fullPath}': path cannot start with a slash`);
- }
- if (route.path === '' && route.redirectTo !== void 0 && route.pathMatch === void 0) {
- const exp = `The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.`;
- throw new Error(`Invalid configuration of route '{path: "${fullPath}", redirectTo: "${route.redirectTo}"}': please provide 'pathMatch'. ${exp}`);
- }
- if (route.pathMatch !== void 0 && route.pathMatch !== 'full' && route.pathMatch !== 'prefix') {
- throw new Error(`Invalid configuration of route '${fullPath}': pathMatch can only be set to 'prefix' or 'full'`);
- }
- }
- if (route.children) {
- validateConfig(route.children, fullPath);
- }
- }
- function getFullPath(parentPath, currentRoute) {
- if (!currentRoute) {
- return parentPath;
- }
- if (!parentPath && !currentRoute.path) {
- return '';
- }
- else if (parentPath && !currentRoute.path) {
- return `${parentPath}/`;
- }
- else if (!parentPath && currentRoute.path) {
- return currentRoute.path;
- }
- else {
- return `${parentPath}/${currentRoute.path}`;
- }
- }
- /**
- * Makes a copy of the config and adds any default required properties.
- */
- function standardizeConfig(r) {
- const children = r.children && r.children.map(standardizeConfig);
- const c = children ? Object.assign(Object.assign({}, r), { children }) : Object.assign({}, r);
- if (!c.component && (children || c.loadChildren) && (c.outlet && c.outlet !== PRIMARY_OUTLET)) {
- c.component = ɵEmptyOutletComponent;
- }
- return c;
- }
- /** Returns of `Map` of outlet names to the `Route`s for that outlet. */
- function groupRoutesByOutlet(routes) {
- return routes.reduce((map, route) => {
- const routeOutlet = getOutlet(route);
- if (map.has(routeOutlet)) {
- map.get(routeOutlet).push(route);
- }
- else {
- map.set(routeOutlet, [route]);
- }
- return map;
- }, new Map());
- }
- /** Returns the `route.outlet` or PRIMARY_OUTLET if none exists. */
- function getOutlet(route) {
- return route.outlet || PRIMARY_OUTLET;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class NoMatch {
- constructor(segmentGroup) {
- this.segmentGroup = segmentGroup || null;
- }
- }
- class AbsoluteRedirect {
- constructor(urlTree) {
- this.urlTree = urlTree;
- }
- }
- function noMatch(segmentGroup) {
- return new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"]((obs) => obs.error(new NoMatch(segmentGroup)));
- }
- function absoluteRedirect(newTree) {
- return new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"]((obs) => obs.error(new AbsoluteRedirect(newTree)));
- }
- function namedOutletsRedirect(redirectTo) {
- return new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"]((obs) => obs.error(new Error(`Only absolute redirects can have named outlets. redirectTo: '${redirectTo}'`)));
- }
- function canLoadFails(route) {
- return new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"]((obs) => obs.error(navigationCancelingError(`Cannot load children because the guard of the route "path: '${route.path}'" returned false`)));
- }
- /**
- * Returns the `UrlTree` with the redirection applied.
- *
- * Lazy modules are loaded along the way.
- */
- function applyRedirects(moduleInjector, configLoader, urlSerializer, urlTree, config) {
- return new ApplyRedirects(moduleInjector, configLoader, urlSerializer, urlTree, config).apply();
- }
- class ApplyRedirects {
- constructor(moduleInjector, configLoader, urlSerializer, urlTree, config) {
- this.configLoader = configLoader;
- this.urlSerializer = urlSerializer;
- this.urlTree = urlTree;
- this.config = config;
- this.allowRedirects = true;
- this.ngModule = moduleInjector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleRef"]);
- }
- apply() {
- const expanded$ = this.expandSegmentGroup(this.ngModule, this.config, this.urlTree.root, PRIMARY_OUTLET);
- const urlTrees$ = expanded$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])((rootSegmentGroup) => this.createUrlTree(rootSegmentGroup, this.urlTree.queryParams, this.urlTree.fragment)));
- return urlTrees$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["catchError"])((e) => {
- if (e instanceof AbsoluteRedirect) {
- // after an absolute redirect we do not apply any more redirects!
- this.allowRedirects = false;
- // we need to run matching, so we can fetch all lazy-loaded modules
- return this.match(e.urlTree);
- }
- if (e instanceof NoMatch) {
- throw this.noMatchError(e);
- }
- throw e;
- }));
- }
- match(tree) {
- const expanded$ = this.expandSegmentGroup(this.ngModule, this.config, tree.root, PRIMARY_OUTLET);
- const mapped$ = expanded$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])((rootSegmentGroup) => this.createUrlTree(rootSegmentGroup, tree.queryParams, tree.fragment)));
- return mapped$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["catchError"])((e) => {
- if (e instanceof NoMatch) {
- throw this.noMatchError(e);
- }
- throw e;
- }));
- }
- noMatchError(e) {
- return new Error(`Cannot match any routes. URL Segment: '${e.segmentGroup}'`);
- }
- createUrlTree(rootCandidate, queryParams, fragment) {
- const root = rootCandidate.segments.length > 0 ?
- new UrlSegmentGroup([], { [PRIMARY_OUTLET]: rootCandidate }) :
- rootCandidate;
- return new UrlTree(root, queryParams, fragment);
- }
- expandSegmentGroup(ngModule, routes, segmentGroup, outlet) {
- if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {
- return this.expandChildren(ngModule, routes, segmentGroup)
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])((children) => new UrlSegmentGroup([], children)));
- }
- return this.expandSegment(ngModule, segmentGroup, routes, segmentGroup.segments, outlet, true);
- }
- // Recursively expand segment groups for all the child outlets
- expandChildren(ngModule, routes, segmentGroup) {
- return waitForMap(segmentGroup.children, (childOutlet, child) => this.expandSegmentGroup(ngModule, routes, child, childOutlet));
- }
- expandSegment(ngModule, segmentGroup, routes, segments, outlet, allowRedirects) {
- // We need to expand each outlet group independently to ensure that we not only load modules
- // for routes matching the given `outlet`, but also those which will be activated because
- // their path is empty string. This can result in multiple outlets being activated at once.
- const routesByOutlet = groupRoutesByOutlet(routes);
- if (!routesByOutlet.has(outlet)) {
- routesByOutlet.set(outlet, []);
- }
- const expandRoutes = (routes) => {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(routes).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["concatMap"])((r) => {
- const expanded$ = this.expandSegmentAgainstRoute(ngModule, segmentGroup, routes, r, segments, outlet, allowRedirects);
- return expanded$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["catchError"])(e => {
- if (e instanceof NoMatch) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(null);
- }
- throw e;
- }));
- }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["first"])((s) => s !== null), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["catchError"])(e => {
- if (e instanceof rxjs__WEBPACK_IMPORTED_MODULE_2__["EmptyError"] || e.name === 'EmptyError') {
- if (this.noLeftoversInUrl(segmentGroup, segments, outlet)) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(new UrlSegmentGroup([], {}));
- }
- throw new NoMatch(segmentGroup);
- }
- throw e;
- }));
- };
- const expansions = Array.from(routesByOutlet.entries()).map(([routeOutlet, routes]) => {
- const expanded = expandRoutes(routes);
- // Map all results from outlets we aren't activating to `null` so they can be ignored later
- return routeOutlet === outlet ? expanded :
- expanded.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(() => null), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["catchError"])(() => Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(null)));
- });
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(expansions)
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["combineAll"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["first"])(),
- // Return only the expansion for the route outlet we are trying to activate.
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(results => results.find(result => result !== null)));
- }
- noLeftoversInUrl(segmentGroup, segments, outlet) {
- return segments.length === 0 && !segmentGroup.children[outlet];
- }
- expandSegmentAgainstRoute(ngModule, segmentGroup, routes, route, paths, outlet, allowRedirects) {
- // Empty string segments are special because multiple outlets can match a single path, i.e.
- // `[{path: '', component: B}, {path: '', loadChildren: () => {}, outlet: "about"}]`
- if (getOutlet(route) !== outlet && route.path !== '') {
- return noMatch(segmentGroup);
- }
- if (route.redirectTo === undefined) {
- return this.matchSegmentAgainstRoute(ngModule, segmentGroup, route, paths);
- }
- if (allowRedirects && this.allowRedirects) {
- return this.expandSegmentAgainstRouteUsingRedirect(ngModule, segmentGroup, routes, route, paths, outlet);
- }
- return noMatch(segmentGroup);
- }
- expandSegmentAgainstRouteUsingRedirect(ngModule, segmentGroup, routes, route, segments, outlet) {
- if (route.path === '**') {
- return this.expandWildCardWithParamsAgainstRouteUsingRedirect(ngModule, routes, route, outlet);
- }
- return this.expandRegularSegmentAgainstRouteUsingRedirect(ngModule, segmentGroup, routes, route, segments, outlet);
- }
- expandWildCardWithParamsAgainstRouteUsingRedirect(ngModule, routes, route, outlet) {
- const newTree = this.applyRedirectCommands([], route.redirectTo, {});
- if (route.redirectTo.startsWith('/')) {
- return absoluteRedirect(newTree);
- }
- return this.lineralizeSegments(route, newTree).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])((newSegments) => {
- const group = new UrlSegmentGroup(newSegments, {});
- return this.expandSegment(ngModule, group, routes, newSegments, outlet, false);
- }));
- }
- expandRegularSegmentAgainstRouteUsingRedirect(ngModule, segmentGroup, routes, route, segments, outlet) {
- const { matched, consumedSegments, lastChild, positionalParamSegments } = match(segmentGroup, route, segments);
- if (!matched)
- return noMatch(segmentGroup);
- const newTree = this.applyRedirectCommands(consumedSegments, route.redirectTo, positionalParamSegments);
- if (route.redirectTo.startsWith('/')) {
- return absoluteRedirect(newTree);
- }
- return this.lineralizeSegments(route, newTree).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])((newSegments) => {
- return this.expandSegment(ngModule, segmentGroup, routes, newSegments.concat(segments.slice(lastChild)), outlet, false);
- }));
- }
- matchSegmentAgainstRoute(ngModule, rawSegmentGroup, route, segments) {
- if (route.path === '**') {
- if (route.loadChildren) {
- return this.configLoader.load(ngModule.injector, route)
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])((cfg) => {
- route._loadedConfig = cfg;
- return new UrlSegmentGroup(segments, {});
- }));
- }
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(new UrlSegmentGroup(segments, {}));
- }
- const { matched, consumedSegments, lastChild } = match(rawSegmentGroup, route, segments);
- if (!matched)
- return noMatch(rawSegmentGroup);
- const rawSlicedSegments = segments.slice(lastChild);
- const childConfig$ = this.getChildConfig(ngModule, route, segments);
- return childConfig$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])((routerConfig) => {
- const childModule = routerConfig.module;
- const childConfig = routerConfig.routes;
- const { segmentGroup, slicedSegments } = split(rawSegmentGroup, consumedSegments, rawSlicedSegments, childConfig);
- if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {
- const expanded$ = this.expandChildren(childModule, childConfig, segmentGroup);
- return expanded$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])((children) => new UrlSegmentGroup(consumedSegments, children)));
- }
- if (childConfig.length === 0 && slicedSegments.length === 0) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(new UrlSegmentGroup(consumedSegments, {}));
- }
- const expanded$ = this.expandSegment(childModule, segmentGroup, childConfig, slicedSegments, PRIMARY_OUTLET, true);
- return expanded$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])((cs) => new UrlSegmentGroup(consumedSegments.concat(cs.segments), cs.children)));
- }));
- }
- getChildConfig(ngModule, route, segments) {
- if (route.children) {
- // The children belong to the same module
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(new LoadedRouterConfig(route.children, ngModule));
- }
- if (route.loadChildren) {
- // lazy children belong to the loaded module
- if (route._loadedConfig !== undefined) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(route._loadedConfig);
- }
- return this.runCanLoadGuards(ngModule.injector, route, segments)
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])((shouldLoadResult) => {
- if (shouldLoadResult) {
- return this.configLoader.load(ngModule.injector, route)
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])((cfg) => {
- route._loadedConfig = cfg;
- return cfg;
- }));
- }
- return canLoadFails(route);
- }));
- }
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(new LoadedRouterConfig([], ngModule));
- }
- runCanLoadGuards(moduleInjector, route, segments) {
- const canLoad = route.canLoad;
- if (!canLoad || canLoad.length === 0)
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(true);
- const canLoadObservables = canLoad.map((injectionToken) => {
- const guard = moduleInjector.get(injectionToken);
- let guardVal;
- if (isCanLoad(guard)) {
- guardVal = guard.canLoad(route, segments);
- }
- else if (isFunction(guard)) {
- guardVal = guard(route, segments);
- }
- else {
- throw new Error('Invalid CanLoad guard');
- }
- return wrapIntoObservable(guardVal);
- });
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(canLoadObservables)
- .pipe(prioritizedGuardValue(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])((result) => {
- if (!isUrlTree(result))
- return;
- const error = navigationCancelingError(`Redirecting to "${this.urlSerializer.serialize(result)}"`);
- error.url = result;
- throw error;
- }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(result => result === true));
- }
- lineralizeSegments(route, urlTree) {
- let res = [];
- let c = urlTree.root;
- while (true) {
- res = res.concat(c.segments);
- if (c.numberOfChildren === 0) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(res);
- }
- if (c.numberOfChildren > 1 || !c.children[PRIMARY_OUTLET]) {
- return namedOutletsRedirect(route.redirectTo);
- }
- c = c.children[PRIMARY_OUTLET];
- }
- }
- applyRedirectCommands(segments, redirectTo, posParams) {
- return this.applyRedirectCreatreUrlTree(redirectTo, this.urlSerializer.parse(redirectTo), segments, posParams);
- }
- applyRedirectCreatreUrlTree(redirectTo, urlTree, segments, posParams) {
- const newRoot = this.createSegmentGroup(redirectTo, urlTree.root, segments, posParams);
- return new UrlTree(newRoot, this.createQueryParams(urlTree.queryParams, this.urlTree.queryParams), urlTree.fragment);
- }
- createQueryParams(redirectToParams, actualParams) {
- const res = {};
- forEach(redirectToParams, (v, k) => {
- const copySourceValue = typeof v === 'string' && v.startsWith(':');
- if (copySourceValue) {
- const sourceName = v.substring(1);
- res[k] = actualParams[sourceName];
- }
- else {
- res[k] = v;
- }
- });
- return res;
- }
- createSegmentGroup(redirectTo, group, segments, posParams) {
- const updatedSegments = this.createSegments(redirectTo, group.segments, segments, posParams);
- let children = {};
- forEach(group.children, (child, name) => {
- children[name] = this.createSegmentGroup(redirectTo, child, segments, posParams);
- });
- return new UrlSegmentGroup(updatedSegments, children);
- }
- createSegments(redirectTo, redirectToSegments, actualSegments, posParams) {
- return redirectToSegments.map(s => s.path.startsWith(':') ? this.findPosParam(redirectTo, s, posParams) :
- this.findOrReturn(s, actualSegments));
- }
- findPosParam(redirectTo, redirectToUrlSegment, posParams) {
- const pos = posParams[redirectToUrlSegment.path.substring(1)];
- if (!pos)
- throw new Error(`Cannot redirect to '${redirectTo}'. Cannot find '${redirectToUrlSegment.path}'.`);
- return pos;
- }
- findOrReturn(redirectToUrlSegment, actualSegments) {
- let idx = 0;
- for (const s of actualSegments) {
- if (s.path === redirectToUrlSegment.path) {
- actualSegments.splice(idx);
- return s;
- }
- idx++;
- }
- return redirectToUrlSegment;
- }
- }
- function match(segmentGroup, route, segments) {
- if (route.path === '') {
- if ((route.pathMatch === 'full') && (segmentGroup.hasChildren() || segments.length > 0)) {
- return { matched: false, consumedSegments: [], lastChild: 0, positionalParamSegments: {} };
- }
- return { matched: true, consumedSegments: [], lastChild: 0, positionalParamSegments: {} };
- }
- const matcher = route.matcher || defaultUrlMatcher;
- const res = matcher(segments, segmentGroup, route);
- if (!res) {
- return {
- matched: false,
- consumedSegments: [],
- lastChild: 0,
- positionalParamSegments: {},
- };
- }
- return {
- matched: true,
- consumedSegments: res.consumed,
- lastChild: res.consumed.length,
- positionalParamSegments: res.posParams,
- };
- }
- function split(segmentGroup, consumedSegments, slicedSegments, config) {
- if (slicedSegments.length > 0 &&
- containsEmptyPathRedirectsWithNamedOutlets(segmentGroup, slicedSegments, config)) {
- const s = new UrlSegmentGroup(consumedSegments, createChildrenForEmptySegments(config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));
- return { segmentGroup: mergeTrivialChildren(s), slicedSegments: [] };
- }
- if (slicedSegments.length === 0 &&
- containsEmptyPathRedirects(segmentGroup, slicedSegments, config)) {
- const s = new UrlSegmentGroup(segmentGroup.segments, addEmptySegmentsToChildrenIfNeeded(segmentGroup, slicedSegments, config, segmentGroup.children));
- return { segmentGroup: mergeTrivialChildren(s), slicedSegments };
- }
- return { segmentGroup, slicedSegments };
- }
- function mergeTrivialChildren(s) {
- if (s.numberOfChildren === 1 && s.children[PRIMARY_OUTLET]) {
- const c = s.children[PRIMARY_OUTLET];
- return new UrlSegmentGroup(s.segments.concat(c.segments), c.children);
- }
- return s;
- }
- function addEmptySegmentsToChildrenIfNeeded(segmentGroup, slicedSegments, routes, children) {
- const res = {};
- for (const r of routes) {
- if (isEmptyPathRedirect(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {
- res[getOutlet(r)] = new UrlSegmentGroup([], {});
- }
- }
- return Object.assign(Object.assign({}, children), res);
- }
- function createChildrenForEmptySegments(routes, primarySegmentGroup) {
- const res = {};
- res[PRIMARY_OUTLET] = primarySegmentGroup;
- for (const r of routes) {
- if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {
- res[getOutlet(r)] = new UrlSegmentGroup([], {});
- }
- }
- return res;
- }
- function containsEmptyPathRedirectsWithNamedOutlets(segmentGroup, segments, routes) {
- return routes.some(r => isEmptyPathRedirect(segmentGroup, segments, r) && getOutlet(r) !== PRIMARY_OUTLET);
- }
- function containsEmptyPathRedirects(segmentGroup, segments, routes) {
- return routes.some(r => isEmptyPathRedirect(segmentGroup, segments, r));
- }
- function isEmptyPathRedirect(segmentGroup, segments, r) {
- if ((segmentGroup.hasChildren() || segments.length > 0) && r.pathMatch === 'full') {
- return false;
- }
- return r.path === '' && r.redirectTo !== undefined;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function applyRedirects$1(moduleInjector, configLoader, urlSerializer, config) {
- return function (source) {
- return source.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(t => applyRedirects(moduleInjector, configLoader, urlSerializer, t.extractedUrl, config)
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(urlAfterRedirects => (Object.assign(Object.assign({}, t), { urlAfterRedirects }))))));
- };
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class CanActivate {
- constructor(path) {
- this.path = path;
- this.route = this.path[this.path.length - 1];
- }
- }
- class CanDeactivate {
- constructor(component, route) {
- this.component = component;
- this.route = route;
- }
- }
- function getAllRouteGuards(future, curr, parentContexts) {
- const futureRoot = future._root;
- const currRoot = curr ? curr._root : null;
- return getChildRouteGuards(futureRoot, currRoot, parentContexts, [futureRoot.value]);
- }
- function getCanActivateChild(p) {
- const canActivateChild = p.routeConfig ? p.routeConfig.canActivateChild : null;
- if (!canActivateChild || canActivateChild.length === 0)
- return null;
- return { node: p, guards: canActivateChild };
- }
- function getToken(token, snapshot, moduleInjector) {
- const config = getClosestLoadedConfig(snapshot);
- const injector = config ? config.module.injector : moduleInjector;
- return injector.get(token);
- }
- function getClosestLoadedConfig(snapshot) {
- if (!snapshot)
- return null;
- for (let s = snapshot.parent; s; s = s.parent) {
- const route = s.routeConfig;
- if (route && route._loadedConfig)
- return route._loadedConfig;
- }
- return null;
- }
- function getChildRouteGuards(futureNode, currNode, contexts, futurePath, checks = {
- canDeactivateChecks: [],
- canActivateChecks: []
- }) {
- const prevChildren = nodeChildrenAsMap(currNode);
- // Process the children of the future route
- futureNode.children.forEach(c => {
- getRouteGuards(c, prevChildren[c.value.outlet], contexts, futurePath.concat([c.value]), checks);
- delete prevChildren[c.value.outlet];
- });
- // Process any children left from the current route (not active for the future route)
- forEach(prevChildren, (v, k) => deactivateRouteAndItsChildren(v, contexts.getContext(k), checks));
- return checks;
- }
- function getRouteGuards(futureNode, currNode, parentContexts, futurePath, checks = {
- canDeactivateChecks: [],
- canActivateChecks: []
- }) {
- const future = futureNode.value;
- const curr = currNode ? currNode.value : null;
- const context = parentContexts ? parentContexts.getContext(futureNode.value.outlet) : null;
- // reusing the node
- if (curr && future.routeConfig === curr.routeConfig) {
- const shouldRun = shouldRunGuardsAndResolvers(curr, future, future.routeConfig.runGuardsAndResolvers);
- if (shouldRun) {
- checks.canActivateChecks.push(new CanActivate(futurePath));
- }
- else {
- // we need to set the data
- future.data = curr.data;
- future._resolvedData = curr._resolvedData;
- }
- // If we have a component, we need to go through an outlet.
- if (future.component) {
- getChildRouteGuards(futureNode, currNode, context ? context.children : null, futurePath, checks);
- // if we have a componentless route, we recurse but keep the same outlet map.
- }
- else {
- getChildRouteGuards(futureNode, currNode, parentContexts, futurePath, checks);
- }
- if (shouldRun && context && context.outlet && context.outlet.isActivated) {
- checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, curr));
- }
- }
- else {
- if (curr) {
- deactivateRouteAndItsChildren(currNode, context, checks);
- }
- checks.canActivateChecks.push(new CanActivate(futurePath));
- // If we have a component, we need to go through an outlet.
- if (future.component) {
- getChildRouteGuards(futureNode, null, context ? context.children : null, futurePath, checks);
- // if we have a componentless route, we recurse but keep the same outlet map.
- }
- else {
- getChildRouteGuards(futureNode, null, parentContexts, futurePath, checks);
- }
- }
- return checks;
- }
- function shouldRunGuardsAndResolvers(curr, future, mode) {
- if (typeof mode === 'function') {
- return mode(curr, future);
- }
- switch (mode) {
- case 'pathParamsChange':
- return !equalPath(curr.url, future.url);
- case 'pathParamsOrQueryParamsChange':
- return !equalPath(curr.url, future.url) ||
- !shallowEqual(curr.queryParams, future.queryParams);
- case 'always':
- return true;
- case 'paramsOrQueryParamsChange':
- return !equalParamsAndUrlSegments(curr, future) ||
- !shallowEqual(curr.queryParams, future.queryParams);
- case 'paramsChange':
- default:
- return !equalParamsAndUrlSegments(curr, future);
- }
- }
- function deactivateRouteAndItsChildren(route, context, checks) {
- const children = nodeChildrenAsMap(route);
- const r = route.value;
- forEach(children, (node, childName) => {
- if (!r.component) {
- deactivateRouteAndItsChildren(node, context, checks);
- }
- else if (context) {
- deactivateRouteAndItsChildren(node, context.children.getContext(childName), checks);
- }
- else {
- deactivateRouteAndItsChildren(node, null, checks);
- }
- });
- if (!r.component) {
- checks.canDeactivateChecks.push(new CanDeactivate(null, r));
- }
- else if (context && context.outlet && context.outlet.isActivated) {
- checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, r));
- }
- else {
- checks.canDeactivateChecks.push(new CanDeactivate(null, r));
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function checkGuards(moduleInjector, forwardEvent) {
- return function (source) {
- return source.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(t => {
- const { targetSnapshot, currentSnapshot, guards: { canActivateChecks, canDeactivateChecks } } = t;
- if (canDeactivateChecks.length === 0 && canActivateChecks.length === 0) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(Object.assign(Object.assign({}, t), { guardsResult: true }));
- }
- return runCanDeactivateChecks(canDeactivateChecks, targetSnapshot, currentSnapshot, moduleInjector)
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(canDeactivate => {
- return canDeactivate && isBoolean(canDeactivate) ?
- runCanActivateChecks(targetSnapshot, canActivateChecks, moduleInjector, forwardEvent) :
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(canDeactivate);
- }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(guardsResult => (Object.assign(Object.assign({}, t), { guardsResult }))));
- }));
- };
- }
- function runCanDeactivateChecks(checks, futureRSS, currRSS, moduleInjector) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(checks).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(check => runCanDeactivate(check.component, check.route, currRSS, futureRSS, moduleInjector)), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["first"])(result => {
- return result !== true;
- }, true));
- }
- function runCanActivateChecks(futureSnapshot, checks, moduleInjector, forwardEvent) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(checks).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["concatMap"])((check) => {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])([
- fireChildActivationStart(check.route.parent, forwardEvent),
- fireActivationStart(check.route, forwardEvent),
- runCanActivateChild(futureSnapshot, check.path, moduleInjector),
- runCanActivate(futureSnapshot, check.route, moduleInjector)
- ])
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["concatAll"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["first"])(result => {
- return result !== true;
- }, true));
- }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["first"])(result => {
- return result !== true;
- }, true));
- }
- /**
- * This should fire off `ActivationStart` events for each route being activated at this
- * level.
- * In other words, if you're activating `a` and `b` below, `path` will contain the
- * `ActivatedRouteSnapshot`s for both and we will fire `ActivationStart` for both. Always
- * return
- * `true` so checks continue to run.
- */
- function fireActivationStart(snapshot, forwardEvent) {
- if (snapshot !== null && forwardEvent) {
- forwardEvent(new ActivationStart(snapshot));
- }
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(true);
- }
- /**
- * This should fire off `ChildActivationStart` events for each route being activated at this
- * level.
- * In other words, if you're activating `a` and `b` below, `path` will contain the
- * `ActivatedRouteSnapshot`s for both and we will fire `ChildActivationStart` for both. Always
- * return
- * `true` so checks continue to run.
- */
- function fireChildActivationStart(snapshot, forwardEvent) {
- if (snapshot !== null && forwardEvent) {
- forwardEvent(new ChildActivationStart(snapshot));
- }
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(true);
- }
- function runCanActivate(futureRSS, futureARS, moduleInjector) {
- const canActivate = futureARS.routeConfig ? futureARS.routeConfig.canActivate : null;
- if (!canActivate || canActivate.length === 0)
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(true);
- const canActivateObservables = canActivate.map((c) => {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["defer"])(() => {
- const guard = getToken(c, futureARS, moduleInjector);
- let observable;
- if (isCanActivate(guard)) {
- observable = wrapIntoObservable(guard.canActivate(futureARS, futureRSS));
- }
- else if (isFunction(guard)) {
- observable = wrapIntoObservable(guard(futureARS, futureRSS));
- }
- else {
- throw new Error('Invalid CanActivate guard');
- }
- return observable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["first"])());
- });
- });
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(canActivateObservables).pipe(prioritizedGuardValue());
- }
- function runCanActivateChild(futureRSS, path, moduleInjector) {
- const futureARS = path[path.length - 1];
- const canActivateChildGuards = path.slice(0, path.length - 1)
- .reverse()
- .map(p => getCanActivateChild(p))
- .filter(_ => _ !== null);
- const canActivateChildGuardsMapped = canActivateChildGuards.map((d) => {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["defer"])(() => {
- const guardsMapped = d.guards.map((c) => {
- const guard = getToken(c, d.node, moduleInjector);
- let observable;
- if (isCanActivateChild(guard)) {
- observable = wrapIntoObservable(guard.canActivateChild(futureARS, futureRSS));
- }
- else if (isFunction(guard)) {
- observable = wrapIntoObservable(guard(futureARS, futureRSS));
- }
- else {
- throw new Error('Invalid CanActivateChild guard');
- }
- return observable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["first"])());
- });
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(guardsMapped).pipe(prioritizedGuardValue());
- });
- });
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(canActivateChildGuardsMapped).pipe(prioritizedGuardValue());
- }
- function runCanDeactivate(component, currARS, currRSS, futureRSS, moduleInjector) {
- const canDeactivate = currARS && currARS.routeConfig ? currARS.routeConfig.canDeactivate : null;
- if (!canDeactivate || canDeactivate.length === 0)
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(true);
- const canDeactivateObservables = canDeactivate.map((c) => {
- const guard = getToken(c, currARS, moduleInjector);
- let observable;
- if (isCanDeactivate(guard)) {
- observable = wrapIntoObservable(guard.canDeactivate(component, currARS, currRSS, futureRSS));
- }
- else if (isFunction(guard)) {
- observable = wrapIntoObservable(guard(component, currARS, currRSS, futureRSS));
- }
- else {
- throw new Error('Invalid CanDeactivate guard');
- }
- return observable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["first"])());
- });
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(canDeactivateObservables).pipe(prioritizedGuardValue());
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class NoMatch$1 {
- }
- function recognize(rootComponentType, config, urlTree, url, paramsInheritanceStrategy = 'emptyOnly', relativeLinkResolution = 'legacy') {
- return new Recognizer(rootComponentType, config, urlTree, url, paramsInheritanceStrategy, relativeLinkResolution)
- .recognize();
- }
- class Recognizer {
- constructor(rootComponentType, config, urlTree, url, paramsInheritanceStrategy, relativeLinkResolution) {
- this.rootComponentType = rootComponentType;
- this.config = config;
- this.urlTree = urlTree;
- this.url = url;
- this.paramsInheritanceStrategy = paramsInheritanceStrategy;
- this.relativeLinkResolution = relativeLinkResolution;
- }
- recognize() {
- try {
- const rootSegmentGroup = split$1(this.urlTree.root, [], [], this.config, this.relativeLinkResolution).segmentGroup;
- const children = this.processSegmentGroup(this.config, rootSegmentGroup, PRIMARY_OUTLET);
- const root = new ActivatedRouteSnapshot([], Object.freeze({}), Object.freeze(Object.assign({}, this.urlTree.queryParams)), this.urlTree.fragment, {}, PRIMARY_OUTLET, this.rootComponentType, null, this.urlTree.root, -1, {});
- const rootNode = new TreeNode(root, children);
- const routeState = new RouterStateSnapshot(this.url, rootNode);
- this.inheritParamsAndData(routeState._root);
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(routeState);
- }
- catch (e) {
- return new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"]((obs) => obs.error(e));
- }
- }
- inheritParamsAndData(routeNode) {
- const route = routeNode.value;
- const i = inheritedParamsDataResolve(route, this.paramsInheritanceStrategy);
- route.params = Object.freeze(i.params);
- route.data = Object.freeze(i.data);
- routeNode.children.forEach(n => this.inheritParamsAndData(n));
- }
- processSegmentGroup(config, segmentGroup, outlet) {
- if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {
- return this.processChildren(config, segmentGroup);
- }
- return this.processSegment(config, segmentGroup, segmentGroup.segments, outlet);
- }
- processChildren(config, segmentGroup) {
- const children = mapChildrenIntoArray(segmentGroup, (child, childOutlet) => this.processSegmentGroup(config, child, childOutlet));
- checkOutletNameUniqueness(children);
- sortActivatedRouteSnapshots(children);
- return children;
- }
- processSegment(config, segmentGroup, segments, outlet) {
- for (const r of config) {
- try {
- return this.processSegmentAgainstRoute(r, segmentGroup, segments, outlet);
- }
- catch (e) {
- if (!(e instanceof NoMatch$1))
- throw e;
- }
- }
- if (this.noLeftoversInUrl(segmentGroup, segments, outlet)) {
- return [];
- }
- throw new NoMatch$1();
- }
- noLeftoversInUrl(segmentGroup, segments, outlet) {
- return segments.length === 0 && !segmentGroup.children[outlet];
- }
- processSegmentAgainstRoute(route, rawSegment, segments, outlet) {
- if (route.redirectTo)
- throw new NoMatch$1();
- if ((route.outlet || PRIMARY_OUTLET) !== outlet)
- throw new NoMatch$1();
- let snapshot;
- let consumedSegments = [];
- let rawSlicedSegments = [];
- if (route.path === '**') {
- const params = segments.length > 0 ? last(segments).parameters : {};
- snapshot = new ActivatedRouteSnapshot(segments, params, Object.freeze(Object.assign({}, this.urlTree.queryParams)), this.urlTree.fragment, getData(route), outlet, route.component, route, getSourceSegmentGroup(rawSegment), getPathIndexShift(rawSegment) + segments.length, getResolve(route));
- }
- else {
- const result = match$1(rawSegment, route, segments);
- consumedSegments = result.consumedSegments;
- rawSlicedSegments = segments.slice(result.lastChild);
- snapshot = new ActivatedRouteSnapshot(consumedSegments, result.parameters, Object.freeze(Object.assign({}, this.urlTree.queryParams)), this.urlTree.fragment, getData(route), outlet, route.component, route, getSourceSegmentGroup(rawSegment), getPathIndexShift(rawSegment) + consumedSegments.length, getResolve(route));
- }
- const childConfig = getChildConfig(route);
- const { segmentGroup, slicedSegments } = split$1(rawSegment, consumedSegments, rawSlicedSegments, childConfig, this.relativeLinkResolution);
- if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {
- const children = this.processChildren(childConfig, segmentGroup);
- return [new TreeNode(snapshot, children)];
- }
- if (childConfig.length === 0 && slicedSegments.length === 0) {
- return [new TreeNode(snapshot, [])];
- }
- const children = this.processSegment(childConfig, segmentGroup, slicedSegments, PRIMARY_OUTLET);
- return [new TreeNode(snapshot, children)];
- }
- }
- function sortActivatedRouteSnapshots(nodes) {
- nodes.sort((a, b) => {
- if (a.value.outlet === PRIMARY_OUTLET)
- return -1;
- if (b.value.outlet === PRIMARY_OUTLET)
- return 1;
- return a.value.outlet.localeCompare(b.value.outlet);
- });
- }
- function getChildConfig(route) {
- if (route.children) {
- return route.children;
- }
- if (route.loadChildren) {
- return route._loadedConfig.routes;
- }
- return [];
- }
- function match$1(segmentGroup, route, segments) {
- if (route.path === '') {
- if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || segments.length > 0)) {
- throw new NoMatch$1();
- }
- return { consumedSegments: [], lastChild: 0, parameters: {} };
- }
- const matcher = route.matcher || defaultUrlMatcher;
- const res = matcher(segments, segmentGroup, route);
- if (!res)
- throw new NoMatch$1();
- const posParams = {};
- forEach(res.posParams, (v, k) => {
- posParams[k] = v.path;
- });
- const parameters = res.consumed.length > 0 ? Object.assign(Object.assign({}, posParams), res.consumed[res.consumed.length - 1].parameters) :
- posParams;
- return { consumedSegments: res.consumed, lastChild: res.consumed.length, parameters };
- }
- function checkOutletNameUniqueness(nodes) {
- const names = {};
- nodes.forEach(n => {
- const routeWithSameOutletName = names[n.value.outlet];
- if (routeWithSameOutletName) {
- const p = routeWithSameOutletName.url.map(s => s.toString()).join('/');
- const c = n.value.url.map(s => s.toString()).join('/');
- throw new Error(`Two segments cannot have the same outlet name: '${p}' and '${c}'.`);
- }
- names[n.value.outlet] = n.value;
- });
- }
- function getSourceSegmentGroup(segmentGroup) {
- let s = segmentGroup;
- while (s._sourceSegment) {
- s = s._sourceSegment;
- }
- return s;
- }
- function getPathIndexShift(segmentGroup) {
- let s = segmentGroup;
- let res = (s._segmentIndexShift ? s._segmentIndexShift : 0);
- while (s._sourceSegment) {
- s = s._sourceSegment;
- res += (s._segmentIndexShift ? s._segmentIndexShift : 0);
- }
- return res - 1;
- }
- function split$1(segmentGroup, consumedSegments, slicedSegments, config, relativeLinkResolution) {
- if (slicedSegments.length > 0 &&
- containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)) {
- const s = new UrlSegmentGroup(consumedSegments, createChildrenForEmptyPaths(segmentGroup, consumedSegments, config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));
- s._sourceSegment = segmentGroup;
- s._segmentIndexShift = consumedSegments.length;
- return { segmentGroup: s, slicedSegments: [] };
- }
- if (slicedSegments.length === 0 &&
- containsEmptyPathMatches(segmentGroup, slicedSegments, config)) {
- const s = new UrlSegmentGroup(segmentGroup.segments, addEmptyPathsToChildrenIfNeeded(segmentGroup, consumedSegments, slicedSegments, config, segmentGroup.children, relativeLinkResolution));
- s._sourceSegment = segmentGroup;
- s._segmentIndexShift = consumedSegments.length;
- return { segmentGroup: s, slicedSegments };
- }
- const s = new UrlSegmentGroup(segmentGroup.segments, segmentGroup.children);
- s._sourceSegment = segmentGroup;
- s._segmentIndexShift = consumedSegments.length;
- return { segmentGroup: s, slicedSegments };
- }
- function addEmptyPathsToChildrenIfNeeded(segmentGroup, consumedSegments, slicedSegments, routes, children, relativeLinkResolution) {
- const res = {};
- for (const r of routes) {
- if (emptyPathMatch(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {
- const s = new UrlSegmentGroup([], {});
- s._sourceSegment = segmentGroup;
- if (relativeLinkResolution === 'legacy') {
- s._segmentIndexShift = segmentGroup.segments.length;
- }
- else {
- s._segmentIndexShift = consumedSegments.length;
- }
- res[getOutlet(r)] = s;
- }
- }
- return Object.assign(Object.assign({}, children), res);
- }
- function createChildrenForEmptyPaths(segmentGroup, consumedSegments, routes, primarySegment) {
- const res = {};
- res[PRIMARY_OUTLET] = primarySegment;
- primarySegment._sourceSegment = segmentGroup;
- primarySegment._segmentIndexShift = consumedSegments.length;
- for (const r of routes) {
- if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {
- const s = new UrlSegmentGroup([], {});
- s._sourceSegment = segmentGroup;
- s._segmentIndexShift = consumedSegments.length;
- res[getOutlet(r)] = s;
- }
- }
- return res;
- }
- function containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, routes) {
- return routes.some(r => emptyPathMatch(segmentGroup, slicedSegments, r) && getOutlet(r) !== PRIMARY_OUTLET);
- }
- function containsEmptyPathMatches(segmentGroup, slicedSegments, routes) {
- return routes.some(r => emptyPathMatch(segmentGroup, slicedSegments, r));
- }
- function emptyPathMatch(segmentGroup, slicedSegments, r) {
- if ((segmentGroup.hasChildren() || slicedSegments.length > 0) && r.pathMatch === 'full') {
- return false;
- }
- return r.path === '' && r.redirectTo === undefined;
- }
- function getData(route) {
- return route.data || {};
- }
- function getResolve(route) {
- return route.resolve || {};
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function recognize$1(rootComponentType, config, serializer, paramsInheritanceStrategy, relativeLinkResolution) {
- return function (source) {
- return source.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(t => recognize(rootComponentType, config, t.urlAfterRedirects, serializer(t.urlAfterRedirects), paramsInheritanceStrategy, relativeLinkResolution)
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(targetSnapshot => (Object.assign(Object.assign({}, t), { targetSnapshot }))))));
- };
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function resolveData(paramsInheritanceStrategy, moduleInjector) {
- return function (source) {
- return source.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(t => {
- const { targetSnapshot, guards: { canActivateChecks } } = t;
- if (!canActivateChecks.length) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(t);
- }
- let canActivateChecksResolved = 0;
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(canActivateChecks)
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["concatMap"])(check => runResolve(check.route, targetSnapshot, paramsInheritanceStrategy, moduleInjector)), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(() => canActivateChecksResolved++), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeLast"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(_ => canActivateChecksResolved === canActivateChecks.length ? Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(t) : rxjs__WEBPACK_IMPORTED_MODULE_2__["EMPTY"]));
- }));
- };
- }
- function runResolve(futureARS, futureRSS, paramsInheritanceStrategy, moduleInjector) {
- const resolve = futureARS._resolve;
- return resolveNode(resolve, futureARS, futureRSS, moduleInjector)
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])((resolvedData) => {
- futureARS._resolvedData = resolvedData;
- futureARS.data = Object.assign(Object.assign({}, futureARS.data), inheritedParamsDataResolve(futureARS, paramsInheritanceStrategy).resolve);
- return null;
- }));
- }
- function resolveNode(resolve, futureARS, futureRSS, moduleInjector) {
- const keys = Object.keys(resolve);
- if (keys.length === 0) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])({});
- }
- const data = {};
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(keys).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])((key) => getResolver(resolve[key], futureARS, futureRSS, moduleInjector)
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])((value) => {
- data[key] = value;
- }))), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeLast"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(() => {
- // Ensure all resolvers returned values, otherwise don't emit any "next" and just complete
- // the chain which will cancel navigation
- if (Object.keys(data).length === keys.length) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(data);
- }
- return rxjs__WEBPACK_IMPORTED_MODULE_2__["EMPTY"];
- }));
- }
- function getResolver(injectionToken, futureARS, futureRSS, moduleInjector) {
- const resolver = getToken(injectionToken, futureARS, moduleInjector);
- return resolver.resolve ? wrapIntoObservable(resolver.resolve(futureARS, futureRSS)) :
- wrapIntoObservable(resolver(futureARS, futureRSS));
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Perform a side effect through a switchMap for every emission on the source Observable,
- * but return an Observable that is identical to the source. It's essentially the same as
- * the `tap` operator, but if the side effectful `next` function returns an ObservableInput,
- * it will wait before continuing with the original value.
- */
- function switchTap(next) {
- return function (source) {
- return source.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(v => {
- const nextResult = next(v);
- if (nextResult) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(nextResult).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(() => v));
- }
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])([v]);
- }));
- };
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @description
- *
- * Provides a way to customize when activated routes get reused.
- *
- * @publicApi
- */
- class RouteReuseStrategy {
- }
- /**
- * @description
- *
- * This base route reuse strategy only reuses routes when the matched router configs are
- * identical. This prevents components from being destroyed and recreated
- * when just the fragment or query parameters change
- * (that is, the existing component is _reused_).
- *
- * This strategy does not store any routes for later reuse.
- *
- * Angular uses this strategy by default.
- *
- *
- * It can be used as a base class for custom route reuse strategies, i.e. you can create your own
- * class that extends the `BaseRouteReuseStrategy` one.
- * @publicApi
- */
- class BaseRouteReuseStrategy {
- /**
- * Whether the given route should detach for later reuse.
- * Always returns false for `BaseRouteReuseStrategy`.
- * */
- shouldDetach(route) {
- return false;
- }
- /**
- * A no-op; the route is never stored since this strategy never detaches routes for later re-use.
- */
- store(route, detachedTree) { }
- /** Returns `false`, meaning the route (and its subtree) is never reattached */
- shouldAttach(route) {
- return false;
- }
- /** Returns `null` because this strategy does not store routes for later re-use. */
- retrieve(route) {
- return null;
- }
- /**
- * Determines if a route should be reused.
- * This strategy returns `true` when the future route config and current route config are
- * identical.
- */
- shouldReuseRoute(future, curr) {
- return future.routeConfig === curr.routeConfig;
- }
- }
- class DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * The [DI token](guide/glossary/#di-token) for a router configuration.
- * @see `ROUTES`
- * @publicApi
- */
- const ROUTES = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('ROUTES');
- class RouterConfigLoader {
- constructor(loader, compiler, onLoadStartListener, onLoadEndListener) {
- this.loader = loader;
- this.compiler = compiler;
- this.onLoadStartListener = onLoadStartListener;
- this.onLoadEndListener = onLoadEndListener;
- }
- load(parentInjector, route) {
- if (this.onLoadStartListener) {
- this.onLoadStartListener(route);
- }
- const moduleFactory$ = this.loadModuleFactory(route.loadChildren);
- return moduleFactory$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])((factory) => {
- if (this.onLoadEndListener) {
- this.onLoadEndListener(route);
- }
- const module = factory.create(parentInjector);
- return new LoadedRouterConfig(flatten(module.injector.get(ROUTES)).map(standardizeConfig), module);
- }));
- }
- loadModuleFactory(loadChildren) {
- if (typeof loadChildren === 'string') {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(this.loader.load(loadChildren));
- }
- else {
- return wrapIntoObservable(loadChildren()).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])((t) => {
- if (t instanceof _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactory"]) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(t);
- }
- else {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(this.compiler.compileModuleAsync(t));
- }
- }));
- }
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Store contextual information about a `RouterOutlet`
- *
- * @publicApi
- */
- class OutletContext {
- constructor() {
- this.outlet = null;
- this.route = null;
- this.resolver = null;
- this.children = new ChildrenOutletContexts();
- this.attachRef = null;
- }
- }
- /**
- * Store contextual information about the children (= nested) `RouterOutlet`
- *
- * @publicApi
- */
- class ChildrenOutletContexts {
- constructor() {
- // contexts for child outlets, by name.
- this.contexts = new Map();
- }
- /** Called when a `RouterOutlet` directive is instantiated */
- onChildOutletCreated(childName, outlet) {
- const context = this.getOrCreateContext(childName);
- context.outlet = outlet;
- this.contexts.set(childName, context);
- }
- /**
- * Called when a `RouterOutlet` directive is destroyed.
- * We need to keep the context as the outlet could be destroyed inside a NgIf and might be
- * re-created later.
- */
- onChildOutletDestroyed(childName) {
- const context = this.getContext(childName);
- if (context) {
- context.outlet = null;
- }
- }
- /**
- * Called when the corresponding route is deactivated during navigation.
- * Because the component get destroyed, all children outlet are destroyed.
- */
- onOutletDeactivated() {
- const contexts = this.contexts;
- this.contexts = new Map();
- return contexts;
- }
- onOutletReAttached(contexts) {
- this.contexts = contexts;
- }
- getOrCreateContext(childName) {
- let context = this.getContext(childName);
- if (!context) {
- context = new OutletContext();
- this.contexts.set(childName, context);
- }
- return context;
- }
- getContext(childName) {
- return this.contexts.get(childName) || null;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @description
- *
- * Provides a way to migrate AngularJS applications to Angular.
- *
- * @publicApi
- */
- class UrlHandlingStrategy {
- }
- /**
- * @publicApi
- */
- class DefaultUrlHandlingStrategy {
- shouldProcessUrl(url) {
- return true;
- }
- extract(url) {
- return url;
- }
- merge(newUrlPart, wholeUrl) {
- return newUrlPart;
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- function defaultErrorHandler(error) {
- throw error;
- }
- function defaultMalformedUriErrorHandler(error, urlSerializer, url) {
- return urlSerializer.parse('/');
- }
- /**
- * @internal
- */
- function defaultRouterHook(snapshot, runExtras) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(null);
- }
- /**
- * @description
- *
- * A service that provides navigation among views and URL manipulation capabilities.
- *
- * @see `Route`.
- * @see [Routing and Navigation Guide](guide/router).
- *
- * @ngModule RouterModule
- *
- * @publicApi
- */
- class Router {
- /**
- * Creates the router service.
- */
- // TODO: vsavkin make internal after the final is out.
- constructor(rootComponentType, urlSerializer, rootContexts, location, injector, loader, compiler, config) {
- this.rootComponentType = rootComponentType;
- this.urlSerializer = urlSerializer;
- this.rootContexts = rootContexts;
- this.location = location;
- this.config = config;
- this.lastSuccessfulNavigation = null;
- this.currentNavigation = null;
- /**
- * Tracks the previously seen location change from the location subscription so we can compare
- * the two latest to see if they are duplicates. See setUpLocationChangeListener.
- */
- this.lastLocationChangeInfo = null;
- this.navigationId = 0;
- this.isNgZoneEnabled = false;
- /**
- * An event stream for routing events in this NgModule.
- */
- this.events = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- /**
- * A handler for navigation errors in this NgModule.
- */
- this.errorHandler = defaultErrorHandler;
- /**
- * A handler for errors thrown by `Router.parseUrl(url)`
- * when `url` contains an invalid character.
- * The most common case is a `%` sign
- * that's not encoded and is not part of a percent encoded sequence.
- */
- this.malformedUriErrorHandler = defaultMalformedUriErrorHandler;
- /**
- * True if at least one navigation event has occurred,
- * false otherwise.
- */
- this.navigated = false;
- this.lastSuccessfulId = -1;
- /**
- * Hooks that enable you to pause navigation,
- * either before or after the preactivation phase.
- * Used by `RouterModule`.
- *
- * @internal
- */
- this.hooks = { beforePreactivation: defaultRouterHook, afterPreactivation: defaultRouterHook };
- /**
- * A strategy for extracting and merging URLs.
- * Used for AngularJS to Angular migrations.
- */
- this.urlHandlingStrategy = new DefaultUrlHandlingStrategy();
- /**
- * A strategy for re-using routes.
- */
- this.routeReuseStrategy = new DefaultRouteReuseStrategy();
- /**
- * How to handle a navigation request to the current URL. One of:
- * - `'ignore'` : The router ignores the request.
- * - `'reload'` : The router reloads the URL. Use to implement a "refresh" feature.
- */
- this.onSameUrlNavigation = 'ignore';
- /**
- * How to merge parameters, data, and resolved data from parent to child
- * routes. One of:
- *
- * - `'emptyOnly'` : Inherit parent parameters, data, and resolved data
- * for path-less or component-less routes.
- * - `'always'` : Inherit parent parameters, data, and resolved data
- * for all child routes.
- */
- this.paramsInheritanceStrategy = 'emptyOnly';
- /**
- * Determines when the router updates the browser URL.
- * By default (`"deferred"`), updates the browser URL after navigation has finished.
- * Set to `'eager'` to update the browser URL at the beginning of navigation.
- * You can choose to update early so that, if navigation fails,
- * you can show an error message with the URL that failed.
- */
- this.urlUpdateStrategy = 'deferred';
- /**
- * Enables a bug fix that corrects relative link resolution in components with empty paths.
- * @see `RouterModule`
- */
- this.relativeLinkResolution = 'corrected';
- const onLoadStart = (r) => this.triggerEvent(new RouteConfigLoadStart(r));
- const onLoadEnd = (r) => this.triggerEvent(new RouteConfigLoadEnd(r));
- this.ngModule = injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleRef"]);
- this.console = injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵConsole"]);
- const ngZone = injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]);
- this.isNgZoneEnabled = ngZone instanceof _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"];
- this.resetConfig(config);
- this.currentUrlTree = createEmptyUrlTree();
- this.rawUrlTree = this.currentUrlTree;
- this.browserUrlTree = this.currentUrlTree;
- this.configLoader = new RouterConfigLoader(loader, compiler, onLoadStart, onLoadEnd);
- this.routerState = createEmptyState(this.currentUrlTree, this.rootComponentType);
- this.transitions = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"]({
- id: 0,
- currentUrlTree: this.currentUrlTree,
- currentRawUrl: this.currentUrlTree,
- extractedUrl: this.urlHandlingStrategy.extract(this.currentUrlTree),
- urlAfterRedirects: this.urlHandlingStrategy.extract(this.currentUrlTree),
- rawUrl: this.currentUrlTree,
- extras: {},
- resolve: null,
- reject: null,
- promise: Promise.resolve(true),
- source: 'imperative',
- restoredState: null,
- currentSnapshot: this.routerState.snapshot,
- targetSnapshot: null,
- currentRouterState: this.routerState,
- targetRouterState: null,
- guards: { canActivateChecks: [], canDeactivateChecks: [] },
- guardsResult: null,
- });
- this.navigations = this.setupNavigations(this.transitions);
- this.processNavigations();
- }
- setupNavigations(transitions) {
- const eventsSubject = this.events;
- return transitions.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(t => t.id !== 0),
- // Extract URL
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(t => (Object.assign(Object.assign({}, t), { extractedUrl: this.urlHandlingStrategy.extract(t.rawUrl) }))),
- // Using switchMap so we cancel executing navigations when a new one comes in
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(t => {
- let completed = false;
- let errored = false;
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(t).pipe(
- // Store the Navigation object
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(t => {
- this.currentNavigation = {
- id: t.id,
- initialUrl: t.currentRawUrl,
- extractedUrl: t.extractedUrl,
- trigger: t.source,
- extras: t.extras,
- previousNavigation: this.lastSuccessfulNavigation ? Object.assign(Object.assign({}, this.lastSuccessfulNavigation), { previousNavigation: null }) :
- null
- };
- }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(t => {
- const urlTransition = !this.navigated ||
- t.extractedUrl.toString() !== this.browserUrlTree.toString();
- const processCurrentUrl = (this.onSameUrlNavigation === 'reload' ? true : urlTransition) &&
- this.urlHandlingStrategy.shouldProcessUrl(t.rawUrl);
- if (processCurrentUrl) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(t).pipe(
- // Fire NavigationStart event
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(t => {
- const transition = this.transitions.getValue();
- eventsSubject.next(new NavigationStart(t.id, this.serializeUrl(t.extractedUrl), t.source, t.restoredState));
- if (transition !== this.transitions.getValue()) {
- return rxjs__WEBPACK_IMPORTED_MODULE_2__["EMPTY"];
- }
- return [t];
- }),
- // This delay is required to match old behavior that forced navigation
- // to always be async
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(t => Promise.resolve(t)),
- // ApplyRedirects
- applyRedirects$1(this.ngModule.injector, this.configLoader, this.urlSerializer, this.config),
- // Update the currentNavigation
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(t => {
- this.currentNavigation = Object.assign(Object.assign({}, this.currentNavigation), { finalUrl: t.urlAfterRedirects });
- }),
- // Recognize
- recognize$1(this.rootComponentType, this.config, (url) => this.serializeUrl(url), this.paramsInheritanceStrategy, this.relativeLinkResolution),
- // Update URL if in `eager` update mode
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(t => {
- if (this.urlUpdateStrategy === 'eager') {
- if (!t.extras.skipLocationChange) {
- this.setBrowserUrl(t.urlAfterRedirects, !!t.extras.replaceUrl, t.id, t.extras.state);
- }
- this.browserUrlTree = t.urlAfterRedirects;
- }
- }),
- // Fire RoutesRecognized
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(t => {
- const routesRecognized = new RoutesRecognized(t.id, this.serializeUrl(t.extractedUrl), this.serializeUrl(t.urlAfterRedirects), t.targetSnapshot);
- eventsSubject.next(routesRecognized);
- }));
- }
- else {
- const processPreviousUrl = urlTransition && this.rawUrlTree &&
- this.urlHandlingStrategy.shouldProcessUrl(this.rawUrlTree);
- /* When the current URL shouldn't be processed, but the previous one was,
- * we handle this "error condition" by navigating to the previously
- * successful URL, but leaving the URL intact.*/
- if (processPreviousUrl) {
- const { id, extractedUrl, source, restoredState, extras } = t;
- const navStart = new NavigationStart(id, this.serializeUrl(extractedUrl), source, restoredState);
- eventsSubject.next(navStart);
- const targetSnapshot = createEmptyState(extractedUrl, this.rootComponentType).snapshot;
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(Object.assign(Object.assign({}, t), { targetSnapshot, urlAfterRedirects: extractedUrl, extras: Object.assign(Object.assign({}, extras), { skipLocationChange: false, replaceUrl: false }) }));
- }
- else {
- /* When neither the current or previous URL can be processed, do nothing
- * other than update router's internal reference to the current "settled"
- * URL. This way the next navigation will be coming from the current URL
- * in the browser.
- */
- this.rawUrlTree = t.rawUrl;
- this.browserUrlTree = t.urlAfterRedirects;
- t.resolve(null);
- return rxjs__WEBPACK_IMPORTED_MODULE_2__["EMPTY"];
- }
- }
- }),
- // Before Preactivation
- switchTap(t => {
- const { targetSnapshot, id: navigationId, extractedUrl: appliedUrlTree, rawUrl: rawUrlTree, extras: { skipLocationChange, replaceUrl } } = t;
- return this.hooks.beforePreactivation(targetSnapshot, {
- navigationId,
- appliedUrlTree,
- rawUrlTree,
- skipLocationChange: !!skipLocationChange,
- replaceUrl: !!replaceUrl,
- });
- }),
- // --- GUARDS ---
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(t => {
- const guardsStart = new GuardsCheckStart(t.id, this.serializeUrl(t.extractedUrl), this.serializeUrl(t.urlAfterRedirects), t.targetSnapshot);
- this.triggerEvent(guardsStart);
- }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(t => (Object.assign(Object.assign({}, t), { guards: getAllRouteGuards(t.targetSnapshot, t.currentSnapshot, this.rootContexts) }))), checkGuards(this.ngModule.injector, (evt) => this.triggerEvent(evt)), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(t => {
- if (isUrlTree(t.guardsResult)) {
- const error = navigationCancelingError(`Redirecting to "${this.serializeUrl(t.guardsResult)}"`);
- error.url = t.guardsResult;
- throw error;
- }
- }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(t => {
- const guardsEnd = new GuardsCheckEnd(t.id, this.serializeUrl(t.extractedUrl), this.serializeUrl(t.urlAfterRedirects), t.targetSnapshot, !!t.guardsResult);
- this.triggerEvent(guardsEnd);
- }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(t => {
- if (!t.guardsResult) {
- this.resetUrlToCurrentUrlTree();
- const navCancel = new NavigationCancel(t.id, this.serializeUrl(t.extractedUrl), '');
- eventsSubject.next(navCancel);
- t.resolve(false);
- return false;
- }
- return true;
- }),
- // --- RESOLVE ---
- switchTap(t => {
- if (t.guards.canActivateChecks.length) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(t).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(t => {
- const resolveStart = new ResolveStart(t.id, this.serializeUrl(t.extractedUrl), this.serializeUrl(t.urlAfterRedirects), t.targetSnapshot);
- this.triggerEvent(resolveStart);
- }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(t => {
- let dataResolved = false;
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(t).pipe(resolveData(this.paramsInheritanceStrategy, this.ngModule.injector), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])({
- next: () => dataResolved = true,
- complete: () => {
- if (!dataResolved) {
- const navCancel = new NavigationCancel(t.id, this.serializeUrl(t.extractedUrl), `At least one route resolver didn't emit any value.`);
- eventsSubject.next(navCancel);
- t.resolve(false);
- }
- }
- }));
- }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(t => {
- const resolveEnd = new ResolveEnd(t.id, this.serializeUrl(t.extractedUrl), this.serializeUrl(t.urlAfterRedirects), t.targetSnapshot);
- this.triggerEvent(resolveEnd);
- }));
- }
- return undefined;
- }),
- // --- AFTER PREACTIVATION ---
- switchTap((t) => {
- const { targetSnapshot, id: navigationId, extractedUrl: appliedUrlTree, rawUrl: rawUrlTree, extras: { skipLocationChange, replaceUrl } } = t;
- return this.hooks.afterPreactivation(targetSnapshot, {
- navigationId,
- appliedUrlTree,
- rawUrlTree,
- skipLocationChange: !!skipLocationChange,
- replaceUrl: !!replaceUrl,
- });
- }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])((t) => {
- const targetRouterState = createRouterState(this.routeReuseStrategy, t.targetSnapshot, t.currentRouterState);
- return (Object.assign(Object.assign({}, t), { targetRouterState }));
- }),
- /* Once here, we are about to activate syncronously. The assumption is this
- will succeed, and user code may read from the Router service. Therefore
- before activation, we need to update router properties storing the current
- URL and the RouterState, as well as updated the browser URL. All this should
- happen *before* activating. */
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])((t) => {
- this.currentUrlTree = t.urlAfterRedirects;
- this.rawUrlTree =
- this.urlHandlingStrategy.merge(this.currentUrlTree, t.rawUrl);
- this.routerState = t.targetRouterState;
- if (this.urlUpdateStrategy === 'deferred') {
- if (!t.extras.skipLocationChange) {
- this.setBrowserUrl(this.rawUrlTree, !!t.extras.replaceUrl, t.id, t.extras.state);
- }
- this.browserUrlTree = t.urlAfterRedirects;
- }
- }), activateRoutes(this.rootContexts, this.routeReuseStrategy, (evt) => this.triggerEvent(evt)), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])({
- next() {
- completed = true;
- },
- complete() {
- completed = true;
- }
- }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["finalize"])(() => {
- /* When the navigation stream finishes either through error or success, we
- * set the `completed` or `errored` flag. However, there are some situations
- * where we could get here without either of those being set. For instance, a
- * redirect during NavigationStart. Therefore, this is a catch-all to make
- * sure the NavigationCancel
- * event is fired when a navigation gets cancelled but not caught by other
- * means. */
- if (!completed && !errored) {
- // Must reset to current URL tree here to ensure history.state is set. On a
- // fresh page load, if a new navigation comes in before a successful
- // navigation completes, there will be nothing in
- // history.state.navigationId. This can cause sync problems with AngularJS
- // sync code which looks for a value here in order to determine whether or
- // not to handle a given popstate event or to leave it to the Angualr
- // router.
- this.resetUrlToCurrentUrlTree();
- const navCancel = new NavigationCancel(t.id, this.serializeUrl(t.extractedUrl), `Navigation ID ${t.id} is not equal to the current navigation id ${this.navigationId}`);
- eventsSubject.next(navCancel);
- t.resolve(false);
- }
- // currentNavigation should always be reset to null here. If navigation was
- // successful, lastSuccessfulTransition will have already been set. Therefore
- // we can safely set currentNavigation to null here.
- this.currentNavigation = null;
- }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["catchError"])((e) => {
- errored = true;
- /* This error type is issued during Redirect, and is handled as a
- * cancellation rather than an error. */
- if (isNavigationCancelingError(e)) {
- const redirecting = isUrlTree(e.url);
- if (!redirecting) {
- // Set property only if we're not redirecting. If we landed on a page and
- // redirect to `/` route, the new navigation is going to see the `/`
- // isn't a change from the default currentUrlTree and won't navigate.
- // This is only applicable with initial navigation, so setting
- // `navigated` only when not redirecting resolves this scenario.
- this.navigated = true;
- this.resetStateAndUrl(t.currentRouterState, t.currentUrlTree, t.rawUrl);
- }
- const navCancel = new NavigationCancel(t.id, this.serializeUrl(t.extractedUrl), e.message);
- eventsSubject.next(navCancel);
- // When redirecting, we need to delay resolving the navigation
- // promise and push it to the redirect navigation
- if (!redirecting) {
- t.resolve(false);
- }
- else {
- // setTimeout is required so this navigation finishes with
- // the return EMPTY below. If it isn't allowed to finish
- // processing, there can be multiple navigations to the same
- // URL.
- setTimeout(() => {
- const mergedTree = this.urlHandlingStrategy.merge(e.url, this.rawUrlTree);
- const extras = {
- skipLocationChange: t.extras.skipLocationChange,
- replaceUrl: this.urlUpdateStrategy === 'eager'
- };
- return this.scheduleNavigation(mergedTree, 'imperative', null, extras, { resolve: t.resolve, reject: t.reject, promise: t.promise });
- }, 0);
- }
- /* All other errors should reset to the router's internal URL reference to
- * the pre-error state. */
- }
- else {
- this.resetStateAndUrl(t.currentRouterState, t.currentUrlTree, t.rawUrl);
- const navError = new NavigationError(t.id, this.serializeUrl(t.extractedUrl), e);
- eventsSubject.next(navError);
- try {
- t.resolve(this.errorHandler(e));
- }
- catch (ee) {
- t.reject(ee);
- }
- }
- return rxjs__WEBPACK_IMPORTED_MODULE_2__["EMPTY"];
- }));
- // TODO(jasonaden): remove cast once g3 is on updated TypeScript
- }));
- }
- /**
- * @internal
- * TODO: this should be removed once the constructor of the router made internal
- */
- resetRootComponentType(rootComponentType) {
- this.rootComponentType = rootComponentType;
- // TODO: vsavkin router 4.0 should make the root component set to null
- // this will simplify the lifecycle of the router.
- this.routerState.root.component = this.rootComponentType;
- }
- getTransition() {
- const transition = this.transitions.value;
- // This value needs to be set. Other values such as extractedUrl are set on initial navigation
- // but the urlAfterRedirects may not get set if we aren't processing the new URL *and* not
- // processing the previous URL.
- transition.urlAfterRedirects = this.browserUrlTree;
- return transition;
- }
- setTransition(t) {
- this.transitions.next(Object.assign(Object.assign({}, this.getTransition()), t));
- }
- /**
- * Sets up the location change listener and performs the initial navigation.
- */
- initialNavigation() {
- this.setUpLocationChangeListener();
- if (this.navigationId === 0) {
- this.navigateByUrl(this.location.path(true), { replaceUrl: true });
- }
- }
- /**
- * Sets up the location change listener. This listener detects navigations triggered from outside
- * the Router (the browser back/forward buttons, for example) and schedules a corresponding Router
- * navigation so that the correct events, guards, etc. are triggered.
- */
- setUpLocationChangeListener() {
- // Don't need to use Zone.wrap any more, because zone.js
- // already patch onPopState, so location change callback will
- // run into ngZone
- if (!this.locationSubscription) {
- this.locationSubscription = this.location.subscribe(event => {
- const currentChange = this.extractLocationChangeInfoFromEvent(event);
- if (this.shouldScheduleNavigation(this.lastLocationChangeInfo, currentChange)) {
- // The `setTimeout` was added in #12160 and is likely to support Angular/AngularJS
- // hybrid apps.
- setTimeout(() => {
- const { source, state, urlTree } = currentChange;
- const extras = { replaceUrl: true };
- if (state) {
- const stateCopy = Object.assign({}, state);
- delete stateCopy.navigationId;
- if (Object.keys(stateCopy).length !== 0) {
- extras.state = stateCopy;
- }
- }
- this.scheduleNavigation(urlTree, source, state, extras);
- }, 0);
- }
- this.lastLocationChangeInfo = currentChange;
- });
- }
- }
- /** Extracts router-related information from a `PopStateEvent`. */
- extractLocationChangeInfoFromEvent(change) {
- var _a;
- return {
- source: change['type'] === 'popstate' ? 'popstate' : 'hashchange',
- urlTree: this.parseUrl(change['url']),
- // Navigations coming from Angular router have a navigationId state
- // property. When this exists, restore the state.
- state: ((_a = change.state) === null || _a === void 0 ? void 0 : _a.navigationId) ? change.state : null,
- transitionId: this.getTransition().id
- };
- }
- /**
- * Determines whether two events triggered by the Location subscription are due to the same
- * navigation. The location subscription can fire two events (popstate and hashchange) for a
- * single navigation. The second one should be ignored, that is, we should not schedule another
- * navigation in the Router.
- */
- shouldScheduleNavigation(previous, current) {
- if (!previous)
- return true;
- const sameDestination = current.urlTree.toString() === previous.urlTree.toString();
- const eventsOccurredAtSameTime = current.transitionId === previous.transitionId;
- if (!eventsOccurredAtSameTime || !sameDestination) {
- return true;
- }
- if ((current.source === 'hashchange' && previous.source === 'popstate') ||
- (current.source === 'popstate' && previous.source === 'hashchange')) {
- return false;
- }
- return true;
- }
- /** The current URL. */
- get url() {
- return this.serializeUrl(this.currentUrlTree);
- }
- /** The current Navigation object if one exists */
- getCurrentNavigation() {
- return this.currentNavigation;
- }
- /** @internal */
- triggerEvent(event) {
- this.events.next(event);
- }
- /**
- * Resets the route configuration used for navigation and generating links.
- *
- * @param config The route array for the new configuration.
- *
- * @usageNotes
- *
- * ```
- * router.resetConfig([
- * { path: 'team/:id', component: TeamCmp, children: [
- * { path: 'simple', component: SimpleCmp },
- * { path: 'user/:name', component: UserCmp }
- * ]}
- * ]);
- * ```
- */
- resetConfig(config) {
- validateConfig(config);
- this.config = config.map(standardizeConfig);
- this.navigated = false;
- this.lastSuccessfulId = -1;
- }
- /** @nodoc */
- ngOnDestroy() {
- this.dispose();
- }
- /** Disposes of the router. */
- dispose() {
- if (this.locationSubscription) {
- this.locationSubscription.unsubscribe();
- this.locationSubscription = undefined;
- }
- }
- /**
- * Appends URL segments to the current URL tree to create a new URL tree.
- *
- * @param commands An array of URL fragments with which to construct the new URL tree.
- * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path
- * segments, followed by the parameters for each segment.
- * The fragments are applied to the current URL tree or the one provided in the `relativeTo`
- * property of the options object, if supplied.
- * @param navigationExtras Options that control the navigation strategy.
- * @returns The new URL tree.
- *
- * @usageNotes
- *
- * ```
- * // create /team/33/user/11
- * router.createUrlTree(['/team', 33, 'user', 11]);
- *
- * // create /team/33;expand=true/user/11
- * router.createUrlTree(['/team', 33, {expand: true}, 'user', 11]);
- *
- * // you can collapse static segments like this (this works only with the first passed-in value):
- * router.createUrlTree(['/team/33/user', userId]);
- *
- * // If the first segment can contain slashes, and you do not want the router to split it,
- * // you can do the following:
- * router.createUrlTree([{segmentPath: '/one/two'}]);
- *
- * // create /team/33/(user/11//right:chat)
- * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: 'chat'}}]);
- *
- * // remove the right secondary node
- * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: null}}]);
- *
- * // assuming the current url is `/team/33/user/11` and the route points to `user/11`
- *
- * // navigate to /team/33/user/11/details
- * router.createUrlTree(['details'], {relativeTo: route});
- *
- * // navigate to /team/33/user/22
- * router.createUrlTree(['../22'], {relativeTo: route});
- *
- * // navigate to /team/44/user/22
- * router.createUrlTree(['../../team/44/user/22'], {relativeTo: route});
- * ```
- */
- createUrlTree(commands, navigationExtras = {}) {
- const { relativeTo, queryParams, fragment, queryParamsHandling, preserveFragment } = navigationExtras;
- const a = relativeTo || this.routerState.root;
- const f = preserveFragment ? this.currentUrlTree.fragment : fragment;
- let q = null;
- switch (queryParamsHandling) {
- case 'merge':
- q = Object.assign(Object.assign({}, this.currentUrlTree.queryParams), queryParams);
- break;
- case 'preserve':
- q = this.currentUrlTree.queryParams;
- break;
- default:
- q = queryParams || null;
- }
- if (q !== null) {
- q = this.removeEmptyProps(q);
- }
- return createUrlTree(a, this.currentUrlTree, commands, q, f);
- }
- /**
- * Navigates to a view using an absolute route path.
- *
- * @param url An absolute path for a defined route. The function does not apply any delta to the
- * current URL.
- * @param extras An object containing properties that modify the navigation strategy.
- *
- * @returns A Promise that resolves to 'true' when navigation succeeds,
- * to 'false' when navigation fails, or is rejected on error.
- *
- * @usageNotes
- *
- * The following calls request navigation to an absolute path.
- *
- * ```
- * router.navigateByUrl("/team/33/user/11");
- *
- * // Navigate without updating the URL
- * router.navigateByUrl("/team/33/user/11", { skipLocationChange: true });
- * ```
- *
- * @see [Routing and Navigation guide](guide/router)
- *
- */
- navigateByUrl(url, extras = {
- skipLocationChange: false
- }) {
- if (typeof ngDevMode === 'undefined' ||
- ngDevMode && this.isNgZoneEnabled && !_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"].isInAngularZone()) {
- this.console.warn(`Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()'?`);
- }
- const urlTree = isUrlTree(url) ? url : this.parseUrl(url);
- const mergedTree = this.urlHandlingStrategy.merge(urlTree, this.rawUrlTree);
- return this.scheduleNavigation(mergedTree, 'imperative', null, extras);
- }
- /**
- * Navigate based on the provided array of commands and a starting point.
- * If no starting route is provided, the navigation is absolute.
- *
- * @param commands An array of URL fragments with which to construct the target URL.
- * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path
- * segments, followed by the parameters for each segment.
- * The fragments are applied to the current URL or the one provided in the `relativeTo` property
- * of the options object, if supplied.
- * @param extras An options object that determines how the URL should be constructed or
- * interpreted.
- *
- * @returns A Promise that resolves to `true` when navigation succeeds, to `false` when navigation
- * fails,
- * or is rejected on error.
- *
- * @usageNotes
- *
- * The following calls request navigation to a dynamic route path relative to the current URL.
- *
- * ```
- * router.navigate(['team', 33, 'user', 11], {relativeTo: route});
- *
- * // Navigate without updating the URL, overriding the default behavior
- * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true});
- * ```
- *
- * @see [Routing and Navigation guide](guide/router)
- *
- */
- navigate(commands, extras = { skipLocationChange: false }) {
- validateCommands(commands);
- return this.navigateByUrl(this.createUrlTree(commands, extras), extras);
- }
- /** Serializes a `UrlTree` into a string */
- serializeUrl(url) {
- return this.urlSerializer.serialize(url);
- }
- /** Parses a string into a `UrlTree` */
- parseUrl(url) {
- let urlTree;
- try {
- urlTree = this.urlSerializer.parse(url);
- }
- catch (e) {
- urlTree = this.malformedUriErrorHandler(e, this.urlSerializer, url);
- }
- return urlTree;
- }
- /** Returns whether the url is activated */
- isActive(url, exact) {
- if (isUrlTree(url)) {
- return containsTree(this.currentUrlTree, url, exact);
- }
- const urlTree = this.parseUrl(url);
- return containsTree(this.currentUrlTree, urlTree, exact);
- }
- removeEmptyProps(params) {
- return Object.keys(params).reduce((result, key) => {
- const value = params[key];
- if (value !== null && value !== undefined) {
- result[key] = value;
- }
- return result;
- }, {});
- }
- processNavigations() {
- this.navigations.subscribe(t => {
- this.navigated = true;
- this.lastSuccessfulId = t.id;
- this.events
- .next(new NavigationEnd(t.id, this.serializeUrl(t.extractedUrl), this.serializeUrl(this.currentUrlTree)));
- this.lastSuccessfulNavigation = this.currentNavigation;
- this.currentNavigation = null;
- t.resolve(true);
- }, e => {
- this.console.warn(`Unhandled Navigation Error: `);
- });
- }
- scheduleNavigation(rawUrl, source, restoredState, extras, priorPromise) {
- // * Imperative navigations (router.navigate) might trigger additional navigations to the same
- // URL via a popstate event and the locationChangeListener. We should skip these duplicate
- // navs. Duplicates may also be triggered by attempts to sync AngularJS and Angular router
- // states.
- // * Imperative navigations can be cancelled by router guards, meaning the URL won't change. If
- // the user follows that with a navigation using the back/forward button or manual URL change,
- // the destination may be the same as the previous imperative attempt. We should not skip
- // these navigations because it's a separate case from the one above -- it's not a duplicate
- // navigation.
- const lastNavigation = this.getTransition();
- // We don't want to skip duplicate successful navs if they're imperative because
- // onSameUrlNavigation could be 'reload' (so the duplicate is intended).
- const browserNavPrecededByRouterNav = source !== 'imperative' && (lastNavigation === null || lastNavigation === void 0 ? void 0 : lastNavigation.source) === 'imperative';
- const lastNavigationSucceeded = this.lastSuccessfulId === lastNavigation.id;
- // If the last navigation succeeded or is in flight, we can use the rawUrl as the comparison.
- // However, if it failed, we should compare to the final result (urlAfterRedirects).
- const lastNavigationUrl = (lastNavigationSucceeded || this.currentNavigation) ?
- lastNavigation.rawUrl :
- lastNavigation.urlAfterRedirects;
- const duplicateNav = lastNavigationUrl.toString() === rawUrl.toString();
- if (browserNavPrecededByRouterNav && duplicateNav) {
- return Promise.resolve(true); // return value is not used
- }
- let resolve;
- let reject;
- let promise;
- if (priorPromise) {
- resolve = priorPromise.resolve;
- reject = priorPromise.reject;
- promise = priorPromise.promise;
- }
- else {
- promise = new Promise((res, rej) => {
- resolve = res;
- reject = rej;
- });
- }
- const id = ++this.navigationId;
- this.setTransition({
- id,
- source,
- restoredState,
- currentUrlTree: this.currentUrlTree,
- currentRawUrl: this.rawUrlTree,
- rawUrl,
- extras,
- resolve,
- reject,
- promise,
- currentSnapshot: this.routerState.snapshot,
- currentRouterState: this.routerState
- });
- // Make sure that the error is propagated even though `processNavigations` catch
- // handler does not rethrow
- return promise.catch((e) => {
- return Promise.reject(e);
- });
- }
- setBrowserUrl(url, replaceUrl, id, state) {
- const path = this.urlSerializer.serialize(url);
- state = state || {};
- if (this.location.isCurrentPathEqualTo(path) || replaceUrl) {
- // TODO(jasonaden): Remove first `navigationId` and rely on `ng` namespace.
- this.location.replaceState(path, '', Object.assign(Object.assign({}, state), { navigationId: id }));
- }
- else {
- this.location.go(path, '', Object.assign(Object.assign({}, state), { navigationId: id }));
- }
- }
- resetStateAndUrl(storedState, storedUrl, rawUrl) {
- this.routerState = storedState;
- this.currentUrlTree = storedUrl;
- this.rawUrlTree = this.urlHandlingStrategy.merge(this.currentUrlTree, rawUrl);
- this.resetUrlToCurrentUrlTree();
- }
- resetUrlToCurrentUrlTree() {
- this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree), '', { navigationId: this.lastSuccessfulId });
- }
- }
- Router.ɵfac = function Router_Factory(t) { return new (t || Router)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Type"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](UrlSerializer), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](ChildrenOutletContexts), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["Location"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactoryLoader"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](undefined)); };
- Router.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({ token: Router, factory: Router.ɵfac });
- Router.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Type"] },
- { type: UrlSerializer },
- { type: ChildrenOutletContexts },
- { type: _angular_common__WEBPACK_IMPORTED_MODULE_0__["Location"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactoryLoader"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"] },
- { type: undefined }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](Router, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Type"] }, { type: UrlSerializer }, { type: ChildrenOutletContexts }, { type: _angular_common__WEBPACK_IMPORTED_MODULE_0__["Location"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactoryLoader"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"] }, { type: undefined }]; }, null); })();
- function validateCommands(commands) {
- for (let i = 0; i < commands.length; i++) {
- const cmd = commands[i];
- if (cmd == null) {
- throw new Error(`The requested path contains ${cmd} segment at index ${i}`);
- }
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @description
- *
- * When applied to an element in a template, makes that element a link
- * that initiates navigation to a route. Navigation opens one or more routed components
- * in one or more `<router-outlet>` locations on the page.
- *
- * Given a route configuration `[{ path: 'user/:name', component: UserCmp }]`,
- * the following creates a static link to the route:
- * `<a routerLink="/user/bob">link to user component</a>`
- *
- * You can use dynamic values to generate the link.
- * For a dynamic link, pass an array of path segments,
- * followed by the params for each segment.
- * For example, `['/team', teamId, 'user', userName, {details: true}]`
- * generates a link to `/team/11/user/bob;details=true`.
- *
- * Multiple static segments can be merged into one term and combined with dynamic segements.
- * For example, `['/team/11/user', userName, {details: true}]`
- *
- * The input that you provide to the link is treated as a delta to the current URL.
- * For instance, suppose the current URL is `/user/(box//aux:team)`.
- * The link `<a [routerLink]="['/user/jim']">Jim</a>` creates the URL
- * `/user/(jim//aux:team)`.
- * See {@link Router#createUrlTree createUrlTree} for more information.
- *
- * @usageNotes
- *
- * You can use absolute or relative paths in a link, set query parameters,
- * control how parameters are handled, and keep a history of navigation states.
- *
- * ### Relative link paths
- *
- * The first segment name can be prepended with `/`, `./`, or `../`.
- * * If the first segment begins with `/`, the router looks up the route from the root of the
- * app.
- * * If the first segment begins with `./`, or doesn't begin with a slash, the router
- * looks in the children of the current activated route.
- * * If the first segment begins with `../`, the router goes up one level in the route tree.
- *
- * ### Setting and handling query params and fragments
- *
- * The following link adds a query parameter and a fragment to the generated URL:
- *
- * ```
- * <a [routerLink]="['/user/bob']" [queryParams]="{debug: true}" fragment="education">
- * link to user component
- * </a>
- * ```
- * By default, the directive constructs the new URL using the given query parameters.
- * The example generates the link: `/user/bob?debug=true#education`.
- *
- * You can instruct the directive to handle query parameters differently
- * by specifying the `queryParamsHandling` option in the link.
- * Allowed values are:
- *
- * - `'merge'`: Merge the given `queryParams` into the current query params.
- * - `'preserve'`: Preserve the current query params.
- *
- * For example:
- *
- * ```
- * <a [routerLink]="['/user/bob']" [queryParams]="{debug: true}" queryParamsHandling="merge">
- * link to user component
- * </a>
- * ```
- *
- * See {@link UrlCreationOptions.queryParamsHandling UrlCreationOptions#queryParamsHandling}.
- *
- * ### Preserving navigation history
- *
- * You can provide a `state` value to be persisted to the browser's
- * [`History.state` property](https://developer.mozilla.org/en-US/docs/Web/API/History#Properties).
- * For example:
- *
- * ```
- * <a [routerLink]="['/user/bob']" [state]="{tracingId: 123}">
- * link to user component
- * </a>
- * ```
- *
- * Use {@link Router.getCurrentNavigation() Router#getCurrentNavigation} to retrieve a saved
- * navigation-state value. For example, to capture the `tracingId` during the `NavigationStart`
- * event:
- *
- * ```
- * // Get NavigationStart events
- * router.events.pipe(filter(e => e instanceof NavigationStart)).subscribe(e => {
- * const navigation = router.getCurrentNavigation();
- * tracingService.trace({id: navigation.extras.state.tracingId});
- * });
- * ```
- *
- * @ngModule RouterModule
- *
- * @publicApi
- */
- class RouterLink {
- constructor(router, route, tabIndex, renderer, el) {
- this.router = router;
- this.route = route;
- this.commands = [];
- /** @internal */
- this.onChanges = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- if (tabIndex == null) {
- renderer.setAttribute(el.nativeElement, 'tabindex', '0');
- }
- }
- /** @nodoc */
- ngOnChanges(changes) {
- // This is subscribed to by `RouterLinkActive` so that it knows to update when there are changes
- // to the RouterLinks it's tracking.
- this.onChanges.next(this);
- }
- /**
- * Commands to pass to {@link Router#createUrlTree Router#createUrlTree}.
- * - **array**: commands to pass to {@link Router#createUrlTree Router#createUrlTree}.
- * - **string**: shorthand for array of commands with just the string, i.e. `['/route']`
- * - **null|undefined**: shorthand for an empty array of commands, i.e. `[]`
- * @see {@link Router#createUrlTree Router#createUrlTree}
- */
- set routerLink(commands) {
- if (commands != null) {
- this.commands = Array.isArray(commands) ? commands : [commands];
- }
- else {
- this.commands = [];
- }
- }
- /** @nodoc */
- onClick() {
- const extras = {
- skipLocationChange: attrBoolValue(this.skipLocationChange),
- replaceUrl: attrBoolValue(this.replaceUrl),
- state: this.state,
- };
- this.router.navigateByUrl(this.urlTree, extras);
- return true;
- }
- get urlTree() {
- return this.router.createUrlTree(this.commands, {
- relativeTo: this.route,
- queryParams: this.queryParams,
- fragment: this.fragment,
- queryParamsHandling: this.queryParamsHandling,
- preserveFragment: attrBoolValue(this.preserveFragment),
- });
- }
- }
- RouterLink.ɵfac = function RouterLink_Factory(t) { return new (t || RouterLink)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](Router), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ActivatedRoute), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinjectAttribute"]('tabindex'), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"])); };
- RouterLink.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ type: RouterLink, selectors: [["", "routerLink", "", 5, "a", 5, "area"]], hostBindings: function RouterLink_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function RouterLink_click_HostBindingHandler() { return ctx.onClick(); });
- } }, inputs: { routerLink: "routerLink", queryParams: "queryParams", fragment: "fragment", queryParamsHandling: "queryParamsHandling", preserveFragment: "preserveFragment", skipLocationChange: "skipLocationChange", replaceUrl: "replaceUrl", state: "state" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]] });
- RouterLink.ctorParameters = () => [
- { type: Router },
- { type: ActivatedRoute },
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Attribute"], args: ['tabindex',] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"] }
- ];
- RouterLink.propDecorators = {
- queryParams: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- fragment: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- queryParamsHandling: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- preserveFragment: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- skipLocationChange: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- replaceUrl: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- state: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- routerLink: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- onClick: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"], args: ['click',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](RouterLink, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
- args: [{ selector: ':not(a):not(area)[routerLink]' }]
- }], function () { return [{ type: Router }, { type: ActivatedRoute }, { type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Attribute"],
- args: ['tabindex']
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"] }]; }, { routerLink: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }],
- /** @nodoc */
- onClick: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
- args: ['click']
- }], queryParams: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], fragment: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], queryParamsHandling: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], preserveFragment: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], skipLocationChange: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], replaceUrl: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], state: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }] }); })();
- /**
- * @description
- *
- * Lets you link to specific routes in your app.
- *
- * See `RouterLink` for more information.
- *
- * @ngModule RouterModule
- *
- * @publicApi
- */
- class RouterLinkWithHref {
- constructor(router, route, locationStrategy) {
- this.router = router;
- this.route = route;
- this.locationStrategy = locationStrategy;
- this.commands = [];
- /** @internal */
- this.onChanges = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- this.subscription = router.events.subscribe((s) => {
- if (s instanceof NavigationEnd) {
- this.updateTargetUrlAndHref();
- }
- });
- }
- /**
- * Commands to pass to {@link Router#createUrlTree Router#createUrlTree}.
- * - **array**: commands to pass to {@link Router#createUrlTree Router#createUrlTree}.
- * - **string**: shorthand for array of commands with just the string, i.e. `['/route']`
- * - **null|undefined**: shorthand for an empty array of commands, i.e. `[]`
- * @see {@link Router#createUrlTree Router#createUrlTree}
- */
- set routerLink(commands) {
- if (commands != null) {
- this.commands = Array.isArray(commands) ? commands : [commands];
- }
- else {
- this.commands = [];
- }
- }
- /** @nodoc */
- ngOnChanges(changes) {
- this.updateTargetUrlAndHref();
- this.onChanges.next(this);
- }
- /** @nodoc */
- ngOnDestroy() {
- this.subscription.unsubscribe();
- }
- /** @nodoc */
- onClick(button, ctrlKey, shiftKey, altKey, metaKey) {
- if (button !== 0 || ctrlKey || shiftKey || altKey || metaKey) {
- return true;
- }
- if (typeof this.target === 'string' && this.target != '_self') {
- return true;
- }
- const extras = {
- skipLocationChange: attrBoolValue(this.skipLocationChange),
- replaceUrl: attrBoolValue(this.replaceUrl),
- state: this.state
- };
- this.router.navigateByUrl(this.urlTree, extras);
- return false;
- }
- updateTargetUrlAndHref() {
- this.href = this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.urlTree));
- }
- get urlTree() {
- return this.router.createUrlTree(this.commands, {
- relativeTo: this.route,
- queryParams: this.queryParams,
- fragment: this.fragment,
- queryParamsHandling: this.queryParamsHandling,
- preserveFragment: attrBoolValue(this.preserveFragment),
- });
- }
- }
- RouterLinkWithHref.ɵfac = function RouterLinkWithHref_Factory(t) { return new (t || RouterLinkWithHref)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](Router), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ActivatedRoute), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["LocationStrategy"])); };
- RouterLinkWithHref.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ type: RouterLinkWithHref, selectors: [["a", "routerLink", ""], ["area", "routerLink", ""]], hostVars: 2, hostBindings: function RouterLinkWithHref_HostBindings(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function RouterLinkWithHref_click_HostBindingHandler($event) { return ctx.onClick($event.button, $event.ctrlKey, $event.shiftKey, $event.altKey, $event.metaKey); });
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵhostProperty"]("href", ctx.href, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsanitizeUrl"]);
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵattribute"]("target", ctx.target);
- } }, inputs: { routerLink: "routerLink", target: "target", queryParams: "queryParams", fragment: "fragment", queryParamsHandling: "queryParamsHandling", preserveFragment: "preserveFragment", skipLocationChange: "skipLocationChange", replaceUrl: "replaceUrl", state: "state" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]] });
- RouterLinkWithHref.ctorParameters = () => [
- { type: Router },
- { type: ActivatedRoute },
- { type: _angular_common__WEBPACK_IMPORTED_MODULE_0__["LocationStrategy"] }
- ];
- RouterLinkWithHref.propDecorators = {
- target: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"], args: ['attr.target',] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- queryParams: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- fragment: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- queryParamsHandling: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- preserveFragment: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- skipLocationChange: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- replaceUrl: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- state: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- href: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"] }],
- routerLink: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- onClick: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"], args: ['click',
- ['$event.button', '$event.ctrlKey', '$event.shiftKey', '$event.altKey', '$event.metaKey'],] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](RouterLinkWithHref, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
- args: [{ selector: 'a[routerLink],area[routerLink]' }]
- }], function () { return [{ type: Router }, { type: ActivatedRoute }, { type: _angular_common__WEBPACK_IMPORTED_MODULE_0__["LocationStrategy"] }]; }, { routerLink: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }],
- /** @nodoc */
- onClick: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
- args: ['click',
- ['$event.button', '$event.ctrlKey', '$event.shiftKey', '$event.altKey', '$event.metaKey']]
- }], href: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"]
- }], target: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"],
- args: ['attr.target']
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], queryParams: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], fragment: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], queryParamsHandling: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], preserveFragment: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], skipLocationChange: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], replaceUrl: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], state: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }] }); })();
- function attrBoolValue(s) {
- return s === '' || !!s;
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- *
- * @description
- *
- * Tracks whether the linked route of an element is currently active, and allows you
- * to specify one or more CSS classes to add to the element when the linked route
- * is active.
- *
- * Use this directive to create a visual distinction for elements associated with an active route.
- * For example, the following code highlights the word "Bob" when the the router
- * activates the associated route:
- *
- * ```
- * <a routerLink="/user/bob" routerLinkActive="active-link">Bob</a>
- * ```
- *
- * Whenever the URL is either '/user' or '/user/bob', the "active-link" class is
- * added to the anchor tag. If the URL changes, the class is removed.
- *
- * You can set more than one class using a space-separated string or an array.
- * For example:
- *
- * ```
- * <a routerLink="/user/bob" routerLinkActive="class1 class2">Bob</a>
- * <a routerLink="/user/bob" [routerLinkActive]="['class1', 'class2']">Bob</a>
- * ```
- *
- * To add the classes only when the URL matches the link exactly, add the option `exact: true`:
- *
- * ```
- * <a routerLink="/user/bob" routerLinkActive="active-link" [routerLinkActiveOptions]="{exact:
- * true}">Bob</a>
- * ```
- *
- * To directly check the `isActive` status of the link, assign the `RouterLinkActive`
- * instance to a template variable.
- * For example, the following checks the status without assigning any CSS classes:
- *
- * ```
- * <a routerLink="/user/bob" routerLinkActive #rla="routerLinkActive">
- * Bob {{ rla.isActive ? '(already open)' : ''}}
- * </a>
- * ```
- *
- * You can apply the `RouterLinkActive` directive to an ancestor of linked elements.
- * For example, the following sets the active-link class on the `<div>` parent tag
- * when the URL is either '/user/jim' or '/user/bob'.
- *
- * ```
- * <div routerLinkActive="active-link" [routerLinkActiveOptions]="{exact: true}">
- * <a routerLink="/user/jim">Jim</a>
- * <a routerLink="/user/bob">Bob</a>
- * </div>
- * ```
- *
- * @ngModule RouterModule
- *
- * @publicApi
- */
- class RouterLinkActive {
- constructor(router, element, renderer, cdr, link, linkWithHref) {
- this.router = router;
- this.element = element;
- this.renderer = renderer;
- this.cdr = cdr;
- this.link = link;
- this.linkWithHref = linkWithHref;
- this.classes = [];
- this.isActive = false;
- this.routerLinkActiveOptions = { exact: false };
- this.routerEventsSubscription = router.events.subscribe((s) => {
- if (s instanceof NavigationEnd) {
- this.update();
- }
- });
- }
- /** @nodoc */
- ngAfterContentInit() {
- // `of(null)` is used to force subscribe body to execute once immediately (like `startWith`).
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])([this.links.changes, this.linksWithHrefs.changes, Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(null)])
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeAll"])())
- .subscribe(_ => {
- this.update();
- this.subscribeToEachLinkOnChanges();
- });
- }
- subscribeToEachLinkOnChanges() {
- var _a;
- (_a = this.linkInputChangesSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
- const allLinkChanges = [...this.links.toArray(), ...this.linksWithHrefs.toArray(), this.link, this.linkWithHref]
- .filter((link) => !!link)
- .map(link => link.onChanges);
- this.linkInputChangesSubscription = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(allLinkChanges).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeAll"])()).subscribe(link => {
- if (this.isActive !== this.isLinkActive(this.router)(link)) {
- this.update();
- }
- });
- }
- set routerLinkActive(data) {
- const classes = Array.isArray(data) ? data : data.split(' ');
- this.classes = classes.filter(c => !!c);
- }
- /** @nodoc */
- ngOnChanges(changes) {
- this.update();
- }
- /** @nodoc */
- ngOnDestroy() {
- var _a;
- this.routerEventsSubscription.unsubscribe();
- (_a = this.linkInputChangesSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
- }
- update() {
- if (!this.links || !this.linksWithHrefs || !this.router.navigated)
- return;
- Promise.resolve().then(() => {
- const hasActiveLinks = this.hasActiveLinks();
- if (this.isActive !== hasActiveLinks) {
- this.isActive = hasActiveLinks;
- this.cdr.markForCheck();
- this.classes.forEach((c) => {
- if (hasActiveLinks) {
- this.renderer.addClass(this.element.nativeElement, c);
- }
- else {
- this.renderer.removeClass(this.element.nativeElement, c);
- }
- });
- }
- });
- }
- isLinkActive(router) {
- return (link) => router.isActive(link.urlTree, this.routerLinkActiveOptions.exact);
- }
- hasActiveLinks() {
- const isActiveCheckFn = this.isLinkActive(this.router);
- return this.link && isActiveCheckFn(this.link) ||
- this.linkWithHref && isActiveCheckFn(this.linkWithHref) ||
- this.links.some(isActiveCheckFn) || this.linksWithHrefs.some(isActiveCheckFn);
- }
- }
- RouterLinkActive.ɵfac = function RouterLinkActive_Factory(t) { return new (t || RouterLinkActive)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](Router), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](RouterLink, 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](RouterLinkWithHref, 8)); };
- RouterLinkActive.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ type: RouterLinkActive, selectors: [["", "routerLinkActive", ""]], contentQueries: function RouterLinkActive_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵcontentQuery"](dirIndex, RouterLink, true);
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵcontentQuery"](dirIndex, RouterLinkWithHref, true);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx.links = _t);
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx.linksWithHrefs = _t);
- } }, inputs: { routerLinkActiveOptions: "routerLinkActiveOptions", routerLinkActive: "routerLinkActive" }, exportAs: ["routerLinkActive"], features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]] });
- RouterLinkActive.ctorParameters = () => [
- { type: Router },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"] },
- { type: RouterLink, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"] }] },
- { type: RouterLinkWithHref, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"] }] }
- ];
- RouterLinkActive.propDecorators = {
- links: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ContentChildren"], args: [RouterLink, { descendants: true },] }],
- linksWithHrefs: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ContentChildren"], args: [RouterLinkWithHref, { descendants: true },] }],
- routerLinkActiveOptions: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- routerLinkActive: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](RouterLinkActive, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
- args: [{
- selector: '[routerLinkActive]',
- exportAs: 'routerLinkActive'
- }]
- }], function () { return [{ type: Router }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"] }, { type: RouterLink, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
- }] }, { type: RouterLinkWithHref, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
- }] }]; }, { routerLinkActiveOptions: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], routerLinkActive: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], links: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ContentChildren"],
- args: [RouterLink, { descendants: true }]
- }], linksWithHrefs: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ContentChildren"],
- args: [RouterLinkWithHref, { descendants: true }]
- }] }); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @description
- *
- * Acts as a placeholder that Angular dynamically fills based on the current router state.
- *
- * Each outlet can have a unique name, determined by the optional `name` attribute.
- * The name cannot be set or changed dynamically. If not set, default value is "primary".
- *
- * ```
- * <router-outlet></router-outlet>
- * <router-outlet name='left'></router-outlet>
- * <router-outlet name='right'></router-outlet>
- * ```
- *
- * Named outlets can be the targets of secondary routes.
- * The `Route` object for a secondary route has an `outlet` property to identify the target outlet:
- *
- * `{path: <base-path>, component: <component>, outlet: <target_outlet_name>}`
- *
- * Using named outlets and secondary routes, you can target multiple outlets in
- * the same `RouterLink` directive.
- *
- * The router keeps track of separate branches in a navigation tree for each named outlet and
- * generates a representation of that tree in the URL.
- * The URL for a secondary route uses the following syntax to specify both the primary and secondary
- * routes at the same time:
- *
- * `http://base-path/primary-route-path(outlet-name:route-path)`
- *
- * A router outlet emits an activate event when a new component is instantiated,
- * and a deactivate event when a component is destroyed.
- *
- * ```
- * <router-outlet
- * (activate)='onActivate($event)'
- * (deactivate)='onDeactivate($event)'></router-outlet>
- * ```
- *
- * @see [Routing tutorial](guide/router-tutorial-toh#named-outlets "Example of a named
- * outlet and secondary route configuration").
- * @see `RouterLink`
- * @see `Route`
- * @ngModule RouterModule
- *
- * @publicApi
- */
- class RouterOutlet {
- constructor(parentContexts, location, resolver, name, changeDetector) {
- this.parentContexts = parentContexts;
- this.location = location;
- this.resolver = resolver;
- this.changeDetector = changeDetector;
- this.activated = null;
- this._activatedRoute = null;
- this.activateEvents = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
- this.deactivateEvents = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
- this.name = name || PRIMARY_OUTLET;
- parentContexts.onChildOutletCreated(this.name, this);
- }
- /** @nodoc */
- ngOnDestroy() {
- this.parentContexts.onChildOutletDestroyed(this.name);
- }
- /** @nodoc */
- ngOnInit() {
- if (!this.activated) {
- // If the outlet was not instantiated at the time the route got activated we need to populate
- // the outlet when it is initialized (ie inside a NgIf)
- const context = this.parentContexts.getContext(this.name);
- if (context && context.route) {
- if (context.attachRef) {
- // `attachRef` is populated when there is an existing component to mount
- this.attach(context.attachRef, context.route);
- }
- else {
- // otherwise the component defined in the configuration is created
- this.activateWith(context.route, context.resolver || null);
- }
- }
- }
- }
- get isActivated() {
- return !!this.activated;
- }
- get component() {
- if (!this.activated)
- throw new Error('Outlet is not activated');
- return this.activated.instance;
- }
- get activatedRoute() {
- if (!this.activated)
- throw new Error('Outlet is not activated');
- return this._activatedRoute;
- }
- get activatedRouteData() {
- if (this._activatedRoute) {
- return this._activatedRoute.snapshot.data;
- }
- return {};
- }
- /**
- * Called when the `RouteReuseStrategy` instructs to detach the subtree
- */
- detach() {
- if (!this.activated)
- throw new Error('Outlet is not activated');
- this.location.detach();
- const cmp = this.activated;
- this.activated = null;
- this._activatedRoute = null;
- return cmp;
- }
- /**
- * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree
- */
- attach(ref, activatedRoute) {
- this.activated = ref;
- this._activatedRoute = activatedRoute;
- this.location.insert(ref.hostView);
- }
- deactivate() {
- if (this.activated) {
- const c = this.component;
- this.activated.destroy();
- this.activated = null;
- this._activatedRoute = null;
- this.deactivateEvents.emit(c);
- }
- }
- activateWith(activatedRoute, resolver) {
- if (this.isActivated) {
- throw new Error('Cannot activate an already activated outlet');
- }
- this._activatedRoute = activatedRoute;
- const snapshot = activatedRoute._futureSnapshot;
- const component = snapshot.routeConfig.component;
- resolver = resolver || this.resolver;
- const factory = resolver.resolveComponentFactory(component);
- const childContexts = this.parentContexts.getOrCreateContext(this.name).children;
- const injector = new OutletInjector(activatedRoute, childContexts, this.location.injector);
- this.activated = this.location.createComponent(factory, this.location.length, injector);
- // Calling `markForCheck` to make sure we will run the change detection when the
- // `RouterOutlet` is inside a `ChangeDetectionStrategy.OnPush` component.
- this.changeDetector.markForCheck();
- this.activateEvents.emit(this.activated.instance);
- }
- }
- RouterOutlet.ɵfac = function RouterOutlet_Factory(t) { return new (t || RouterOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ChildrenOutletContexts), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinjectAttribute"]('name'), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"])); };
- RouterOutlet.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ type: RouterOutlet, selectors: [["router-outlet"]], outputs: { activateEvents: "activate", deactivateEvents: "deactivate" }, exportAs: ["outlet"] });
- RouterOutlet.ctorParameters = () => [
- { type: ChildrenOutletContexts },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"] },
- { type: String, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Attribute"], args: ['name',] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"] }
- ];
- RouterOutlet.propDecorators = {
- activateEvents: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"], args: ['activate',] }],
- deactivateEvents: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"], args: ['deactivate',] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](RouterOutlet, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
- args: [{ selector: 'router-outlet', exportAs: 'outlet' }]
- }], function () { return [{ type: ChildrenOutletContexts }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"] }, { type: String, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Attribute"],
- args: ['name']
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"] }]; }, { activateEvents: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"],
- args: ['activate']
- }], deactivateEvents: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"],
- args: ['deactivate']
- }] }); })();
- class OutletInjector {
- constructor(route, childContexts, parent) {
- this.route = route;
- this.childContexts = childContexts;
- this.parent = parent;
- }
- get(token, notFoundValue) {
- if (token === ActivatedRoute) {
- return this.route;
- }
- if (token === ChildrenOutletContexts) {
- return this.childContexts;
- }
- return this.parent.get(token, notFoundValue);
- }
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @description
- *
- * Provides a preloading strategy.
- *
- * @publicApi
- */
- class PreloadingStrategy {
- }
- /**
- * @description
- *
- * Provides a preloading strategy that preloads all modules as quickly as possible.
- *
- * ```
- * RouterModule.forRoot(ROUTES, {preloadingStrategy: PreloadAllModules})
- * ```
- *
- * @publicApi
- */
- class PreloadAllModules {
- preload(route, fn) {
- return fn().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["catchError"])(() => Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(null)));
- }
- }
- /**
- * @description
- *
- * Provides a preloading strategy that does not preload any modules.
- *
- * This strategy is enabled by default.
- *
- * @publicApi
- */
- class NoPreloading {
- preload(route, fn) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(null);
- }
- }
- /**
- * The preloader optimistically loads all router configurations to
- * make navigations into lazily-loaded sections of the application faster.
- *
- * The preloader runs in the background. When the router bootstraps, the preloader
- * starts listening to all navigation events. After every such event, the preloader
- * will check if any configurations can be loaded lazily.
- *
- * If a route is protected by `canLoad` guards, the preloaded will not load it.
- *
- * @publicApi
- */
- class RouterPreloader {
- constructor(router, moduleLoader, compiler, injector, preloadingStrategy) {
- this.router = router;
- this.injector = injector;
- this.preloadingStrategy = preloadingStrategy;
- const onStartLoad = (r) => router.triggerEvent(new RouteConfigLoadStart(r));
- const onEndLoad = (r) => router.triggerEvent(new RouteConfigLoadEnd(r));
- this.loader = new RouterConfigLoader(moduleLoader, compiler, onStartLoad, onEndLoad);
- }
- setUpPreloading() {
- this.subscription =
- this.router.events
- .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])((e) => e instanceof NavigationEnd), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["concatMap"])(() => this.preload()))
- .subscribe(() => { });
- }
- preload() {
- const ngModule = this.injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleRef"]);
- return this.processRoutes(ngModule, this.router.config);
- }
- /** @nodoc */
- ngOnDestroy() {
- if (this.subscription) {
- this.subscription.unsubscribe();
- }
- }
- processRoutes(ngModule, routes) {
- const res = [];
- for (const route of routes) {
- // we already have the config loaded, just recurse
- if (route.loadChildren && !route.canLoad && route._loadedConfig) {
- const childConfig = route._loadedConfig;
- res.push(this.processRoutes(childConfig.module, childConfig.routes));
- // no config loaded, fetch the config
- }
- else if (route.loadChildren && !route.canLoad) {
- res.push(this.preloadConfig(ngModule, route));
- // recurse into children
- }
- else if (route.children) {
- res.push(this.processRoutes(ngModule, route.children));
- }
- }
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(res).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeAll"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])((_) => void 0));
- }
- preloadConfig(ngModule, route) {
- return this.preloadingStrategy.preload(route, () => {
- const loaded$ = this.loader.load(ngModule.injector, route);
- return loaded$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])((config) => {
- route._loadedConfig = config;
- return this.processRoutes(config.module, config.routes);
- }));
- });
- }
- }
- RouterPreloader.ɵfac = function RouterPreloader_Factory(t) { return new (t || RouterPreloader)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](Router), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactoryLoader"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](PreloadingStrategy)); };
- RouterPreloader.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({ token: RouterPreloader, factory: RouterPreloader.ɵfac });
- RouterPreloader.ctorParameters = () => [
- { type: Router },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactoryLoader"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"] },
- { type: PreloadingStrategy }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](RouterPreloader, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
- }], function () { return [{ type: Router }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactoryLoader"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"] }, { type: PreloadingStrategy }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- class RouterScroller {
- constructor(router,
- /** @docsNotRequired */ viewportScroller, options = {}) {
- this.router = router;
- this.viewportScroller = viewportScroller;
- this.options = options;
- this.lastId = 0;
- this.lastSource = 'imperative';
- this.restoredId = 0;
- this.store = {};
- // Default both options to 'disabled'
- options.scrollPositionRestoration = options.scrollPositionRestoration || 'disabled';
- options.anchorScrolling = options.anchorScrolling || 'disabled';
- }
- init() {
- // we want to disable the automatic scrolling because having two places
- // responsible for scrolling results race conditions, especially given
- // that browser don't implement this behavior consistently
- if (this.options.scrollPositionRestoration !== 'disabled') {
- this.viewportScroller.setHistoryScrollRestoration('manual');
- }
- this.routerEventsSubscription = this.createScrollEvents();
- this.scrollEventsSubscription = this.consumeScrollEvents();
- }
- createScrollEvents() {
- return this.router.events.subscribe(e => {
- if (e instanceof NavigationStart) {
- // store the scroll position of the current stable navigations.
- this.store[this.lastId] = this.viewportScroller.getScrollPosition();
- this.lastSource = e.navigationTrigger;
- this.restoredId = e.restoredState ? e.restoredState.navigationId : 0;
- }
- else if (e instanceof NavigationEnd) {
- this.lastId = e.id;
- this.scheduleScrollEvent(e, this.router.parseUrl(e.urlAfterRedirects).fragment);
- }
- });
- }
- consumeScrollEvents() {
- return this.router.events.subscribe(e => {
- if (!(e instanceof Scroll))
- return;
- // a popstate event. The pop state event will always ignore anchor scrolling.
- if (e.position) {
- if (this.options.scrollPositionRestoration === 'top') {
- this.viewportScroller.scrollToPosition([0, 0]);
- }
- else if (this.options.scrollPositionRestoration === 'enabled') {
- this.viewportScroller.scrollToPosition(e.position);
- }
- // imperative navigation "forward"
- }
- else {
- if (e.anchor && this.options.anchorScrolling === 'enabled') {
- this.viewportScroller.scrollToAnchor(e.anchor);
- }
- else if (this.options.scrollPositionRestoration !== 'disabled') {
- this.viewportScroller.scrollToPosition([0, 0]);
- }
- }
- });
- }
- scheduleScrollEvent(routerEvent, anchor) {
- this.router.triggerEvent(new Scroll(routerEvent, this.lastSource === 'popstate' ? this.store[this.restoredId] : null, anchor));
- }
- /** @nodoc */
- ngOnDestroy() {
- if (this.routerEventsSubscription) {
- this.routerEventsSubscription.unsubscribe();
- }
- if (this.scrollEventsSubscription) {
- this.scrollEventsSubscription.unsubscribe();
- }
- }
- }
- RouterScroller.ɵfac = function RouterScroller_Factory(t) { return new (t || RouterScroller)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](Router), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["ViewportScroller"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](undefined)); };
- RouterScroller.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({ token: RouterScroller, factory: RouterScroller.ɵfac });
- RouterScroller.ctorParameters = () => [
- { type: Router },
- { type: _angular_common__WEBPACK_IMPORTED_MODULE_0__["ViewportScroller"] },
- { type: undefined }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](RouterScroller, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
- }], function () { return [{ type: Router }, { type: _angular_common__WEBPACK_IMPORTED_MODULE_0__["ViewportScroller"] }, { type: undefined }]; }, null); })();
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * The directives defined in the `RouterModule`.
- */
- const ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkWithHref, RouterLinkActive, ɵEmptyOutletComponent];
- /**
- * A [DI token](guide/glossary/#di-token) for the router service.
- *
- * @publicApi
- */
- const ROUTER_CONFIGURATION = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('ROUTER_CONFIGURATION');
- /**
- * @docsNotRequired
- */
- const ROUTER_FORROOT_GUARD = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('ROUTER_FORROOT_GUARD');
- const ɵ0 = { enableTracing: false };
- const ROUTER_PROVIDERS = [
- _angular_common__WEBPACK_IMPORTED_MODULE_0__["Location"],
- { provide: UrlSerializer, useClass: DefaultUrlSerializer },
- {
- provide: Router,
- useFactory: setupRouter,
- deps: [
- UrlSerializer, ChildrenOutletContexts, _angular_common__WEBPACK_IMPORTED_MODULE_0__["Location"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactoryLoader"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"],
- ROUTES, ROUTER_CONFIGURATION, [UrlHandlingStrategy, new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]()],
- [RouteReuseStrategy, new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]()]
- ]
- },
- ChildrenOutletContexts,
- { provide: ActivatedRoute, useFactory: rootRoute, deps: [Router] },
- { provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactoryLoader"], useClass: _angular_core__WEBPACK_IMPORTED_MODULE_1__["SystemJsNgModuleLoader"] },
- RouterPreloader,
- NoPreloading,
- PreloadAllModules,
- { provide: ROUTER_CONFIGURATION, useValue: ɵ0 },
- ];
- function routerNgProbeToken() {
- return new _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgProbeToken"]('Router', Router);
- }
- /**
- * @description
- *
- * Adds directives and providers for in-app navigation among views defined in an application.
- * Use the Angular `Router` service to declaratively specify application states and manage state
- * transitions.
- *
- * You can import this NgModule multiple times, once for each lazy-loaded bundle.
- * However, only one `Router` service can be active.
- * To ensure this, there are two ways to register routes when importing this module:
- *
- * * The `forRoot()` method creates an `NgModule` that contains all the directives, the given
- * routes, and the `Router` service itself.
- * * The `forChild()` method creates an `NgModule` that contains all the directives and the given
- * routes, but does not include the `Router` service.
- *
- * @see [Routing and Navigation guide](guide/router) for an
- * overview of how the `Router` service should be used.
- *
- * @publicApi
- */
- class RouterModule {
- // Note: We are injecting the Router so it gets created eagerly...
- constructor(guard, router) { }
- /**
- * Creates and configures a module with all the router providers and directives.
- * Optionally sets up an application listener to perform an initial navigation.
- *
- * When registering the NgModule at the root, import as follows:
- *
- * ```
- * @NgModule({
- * imports: [RouterModule.forRoot(ROUTES)]
- * })
- * class MyNgModule {}
- * ```
- *
- * @param routes An array of `Route` objects that define the navigation paths for the application.
- * @param config An `ExtraOptions` configuration object that controls how navigation is performed.
- * @return The new `NgModule`.
- *
- */
- static forRoot(routes, config) {
- return {
- ngModule: RouterModule,
- providers: [
- ROUTER_PROVIDERS,
- provideRoutes(routes),
- {
- provide: ROUTER_FORROOT_GUARD,
- useFactory: provideForRootGuard,
- deps: [[Router, new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"](), new _angular_core__WEBPACK_IMPORTED_MODULE_1__["SkipSelf"]()]]
- },
- { provide: ROUTER_CONFIGURATION, useValue: config ? config : {} },
- {
- provide: _angular_common__WEBPACK_IMPORTED_MODULE_0__["LocationStrategy"],
- useFactory: provideLocationStrategy,
- deps: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["PlatformLocation"], [new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["APP_BASE_HREF"]), new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]()], ROUTER_CONFIGURATION]
- },
- {
- provide: RouterScroller,
- useFactory: createRouterScroller,
- deps: [Router, _angular_common__WEBPACK_IMPORTED_MODULE_0__["ViewportScroller"], ROUTER_CONFIGURATION]
- },
- {
- provide: PreloadingStrategy,
- useExisting: config && config.preloadingStrategy ? config.preloadingStrategy :
- NoPreloading
- },
- { provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgProbeToken"], multi: true, useFactory: routerNgProbeToken },
- provideRouterInitializer(),
- ],
- };
- }
- /**
- * Creates a module with all the router directives and a provider registering routes,
- * without creating a new Router service.
- * When registering for submodules and lazy-loaded submodules, create the NgModule as follows:
- *
- * ```
- * @NgModule({
- * imports: [RouterModule.forChild(ROUTES)]
- * })
- * class MyNgModule {}
- * ```
- *
- * @param routes An array of `Route` objects that define the navigation paths for the submodule.
- * @return The new NgModule.
- *
- */
- static forChild(routes) {
- return { ngModule: RouterModule, providers: [provideRoutes(routes)] };
- }
- }
- RouterModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({ type: RouterModule });
- RouterModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({ factory: function RouterModule_Factory(t) { return new (t || RouterModule)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](ROUTER_FORROOT_GUARD, 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](Router, 8)); } });
- RouterModule.ctorParameters = () => [
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"], args: [ROUTER_FORROOT_GUARD,] }] },
- { type: Router, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"] }] }
- ];
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](RouterModule, { declarations: [RouterOutlet, RouterLink, RouterLinkWithHref, RouterLinkActive, ɵEmptyOutletComponent], exports: [RouterOutlet, RouterLink, RouterLinkWithHref, RouterLinkActive, ɵEmptyOutletComponent] }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](RouterModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
- args: [{
- declarations: ROUTER_DIRECTIVES,
- exports: ROUTER_DIRECTIVES,
- entryComponents: [ɵEmptyOutletComponent]
- }]
- }], function () { return [{ type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
- args: [ROUTER_FORROOT_GUARD]
- }] }, { type: Router, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
- }] }]; }, null); })();
- function createRouterScroller(router, viewportScroller, config) {
- if (config.scrollOffset) {
- viewportScroller.setOffset(config.scrollOffset);
- }
- return new RouterScroller(router, viewportScroller, config);
- }
- function provideLocationStrategy(platformLocationStrategy, baseHref, options = {}) {
- return options.useHash ? new _angular_common__WEBPACK_IMPORTED_MODULE_0__["HashLocationStrategy"](platformLocationStrategy, baseHref) :
- new _angular_common__WEBPACK_IMPORTED_MODULE_0__["PathLocationStrategy"](platformLocationStrategy, baseHref);
- }
- function provideForRootGuard(router) {
- if ((typeof ngDevMode === 'undefined' || ngDevMode) && router) {
- throw new Error(`RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead.`);
- }
- return 'guarded';
- }
- /**
- * Registers a [DI provider](guide/glossary#provider) for a set of routes.
- * @param routes The route configuration to provide.
- *
- * @usageNotes
- *
- * ```
- * @NgModule({
- * imports: [RouterModule.forChild(ROUTES)],
- * providers: [provideRoutes(EXTRA_ROUTES)]
- * })
- * class MyNgModule {}
- * ```
- *
- * @publicApi
- */
- function provideRoutes(routes) {
- return [
- { provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ANALYZE_FOR_ENTRY_COMPONENTS"], multi: true, useValue: routes },
- { provide: ROUTES, multi: true, useValue: routes },
- ];
- }
- function setupRouter(urlSerializer, contexts, location, injector, loader, compiler, config, opts = {}, urlHandlingStrategy, routeReuseStrategy) {
- const router = new Router(null, urlSerializer, contexts, location, injector, loader, compiler, flatten(config));
- if (urlHandlingStrategy) {
- router.urlHandlingStrategy = urlHandlingStrategy;
- }
- if (routeReuseStrategy) {
- router.routeReuseStrategy = routeReuseStrategy;
- }
- assignExtraOptionsToRouter(opts, router);
- if (opts.enableTracing) {
- const dom = Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])();
- router.events.subscribe((e) => {
- dom.logGroup(`Router Event: ${e.constructor.name}`);
- dom.log(e.toString());
- dom.log(e);
- dom.logGroupEnd();
- });
- }
- return router;
- }
- function assignExtraOptionsToRouter(opts, router) {
- if (opts.errorHandler) {
- router.errorHandler = opts.errorHandler;
- }
- if (opts.malformedUriErrorHandler) {
- router.malformedUriErrorHandler = opts.malformedUriErrorHandler;
- }
- if (opts.onSameUrlNavigation) {
- router.onSameUrlNavigation = opts.onSameUrlNavigation;
- }
- if (opts.paramsInheritanceStrategy) {
- router.paramsInheritanceStrategy = opts.paramsInheritanceStrategy;
- }
- if (opts.relativeLinkResolution) {
- router.relativeLinkResolution = opts.relativeLinkResolution;
- }
- if (opts.urlUpdateStrategy) {
- router.urlUpdateStrategy = opts.urlUpdateStrategy;
- }
- }
- function rootRoute(router) {
- return router.routerState.root;
- }
- /**
- * Router initialization requires two steps:
- *
- * First, we start the navigation in a `APP_INITIALIZER` to block the bootstrap if
- * a resolver or a guard executes asynchronously.
- *
- * Next, we actually run activation in a `BOOTSTRAP_LISTENER`, using the
- * `afterPreactivation` hook provided by the router.
- * The router navigation starts, reaches the point when preactivation is done, and then
- * pauses. It waits for the hook to be resolved. We then resolve it only in a bootstrap listener.
- */
- class RouterInitializer {
- constructor(injector) {
- this.injector = injector;
- this.initNavigation = false;
- this.resultOfPreactivationDone = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- }
- appInitializer() {
- const p = this.injector.get(_angular_common__WEBPACK_IMPORTED_MODULE_0__["LOCATION_INITIALIZED"], Promise.resolve(null));
- return p.then(() => {
- let resolve = null;
- const res = new Promise(r => resolve = r);
- const router = this.injector.get(Router);
- const opts = this.injector.get(ROUTER_CONFIGURATION);
- if (opts.initialNavigation === 'disabled') {
- router.setUpLocationChangeListener();
- resolve(true);
- }
- else if (
- // TODO: enabled is deprecated as of v11, can be removed in v13
- opts.initialNavigation === 'enabled' || opts.initialNavigation === 'enabledBlocking') {
- router.hooks.afterPreactivation = () => {
- // only the initial navigation should be delayed
- if (!this.initNavigation) {
- this.initNavigation = true;
- resolve(true);
- return this.resultOfPreactivationDone;
- // subsequent navigations should not be delayed
- }
- else {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(null);
- }
- };
- router.initialNavigation();
- }
- else {
- resolve(true);
- }
- return res;
- });
- }
- bootstrapListener(bootstrappedComponentRef) {
- const opts = this.injector.get(ROUTER_CONFIGURATION);
- const preloader = this.injector.get(RouterPreloader);
- const routerScroller = this.injector.get(RouterScroller);
- const router = this.injector.get(Router);
- const ref = this.injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationRef"]);
- if (bootstrappedComponentRef !== ref.components[0]) {
- return;
- }
- // Default case
- if (opts.initialNavigation === 'enabledNonBlocking' || opts.initialNavigation === undefined) {
- router.initialNavigation();
- }
- preloader.setUpPreloading();
- routerScroller.init();
- router.resetRootComponentType(ref.componentTypes[0]);
- this.resultOfPreactivationDone.next(null);
- this.resultOfPreactivationDone.complete();
- }
- }
- RouterInitializer.ɵfac = function RouterInitializer_Factory(t) { return new (t || RouterInitializer)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"])); };
- RouterInitializer.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({ token: RouterInitializer, factory: RouterInitializer.ɵfac });
- RouterInitializer.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](RouterInitializer, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"] }]; }, null); })();
- function getAppInitializer(r) {
- return r.appInitializer.bind(r);
- }
- function getBootstrapListener(r) {
- return r.bootstrapListener.bind(r);
- }
- /**
- * A [DI token](guide/glossary/#di-token) for the router initializer that
- * is called after the app is bootstrapped.
- *
- * @publicApi
- */
- const ROUTER_INITIALIZER = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('Router Initializer');
- function provideRouterInitializer() {
- return [
- RouterInitializer,
- {
- provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_INITIALIZER"],
- multi: true,
- useFactory: getAppInitializer,
- deps: [RouterInitializer]
- },
- { provide: ROUTER_INITIALIZER, useFactory: getBootstrapListener, deps: [RouterInitializer] },
- { provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_BOOTSTRAP_LISTENER"], multi: true, useExisting: ROUTER_INITIALIZER },
- ];
- }
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @publicApi
- */
- const VERSION = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Version"]('11.0.4');
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- // This file only reexports content of the `src` folder. Keep it that way.
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=router.js.map
- /***/ }),
- /***/ "uTdr":
- /*!****************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/onErrorResumeNext.js ***!
- \****************************************************************************/
- /*! exports provided: onErrorResumeNext, onErrorResumeNextStatic */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return onErrorResumeNext; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNextStatic", function() { return onErrorResumeNextStatic; });
- /* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../observable/from */ "Cfvw");
- /* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/isArray */ "DH7j");
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../InnerSubscriber */ "51Dv");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function onErrorResumeNext(...nextSources) {
- if (nextSources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(nextSources[0])) {
- nextSources = nextSources[0];
- }
- return (source) => source.lift(new OnErrorResumeNextOperator(nextSources));
- }
- function onErrorResumeNextStatic(...nextSources) {
- let source = null;
- if (nextSources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(nextSources[0])) {
- nextSources = nextSources[0];
- }
- source = nextSources.shift();
- return Object(_observable_from__WEBPACK_IMPORTED_MODULE_0__["from"])(source, null).lift(new OnErrorResumeNextOperator(nextSources));
- }
- class OnErrorResumeNextOperator {
- constructor(nextSources) {
- this.nextSources = nextSources;
- }
- call(subscriber, source) {
- return source.subscribe(new OnErrorResumeNextSubscriber(subscriber, this.nextSources));
- }
- }
- class OnErrorResumeNextSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"] {
- constructor(destination, nextSources) {
- super(destination);
- this.destination = destination;
- this.nextSources = nextSources;
- }
- notifyError(error, innerSub) {
- this.subscribeToNextSource();
- }
- notifyComplete(innerSub) {
- this.subscribeToNextSource();
- }
- _error(err) {
- this.subscribeToNextSource();
- this.unsubscribe();
- }
- _complete() {
- this.subscribeToNextSource();
- this.unsubscribe();
- }
- subscribeToNextSource() {
- const next = this.nextSources.shift();
- if (!!next) {
- const innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__["InnerSubscriber"](this, undefined, undefined);
- const destination = this.destination;
- destination.add(innerSubscriber);
- const innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(this, next, undefined, undefined, innerSubscriber);
- if (innerSubscription !== innerSubscriber) {
- destination.add(innerSubscription);
- }
- }
- else {
- this.destination.complete();
- }
- }
- }
- //# sourceMappingURL=onErrorResumeNext.js.map
- /***/ }),
- /***/ "un/a":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/retry.js ***!
- \****************************************************************/
- /*! exports provided: retry */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "retry", function() { return retry; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function retry(count = -1) {
- return (source) => source.lift(new RetryOperator(count, source));
- }
- class RetryOperator {
- constructor(count, source) {
- this.count = count;
- this.source = source;
- }
- call(subscriber, source) {
- return source.subscribe(new RetrySubscriber(subscriber, this.count, this.source));
- }
- }
- class RetrySubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, count, source) {
- super(destination);
- this.count = count;
- this.source = source;
- }
- error(err) {
- if (!this.isStopped) {
- const { source, count } = this;
- if (count === 0) {
- return super.error(err);
- }
- else if (count > -1) {
- this.count = count - 1;
- }
- source.subscribe(this._unsubscribeAndRecycle());
- }
- }
- }
- //# sourceMappingURL=retry.js.map
- /***/ }),
- /***/ "vkgz":
- /*!**************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/tap.js ***!
- \**************************************************************/
- /*! exports provided: tap */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tap", function() { return tap; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- /* harmony import */ var _util_noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/noop */ "KqfI");
- /* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/isFunction */ "n6bG");
- function tap(nextOrObserver, error, complete) {
- return function tapOperatorFunction(source) {
- return source.lift(new DoOperator(nextOrObserver, error, complete));
- };
- }
- class DoOperator {
- constructor(nextOrObserver, error, complete) {
- this.nextOrObserver = nextOrObserver;
- this.error = error;
- this.complete = complete;
- }
- call(subscriber, source) {
- return source.subscribe(new TapSubscriber(subscriber, this.nextOrObserver, this.error, this.complete));
- }
- }
- class TapSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, observerOrNext, error, complete) {
- super(destination);
- this._tapNext = _util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"];
- this._tapError = _util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"];
- this._tapComplete = _util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"];
- this._tapError = error || _util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"];
- this._tapComplete = complete || _util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"];
- if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(observerOrNext)) {
- this._context = this;
- this._tapNext = observerOrNext;
- }
- else if (observerOrNext) {
- this._context = observerOrNext;
- this._tapNext = observerOrNext.next || _util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"];
- this._tapError = observerOrNext.error || _util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"];
- this._tapComplete = observerOrNext.complete || _util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"];
- }
- }
- _next(value) {
- try {
- this._tapNext.call(this._context, value);
- }
- catch (err) {
- this.destination.error(err);
- return;
- }
- this.destination.next(value);
- }
- _error(err) {
- try {
- this._tapError.call(this._context, err);
- }
- catch (err) {
- this.destination.error(err);
- return;
- }
- this.destination.error(err);
- }
- _complete() {
- try {
- this._tapComplete.call(this._context);
- }
- catch (err) {
- this.destination.error(err);
- return;
- }
- return this.destination.complete();
- }
- }
- //# sourceMappingURL=tap.js.map
- /***/ }),
- /***/ "vqkR":
- /*!********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/skipUntil.js ***!
- \********************************************************************/
- /*! exports provided: skipUntil */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skipUntil", function() { return skipUntil; });
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../InnerSubscriber */ "51Dv");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function skipUntil(notifier) {
- return (source) => source.lift(new SkipUntilOperator(notifier));
- }
- class SkipUntilOperator {
- constructor(notifier) {
- this.notifier = notifier;
- }
- call(destination, source) {
- return source.subscribe(new SkipUntilSubscriber(destination, this.notifier));
- }
- }
- class SkipUntilSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__["OuterSubscriber"] {
- constructor(destination, notifier) {
- super(destination);
- this.hasValue = false;
- const innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_1__["InnerSubscriber"](this, undefined, undefined);
- this.add(innerSubscriber);
- this.innerSubscription = innerSubscriber;
- const innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, notifier, undefined, undefined, innerSubscriber);
- if (innerSubscription !== innerSubscriber) {
- this.add(innerSubscription);
- this.innerSubscription = innerSubscription;
- }
- }
- _next(value) {
- if (this.hasValue) {
- super._next(value);
- }
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.hasValue = true;
- if (this.innerSubscription) {
- this.innerSubscription.unsubscribe();
- }
- }
- notifyComplete() {
- }
- }
- //# sourceMappingURL=skipUntil.js.map
- /***/ }),
- /***/ "vxfF":
- /*!**********************************************************************!*\
- !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/scrolling.js ***!
- \**********************************************************************/
- /*! exports provided: CdkFixedSizeVirtualScroll, CdkScrollable, CdkVirtualForOf, CdkVirtualScrollViewport, DEFAULT_RESIZE_TIME, DEFAULT_SCROLL_TIME, FixedSizeVirtualScrollStrategy, ScrollDispatcher, ScrollingModule, VIRTUAL_SCROLL_STRATEGY, ViewportRuler, _fixedSizeVirtualScrollStrategyFactory */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CdkFixedSizeVirtualScroll", function() { return CdkFixedSizeVirtualScroll; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CdkScrollable", function() { return CdkScrollable; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CdkVirtualForOf", function() { return CdkVirtualForOf; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CdkVirtualScrollViewport", function() { return CdkVirtualScrollViewport; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEFAULT_RESIZE_TIME", function() { return DEFAULT_RESIZE_TIME; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEFAULT_SCROLL_TIME", function() { return DEFAULT_SCROLL_TIME; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FixedSizeVirtualScrollStrategy", function() { return FixedSizeVirtualScrollStrategy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ScrollDispatcher", function() { return ScrollDispatcher; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ScrollingModule", function() { return ScrollingModule; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VIRTUAL_SCROLL_STRATEGY", function() { return VIRTUAL_SCROLL_STRATEGY; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ViewportRuler", function() { return ViewportRuler; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_fixedSizeVirtualScrollStrategyFactory", function() { return _fixedSizeVirtualScrollStrategyFactory; });
- /* harmony import */ var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/cdk/coercion */ "8LU1");
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "fXoL");
- /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ "qCKp");
- /* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ "kU1M");
- /* harmony import */ var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/cdk/platform */ "nLfN");
- /* harmony import */ var _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/cdk/bidi */ "cH1L");
- /* harmony import */ var _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/cdk/collections */ "0EQZ");
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/scrolling/virtual-scroll-strategy.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * The injection token used to specify the virtual scrolling strategy.
- * @type {?}
- */
- const _c0 = ["contentWrapper"];
- const _c1 = ["*"];
- const VIRTUAL_SCROLL_STRATEGY = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('VIRTUAL_SCROLL_STRATEGY');
- /**
- * A strategy that dictates which items should be rendered in the viewport.
- * @record
- */
- function VirtualScrollStrategy() { }
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/scrolling/fixed-size-virtual-scroll.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * Virtual scrolling strategy for lists with items of known fixed size.
- */
- class FixedSizeVirtualScrollStrategy {
- /**
- * @param {?} itemSize The size of the items in the virtually scrolling list.
- * @param {?} minBufferPx The minimum amount of buffer (in pixels) before needing to render more
- * @param {?} maxBufferPx The amount of buffer (in pixels) to render when rendering more.
- */
- constructor(itemSize, minBufferPx, maxBufferPx) {
- this._scrolledIndexChange = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- /**
- * \@docs-private Implemented as part of VirtualScrollStrategy.
- */
- this.scrolledIndexChange = this._scrolledIndexChange.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["distinctUntilChanged"])());
- /**
- * The attached viewport.
- */
- this._viewport = null;
- this._itemSize = itemSize;
- this._minBufferPx = minBufferPx;
- this._maxBufferPx = maxBufferPx;
- }
- /**
- * Attaches this scroll strategy to a viewport.
- * @param {?} viewport The viewport to attach this strategy to.
- * @return {?}
- */
- attach(viewport) {
- this._viewport = viewport;
- this._updateTotalContentSize();
- this._updateRenderedRange();
- }
- /**
- * Detaches this scroll strategy from the currently attached viewport.
- * @return {?}
- */
- detach() {
- this._scrolledIndexChange.complete();
- this._viewport = null;
- }
- /**
- * Update the item size and buffer size.
- * @param {?} itemSize The size of the items in the virtually scrolling list.
- * @param {?} minBufferPx The minimum amount of buffer (in pixels) before needing to render more
- * @param {?} maxBufferPx The amount of buffer (in pixels) to render when rendering more.
- * @return {?}
- */
- updateItemAndBufferSize(itemSize, minBufferPx, maxBufferPx) {
- if (maxBufferPx < minBufferPx) {
- throw Error('CDK virtual scroll: maxBufferPx must be greater than or equal to minBufferPx');
- }
- this._itemSize = itemSize;
- this._minBufferPx = minBufferPx;
- this._maxBufferPx = maxBufferPx;
- this._updateTotalContentSize();
- this._updateRenderedRange();
- }
- /**
- * \@docs-private Implemented as part of VirtualScrollStrategy.
- * @return {?}
- */
- onContentScrolled() {
- this._updateRenderedRange();
- }
- /**
- * \@docs-private Implemented as part of VirtualScrollStrategy.
- * @return {?}
- */
- onDataLengthChanged() {
- this._updateTotalContentSize();
- this._updateRenderedRange();
- }
- /**
- * \@docs-private Implemented as part of VirtualScrollStrategy.
- * @return {?}
- */
- onContentRendered() { }
- /**
- * \@docs-private Implemented as part of VirtualScrollStrategy.
- * @return {?}
- */
- onRenderedOffsetChanged() { }
- /**
- * Scroll to the offset for the given index.
- * @param {?} index The index of the element to scroll to.
- * @param {?} behavior The ScrollBehavior to use when scrolling.
- * @return {?}
- */
- scrollToIndex(index, behavior) {
- if (this._viewport) {
- this._viewport.scrollToOffset(index * this._itemSize, behavior);
- }
- }
- /**
- * Update the viewport's total content size.
- * @private
- * @return {?}
- */
- _updateTotalContentSize() {
- if (!this._viewport) {
- return;
- }
- this._viewport.setTotalContentSize(this._viewport.getDataLength() * this._itemSize);
- }
- /**
- * Update the viewport's rendered range.
- * @private
- * @return {?}
- */
- _updateRenderedRange() {
- if (!this._viewport) {
- return;
- }
- /** @type {?} */
- const scrollOffset = this._viewport.measureScrollOffset();
- /** @type {?} */
- const firstVisibleIndex = scrollOffset / this._itemSize;
- /** @type {?} */
- const renderedRange = this._viewport.getRenderedRange();
- /** @type {?} */
- const newRange = { start: renderedRange.start, end: renderedRange.end };
- /** @type {?} */
- const viewportSize = this._viewport.getViewportSize();
- /** @type {?} */
- const dataLength = this._viewport.getDataLength();
- /** @type {?} */
- const startBuffer = scrollOffset - newRange.start * this._itemSize;
- if (startBuffer < this._minBufferPx && newRange.start != 0) {
- /** @type {?} */
- const expandStart = Math.ceil((this._maxBufferPx - startBuffer) / this._itemSize);
- newRange.start = Math.max(0, newRange.start - expandStart);
- newRange.end = Math.min(dataLength, Math.ceil(firstVisibleIndex + (viewportSize + this._minBufferPx) / this._itemSize));
- }
- else {
- /** @type {?} */
- const endBuffer = newRange.end * this._itemSize - (scrollOffset + viewportSize);
- if (endBuffer < this._minBufferPx && newRange.end != dataLength) {
- /** @type {?} */
- const expandEnd = Math.ceil((this._maxBufferPx - endBuffer) / this._itemSize);
- if (expandEnd > 0) {
- newRange.end = Math.min(dataLength, newRange.end + expandEnd);
- newRange.start = Math.max(0, Math.floor(firstVisibleIndex - this._minBufferPx / this._itemSize));
- }
- }
- }
- this._viewport.setRenderedRange(newRange);
- this._viewport.setRenderedContentOffset(this._itemSize * newRange.start);
- this._scrolledIndexChange.next(Math.floor(firstVisibleIndex));
- }
- }
- if (false) {}
- /**
- * Provider factory for `FixedSizeVirtualScrollStrategy` that simply extracts the already created
- * `FixedSizeVirtualScrollStrategy` from the given directive.
- * @param {?} fixedSizeDir The instance of `CdkFixedSizeVirtualScroll` to extract the
- * `FixedSizeVirtualScrollStrategy` from.
- * @return {?}
- */
- function _fixedSizeVirtualScrollStrategyFactory(fixedSizeDir) {
- return fixedSizeDir._scrollStrategy;
- }
- /**
- * A virtual scroll strategy that supports fixed-size items.
- */
- class CdkFixedSizeVirtualScroll {
- constructor() {
- this._itemSize = 20;
- this._minBufferPx = 100;
- this._maxBufferPx = 200;
- /**
- * The scroll strategy used by this directive.
- */
- this._scrollStrategy = new FixedSizeVirtualScrollStrategy(this.itemSize, this.minBufferPx, this.maxBufferPx);
- }
- /**
- * The size of the items in the list (in pixels).
- * @return {?}
- */
- get itemSize() { return this._itemSize; }
- /**
- * @param {?} value
- * @return {?}
- */
- set itemSize(value) { this._itemSize = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__["coerceNumberProperty"])(value); }
- /**
- * The minimum amount of buffer rendered beyond the viewport (in pixels).
- * If the amount of buffer dips below this number, more items will be rendered. Defaults to 100px.
- * @return {?}
- */
- get minBufferPx() { return this._minBufferPx; }
- /**
- * @param {?} value
- * @return {?}
- */
- set minBufferPx(value) { this._minBufferPx = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__["coerceNumberProperty"])(value); }
- /**
- * The number of pixels worth of buffer to render for when rendering new items. Defaults to 200px.
- * @return {?}
- */
- get maxBufferPx() { return this._maxBufferPx; }
- /**
- * @param {?} value
- * @return {?}
- */
- set maxBufferPx(value) { this._maxBufferPx = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__["coerceNumberProperty"])(value); }
- /**
- * @return {?}
- */
- ngOnChanges() {
- this._scrollStrategy.updateItemAndBufferSize(this.itemSize, this.minBufferPx, this.maxBufferPx);
- }
- }
- CdkFixedSizeVirtualScroll.ɵfac = function CdkFixedSizeVirtualScroll_Factory(t) { return new (t || CdkFixedSizeVirtualScroll)(); };
- CdkFixedSizeVirtualScroll.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ type: CdkFixedSizeVirtualScroll, selectors: [["cdk-virtual-scroll-viewport", "itemSize", ""]], inputs: { itemSize: "itemSize", minBufferPx: "minBufferPx", maxBufferPx: "maxBufferPx" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵProvidersFeature"]([{
- provide: VIRTUAL_SCROLL_STRATEGY,
- useFactory: _fixedSizeVirtualScrollStrategyFactory,
- deps: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["forwardRef"])(( /**
- * @return {?}
- */() => CdkFixedSizeVirtualScroll))]
- }]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]] });
- CdkFixedSizeVirtualScroll.propDecorators = {
- itemSize: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- minBufferPx: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- maxBufferPx: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkFixedSizeVirtualScroll, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
- args: [{
- selector: 'cdk-virtual-scroll-viewport[itemSize]',
- providers: [{
- provide: VIRTUAL_SCROLL_STRATEGY,
- useFactory: _fixedSizeVirtualScrollStrategyFactory,
- deps: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["forwardRef"])(( /**
- * @return {?}
- */() => CdkFixedSizeVirtualScroll))]
- }]
- }]
- }], function () { return []; }, { itemSize: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], minBufferPx: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], maxBufferPx: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }] }); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/scrolling/scroll-dispatcher.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * Time in ms to throttle the scrolling events by default.
- * @type {?}
- */
- const DEFAULT_SCROLL_TIME = 20;
- /**
- * Service contained all registered Scrollable references and emits an event when any one of the
- * Scrollable references emit a scrolled event.
- */
- class ScrollDispatcher {
- /**
- * @param {?} _ngZone
- * @param {?} _platform
- */
- constructor(_ngZone, _platform) {
- this._ngZone = _ngZone;
- this._platform = _platform;
- /**
- * Subject for notifying that a registered scrollable reference element has been scrolled.
- */
- this._scrolled = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- /**
- * Keeps track of the global `scroll` and `resize` subscriptions.
- */
- this._globalSubscription = null;
- /**
- * Keeps track of the amount of subscriptions to `scrolled`. Used for cleaning up afterwards.
- */
- this._scrolledCount = 0;
- /**
- * Map of all the scrollable references that are registered with the service and their
- * scroll event subscriptions.
- */
- this.scrollContainers = new Map();
- }
- /**
- * Registers a scrollable instance with the service and listens for its scrolled events. When the
- * scrollable is scrolled, the service emits the event to its scrolled observable.
- * @param {?} scrollable Scrollable instance to be registered.
- * @return {?}
- */
- register(scrollable) {
- if (!this.scrollContainers.has(scrollable)) {
- this.scrollContainers.set(scrollable, scrollable.elementScrolled()
- .subscribe((/**
- * @return {?}
- */
- () => this._scrolled.next(scrollable))));
- }
- }
- /**
- * Deregisters a Scrollable reference and unsubscribes from its scroll event observable.
- * @param {?} scrollable Scrollable instance to be deregistered.
- * @return {?}
- */
- deregister(scrollable) {
- /** @type {?} */
- const scrollableReference = this.scrollContainers.get(scrollable);
- if (scrollableReference) {
- scrollableReference.unsubscribe();
- this.scrollContainers.delete(scrollable);
- }
- }
- /**
- * Returns an observable that emits an event whenever any of the registered Scrollable
- * references (or window, document, or body) fire a scrolled event. Can provide a time in ms
- * to override the default "throttle" time.
- *
- * **Note:** in order to avoid hitting change detection for every scroll event,
- * all of the events emitted from this stream will be run outside the Angular zone.
- * If you need to update any data bindings as a result of a scroll event, you have
- * to run the callback using `NgZone.run`.
- * @param {?=} auditTimeInMs
- * @return {?}
- */
- scrolled(auditTimeInMs = DEFAULT_SCROLL_TIME) {
- if (!this._platform.isBrowser) {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])();
- }
- return new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"]((/**
- * @param {?} observer
- * @return {?}
- */
- (observer) => {
- if (!this._globalSubscription) {
- this._addGlobalListener();
- }
- // In the case of a 0ms delay, use an observable without auditTime
- // since it does add a perceptible delay in processing overhead.
- /** @type {?} */
- const subscription = auditTimeInMs > 0 ?
- this._scrolled.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["auditTime"])(auditTimeInMs)).subscribe(observer) :
- this._scrolled.subscribe(observer);
- this._scrolledCount++;
- return (/**
- * @return {?}
- */
- () => {
- subscription.unsubscribe();
- this._scrolledCount--;
- if (!this._scrolledCount) {
- this._removeGlobalListener();
- }
- });
- }));
- }
- /**
- * @return {?}
- */
- ngOnDestroy() {
- this._removeGlobalListener();
- this.scrollContainers.forEach((/**
- * @param {?} _
- * @param {?} container
- * @return {?}
- */
- (_, container) => this.deregister(container)));
- this._scrolled.complete();
- }
- /**
- * Returns an observable that emits whenever any of the
- * scrollable ancestors of an element are scrolled.
- * @param {?} elementRef Element whose ancestors to listen for.
- * @param {?=} auditTimeInMs Time to throttle the scroll events.
- * @return {?}
- */
- ancestorScrolled(elementRef, auditTimeInMs) {
- /** @type {?} */
- const ancestors = this.getAncestorScrollContainers(elementRef);
- return this.scrolled(auditTimeInMs).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])((/**
- * @param {?} target
- * @return {?}
- */
- target => {
- return !target || ancestors.indexOf(target) > -1;
- })));
- }
- /**
- * Returns all registered Scrollables that contain the provided element.
- * @param {?} elementRef
- * @return {?}
- */
- getAncestorScrollContainers(elementRef) {
- /** @type {?} */
- const scrollingContainers = [];
- this.scrollContainers.forEach((/**
- * @param {?} _subscription
- * @param {?} scrollable
- * @return {?}
- */
- (_subscription, scrollable) => {
- if (this._scrollableContainsElement(scrollable, elementRef)) {
- scrollingContainers.push(scrollable);
- }
- }));
- return scrollingContainers;
- }
- /**
- * Returns true if the element is contained within the provided Scrollable.
- * @private
- * @param {?} scrollable
- * @param {?} elementRef
- * @return {?}
- */
- _scrollableContainsElement(scrollable, elementRef) {
- /** @type {?} */
- let element = elementRef.nativeElement;
- /** @type {?} */
- let scrollableElement = scrollable.getElementRef().nativeElement;
- // Traverse through the element parents until we reach null, checking if any of the elements
- // are the scrollable's element.
- do {
- if (element == scrollableElement) {
- return true;
- }
- } while (element = (/** @type {?} */ (element)).parentElement);
- return false;
- }
- /**
- * Sets up the global scroll listeners.
- * @private
- * @return {?}
- */
- _addGlobalListener() {
- this._globalSubscription = this._ngZone.runOutsideAngular((/**
- * @return {?}
- */
- () => {
- return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(window.document, 'scroll').subscribe((/**
- * @return {?}
- */
- () => this._scrolled.next()));
- }));
- }
- /**
- * Cleans up the global scroll listener.
- * @private
- * @return {?}
- */
- _removeGlobalListener() {
- if (this._globalSubscription) {
- this._globalSubscription.unsubscribe();
- this._globalSubscription = null;
- }
- }
- }
- ScrollDispatcher.ɵfac = function ScrollDispatcher_Factory(t) { return new (t || ScrollDispatcher)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"])); };
- /** @nocollapse */
- ScrollDispatcher.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"] },
- { type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"] }
- ];
- /** @nocollapse */ ScrollDispatcher.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({ factory: function ScrollDispatcher_Factory() { return new ScrollDispatcher(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"])); }, token: ScrollDispatcher, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ScrollDispatcher, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"] }, { type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"] }]; }, null); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/scrolling/scrollable.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * Sends an event when the directive's element is scrolled. Registers itself with the
- * ScrollDispatcher service to include itself as part of its collection of scrolling events that it
- * can be listened to through the service.
- */
- class CdkScrollable {
- /**
- * @param {?} elementRef
- * @param {?} scrollDispatcher
- * @param {?} ngZone
- * @param {?=} dir
- */
- constructor(elementRef, scrollDispatcher, ngZone, dir) {
- this.elementRef = elementRef;
- this.scrollDispatcher = scrollDispatcher;
- this.ngZone = ngZone;
- this.dir = dir;
- this._destroyed = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- this._elementScrolled = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"]((/**
- * @param {?} observer
- * @return {?}
- */
- (observer) => this.ngZone.runOutsideAngular((/**
- * @return {?}
- */
- () => Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(this.elementRef.nativeElement, 'scroll').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._destroyed))
- .subscribe(observer)))));
- }
- /**
- * @return {?}
- */
- ngOnInit() {
- this.scrollDispatcher.register(this);
- }
- /**
- * @return {?}
- */
- ngOnDestroy() {
- this.scrollDispatcher.deregister(this);
- this._destroyed.next();
- this._destroyed.complete();
- }
- /**
- * Returns observable that emits when a scroll event is fired on the host element.
- * @return {?}
- */
- elementScrolled() {
- return this._elementScrolled;
- }
- /**
- * Gets the ElementRef for the viewport.
- * @return {?}
- */
- getElementRef() {
- return this.elementRef;
- }
- /**
- * Scrolls to the specified offsets. This is a normalized version of the browser's native scrollTo
- * method, since browsers are not consistent about what scrollLeft means in RTL. For this method
- * left and right always refer to the left and right side of the scrolling container irrespective
- * of the layout direction. start and end refer to left and right in an LTR context and vice-versa
- * in an RTL context.
- * @param {?} options specified the offsets to scroll to.
- * @return {?}
- */
- scrollTo(options) {
- /** @type {?} */
- const el = this.elementRef.nativeElement;
- /** @type {?} */
- const isRtl = this.dir && this.dir.value == 'rtl';
- // Rewrite start & end offsets as right or left offsets.
- if (options.left == null) {
- options.left = isRtl ? options.end : options.start;
- }
- if (options.right == null) {
- options.right = isRtl ? options.start : options.end;
- }
- // Rewrite the bottom offset as a top offset.
- if (options.bottom != null) {
- ((/** @type {?} */ (options))).top =
- el.scrollHeight - el.clientHeight - options.bottom;
- }
- // Rewrite the right offset as a left offset.
- if (isRtl && Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["getRtlScrollAxisType"])() != 0 /* NORMAL */) {
- if (options.left != null) {
- ((/** @type {?} */ (options))).right =
- el.scrollWidth - el.clientWidth - options.left;
- }
- if (Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["getRtlScrollAxisType"])() == 2 /* INVERTED */) {
- options.left = options.right;
- }
- else if (Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["getRtlScrollAxisType"])() == 1 /* NEGATED */) {
- options.left = options.right ? -options.right : options.right;
- }
- }
- else {
- if (options.right != null) {
- ((/** @type {?} */ (options))).left =
- el.scrollWidth - el.clientWidth - options.right;
- }
- }
- this._applyScrollToOptions(options);
- }
- /**
- * @private
- * @param {?} options
- * @return {?}
- */
- _applyScrollToOptions(options) {
- /** @type {?} */
- const el = this.elementRef.nativeElement;
- if (Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["supportsScrollBehavior"])()) {
- el.scrollTo(options);
- }
- else {
- if (options.top != null) {
- el.scrollTop = options.top;
- }
- if (options.left != null) {
- el.scrollLeft = options.left;
- }
- }
- }
- /**
- * Measures the scroll offset relative to the specified edge of the viewport. This method can be
- * used instead of directly checking scrollLeft or scrollTop, since browsers are not consistent
- * about what scrollLeft means in RTL. The values returned by this method are normalized such that
- * left and right always refer to the left and right side of the scrolling container irrespective
- * of the layout direction. start and end refer to left and right in an LTR context and vice-versa
- * in an RTL context.
- * @param {?} from The edge to measure from.
- * @return {?}
- */
- measureScrollOffset(from) {
- /** @type {?} */
- const LEFT = 'left';
- /** @type {?} */
- const RIGHT = 'right';
- /** @type {?} */
- const el = this.elementRef.nativeElement;
- if (from == 'top') {
- return el.scrollTop;
- }
- if (from == 'bottom') {
- return el.scrollHeight - el.clientHeight - el.scrollTop;
- }
- // Rewrite start & end as left or right offsets.
- /** @type {?} */
- const isRtl = this.dir && this.dir.value == 'rtl';
- if (from == 'start') {
- from = isRtl ? RIGHT : LEFT;
- }
- else if (from == 'end') {
- from = isRtl ? LEFT : RIGHT;
- }
- if (isRtl && Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["getRtlScrollAxisType"])() == 2 /* INVERTED */) {
- // For INVERTED, scrollLeft is (scrollWidth - clientWidth) when scrolled all the way left and
- // 0 when scrolled all the way right.
- if (from == LEFT) {
- return el.scrollWidth - el.clientWidth - el.scrollLeft;
- }
- else {
- return el.scrollLeft;
- }
- }
- else if (isRtl && Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["getRtlScrollAxisType"])() == 1 /* NEGATED */) {
- // For NEGATED, scrollLeft is -(scrollWidth - clientWidth) when scrolled all the way left and
- // 0 when scrolled all the way right.
- if (from == LEFT) {
- return el.scrollLeft + el.scrollWidth - el.clientWidth;
- }
- else {
- return -el.scrollLeft;
- }
- }
- else {
- // For NORMAL, as well as non-RTL contexts, scrollLeft is 0 when scrolled all the way left and
- // (scrollWidth - clientWidth) when scrolled all the way right.
- if (from == LEFT) {
- return el.scrollLeft;
- }
- else {
- return el.scrollWidth - el.clientWidth - el.scrollLeft;
- }
- }
- }
- }
- CdkScrollable.ɵfac = function CdkScrollable_Factory(t) { return new (t || CdkScrollable)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ScrollDispatcher), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_5__["Directionality"], 8)); };
- CdkScrollable.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ type: CdkScrollable, selectors: [["", "cdk-scrollable", ""], ["", "cdkScrollable", ""]] });
- /** @nocollapse */
- CdkScrollable.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"] },
- { type: ScrollDispatcher },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"] },
- { type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_5__["Directionality"], decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"] }] }
- ];
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkScrollable, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
- args: [{
- selector: '[cdk-scrollable], [cdkScrollable]'
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"] }, { type: ScrollDispatcher }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"] }, { type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_5__["Directionality"], decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
- }] }]; }, null); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/scrolling/viewport-ruler.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * Time in ms to throttle the resize events by default.
- * @type {?}
- */
- const DEFAULT_RESIZE_TIME = 20;
- /**
- * Object that holds the scroll position of the viewport in each direction.
- * @record
- */
- function ViewportScrollPosition() { }
- if (false) {}
- /**
- * Simple utility for getting the bounds of the browser viewport.
- * \@docs-private
- */
- class ViewportRuler {
- /**
- * @param {?} _platform
- * @param {?} ngZone
- */
- constructor(_platform, ngZone) {
- this._platform = _platform;
- ngZone.runOutsideAngular((/**
- * @return {?}
- */
- () => {
- this._change = _platform.isBrowser ?
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["merge"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(window, 'resize'), Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(window, 'orientationchange')) :
- Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])();
- // Note that we need to do the subscription inside `runOutsideAngular`
- // since subscribing is what causes the event listener to be added.
- this._invalidateCache = this.change().subscribe((/**
- * @return {?}
- */
- () => this._updateViewportSize()));
- }));
- }
- /**
- * @return {?}
- */
- ngOnDestroy() {
- this._invalidateCache.unsubscribe();
- }
- /**
- * Returns the viewport's width and height.
- * @return {?}
- */
- getViewportSize() {
- if (!this._viewportSize) {
- this._updateViewportSize();
- }
- /** @type {?} */
- const output = { width: this._viewportSize.width, height: this._viewportSize.height };
- // If we're not on a browser, don't cache the size since it'll be mocked out anyway.
- if (!this._platform.isBrowser) {
- this._viewportSize = (/** @type {?} */ (null));
- }
- return output;
- }
- /**
- * Gets a ClientRect for the viewport's bounds.
- * @return {?}
- */
- getViewportRect() {
- // Use the document element's bounding rect rather than the window scroll properties
- // (e.g. pageYOffset, scrollY) due to in issue in Chrome and IE where window scroll
- // properties and client coordinates (boundingClientRect, clientX/Y, etc.) are in different
- // conceptual viewports. Under most circumstances these viewports are equivalent, but they
- // can disagree when the page is pinch-zoomed (on devices that support touch).
- // See https://bugs.chromium.org/p/chromium/issues/detail?id=489206#c4
- // We use the documentElement instead of the body because, by default (without a css reset)
- // browsers typically give the document body an 8px margin, which is not included in
- // getBoundingClientRect().
- /** @type {?} */
- const scrollPosition = this.getViewportScrollPosition();
- const { width, height } = this.getViewportSize();
- return {
- top: scrollPosition.top,
- left: scrollPosition.left,
- bottom: scrollPosition.top + height,
- right: scrollPosition.left + width,
- height,
- width,
- };
- }
- /**
- * Gets the (top, left) scroll position of the viewport.
- * @return {?}
- */
- getViewportScrollPosition() {
- // While we can get a reference to the fake document
- // during SSR, it doesn't have getBoundingClientRect.
- if (!this._platform.isBrowser) {
- return { top: 0, left: 0 };
- }
- // The top-left-corner of the viewport is determined by the scroll position of the document
- // body, normally just (scrollLeft, scrollTop). However, Chrome and Firefox disagree about
- // whether `document.body` or `document.documentElement` is the scrolled element, so reading
- // `scrollTop` and `scrollLeft` is inconsistent. However, using the bounding rect of
- // `document.documentElement` works consistently, where the `top` and `left` values will
- // equal negative the scroll position.
- /** @type {?} */
- const documentElement = (/** @type {?} */ (document.documentElement));
- /** @type {?} */
- const documentRect = documentElement.getBoundingClientRect();
- /** @type {?} */
- const top = -documentRect.top || document.body.scrollTop || window.scrollY ||
- documentElement.scrollTop || 0;
- /** @type {?} */
- const left = -documentRect.left || document.body.scrollLeft || window.scrollX ||
- documentElement.scrollLeft || 0;
- return { top, left };
- }
- /**
- * Returns a stream that emits whenever the size of the viewport changes.
- * @param {?=} throttleTime Time in milliseconds to throttle the stream.
- * @return {?}
- */
- change(throttleTime = DEFAULT_RESIZE_TIME) {
- return throttleTime > 0 ? this._change.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["auditTime"])(throttleTime)) : this._change;
- }
- /**
- * Updates the cached viewport size.
- * @private
- * @return {?}
- */
- _updateViewportSize() {
- this._viewportSize = this._platform.isBrowser ?
- { width: window.innerWidth, height: window.innerHeight } :
- { width: 0, height: 0 };
- }
- }
- ViewportRuler.ɵfac = function ViewportRuler_Factory(t) { return new (t || ViewportRuler)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"])); };
- /** @nocollapse */
- ViewportRuler.ctorParameters = () => [
- { type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"] }
- ];
- /** @nocollapse */ ViewportRuler.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({ factory: function ViewportRuler_Factory() { return new ViewportRuler(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"])); }, token: ViewportRuler, providedIn: "root" });
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ViewportRuler, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
- args: [{ providedIn: 'root' }]
- }], function () { return [{ type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"] }]; }, null); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/scrolling/virtual-scroll-viewport.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * Checks if the given ranges are equal.
- * @param {?} r1
- * @param {?} r2
- * @return {?}
- */
- function rangesEqual(r1, r2) {
- return r1.start == r2.start && r1.end == r2.end;
- }
- /**
- * Scheduler to be used for scroll events. Needs to fall back to
- * something that doesn't rely on requestAnimationFrame on environments
- * that don't support it (e.g. server-side rendering).
- * @type {?}
- */
- const SCROLL_SCHEDULER = typeof requestAnimationFrame !== 'undefined' ? rxjs__WEBPACK_IMPORTED_MODULE_2__["animationFrameScheduler"] : rxjs__WEBPACK_IMPORTED_MODULE_2__["asapScheduler"];
- /**
- * A viewport that virtualizes its scrolling with the help of `CdkVirtualForOf`.
- */
- class CdkVirtualScrollViewport extends CdkScrollable {
- /**
- * @param {?} elementRef
- * @param {?} _changeDetectorRef
- * @param {?} ngZone
- * @param {?} _scrollStrategy
- * @param {?} dir
- * @param {?} scrollDispatcher
- * @param {?=} viewportRuler
- */
- constructor(elementRef, _changeDetectorRef, ngZone, _scrollStrategy, dir, scrollDispatcher,
- /**
- * @deprecated `viewportRuler` parameter to become required.
- * @breaking-change 11.0.0
- */
- viewportRuler) {
- super(elementRef, scrollDispatcher, ngZone, dir);
- this.elementRef = elementRef;
- this._changeDetectorRef = _changeDetectorRef;
- this._scrollStrategy = _scrollStrategy;
- /**
- * Emits when the viewport is detached from a CdkVirtualForOf.
- */
- this._detachedSubject = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- /**
- * Emits when the rendered range changes.
- */
- this._renderedRangeSubject = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- this._orientation = 'vertical';
- // Note: we don't use the typical EventEmitter here because we need to subscribe to the scroll
- // strategy lazily (i.e. only if the user is actually listening to the events). We do this because
- // depending on how the strategy calculates the scrolled index, it may come at a cost to
- // performance.
- /**
- * Emits when the index of the first element visible in the viewport changes.
- */
- this.scrolledIndexChange = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"]((/**
- * @param {?} observer
- * @return {?}
- */
- (observer) => this._scrollStrategy.scrolledIndexChange.subscribe((/**
- * @param {?} index
- * @return {?}
- */
- index => Promise.resolve().then((/**
- * @return {?}
- */
- () => this.ngZone.run((/**
- * @return {?}
- */
- () => observer.next(index)))))))));
- /**
- * A stream that emits whenever the rendered range changes.
- */
- this.renderedRangeStream = this._renderedRangeSubject.asObservable();
- /**
- * The total size of all content (in pixels), including content that is not currently rendered.
- */
- this._totalContentSize = 0;
- /**
- * A string representing the `style.width` property value to be used for the spacer element.
- */
- this._totalContentWidth = '';
- /**
- * A string representing the `style.height` property value to be used for the spacer element.
- */
- this._totalContentHeight = '';
- /**
- * The currently rendered range of indices.
- */
- this._renderedRange = { start: 0, end: 0 };
- /**
- * The length of the data bound to this viewport (in number of items).
- */
- this._dataLength = 0;
- /**
- * The size of the viewport (in pixels).
- */
- this._viewportSize = 0;
- /**
- * The last rendered content offset that was set.
- */
- this._renderedContentOffset = 0;
- /**
- * Whether the last rendered content offset was to the end of the content (and therefore needs to
- * be rewritten as an offset to the start of the content).
- */
- this._renderedContentOffsetNeedsRewrite = false;
- /**
- * Whether there is a pending change detection cycle.
- */
- this._isChangeDetectionPending = false;
- /**
- * A list of functions to run after the next change detection cycle.
- */
- this._runAfterChangeDetection = [];
- /**
- * Subscription to changes in the viewport size.
- */
- this._viewportChanges = rxjs__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;
- if (!_scrollStrategy) {
- throw Error('Error: cdk-virtual-scroll-viewport requires the "itemSize" property to be set.');
- }
- // @breaking-change 11.0.0 Remove null check for `viewportRuler`.
- if (viewportRuler) {
- this._viewportChanges = viewportRuler.change().subscribe((/**
- * @return {?}
- */
- () => {
- this.checkViewportSize();
- }));
- }
- }
- /**
- * The direction the viewport scrolls.
- * @return {?}
- */
- get orientation() {
- return this._orientation;
- }
- /**
- * @param {?} orientation
- * @return {?}
- */
- set orientation(orientation) {
- if (this._orientation !== orientation) {
- this._orientation = orientation;
- this._calculateSpacerSize();
- }
- }
- /**
- * @return {?}
- */
- ngOnInit() {
- super.ngOnInit();
- // It's still too early to measure the viewport at this point. Deferring with a promise allows
- // the Viewport to be rendered with the correct size before we measure. We run this outside the
- // zone to avoid causing more change detection cycles. We handle the change detection loop
- // ourselves instead.
- this.ngZone.runOutsideAngular((/**
- * @return {?}
- */
- () => Promise.resolve().then((/**
- * @return {?}
- */
- () => {
- this._measureViewportSize();
- this._scrollStrategy.attach(this);
- this.elementScrolled()
- .pipe(
- // Start off with a fake scroll event so we properly detect our initial position.
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["startWith"])((/** @type {?} */ (null))),
- // Collect multiple events into one until the next animation frame. This way if
- // there are multiple scroll events in the same frame we only need to recheck
- // our layout once.
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["auditTime"])(0, SCROLL_SCHEDULER))
- .subscribe((/**
- * @return {?}
- */
- () => this._scrollStrategy.onContentScrolled()));
- this._markChangeDetectionNeeded();
- }))));
- }
- /**
- * @return {?}
- */
- ngOnDestroy() {
- this.detach();
- this._scrollStrategy.detach();
- // Complete all subjects
- this._renderedRangeSubject.complete();
- this._detachedSubject.complete();
- this._viewportChanges.unsubscribe();
- super.ngOnDestroy();
- }
- /**
- * Attaches a `CdkVirtualForOf` to this viewport.
- * @param {?} forOf
- * @return {?}
- */
- attach(forOf) {
- if (this._forOf) {
- throw Error('CdkVirtualScrollViewport is already attached.');
- }
- // Subscribe to the data stream of the CdkVirtualForOf to keep track of when the data length
- // changes. Run outside the zone to avoid triggering change detection, since we're managing the
- // change detection loop ourselves.
- this.ngZone.runOutsideAngular((/**
- * @return {?}
- */
- () => {
- this._forOf = forOf;
- this._forOf.dataStream.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._detachedSubject)).subscribe((/**
- * @param {?} data
- * @return {?}
- */
- data => {
- /** @type {?} */
- const newLength = data.length;
- if (newLength !== this._dataLength) {
- this._dataLength = newLength;
- this._scrollStrategy.onDataLengthChanged();
- }
- this._doChangeDetection();
- }));
- }));
- }
- /**
- * Detaches the current `CdkVirtualForOf`.
- * @return {?}
- */
- detach() {
- this._forOf = null;
- this._detachedSubject.next();
- }
- /**
- * Gets the length of the data bound to this viewport (in number of items).
- * @return {?}
- */
- getDataLength() {
- return this._dataLength;
- }
- /**
- * Gets the size of the viewport (in pixels).
- * @return {?}
- */
- getViewportSize() {
- return this._viewportSize;
- }
- // TODO(mmalerba): This is technically out of sync with what's really rendered until a render
- // cycle happens. I'm being careful to only call it after the render cycle is complete and before
- // setting it to something else, but its error prone and should probably be split into
- // `pendingRange` and `renderedRange`, the latter reflecting whats actually in the DOM.
- /**
- * Get the current rendered range of items.
- * @return {?}
- */
- getRenderedRange() {
- return this._renderedRange;
- }
- /**
- * Sets the total size of all content (in pixels), including content that is not currently
- * rendered.
- * @param {?} size
- * @return {?}
- */
- setTotalContentSize(size) {
- if (this._totalContentSize !== size) {
- this._totalContentSize = size;
- this._calculateSpacerSize();
- this._markChangeDetectionNeeded();
- }
- }
- /**
- * Sets the currently rendered range of indices.
- * @param {?} range
- * @return {?}
- */
- setRenderedRange(range) {
- if (!rangesEqual(this._renderedRange, range)) {
- this._renderedRangeSubject.next(this._renderedRange = range);
- this._markChangeDetectionNeeded((/**
- * @return {?}
- */
- () => this._scrollStrategy.onContentRendered()));
- }
- }
- /**
- * Gets the offset from the start of the viewport to the start of the rendered data (in pixels).
- * @return {?}
- */
- getOffsetToRenderedContentStart() {
- return this._renderedContentOffsetNeedsRewrite ? null : this._renderedContentOffset;
- }
- /**
- * Sets the offset from the start of the viewport to either the start or end of the rendered data
- * (in pixels).
- * @param {?} offset
- * @param {?=} to
- * @return {?}
- */
- setRenderedContentOffset(offset, to = 'to-start') {
- // For a horizontal viewport in a right-to-left language we need to translate along the x-axis
- // in the negative direction.
- /** @type {?} */
- const isRtl = this.dir && this.dir.value == 'rtl';
- /** @type {?} */
- const isHorizontal = this.orientation == 'horizontal';
- /** @type {?} */
- const axis = isHorizontal ? 'X' : 'Y';
- /** @type {?} */
- const axisDirection = isHorizontal && isRtl ? -1 : 1;
- /** @type {?} */
- let transform = `translate${axis}(${Number(axisDirection * offset)}px)`;
- this._renderedContentOffset = offset;
- if (to === 'to-end') {
- transform += ` translate${axis}(-100%)`;
- // The viewport should rewrite this as a `to-start` offset on the next render cycle. Otherwise
- // elements will appear to expand in the wrong direction (e.g. `mat-expansion-panel` would
- // expand upward).
- this._renderedContentOffsetNeedsRewrite = true;
- }
- if (this._renderedContentTransform != transform) {
- // We know this value is safe because we parse `offset` with `Number()` before passing it
- // into the string.
- this._renderedContentTransform = transform;
- this._markChangeDetectionNeeded((/**
- * @return {?}
- */
- () => {
- if (this._renderedContentOffsetNeedsRewrite) {
- this._renderedContentOffset -= this.measureRenderedContentSize();
- this._renderedContentOffsetNeedsRewrite = false;
- this.setRenderedContentOffset(this._renderedContentOffset);
- }
- else {
- this._scrollStrategy.onRenderedOffsetChanged();
- }
- }));
- }
- }
- /**
- * Scrolls to the given offset from the start of the viewport. Please note that this is not always
- * the same as setting `scrollTop` or `scrollLeft`. In a horizontal viewport with right-to-left
- * direction, this would be the equivalent of setting a fictional `scrollRight` property.
- * @param {?} offset The offset to scroll to.
- * @param {?=} behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.
- * @return {?}
- */
- scrollToOffset(offset, behavior = 'auto') {
- /** @type {?} */
- const options = { behavior };
- if (this.orientation === 'horizontal') {
- options.start = offset;
- }
- else {
- options.top = offset;
- }
- this.scrollTo(options);
- }
- /**
- * Scrolls to the offset for the given index.
- * @param {?} index The index of the element to scroll to.
- * @param {?=} behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.
- * @return {?}
- */
- scrollToIndex(index, behavior = 'auto') {
- this._scrollStrategy.scrollToIndex(index, behavior);
- }
- /**
- * Gets the current scroll offset from the start of the viewport (in pixels).
- * @param {?=} from The edge to measure the offset from. Defaults to 'top' in vertical mode and 'start'
- * in horizontal mode.
- * @return {?}
- */
- measureScrollOffset(from) {
- return from ?
- super.measureScrollOffset(from) :
- super.measureScrollOffset(this.orientation === 'horizontal' ? 'start' : 'top');
- }
- /**
- * Measure the combined size of all of the rendered items.
- * @return {?}
- */
- measureRenderedContentSize() {
- /** @type {?} */
- const contentEl = this._contentWrapper.nativeElement;
- return this.orientation === 'horizontal' ? contentEl.offsetWidth : contentEl.offsetHeight;
- }
- /**
- * Measure the total combined size of the given range. Throws if the range includes items that are
- * not rendered.
- * @param {?} range
- * @return {?}
- */
- measureRangeSize(range) {
- if (!this._forOf) {
- return 0;
- }
- return this._forOf.measureRangeSize(range, this.orientation);
- }
- /**
- * Update the viewport dimensions and re-render.
- * @return {?}
- */
- checkViewportSize() {
- // TODO: Cleanup later when add logic for handling content resize
- this._measureViewportSize();
- this._scrollStrategy.onDataLengthChanged();
- }
- /**
- * Measure the viewport size.
- * @private
- * @return {?}
- */
- _measureViewportSize() {
- /** @type {?} */
- const viewportEl = this.elementRef.nativeElement;
- this._viewportSize = this.orientation === 'horizontal' ?
- viewportEl.clientWidth : viewportEl.clientHeight;
- }
- /**
- * Queue up change detection to run.
- * @private
- * @param {?=} runAfter
- * @return {?}
- */
- _markChangeDetectionNeeded(runAfter) {
- if (runAfter) {
- this._runAfterChangeDetection.push(runAfter);
- }
- // Use a Promise to batch together calls to `_doChangeDetection`. This way if we set a bunch of
- // properties sequentially we only have to run `_doChangeDetection` once at the end.
- if (!this._isChangeDetectionPending) {
- this._isChangeDetectionPending = true;
- this.ngZone.runOutsideAngular((/**
- * @return {?}
- */
- () => Promise.resolve().then((/**
- * @return {?}
- */
- () => {
- this._doChangeDetection();
- }))));
- }
- }
- /**
- * Run change detection.
- * @private
- * @return {?}
- */
- _doChangeDetection() {
- this._isChangeDetectionPending = false;
- // Apply the content transform. The transform can't be set via an Angular binding because
- // bypassSecurityTrustStyle is banned in Google. However the value is safe, it's composed of
- // string literals, a variable that can only be 'X' or 'Y', and user input that is run through
- // the `Number` function first to coerce it to a numeric value.
- this._contentWrapper.nativeElement.style.transform = this._renderedContentTransform;
- // Apply changes to Angular bindings. Note: We must call `markForCheck` to run change detection
- // from the root, since the repeated items are content projected in. Calling `detectChanges`
- // instead does not properly check the projected content.
- this.ngZone.run((/**
- * @return {?}
- */
- () => this._changeDetectorRef.markForCheck()));
- /** @type {?} */
- const runAfterChangeDetection = this._runAfterChangeDetection;
- this._runAfterChangeDetection = [];
- for (const fn of runAfterChangeDetection) {
- fn();
- }
- }
- /**
- * Calculates the `style.width` and `style.height` for the spacer element.
- * @private
- * @return {?}
- */
- _calculateSpacerSize() {
- this._totalContentHeight =
- this.orientation === 'horizontal' ? '' : `${this._totalContentSize}px`;
- this._totalContentWidth =
- this.orientation === 'horizontal' ? `${this._totalContentSize}px` : '';
- }
- }
- CdkVirtualScrollViewport.ɵfac = function CdkVirtualScrollViewport_Factory(t) { return new (t || CdkVirtualScrollViewport)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](VIRTUAL_SCROLL_STRATEGY, 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_5__["Directionality"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ScrollDispatcher), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ViewportRuler, 8)); };
- CdkVirtualScrollViewport.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({ type: CdkVirtualScrollViewport, selectors: [["cdk-virtual-scroll-viewport"]], viewQuery: function CdkVirtualScrollViewport_Query(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵstaticViewQuery"](_c0, true);
- } if (rf & 2) {
- let _t;
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx._contentWrapper = _t.first);
- } }, hostAttrs: [1, "cdk-virtual-scroll-viewport"], hostVars: 4, hostBindings: function CdkVirtualScrollViewport_HostBindings(rf, ctx) { if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassProp"]("cdk-virtual-scroll-orientation-horizontal", ctx.orientation === "horizontal")("cdk-virtual-scroll-orientation-vertical", ctx.orientation !== "horizontal");
- } }, inputs: { orientation: "orientation" }, outputs: { scrolledIndexChange: "scrolledIndexChange" }, features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵProvidersFeature"]([{
- provide: CdkScrollable,
- useExisting: CdkVirtualScrollViewport
- }]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]], ngContentSelectors: _c1, decls: 4, vars: 4, consts: [[1, "cdk-virtual-scroll-content-wrapper"], ["contentWrapper", ""], [1, "cdk-virtual-scroll-spacer"]], template: function CdkVirtualScrollViewport_Template(rf, ctx) { if (rf & 1) {
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵprojectionDef"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 0, 1);
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵprojection"](2);
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](3, "div", 2);
- } if (rf & 2) {
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](3);
- _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵstyleProp"]("width", ctx._totalContentWidth)("height", ctx._totalContentHeight);
- } }, styles: ["cdk-virtual-scroll-viewport{display:block;position:relative;overflow:auto;contain:strict;transform:translateZ(0);will-change:scroll-position;-webkit-overflow-scrolling:touch}.cdk-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .cdk-virtual-scroll-content-wrapper{right:0;left:auto}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper{min-height:100%}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{min-width:100%}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.cdk-virtual-scroll-spacer{position:absolute;top:0;left:0;height:1px;width:1px;transform-origin:0 0}[dir=rtl] .cdk-virtual-scroll-spacer{right:0;left:auto;transform-origin:100% 0}\n"], encapsulation: 2, changeDetection: 0 });
- /** @nocollapse */
- CdkVirtualScrollViewport.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"] },
- { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"], args: [VIRTUAL_SCROLL_STRATEGY,] }] },
- { type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_5__["Directionality"], decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"] }] },
- { type: ScrollDispatcher },
- { type: ViewportRuler, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"] }] }
- ];
- CdkVirtualScrollViewport.propDecorators = {
- orientation: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- scrolledIndexChange: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"] }],
- _contentWrapper: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewChild"], args: ['contentWrapper', { static: true },] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkVirtualScrollViewport, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
- args: [{
- selector: 'cdk-virtual-scroll-viewport',
- template: "<!--\n Wrap the rendered content in an element that will be used to offset it based on the scroll\n position.\n-->\n<div #contentWrapper class=\"cdk-virtual-scroll-content-wrapper\">\n <ng-content></ng-content>\n</div>\n<!--\n Spacer used to force the scrolling container to the correct size for the *total* number of items\n so that the scrollbar captures the size of the entire data set.\n-->\n<div class=\"cdk-virtual-scroll-spacer\"\n [style.width]=\"_totalContentWidth\" [style.height]=\"_totalContentHeight\"></div>\n",
- host: {
- 'class': 'cdk-virtual-scroll-viewport',
- '[class.cdk-virtual-scroll-orientation-horizontal]': 'orientation === "horizontal"',
- '[class.cdk-virtual-scroll-orientation-vertical]': 'orientation !== "horizontal"'
- },
- encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewEncapsulation"].None,
- changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectionStrategy"].OnPush,
- providers: [{
- provide: CdkScrollable,
- useExisting: CdkVirtualScrollViewport
- }],
- styles: ["cdk-virtual-scroll-viewport{display:block;position:relative;overflow:auto;contain:strict;transform:translateZ(0);will-change:scroll-position;-webkit-overflow-scrolling:touch}.cdk-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .cdk-virtual-scroll-content-wrapper{right:0;left:auto}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper{min-height:100%}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{min-width:100%}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.cdk-virtual-scroll-spacer{position:absolute;top:0;left:0;height:1px;width:1px;transform-origin:0 0}[dir=rtl] .cdk-virtual-scroll-spacer{right:0;left:auto;transform-origin:100% 0}\n"]
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"] }, { type: undefined, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
- }, {
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
- args: [VIRTUAL_SCROLL_STRATEGY]
- }] }, { type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_5__["Directionality"], decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
- }] }, { type: ScrollDispatcher }, { type: ViewportRuler, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
- }] }]; }, { scrolledIndexChange: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
- }], orientation: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], _contentWrapper: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewChild"],
- args: ['contentWrapper', { static: true }]
- }] }); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/scrolling/virtual-for-of.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * Helper to extract size from a DOM Node.
- * @param {?} orientation
- * @param {?} node
- * @return {?}
- */
- function getSize(orientation, node) {
- /** @type {?} */
- const el = (/** @type {?} */ (node));
- if (!el.getBoundingClientRect) {
- return 0;
- }
- /** @type {?} */
- const rect = el.getBoundingClientRect();
- return orientation == 'horizontal' ? rect.width : rect.height;
- }
- /**
- * A directive similar to `ngForOf` to be used for rendering data inside a virtual scrolling
- * container.
- * @template T
- */
- class CdkVirtualForOf {
- /**
- * @param {?} _viewContainerRef
- * @param {?} _template
- * @param {?} _differs
- * @param {?} _viewport
- * @param {?} ngZone
- */
- constructor(_viewContainerRef, _template, _differs, _viewport, ngZone) {
- this._viewContainerRef = _viewContainerRef;
- this._template = _template;
- this._differs = _differs;
- this._viewport = _viewport;
- /**
- * Emits when the rendered view of the data changes.
- */
- this.viewChange = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- /**
- * Subject that emits when a new DataSource instance is given.
- */
- this._dataSourceChanges = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- /**
- * The size of the cache used to store templates that are not being used for re-use later.
- * Setting the cache size to `0` will disable caching. Defaults to 20 templates.
- */
- this.cdkVirtualForTemplateCacheSize = 20;
- /**
- * Emits whenever the data in the current DataSource changes.
- */
- this.dataStream = this._dataSourceChanges
- .pipe(
- // Start off with null `DataSource`.
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["startWith"])((/** @type {?} */ (null))),
- // Bundle up the previous and current data sources so we can work with both.
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["pairwise"])(),
- // Use `_changeDataSource` to disconnect from the previous data source and connect to the
- // new one, passing back a stream of data changes which we run through `switchMap` to give
- // us a data stream that emits the latest data from whatever the current `DataSource` is.
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])((/**
- * @param {?} __0
- * @return {?}
- */
- ([prev, cur]) => this._changeDataSource(prev, cur))),
- // Replay the last emitted data when someone subscribes.
- Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["shareReplay"])(1));
- /**
- * The differ used to calculate changes to the data.
- */
- this._differ = null;
- /**
- * The template cache used to hold on ot template instancess that have been stamped out, but don't
- * currently need to be rendered. These instances will be reused in the future rather than
- * stamping out brand new ones.
- */
- this._templateCache = [];
- /**
- * Whether the rendered data should be updated during the next ngDoCheck cycle.
- */
- this._needsUpdate = false;
- this._destroyed = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- this.dataStream.subscribe((/**
- * @param {?} data
- * @return {?}
- */
- data => {
- this._data = data;
- this._onRenderedDataChange();
- }));
- this._viewport.renderedRangeStream.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._destroyed)).subscribe((/**
- * @param {?} range
- * @return {?}
- */
- range => {
- this._renderedRange = range;
- ngZone.run((/**
- * @return {?}
- */
- () => this.viewChange.next(this._renderedRange)));
- this._onRenderedDataChange();
- }));
- this._viewport.attach(this);
- }
- /**
- * The DataSource to display.
- * @return {?}
- */
- get cdkVirtualForOf() {
- return this._cdkVirtualForOf;
- }
- /**
- * @param {?} value
- * @return {?}
- */
- set cdkVirtualForOf(value) {
- this._cdkVirtualForOf = value;
- if (Object(_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_6__["isDataSource"])(value)) {
- this._dataSourceChanges.next(value);
- }
- else {
- // Slice the value if its an NgIterable to ensure we're working with an array.
- this._dataSourceChanges.next(new _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_6__["ArrayDataSource"](Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["isObservable"])(value) ? value : Array.prototype.slice.call(value || [])));
- }
- }
- /**
- * The `TrackByFunction` to use for tracking changes. The `TrackByFunction` takes the index and
- * the item and produces a value to be used as the item's identity when tracking changes.
- * @return {?}
- */
- get cdkVirtualForTrackBy() {
- return this._cdkVirtualForTrackBy;
- }
- /**
- * @param {?} fn
- * @return {?}
- */
- set cdkVirtualForTrackBy(fn) {
- this._needsUpdate = true;
- this._cdkVirtualForTrackBy = fn ?
- (/**
- * @param {?} index
- * @param {?} item
- * @return {?}
- */
- (index, item) => fn(index + (this._renderedRange ? this._renderedRange.start : 0), item)) :
- undefined;
- }
- /**
- * The template used to stamp out new elements.
- * @param {?} value
- * @return {?}
- */
- set cdkVirtualForTemplate(value) {
- if (value) {
- this._needsUpdate = true;
- this._template = value;
- }
- }
- /**
- * Measures the combined size (width for horizontal orientation, height for vertical) of all items
- * in the specified range. Throws an error if the range includes items that are not currently
- * rendered.
- * @param {?} range
- * @param {?} orientation
- * @return {?}
- */
- measureRangeSize(range, orientation) {
- if (range.start >= range.end) {
- return 0;
- }
- if (range.start < this._renderedRange.start || range.end > this._renderedRange.end) {
- throw Error(`Error: attempted to measure an item that isn't rendered.`);
- }
- // The index into the list of rendered views for the first item in the range.
- /** @type {?} */
- const renderedStartIndex = range.start - this._renderedRange.start;
- // The length of the range we're measuring.
- /** @type {?} */
- const rangeLen = range.end - range.start;
- // Loop over all root nodes for all items in the range and sum up their size.
- /** @type {?} */
- let totalSize = 0;
- /** @type {?} */
- let i = rangeLen;
- while (i--) {
- /** @type {?} */
- const view = (/** @type {?} */ (this._viewContainerRef.get(i + renderedStartIndex)));
- /** @type {?} */
- let j = view ? view.rootNodes.length : 0;
- while (j--) {
- totalSize += getSize(orientation, (/** @type {?} */ (view)).rootNodes[j]);
- }
- }
- return totalSize;
- }
- /**
- * @return {?}
- */
- ngDoCheck() {
- if (this._differ && this._needsUpdate) {
- // TODO(mmalerba): We should differentiate needs update due to scrolling and a new portion of
- // this list being rendered (can use simpler algorithm) vs needs update due to data actually
- // changing (need to do this diff).
- /** @type {?} */
- const changes = this._differ.diff(this._renderedItems);
- if (!changes) {
- this._updateContext();
- }
- else {
- this._applyChanges(changes);
- }
- this._needsUpdate = false;
- }
- }
- /**
- * @return {?}
- */
- ngOnDestroy() {
- this._viewport.detach();
- this._dataSourceChanges.next();
- this._dataSourceChanges.complete();
- this.viewChange.complete();
- this._destroyed.next();
- this._destroyed.complete();
- for (let view of this._templateCache) {
- view.destroy();
- }
- }
- /**
- * React to scroll state changes in the viewport.
- * @private
- * @return {?}
- */
- _onRenderedDataChange() {
- if (!this._renderedRange) {
- return;
- }
- this._renderedItems = this._data.slice(this._renderedRange.start, this._renderedRange.end);
- if (!this._differ) {
- this._differ = this._differs.find(this._renderedItems).create(this.cdkVirtualForTrackBy);
- }
- this._needsUpdate = true;
- }
- /**
- * Swap out one `DataSource` for another.
- * @private
- * @param {?} oldDs
- * @param {?} newDs
- * @return {?}
- */
- _changeDataSource(oldDs, newDs) {
- if (oldDs) {
- oldDs.disconnect(this);
- }
- this._needsUpdate = true;
- return newDs ? newDs.connect(this) : Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])();
- }
- /**
- * Update the `CdkVirtualForOfContext` for all views.
- * @private
- * @return {?}
- */
- _updateContext() {
- /** @type {?} */
- const count = this._data.length;
- /** @type {?} */
- let i = this._viewContainerRef.length;
- while (i--) {
- /** @type {?} */
- let view = (/** @type {?} */ (this._viewContainerRef.get(i)));
- view.context.index = this._renderedRange.start + i;
- view.context.count = count;
- this._updateComputedContextProperties(view.context);
- view.detectChanges();
- }
- }
- /**
- * Apply changes to the DOM.
- * @private
- * @param {?} changes
- * @return {?}
- */
- _applyChanges(changes) {
- // Rearrange the views to put them in the right location.
- changes.forEachOperation((/**
- * @param {?} record
- * @param {?} adjustedPreviousIndex
- * @param {?} currentIndex
- * @return {?}
- */
- (record, adjustedPreviousIndex, currentIndex) => {
- if (record.previousIndex == null) { // Item added.
- // Item added.
- /** @type {?} */
- const view = this._insertViewForNewItem((/** @type {?} */ (currentIndex)));
- view.context.$implicit = record.item;
- }
- else if (currentIndex == null) { // Item removed.
- this._cacheView(this._detachView((/** @type {?} */ (adjustedPreviousIndex))));
- }
- else { // Item moved.
- // Item moved.
- /** @type {?} */
- const view = (/** @type {?} */ (this._viewContainerRef.get((/** @type {?} */ (adjustedPreviousIndex)))));
- this._viewContainerRef.move(view, currentIndex);
- view.context.$implicit = record.item;
- }
- }));
- // Update $implicit for any items that had an identity change.
- changes.forEachIdentityChange((/**
- * @param {?} record
- * @return {?}
- */
- (record) => {
- /** @type {?} */
- const view = (/** @type {?} */ (this._viewContainerRef.get((/** @type {?} */ (record.currentIndex)))));
- view.context.$implicit = record.item;
- }));
- // Update the context variables on all items.
- /** @type {?} */
- const count = this._data.length;
- /** @type {?} */
- let i = this._viewContainerRef.length;
- while (i--) {
- /** @type {?} */
- const view = (/** @type {?} */ (this._viewContainerRef.get(i)));
- view.context.index = this._renderedRange.start + i;
- view.context.count = count;
- this._updateComputedContextProperties(view.context);
- }
- }
- /**
- * Cache the given detached view.
- * @private
- * @param {?} view
- * @return {?}
- */
- _cacheView(view) {
- if (this._templateCache.length < this.cdkVirtualForTemplateCacheSize) {
- this._templateCache.push(view);
- }
- else {
- /** @type {?} */
- const index = this._viewContainerRef.indexOf(view);
- // It's very unlikely that the index will ever be -1, but just in case,
- // destroy the view on its own, otherwise destroy it through the
- // container to ensure that all the references are removed.
- if (index === -1) {
- view.destroy();
- }
- else {
- this._viewContainerRef.remove(index);
- }
- }
- }
- /**
- * Inserts a view for a new item, either from the cache or by creating a new one.
- * @private
- * @param {?} index
- * @return {?}
- */
- _insertViewForNewItem(index) {
- return this._insertViewFromCache(index) || this._createEmbeddedViewAt(index);
- }
- /**
- * Update the computed properties on the `CdkVirtualForOfContext`.
- * @private
- * @param {?} context
- * @return {?}
- */
- _updateComputedContextProperties(context) {
- context.first = context.index === 0;
- context.last = context.index === context.count - 1;
- context.even = context.index % 2 === 0;
- context.odd = !context.even;
- }
- /**
- * Creates a new embedded view and moves it to the given index
- * @private
- * @param {?} index
- * @return {?}
- */
- _createEmbeddedViewAt(index) {
- // Note that it's important that we insert the item directly at the proper index,
- // rather than inserting it and the moving it in place, because if there's a directive
- // on the same node that injects the `ViewContainerRef`, Angular will insert another
- // comment node which can throw off the move when it's being repeated for all items.
- return this._viewContainerRef.createEmbeddedView(this._template, {
- $implicit: (/** @type {?} */ (null)),
- // It's guaranteed that the iterable is not "undefined" or "null" because we only
- // generate views for elements if the "cdkVirtualForOf" iterable has elements.
- cdkVirtualForOf: (/** @type {?} */ (this._cdkVirtualForOf)),
- index: -1,
- count: -1,
- first: false,
- last: false,
- odd: false,
- even: false
- }, index);
- }
- /**
- * Inserts a recycled view from the cache at the given index.
- * @private
- * @param {?} index
- * @return {?}
- */
- _insertViewFromCache(index) {
- /** @type {?} */
- const cachedView = this._templateCache.pop();
- if (cachedView) {
- this._viewContainerRef.insert(cachedView, index);
- }
- return cachedView || null;
- }
- /**
- * Detaches the embedded view at the given index.
- * @private
- * @param {?} index
- * @return {?}
- */
- _detachView(index) {
- return (/** @type {?} */ (this._viewContainerRef.detach(index)));
- }
- }
- CdkVirtualForOf.ɵfac = function CdkVirtualForOf_Factory(t) { return new (t || CdkVirtualForOf)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["TemplateRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["IterableDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](CdkVirtualScrollViewport, 4), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"])); };
- CdkVirtualForOf.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({ type: CdkVirtualForOf, selectors: [["", "cdkVirtualFor", "", "cdkVirtualForOf", ""]], inputs: { cdkVirtualForTemplateCacheSize: "cdkVirtualForTemplateCacheSize", cdkVirtualForOf: "cdkVirtualForOf", cdkVirtualForTrackBy: "cdkVirtualForTrackBy", cdkVirtualForTemplate: "cdkVirtualForTemplate" } });
- /** @nocollapse */
- CdkVirtualForOf.ctorParameters = () => [
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["TemplateRef"] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["IterableDiffers"] },
- { type: CdkVirtualScrollViewport, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["SkipSelf"] }] },
- { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"] }
- ];
- CdkVirtualForOf.propDecorators = {
- cdkVirtualForOf: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- cdkVirtualForTrackBy: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- cdkVirtualForTemplate: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }],
- cdkVirtualForTemplateCacheSize: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"] }]
- };
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkVirtualForOf, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
- args: [{
- selector: '[cdkVirtualFor][cdkVirtualForOf]'
- }]
- }], function () { return [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["TemplateRef"] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["IterableDiffers"] }, { type: CdkVirtualScrollViewport, decorators: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["SkipSelf"]
- }] }, { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"] }]; }, { cdkVirtualForTemplateCacheSize: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], cdkVirtualForOf: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], cdkVirtualForTrackBy: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }], cdkVirtualForTemplate: [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
- }] }); })();
- if (false) {}
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/scrolling/scrolling-module.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- class ScrollingModule {
- }
- ScrollingModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({ type: ScrollingModule });
- ScrollingModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({ factory: function ScrollingModule_Factory(t) { return new (t || ScrollingModule)(); }, imports: [[_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_5__["BidiModule"], _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["PlatformModule"]], _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_5__["BidiModule"]] });
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](ScrollingModule, { declarations: function () { return [CdkFixedSizeVirtualScroll, CdkScrollable, CdkVirtualForOf, CdkVirtualScrollViewport]; }, imports: function () { return [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_5__["BidiModule"], _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["PlatformModule"]]; }, exports: function () { return [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_5__["BidiModule"], CdkFixedSizeVirtualScroll, CdkScrollable, CdkVirtualForOf, CdkVirtualScrollViewport]; } }); })();
- /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ScrollingModule, [{
- type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
- args: [{
- imports: [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_5__["BidiModule"], _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["PlatformModule"]],
- exports: [
- _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_5__["BidiModule"],
- CdkFixedSizeVirtualScroll,
- CdkScrollable,
- CdkVirtualForOf,
- CdkVirtualScrollViewport,
- ],
- declarations: [
- CdkFixedSizeVirtualScroll,
- CdkScrollable,
- CdkVirtualForOf,
- CdkVirtualScrollViewport,
- ]
- }]
- }], null, null); })();
- /**
- * @fileoverview added by tsickle
- * Generated from: src/cdk/scrolling/public-api.ts
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
- */
- /**
- * Generated bundle index. Do not edit.
- */
- //# sourceMappingURL=scrolling.js.map
- /***/ }),
- /***/ "w1tV":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/share.js ***!
- \****************************************************************/
- /*! exports provided: share */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "share", function() { return share; });
- /* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./multicast */ "oB13");
- /* harmony import */ var _refCount__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./refCount */ "x+ZX");
- /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Subject */ "XNiG");
- function shareSubjectFactory() {
- return new _Subject__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
- }
- function share() {
- return (source) => Object(_refCount__WEBPACK_IMPORTED_MODULE_1__["refCount"])()(Object(_multicast__WEBPACK_IMPORTED_MODULE_0__["multicast"])(shareSubjectFactory)(source));
- }
- //# sourceMappingURL=share.js.map
- /***/ }),
- /***/ "wHSu":
- /*!********************************************************************!*\
- !*** ./node_modules/@fortawesome/free-solid-svg-icons/index.es.js ***!
- \********************************************************************/
- /*! exports provided: fas, prefix, faAd, faAddressBook, faAddressCard, faAdjust, faAirFreshener, faAlignCenter, faAlignJustify, faAlignLeft, faAlignRight, faAllergies, faAmbulance, faAmericanSignLanguageInterpreting, faAnchor, faAngleDoubleDown, faAngleDoubleLeft, faAngleDoubleRight, faAngleDoubleUp, faAngleDown, faAngleLeft, faAngleRight, faAngleUp, faAngry, faAnkh, faAppleAlt, faArchive, faArchway, faArrowAltCircleDown, faArrowAltCircleLeft, faArrowAltCircleRight, faArrowAltCircleUp, faArrowCircleDown, faArrowCircleLeft, faArrowCircleRight, faArrowCircleUp, faArrowDown, faArrowLeft, faArrowRight, faArrowUp, faArrowsAlt, faArrowsAltH, faArrowsAltV, faAssistiveListeningSystems, faAsterisk, faAt, faAtlas, faAtom, faAudioDescription, faAward, faBaby, faBabyCarriage, faBackspace, faBackward, faBacon, faBacteria, faBacterium, faBahai, faBalanceScale, faBalanceScaleLeft, faBalanceScaleRight, faBan, faBandAid, faBarcode, faBars, faBaseballBall, faBasketballBall, faBath, faBatteryEmpty, faBatteryFull, faBatteryHalf, faBatteryQuarter, faBatteryThreeQuarters, faBed, faBeer, faBell, faBellSlash, faBezierCurve, faBible, faBicycle, faBiking, faBinoculars, faBiohazard, faBirthdayCake, faBlender, faBlenderPhone, faBlind, faBlog, faBold, faBolt, faBomb, faBone, faBong, faBook, faBookDead, faBookMedical, faBookOpen, faBookReader, faBookmark, faBorderAll, faBorderNone, faBorderStyle, faBowlingBall, faBox, faBoxOpen, faBoxTissue, faBoxes, faBraille, faBrain, faBreadSlice, faBriefcase, faBriefcaseMedical, faBroadcastTower, faBroom, faBrush, faBug, faBuilding, faBullhorn, faBullseye, faBurn, faBus, faBusAlt, faBusinessTime, faCalculator, faCalendar, faCalendarAlt, faCalendarCheck, faCalendarDay, faCalendarMinus, faCalendarPlus, faCalendarTimes, faCalendarWeek, faCamera, faCameraRetro, faCampground, faCandyCane, faCannabis, faCapsules, faCar, faCarAlt, faCarBattery, faCarCrash, faCarSide, faCaravan, faCaretDown, faCaretLeft, faCaretRight, faCaretSquareDown, faCaretSquareLeft, faCaretSquareRight, faCaretSquareUp, faCaretUp, faCarrot, faCartArrowDown, faCartPlus, faCashRegister, faCat, faCertificate, faChair, faChalkboard, faChalkboardTeacher, faChargingStation, faChartArea, faChartBar, faChartLine, faChartPie, faCheck, faCheckCircle, faCheckDouble, faCheckSquare, faCheese, faChess, faChessBishop, faChessBoard, faChessKing, faChessKnight, faChessPawn, faChessQueen, faChessRook, faChevronCircleDown, faChevronCircleLeft, faChevronCircleRight, faChevronCircleUp, faChevronDown, faChevronLeft, faChevronRight, faChevronUp, faChild, faChurch, faCircle, faCircleNotch, faCity, faClinicMedical, faClipboard, faClipboardCheck, faClipboardList, faClock, faClone, faClosedCaptioning, faCloud, faCloudDownloadAlt, faCloudMeatball, faCloudMoon, faCloudMoonRain, faCloudRain, faCloudShowersHeavy, faCloudSun, faCloudSunRain, faCloudUploadAlt, faCocktail, faCode, faCodeBranch, faCoffee, faCog, faCogs, faCoins, faColumns, faComment, faCommentAlt, faCommentDollar, faCommentDots, faCommentMedical, faCommentSlash, faComments, faCommentsDollar, faCompactDisc, faCompass, faCompress, faCompressAlt, faCompressArrowsAlt, faConciergeBell, faCookie, faCookieBite, faCopy, faCopyright, faCouch, faCreditCard, faCrop, faCropAlt, faCross, faCrosshairs, faCrow, faCrown, faCrutch, faCube, faCubes, faCut, faDatabase, faDeaf, faDemocrat, faDesktop, faDharmachakra, faDiagnoses, faDice, faDiceD20, faDiceD6, faDiceFive, faDiceFour, faDiceOne, faDiceSix, faDiceThree, faDiceTwo, faDigitalTachograph, faDirections, faDisease, faDivide, faDizzy, faDna, faDog, faDollarSign, faDolly, faDollyFlatbed, faDonate, faDoorClosed, faDoorOpen, faDotCircle, faDove, faDownload, faDraftingCompass, faDragon, faDrawPolygon, faDrum, faDrumSteelpan, faDrumstickBite, faDumbbell, faDumpster, faDumpsterFire, faDungeon, faEdit, faEgg, faEject, faEllipsisH, faEllipsisV, faEnvelope, faEnvelopeOpen, faEnvelopeOpenText, faEnvelopeSquare, faEquals, faEraser, faEthernet, faEuroSign, faExchangeAlt, faExclamation, faExclamationCircle, faExclamationTriangle, faExpand, faExpandAlt, faExpandArrowsAlt, faExternalLinkAlt, faExternalLinkSquareAlt, faEye, faEyeDropper, faEyeSlash, faFan, faFastBackward, faFastForward, faFaucet, faFax, faFeather, faFeatherAlt, faFemale, faFighterJet, faFile, faFileAlt, faFileArchive, faFileAudio, faFileCode, faFileContract, faFileCsv, faFileDownload, faFileExcel, faFileExport, faFileImage, faFileImport, faFileInvoice, faFileInvoiceDollar, faFileMedical, faFileMedicalAlt, faFilePdf, faFilePowerpoint, faFilePrescription, faFileSignature, faFileUpload, faFileVideo, faFileWord, faFill, faFillDrip, faFilm, faFilter, faFingerprint, faFire, faFireAlt, faFireExtinguisher, faFirstAid, faFish, faFistRaised, faFlag, faFlagCheckered, faFlagUsa, faFlask, faFlushed, faFolder, faFolderMinus, faFolderOpen, faFolderPlus, faFont, faFontAwesomeLogoFull, faFootballBall, faForward, faFrog, faFrown, faFrownOpen, faFunnelDollar, faFutbol, faGamepad, faGasPump, faGavel, faGem, faGenderless, faGhost, faGift, faGifts, faGlassCheers, faGlassMartini, faGlassMartiniAlt, faGlassWhiskey, faGlasses, faGlobe, faGlobeAfrica, faGlobeAmericas, faGlobeAsia, faGlobeEurope, faGolfBall, faGopuram, faGraduationCap, faGreaterThan, faGreaterThanEqual, faGrimace, faGrin, faGrinAlt, faGrinBeam, faGrinBeamSweat, faGrinHearts, faGrinSquint, faGrinSquintTears, faGrinStars, faGrinTears, faGrinTongue, faGrinTongueSquint, faGrinTongueWink, faGrinWink, faGripHorizontal, faGripLines, faGripLinesVertical, faGripVertical, faGuitar, faHSquare, faHamburger, faHammer, faHamsa, faHandHolding, faHandHoldingHeart, faHandHoldingMedical, faHandHoldingUsd, faHandHoldingWater, faHandLizard, faHandMiddleFinger, faHandPaper, faHandPeace, faHandPointDown, faHandPointLeft, faHandPointRight, faHandPointUp, faHandPointer, faHandRock, faHandScissors, faHandSparkles, faHandSpock, faHands, faHandsHelping, faHandsWash, faHandshake, faHandshakeAltSlash, faHandshakeSlash, faHanukiah, faHardHat, faHashtag, faHatCowboy, faHatCowboySide, faHatWizard, faHdd, faHeadSideCough, faHeadSideCoughSlash, faHeadSideMask, faHeadSideVirus, faHeading, faHeadphones, faHeadphonesAlt, faHeadset, faHeart, faHeartBroken, faHeartbeat, faHelicopter, faHighlighter, faHiking, faHippo, faHistory, faHockeyPuck, faHollyBerry, faHome, faHorse, faHorseHead, faHospital, faHospitalAlt, faHospitalSymbol, faHospitalUser, faHotTub, faHotdog, faHotel, faHourglass, faHourglassEnd, faHourglassHalf, faHourglassStart, faHouseDamage, faHouseUser, faHryvnia, faICursor, faIceCream, faIcicles, faIcons, faIdBadge, faIdCard, faIdCardAlt, faIgloo, faImage, faImages, faInbox, faIndent, faIndustry, faInfinity, faInfo, faInfoCircle, faItalic, faJedi, faJoint, faJournalWhills, faKaaba, faKey, faKeyboard, faKhanda, faKiss, faKissBeam, faKissWinkHeart, faKiwiBird, faLandmark, faLanguage, faLaptop, faLaptopCode, faLaptopHouse, faLaptopMedical, faLaugh, faLaughBeam, faLaughSquint, faLaughWink, faLayerGroup, faLeaf, faLemon, faLessThan, faLessThanEqual, faLevelDownAlt, faLevelUpAlt, faLifeRing, faLightbulb, faLink, faLiraSign, faList, faListAlt, faListOl, faListUl, faLocationArrow, faLock, faLockOpen, faLongArrowAltDown, faLongArrowAltLeft, faLongArrowAltRight, faLongArrowAltUp, faLowVision, faLuggageCart, faLungs, faLungsVirus, faMagic, faMagnet, faMailBulk, faMale, faMap, faMapMarked, faMapMarkedAlt, faMapMarker, faMapMarkerAlt, faMapPin, faMapSigns, faMarker, faMars, faMarsDouble, faMarsStroke, faMarsStrokeH, faMarsStrokeV, faMask, faMedal, faMedkit, faMeh, faMehBlank, faMehRollingEyes, faMemory, faMenorah, faMercury, faMeteor, faMicrochip, faMicrophone, faMicrophoneAlt, faMicrophoneAltSlash, faMicrophoneSlash, faMicroscope, faMinus, faMinusCircle, faMinusSquare, faMitten, faMobile, faMobileAlt, faMoneyBill, faMoneyBillAlt, faMoneyBillWave, faMoneyBillWaveAlt, faMoneyCheck, faMoneyCheckAlt, faMonument, faMoon, faMortarPestle, faMosque, faMotorcycle, faMountain, faMouse, faMousePointer, faMugHot, faMusic, faNetworkWired, faNeuter, faNewspaper, faNotEqual, faNotesMedical, faObjectGroup, faObjectUngroup, faOilCan, faOm, faOtter, faOutdent, faPager, faPaintBrush, faPaintRoller, faPalette, faPallet, faPaperPlane, faPaperclip, faParachuteBox, faParagraph, faParking, faPassport, faPastafarianism, faPaste, faPause, faPauseCircle, faPaw, faPeace, faPen, faPenAlt, faPenFancy, faPenNib, faPenSquare, faPencilAlt, faPencilRuler, faPeopleArrows, faPeopleCarry, faPepperHot, faPercent, faPercentage, faPersonBooth, faPhone, faPhoneAlt, faPhoneSlash, faPhoneSquare, faPhoneSquareAlt, faPhoneVolume, faPhotoVideo, faPiggyBank, faPills, faPizzaSlice, faPlaceOfWorship, faPlane, faPlaneArrival, faPlaneDeparture, faPlaneSlash, faPlay, faPlayCircle, faPlug, faPlus, faPlusCircle, faPlusSquare, faPodcast, faPoll, faPollH, faPoo, faPooStorm, faPoop, faPortrait, faPoundSign, faPowerOff, faPray, faPrayingHands, faPrescription, faPrescriptionBottle, faPrescriptionBottleAlt, faPrint, faProcedures, faProjectDiagram, faPumpMedical, faPumpSoap, faPuzzlePiece, faQrcode, faQuestion, faQuestionCircle, faQuidditch, faQuoteLeft, faQuoteRight, faQuran, faRadiation, faRadiationAlt, faRainbow, faRandom, faReceipt, faRecordVinyl, faRecycle, faRedo, faRedoAlt, faRegistered, faRemoveFormat, faReply, faReplyAll, faRepublican, faRestroom, faRetweet, faRibbon, faRing, faRoad, faRobot, faRocket, faRoute, faRss, faRssSquare, faRubleSign, faRuler, faRulerCombined, faRulerHorizontal, faRulerVertical, faRunning, faRupeeSign, faSadCry, faSadTear, faSatellite, faSatelliteDish, faSave, faSchool, faScrewdriver, faScroll, faSdCard, faSearch, faSearchDollar, faSearchLocation, faSearchMinus, faSearchPlus, faSeedling, faServer, faShapes, faShare, faShareAlt, faShareAltSquare, faShareSquare, faShekelSign, faShieldAlt, faShieldVirus, faShip, faShippingFast, faShoePrints, faShoppingBag, faShoppingBasket, faShoppingCart, faShower, faShuttleVan, faSign, faSignInAlt, faSignLanguage, faSignOutAlt, faSignal, faSignature, faSimCard, faSink, faSitemap, faSkating, faSkiing, faSkiingNordic, faSkull, faSkullCrossbones, faSlash, faSleigh, faSlidersH, faSmile, faSmileBeam, faSmileWink, faSmog, faSmoking, faSmokingBan, faSms, faSnowboarding, faSnowflake, faSnowman, faSnowplow, faSoap, faSocks, faSolarPanel, faSort, faSortAlphaDown, faSortAlphaDownAlt, faSortAlphaUp, faSortAlphaUpAlt, faSortAmountDown, faSortAmountDownAlt, faSortAmountUp, faSortAmountUpAlt, faSortDown, faSortNumericDown, faSortNumericDownAlt, faSortNumericUp, faSortNumericUpAlt, faSortUp, faSpa, faSpaceShuttle, faSpellCheck, faSpider, faSpinner, faSplotch, faSprayCan, faSquare, faSquareFull, faSquareRootAlt, faStamp, faStar, faStarAndCrescent, faStarHalf, faStarHalfAlt, faStarOfDavid, faStarOfLife, faStepBackward, faStepForward, faStethoscope, faStickyNote, faStop, faStopCircle, faStopwatch, faStopwatch20, faStore, faStoreAlt, faStoreAltSlash, faStoreSlash, faStream, faStreetView, faStrikethrough, faStroopwafel, faSubscript, faSubway, faSuitcase, faSuitcaseRolling, faSun, faSuperscript, faSurprise, faSwatchbook, faSwimmer, faSwimmingPool, faSynagogue, faSync, faSyncAlt, faSyringe, faTable, faTableTennis, faTablet, faTabletAlt, faTablets, faTachometerAlt, faTag, faTags, faTape, faTasks, faTaxi, faTeeth, faTeethOpen, faTemperatureHigh, faTemperatureLow, faTenge, faTerminal, faTextHeight, faTextWidth, faTh, faThLarge, faThList, faTheaterMasks, faThermometer, faThermometerEmpty, faThermometerFull, faThermometerHalf, faThermometerQuarter, faThermometerThreeQuarters, faThumbsDown, faThumbsUp, faThumbtack, faTicketAlt, faTimes, faTimesCircle, faTint, faTintSlash, faTired, faToggleOff, faToggleOn, faToilet, faToiletPaper, faToiletPaperSlash, faToolbox, faTools, faTooth, faTorah, faToriiGate, faTractor, faTrademark, faTrafficLight, faTrailer, faTrain, faTram, faTransgender, faTransgenderAlt, faTrash, faTrashAlt, faTrashRestore, faTrashRestoreAlt, faTree, faTrophy, faTruck, faTruckLoading, faTruckMonster, faTruckMoving, faTruckPickup, faTshirt, faTty, faTv, faUmbrella, faUmbrellaBeach, faUnderline, faUndo, faUndoAlt, faUniversalAccess, faUniversity, faUnlink, faUnlock, faUnlockAlt, faUpload, faUser, faUserAlt, faUserAltSlash, faUserAstronaut, faUserCheck, faUserCircle, faUserClock, faUserCog, faUserEdit, faUserFriends, faUserGraduate, faUserInjured, faUserLock, faUserMd, faUserMinus, faUserNinja, faUserNurse, faUserPlus, faUserSecret, faUserShield, faUserSlash, faUserTag, faUserTie, faUserTimes, faUsers, faUsersCog, faUsersSlash, faUtensilSpoon, faUtensils, faVectorSquare, faVenus, faVenusDouble, faVenusMars, faVest, faVestPatches, faVial, faVials, faVideo, faVideoSlash, faVihara, faVirus, faVirusSlash, faViruses, faVoicemail, faVolleyballBall, faVolumeDown, faVolumeMute, faVolumeOff, faVolumeUp, faVoteYea, faVrCardboard, faWalking, faWallet, faWarehouse, faWater, faWaveSquare, faWeight, faWeightHanging, faWheelchair, faWifi, faWind, faWindowClose, faWindowMaximize, faWindowMinimize, faWindowRestore, faWineBottle, faWineGlass, faWineGlassAlt, faWonSign, faWrench, faXRay, faYenSign, faYinYang */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fas", function() { return _iconsCache; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prefix", function() { return prefix; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAd", function() { return faAd; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAddressBook", function() { return faAddressBook; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAddressCard", function() { return faAddressCard; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAdjust", function() { return faAdjust; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAirFreshener", function() { return faAirFreshener; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAlignCenter", function() { return faAlignCenter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAlignJustify", function() { return faAlignJustify; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAlignLeft", function() { return faAlignLeft; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAlignRight", function() { return faAlignRight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAllergies", function() { return faAllergies; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAmbulance", function() { return faAmbulance; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAmericanSignLanguageInterpreting", function() { return faAmericanSignLanguageInterpreting; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAnchor", function() { return faAnchor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAngleDoubleDown", function() { return faAngleDoubleDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAngleDoubleLeft", function() { return faAngleDoubleLeft; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAngleDoubleRight", function() { return faAngleDoubleRight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAngleDoubleUp", function() { return faAngleDoubleUp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAngleDown", function() { return faAngleDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAngleLeft", function() { return faAngleLeft; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAngleRight", function() { return faAngleRight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAngleUp", function() { return faAngleUp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAngry", function() { return faAngry; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAnkh", function() { return faAnkh; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAppleAlt", function() { return faAppleAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faArchive", function() { return faArchive; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faArchway", function() { return faArchway; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faArrowAltCircleDown", function() { return faArrowAltCircleDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faArrowAltCircleLeft", function() { return faArrowAltCircleLeft; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faArrowAltCircleRight", function() { return faArrowAltCircleRight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faArrowAltCircleUp", function() { return faArrowAltCircleUp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faArrowCircleDown", function() { return faArrowCircleDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faArrowCircleLeft", function() { return faArrowCircleLeft; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faArrowCircleRight", function() { return faArrowCircleRight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faArrowCircleUp", function() { return faArrowCircleUp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faArrowDown", function() { return faArrowDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faArrowLeft", function() { return faArrowLeft; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faArrowRight", function() { return faArrowRight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faArrowUp", function() { return faArrowUp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faArrowsAlt", function() { return faArrowsAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faArrowsAltH", function() { return faArrowsAltH; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faArrowsAltV", function() { return faArrowsAltV; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAssistiveListeningSystems", function() { return faAssistiveListeningSystems; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAsterisk", function() { return faAsterisk; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAt", function() { return faAt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAtlas", function() { return faAtlas; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAtom", function() { return faAtom; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAudioDescription", function() { return faAudioDescription; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faAward", function() { return faAward; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBaby", function() { return faBaby; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBabyCarriage", function() { return faBabyCarriage; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBackspace", function() { return faBackspace; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBackward", function() { return faBackward; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBacon", function() { return faBacon; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBacteria", function() { return faBacteria; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBacterium", function() { return faBacterium; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBahai", function() { return faBahai; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBalanceScale", function() { return faBalanceScale; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBalanceScaleLeft", function() { return faBalanceScaleLeft; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBalanceScaleRight", function() { return faBalanceScaleRight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBan", function() { return faBan; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBandAid", function() { return faBandAid; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBarcode", function() { return faBarcode; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBars", function() { return faBars; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBaseballBall", function() { return faBaseballBall; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBasketballBall", function() { return faBasketballBall; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBath", function() { return faBath; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBatteryEmpty", function() { return faBatteryEmpty; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBatteryFull", function() { return faBatteryFull; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBatteryHalf", function() { return faBatteryHalf; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBatteryQuarter", function() { return faBatteryQuarter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBatteryThreeQuarters", function() { return faBatteryThreeQuarters; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBed", function() { return faBed; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBeer", function() { return faBeer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBell", function() { return faBell; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBellSlash", function() { return faBellSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBezierCurve", function() { return faBezierCurve; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBible", function() { return faBible; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBicycle", function() { return faBicycle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBiking", function() { return faBiking; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBinoculars", function() { return faBinoculars; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBiohazard", function() { return faBiohazard; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBirthdayCake", function() { return faBirthdayCake; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBlender", function() { return faBlender; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBlenderPhone", function() { return faBlenderPhone; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBlind", function() { return faBlind; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBlog", function() { return faBlog; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBold", function() { return faBold; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBolt", function() { return faBolt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBomb", function() { return faBomb; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBone", function() { return faBone; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBong", function() { return faBong; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBook", function() { return faBook; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBookDead", function() { return faBookDead; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBookMedical", function() { return faBookMedical; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBookOpen", function() { return faBookOpen; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBookReader", function() { return faBookReader; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBookmark", function() { return faBookmark; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBorderAll", function() { return faBorderAll; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBorderNone", function() { return faBorderNone; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBorderStyle", function() { return faBorderStyle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBowlingBall", function() { return faBowlingBall; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBox", function() { return faBox; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBoxOpen", function() { return faBoxOpen; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBoxTissue", function() { return faBoxTissue; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBoxes", function() { return faBoxes; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBraille", function() { return faBraille; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBrain", function() { return faBrain; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBreadSlice", function() { return faBreadSlice; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBriefcase", function() { return faBriefcase; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBriefcaseMedical", function() { return faBriefcaseMedical; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBroadcastTower", function() { return faBroadcastTower; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBroom", function() { return faBroom; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBrush", function() { return faBrush; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBug", function() { return faBug; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBuilding", function() { return faBuilding; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBullhorn", function() { return faBullhorn; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBullseye", function() { return faBullseye; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBurn", function() { return faBurn; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBus", function() { return faBus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBusAlt", function() { return faBusAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faBusinessTime", function() { return faBusinessTime; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCalculator", function() { return faCalculator; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCalendar", function() { return faCalendar; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCalendarAlt", function() { return faCalendarAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCalendarCheck", function() { return faCalendarCheck; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCalendarDay", function() { return faCalendarDay; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCalendarMinus", function() { return faCalendarMinus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCalendarPlus", function() { return faCalendarPlus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCalendarTimes", function() { return faCalendarTimes; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCalendarWeek", function() { return faCalendarWeek; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCamera", function() { return faCamera; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCameraRetro", function() { return faCameraRetro; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCampground", function() { return faCampground; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCandyCane", function() { return faCandyCane; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCannabis", function() { return faCannabis; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCapsules", function() { return faCapsules; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCar", function() { return faCar; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCarAlt", function() { return faCarAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCarBattery", function() { return faCarBattery; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCarCrash", function() { return faCarCrash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCarSide", function() { return faCarSide; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCaravan", function() { return faCaravan; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCaretDown", function() { return faCaretDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCaretLeft", function() { return faCaretLeft; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCaretRight", function() { return faCaretRight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCaretSquareDown", function() { return faCaretSquareDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCaretSquareLeft", function() { return faCaretSquareLeft; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCaretSquareRight", function() { return faCaretSquareRight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCaretSquareUp", function() { return faCaretSquareUp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCaretUp", function() { return faCaretUp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCarrot", function() { return faCarrot; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCartArrowDown", function() { return faCartArrowDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCartPlus", function() { return faCartPlus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCashRegister", function() { return faCashRegister; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCat", function() { return faCat; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCertificate", function() { return faCertificate; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChair", function() { return faChair; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChalkboard", function() { return faChalkboard; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChalkboardTeacher", function() { return faChalkboardTeacher; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChargingStation", function() { return faChargingStation; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChartArea", function() { return faChartArea; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChartBar", function() { return faChartBar; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChartLine", function() { return faChartLine; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChartPie", function() { return faChartPie; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCheck", function() { return faCheck; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCheckCircle", function() { return faCheckCircle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCheckDouble", function() { return faCheckDouble; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCheckSquare", function() { return faCheckSquare; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCheese", function() { return faCheese; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChess", function() { return faChess; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChessBishop", function() { return faChessBishop; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChessBoard", function() { return faChessBoard; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChessKing", function() { return faChessKing; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChessKnight", function() { return faChessKnight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChessPawn", function() { return faChessPawn; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChessQueen", function() { return faChessQueen; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChessRook", function() { return faChessRook; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChevronCircleDown", function() { return faChevronCircleDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChevronCircleLeft", function() { return faChevronCircleLeft; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChevronCircleRight", function() { return faChevronCircleRight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChevronCircleUp", function() { return faChevronCircleUp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChevronDown", function() { return faChevronDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChevronLeft", function() { return faChevronLeft; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChevronRight", function() { return faChevronRight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChevronUp", function() { return faChevronUp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChild", function() { return faChild; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faChurch", function() { return faChurch; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCircle", function() { return faCircle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCircleNotch", function() { return faCircleNotch; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCity", function() { return faCity; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faClinicMedical", function() { return faClinicMedical; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faClipboard", function() { return faClipboard; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faClipboardCheck", function() { return faClipboardCheck; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faClipboardList", function() { return faClipboardList; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faClock", function() { return faClock; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faClone", function() { return faClone; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faClosedCaptioning", function() { return faClosedCaptioning; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCloud", function() { return faCloud; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCloudDownloadAlt", function() { return faCloudDownloadAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCloudMeatball", function() { return faCloudMeatball; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCloudMoon", function() { return faCloudMoon; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCloudMoonRain", function() { return faCloudMoonRain; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCloudRain", function() { return faCloudRain; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCloudShowersHeavy", function() { return faCloudShowersHeavy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCloudSun", function() { return faCloudSun; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCloudSunRain", function() { return faCloudSunRain; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCloudUploadAlt", function() { return faCloudUploadAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCocktail", function() { return faCocktail; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCode", function() { return faCode; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCodeBranch", function() { return faCodeBranch; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCoffee", function() { return faCoffee; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCog", function() { return faCog; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCogs", function() { return faCogs; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCoins", function() { return faCoins; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faColumns", function() { return faColumns; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faComment", function() { return faComment; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCommentAlt", function() { return faCommentAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCommentDollar", function() { return faCommentDollar; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCommentDots", function() { return faCommentDots; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCommentMedical", function() { return faCommentMedical; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCommentSlash", function() { return faCommentSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faComments", function() { return faComments; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCommentsDollar", function() { return faCommentsDollar; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCompactDisc", function() { return faCompactDisc; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCompass", function() { return faCompass; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCompress", function() { return faCompress; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCompressAlt", function() { return faCompressAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCompressArrowsAlt", function() { return faCompressArrowsAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faConciergeBell", function() { return faConciergeBell; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCookie", function() { return faCookie; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCookieBite", function() { return faCookieBite; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCopy", function() { return faCopy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCopyright", function() { return faCopyright; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCouch", function() { return faCouch; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCreditCard", function() { return faCreditCard; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCrop", function() { return faCrop; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCropAlt", function() { return faCropAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCross", function() { return faCross; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCrosshairs", function() { return faCrosshairs; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCrow", function() { return faCrow; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCrown", function() { return faCrown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCrutch", function() { return faCrutch; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCube", function() { return faCube; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCubes", function() { return faCubes; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faCut", function() { return faCut; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDatabase", function() { return faDatabase; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDeaf", function() { return faDeaf; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDemocrat", function() { return faDemocrat; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDesktop", function() { return faDesktop; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDharmachakra", function() { return faDharmachakra; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDiagnoses", function() { return faDiagnoses; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDice", function() { return faDice; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDiceD20", function() { return faDiceD20; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDiceD6", function() { return faDiceD6; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDiceFive", function() { return faDiceFive; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDiceFour", function() { return faDiceFour; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDiceOne", function() { return faDiceOne; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDiceSix", function() { return faDiceSix; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDiceThree", function() { return faDiceThree; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDiceTwo", function() { return faDiceTwo; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDigitalTachograph", function() { return faDigitalTachograph; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDirections", function() { return faDirections; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDisease", function() { return faDisease; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDivide", function() { return faDivide; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDizzy", function() { return faDizzy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDna", function() { return faDna; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDog", function() { return faDog; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDollarSign", function() { return faDollarSign; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDolly", function() { return faDolly; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDollyFlatbed", function() { return faDollyFlatbed; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDonate", function() { return faDonate; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDoorClosed", function() { return faDoorClosed; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDoorOpen", function() { return faDoorOpen; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDotCircle", function() { return faDotCircle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDove", function() { return faDove; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDownload", function() { return faDownload; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDraftingCompass", function() { return faDraftingCompass; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDragon", function() { return faDragon; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDrawPolygon", function() { return faDrawPolygon; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDrum", function() { return faDrum; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDrumSteelpan", function() { return faDrumSteelpan; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDrumstickBite", function() { return faDrumstickBite; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDumbbell", function() { return faDumbbell; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDumpster", function() { return faDumpster; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDumpsterFire", function() { return faDumpsterFire; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faDungeon", function() { return faDungeon; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faEdit", function() { return faEdit; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faEgg", function() { return faEgg; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faEject", function() { return faEject; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faEllipsisH", function() { return faEllipsisH; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faEllipsisV", function() { return faEllipsisV; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faEnvelope", function() { return faEnvelope; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faEnvelopeOpen", function() { return faEnvelopeOpen; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faEnvelopeOpenText", function() { return faEnvelopeOpenText; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faEnvelopeSquare", function() { return faEnvelopeSquare; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faEquals", function() { return faEquals; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faEraser", function() { return faEraser; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faEthernet", function() { return faEthernet; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faEuroSign", function() { return faEuroSign; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faExchangeAlt", function() { return faExchangeAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faExclamation", function() { return faExclamation; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faExclamationCircle", function() { return faExclamationCircle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faExclamationTriangle", function() { return faExclamationTriangle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faExpand", function() { return faExpand; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faExpandAlt", function() { return faExpandAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faExpandArrowsAlt", function() { return faExpandArrowsAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faExternalLinkAlt", function() { return faExternalLinkAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faExternalLinkSquareAlt", function() { return faExternalLinkSquareAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faEye", function() { return faEye; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faEyeDropper", function() { return faEyeDropper; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faEyeSlash", function() { return faEyeSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFan", function() { return faFan; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFastBackward", function() { return faFastBackward; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFastForward", function() { return faFastForward; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFaucet", function() { return faFaucet; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFax", function() { return faFax; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFeather", function() { return faFeather; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFeatherAlt", function() { return faFeatherAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFemale", function() { return faFemale; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFighterJet", function() { return faFighterJet; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFile", function() { return faFile; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileAlt", function() { return faFileAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileArchive", function() { return faFileArchive; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileAudio", function() { return faFileAudio; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileCode", function() { return faFileCode; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileContract", function() { return faFileContract; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileCsv", function() { return faFileCsv; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileDownload", function() { return faFileDownload; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileExcel", function() { return faFileExcel; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileExport", function() { return faFileExport; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileImage", function() { return faFileImage; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileImport", function() { return faFileImport; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileInvoice", function() { return faFileInvoice; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileInvoiceDollar", function() { return faFileInvoiceDollar; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileMedical", function() { return faFileMedical; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileMedicalAlt", function() { return faFileMedicalAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFilePdf", function() { return faFilePdf; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFilePowerpoint", function() { return faFilePowerpoint; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFilePrescription", function() { return faFilePrescription; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileSignature", function() { return faFileSignature; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileUpload", function() { return faFileUpload; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileVideo", function() { return faFileVideo; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFileWord", function() { return faFileWord; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFill", function() { return faFill; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFillDrip", function() { return faFillDrip; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFilm", function() { return faFilm; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFilter", function() { return faFilter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFingerprint", function() { return faFingerprint; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFire", function() { return faFire; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFireAlt", function() { return faFireAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFireExtinguisher", function() { return faFireExtinguisher; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFirstAid", function() { return faFirstAid; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFish", function() { return faFish; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFistRaised", function() { return faFistRaised; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFlag", function() { return faFlag; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFlagCheckered", function() { return faFlagCheckered; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFlagUsa", function() { return faFlagUsa; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFlask", function() { return faFlask; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFlushed", function() { return faFlushed; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFolder", function() { return faFolder; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFolderMinus", function() { return faFolderMinus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFolderOpen", function() { return faFolderOpen; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFolderPlus", function() { return faFolderPlus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFont", function() { return faFont; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFontAwesomeLogoFull", function() { return faFontAwesomeLogoFull; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFootballBall", function() { return faFootballBall; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faForward", function() { return faForward; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFrog", function() { return faFrog; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFrown", function() { return faFrown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFrownOpen", function() { return faFrownOpen; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFunnelDollar", function() { return faFunnelDollar; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faFutbol", function() { return faFutbol; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGamepad", function() { return faGamepad; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGasPump", function() { return faGasPump; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGavel", function() { return faGavel; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGem", function() { return faGem; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGenderless", function() { return faGenderless; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGhost", function() { return faGhost; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGift", function() { return faGift; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGifts", function() { return faGifts; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGlassCheers", function() { return faGlassCheers; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGlassMartini", function() { return faGlassMartini; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGlassMartiniAlt", function() { return faGlassMartiniAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGlassWhiskey", function() { return faGlassWhiskey; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGlasses", function() { return faGlasses; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGlobe", function() { return faGlobe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGlobeAfrica", function() { return faGlobeAfrica; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGlobeAmericas", function() { return faGlobeAmericas; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGlobeAsia", function() { return faGlobeAsia; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGlobeEurope", function() { return faGlobeEurope; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGolfBall", function() { return faGolfBall; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGopuram", function() { return faGopuram; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGraduationCap", function() { return faGraduationCap; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGreaterThan", function() { return faGreaterThan; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGreaterThanEqual", function() { return faGreaterThanEqual; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGrimace", function() { return faGrimace; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGrin", function() { return faGrin; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGrinAlt", function() { return faGrinAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGrinBeam", function() { return faGrinBeam; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGrinBeamSweat", function() { return faGrinBeamSweat; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGrinHearts", function() { return faGrinHearts; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGrinSquint", function() { return faGrinSquint; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGrinSquintTears", function() { return faGrinSquintTears; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGrinStars", function() { return faGrinStars; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGrinTears", function() { return faGrinTears; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGrinTongue", function() { return faGrinTongue; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGrinTongueSquint", function() { return faGrinTongueSquint; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGrinTongueWink", function() { return faGrinTongueWink; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGrinWink", function() { return faGrinWink; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGripHorizontal", function() { return faGripHorizontal; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGripLines", function() { return faGripLines; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGripLinesVertical", function() { return faGripLinesVertical; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGripVertical", function() { return faGripVertical; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faGuitar", function() { return faGuitar; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHSquare", function() { return faHSquare; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHamburger", function() { return faHamburger; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHammer", function() { return faHammer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHamsa", function() { return faHamsa; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandHolding", function() { return faHandHolding; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandHoldingHeart", function() { return faHandHoldingHeart; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandHoldingMedical", function() { return faHandHoldingMedical; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandHoldingUsd", function() { return faHandHoldingUsd; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandHoldingWater", function() { return faHandHoldingWater; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandLizard", function() { return faHandLizard; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandMiddleFinger", function() { return faHandMiddleFinger; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandPaper", function() { return faHandPaper; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandPeace", function() { return faHandPeace; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandPointDown", function() { return faHandPointDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandPointLeft", function() { return faHandPointLeft; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandPointRight", function() { return faHandPointRight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandPointUp", function() { return faHandPointUp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandPointer", function() { return faHandPointer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandRock", function() { return faHandRock; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandScissors", function() { return faHandScissors; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandSparkles", function() { return faHandSparkles; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandSpock", function() { return faHandSpock; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHands", function() { return faHands; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandsHelping", function() { return faHandsHelping; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandsWash", function() { return faHandsWash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandshake", function() { return faHandshake; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandshakeAltSlash", function() { return faHandshakeAltSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHandshakeSlash", function() { return faHandshakeSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHanukiah", function() { return faHanukiah; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHardHat", function() { return faHardHat; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHashtag", function() { return faHashtag; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHatCowboy", function() { return faHatCowboy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHatCowboySide", function() { return faHatCowboySide; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHatWizard", function() { return faHatWizard; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHdd", function() { return faHdd; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHeadSideCough", function() { return faHeadSideCough; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHeadSideCoughSlash", function() { return faHeadSideCoughSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHeadSideMask", function() { return faHeadSideMask; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHeadSideVirus", function() { return faHeadSideVirus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHeading", function() { return faHeading; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHeadphones", function() { return faHeadphones; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHeadphonesAlt", function() { return faHeadphonesAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHeadset", function() { return faHeadset; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHeart", function() { return faHeart; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHeartBroken", function() { return faHeartBroken; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHeartbeat", function() { return faHeartbeat; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHelicopter", function() { return faHelicopter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHighlighter", function() { return faHighlighter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHiking", function() { return faHiking; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHippo", function() { return faHippo; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHistory", function() { return faHistory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHockeyPuck", function() { return faHockeyPuck; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHollyBerry", function() { return faHollyBerry; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHome", function() { return faHome; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHorse", function() { return faHorse; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHorseHead", function() { return faHorseHead; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHospital", function() { return faHospital; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHospitalAlt", function() { return faHospitalAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHospitalSymbol", function() { return faHospitalSymbol; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHospitalUser", function() { return faHospitalUser; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHotTub", function() { return faHotTub; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHotdog", function() { return faHotdog; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHotel", function() { return faHotel; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHourglass", function() { return faHourglass; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHourglassEnd", function() { return faHourglassEnd; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHourglassHalf", function() { return faHourglassHalf; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHourglassStart", function() { return faHourglassStart; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHouseDamage", function() { return faHouseDamage; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHouseUser", function() { return faHouseUser; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faHryvnia", function() { return faHryvnia; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faICursor", function() { return faICursor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faIceCream", function() { return faIceCream; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faIcicles", function() { return faIcicles; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faIcons", function() { return faIcons; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faIdBadge", function() { return faIdBadge; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faIdCard", function() { return faIdCard; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faIdCardAlt", function() { return faIdCardAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faIgloo", function() { return faIgloo; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faImage", function() { return faImage; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faImages", function() { return faImages; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faInbox", function() { return faInbox; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faIndent", function() { return faIndent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faIndustry", function() { return faIndustry; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faInfinity", function() { return faInfinity; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faInfo", function() { return faInfo; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faInfoCircle", function() { return faInfoCircle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faItalic", function() { return faItalic; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faJedi", function() { return faJedi; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faJoint", function() { return faJoint; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faJournalWhills", function() { return faJournalWhills; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faKaaba", function() { return faKaaba; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faKey", function() { return faKey; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faKeyboard", function() { return faKeyboard; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faKhanda", function() { return faKhanda; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faKiss", function() { return faKiss; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faKissBeam", function() { return faKissBeam; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faKissWinkHeart", function() { return faKissWinkHeart; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faKiwiBird", function() { return faKiwiBird; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLandmark", function() { return faLandmark; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLanguage", function() { return faLanguage; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLaptop", function() { return faLaptop; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLaptopCode", function() { return faLaptopCode; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLaptopHouse", function() { return faLaptopHouse; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLaptopMedical", function() { return faLaptopMedical; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLaugh", function() { return faLaugh; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLaughBeam", function() { return faLaughBeam; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLaughSquint", function() { return faLaughSquint; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLaughWink", function() { return faLaughWink; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLayerGroup", function() { return faLayerGroup; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLeaf", function() { return faLeaf; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLemon", function() { return faLemon; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLessThan", function() { return faLessThan; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLessThanEqual", function() { return faLessThanEqual; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLevelDownAlt", function() { return faLevelDownAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLevelUpAlt", function() { return faLevelUpAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLifeRing", function() { return faLifeRing; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLightbulb", function() { return faLightbulb; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLink", function() { return faLink; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLiraSign", function() { return faLiraSign; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faList", function() { return faList; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faListAlt", function() { return faListAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faListOl", function() { return faListOl; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faListUl", function() { return faListUl; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLocationArrow", function() { return faLocationArrow; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLock", function() { return faLock; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLockOpen", function() { return faLockOpen; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLongArrowAltDown", function() { return faLongArrowAltDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLongArrowAltLeft", function() { return faLongArrowAltLeft; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLongArrowAltRight", function() { return faLongArrowAltRight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLongArrowAltUp", function() { return faLongArrowAltUp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLowVision", function() { return faLowVision; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLuggageCart", function() { return faLuggageCart; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLungs", function() { return faLungs; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faLungsVirus", function() { return faLungsVirus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMagic", function() { return faMagic; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMagnet", function() { return faMagnet; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMailBulk", function() { return faMailBulk; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMale", function() { return faMale; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMap", function() { return faMap; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMapMarked", function() { return faMapMarked; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMapMarkedAlt", function() { return faMapMarkedAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMapMarker", function() { return faMapMarker; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMapMarkerAlt", function() { return faMapMarkerAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMapPin", function() { return faMapPin; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMapSigns", function() { return faMapSigns; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMarker", function() { return faMarker; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMars", function() { return faMars; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMarsDouble", function() { return faMarsDouble; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMarsStroke", function() { return faMarsStroke; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMarsStrokeH", function() { return faMarsStrokeH; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMarsStrokeV", function() { return faMarsStrokeV; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMask", function() { return faMask; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMedal", function() { return faMedal; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMedkit", function() { return faMedkit; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMeh", function() { return faMeh; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMehBlank", function() { return faMehBlank; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMehRollingEyes", function() { return faMehRollingEyes; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMemory", function() { return faMemory; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMenorah", function() { return faMenorah; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMercury", function() { return faMercury; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMeteor", function() { return faMeteor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMicrochip", function() { return faMicrochip; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMicrophone", function() { return faMicrophone; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMicrophoneAlt", function() { return faMicrophoneAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMicrophoneAltSlash", function() { return faMicrophoneAltSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMicrophoneSlash", function() { return faMicrophoneSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMicroscope", function() { return faMicroscope; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMinus", function() { return faMinus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMinusCircle", function() { return faMinusCircle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMinusSquare", function() { return faMinusSquare; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMitten", function() { return faMitten; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMobile", function() { return faMobile; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMobileAlt", function() { return faMobileAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMoneyBill", function() { return faMoneyBill; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMoneyBillAlt", function() { return faMoneyBillAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMoneyBillWave", function() { return faMoneyBillWave; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMoneyBillWaveAlt", function() { return faMoneyBillWaveAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMoneyCheck", function() { return faMoneyCheck; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMoneyCheckAlt", function() { return faMoneyCheckAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMonument", function() { return faMonument; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMoon", function() { return faMoon; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMortarPestle", function() { return faMortarPestle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMosque", function() { return faMosque; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMotorcycle", function() { return faMotorcycle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMountain", function() { return faMountain; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMouse", function() { return faMouse; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMousePointer", function() { return faMousePointer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMugHot", function() { return faMugHot; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faMusic", function() { return faMusic; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faNetworkWired", function() { return faNetworkWired; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faNeuter", function() { return faNeuter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faNewspaper", function() { return faNewspaper; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faNotEqual", function() { return faNotEqual; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faNotesMedical", function() { return faNotesMedical; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faObjectGroup", function() { return faObjectGroup; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faObjectUngroup", function() { return faObjectUngroup; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faOilCan", function() { return faOilCan; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faOm", function() { return faOm; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faOtter", function() { return faOtter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faOutdent", function() { return faOutdent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPager", function() { return faPager; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPaintBrush", function() { return faPaintBrush; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPaintRoller", function() { return faPaintRoller; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPalette", function() { return faPalette; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPallet", function() { return faPallet; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPaperPlane", function() { return faPaperPlane; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPaperclip", function() { return faPaperclip; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faParachuteBox", function() { return faParachuteBox; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faParagraph", function() { return faParagraph; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faParking", function() { return faParking; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPassport", function() { return faPassport; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPastafarianism", function() { return faPastafarianism; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPaste", function() { return faPaste; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPause", function() { return faPause; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPauseCircle", function() { return faPauseCircle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPaw", function() { return faPaw; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPeace", function() { return faPeace; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPen", function() { return faPen; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPenAlt", function() { return faPenAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPenFancy", function() { return faPenFancy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPenNib", function() { return faPenNib; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPenSquare", function() { return faPenSquare; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPencilAlt", function() { return faPencilAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPencilRuler", function() { return faPencilRuler; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPeopleArrows", function() { return faPeopleArrows; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPeopleCarry", function() { return faPeopleCarry; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPepperHot", function() { return faPepperHot; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPercent", function() { return faPercent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPercentage", function() { return faPercentage; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPersonBooth", function() { return faPersonBooth; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPhone", function() { return faPhone; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPhoneAlt", function() { return faPhoneAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPhoneSlash", function() { return faPhoneSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPhoneSquare", function() { return faPhoneSquare; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPhoneSquareAlt", function() { return faPhoneSquareAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPhoneVolume", function() { return faPhoneVolume; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPhotoVideo", function() { return faPhotoVideo; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPiggyBank", function() { return faPiggyBank; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPills", function() { return faPills; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPizzaSlice", function() { return faPizzaSlice; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPlaceOfWorship", function() { return faPlaceOfWorship; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPlane", function() { return faPlane; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPlaneArrival", function() { return faPlaneArrival; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPlaneDeparture", function() { return faPlaneDeparture; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPlaneSlash", function() { return faPlaneSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPlay", function() { return faPlay; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPlayCircle", function() { return faPlayCircle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPlug", function() { return faPlug; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPlus", function() { return faPlus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPlusCircle", function() { return faPlusCircle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPlusSquare", function() { return faPlusSquare; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPodcast", function() { return faPodcast; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPoll", function() { return faPoll; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPollH", function() { return faPollH; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPoo", function() { return faPoo; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPooStorm", function() { return faPooStorm; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPoop", function() { return faPoop; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPortrait", function() { return faPortrait; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPoundSign", function() { return faPoundSign; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPowerOff", function() { return faPowerOff; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPray", function() { return faPray; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPrayingHands", function() { return faPrayingHands; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPrescription", function() { return faPrescription; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPrescriptionBottle", function() { return faPrescriptionBottle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPrescriptionBottleAlt", function() { return faPrescriptionBottleAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPrint", function() { return faPrint; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faProcedures", function() { return faProcedures; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faProjectDiagram", function() { return faProjectDiagram; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPumpMedical", function() { return faPumpMedical; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPumpSoap", function() { return faPumpSoap; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faPuzzlePiece", function() { return faPuzzlePiece; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faQrcode", function() { return faQrcode; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faQuestion", function() { return faQuestion; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faQuestionCircle", function() { return faQuestionCircle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faQuidditch", function() { return faQuidditch; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faQuoteLeft", function() { return faQuoteLeft; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faQuoteRight", function() { return faQuoteRight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faQuran", function() { return faQuran; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRadiation", function() { return faRadiation; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRadiationAlt", function() { return faRadiationAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRainbow", function() { return faRainbow; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRandom", function() { return faRandom; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faReceipt", function() { return faReceipt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRecordVinyl", function() { return faRecordVinyl; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRecycle", function() { return faRecycle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRedo", function() { return faRedo; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRedoAlt", function() { return faRedoAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRegistered", function() { return faRegistered; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRemoveFormat", function() { return faRemoveFormat; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faReply", function() { return faReply; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faReplyAll", function() { return faReplyAll; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRepublican", function() { return faRepublican; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRestroom", function() { return faRestroom; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRetweet", function() { return faRetweet; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRibbon", function() { return faRibbon; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRing", function() { return faRing; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRoad", function() { return faRoad; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRobot", function() { return faRobot; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRocket", function() { return faRocket; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRoute", function() { return faRoute; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRss", function() { return faRss; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRssSquare", function() { return faRssSquare; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRubleSign", function() { return faRubleSign; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRuler", function() { return faRuler; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRulerCombined", function() { return faRulerCombined; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRulerHorizontal", function() { return faRulerHorizontal; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRulerVertical", function() { return faRulerVertical; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRunning", function() { return faRunning; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faRupeeSign", function() { return faRupeeSign; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSadCry", function() { return faSadCry; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSadTear", function() { return faSadTear; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSatellite", function() { return faSatellite; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSatelliteDish", function() { return faSatelliteDish; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSave", function() { return faSave; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSchool", function() { return faSchool; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faScrewdriver", function() { return faScrewdriver; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faScroll", function() { return faScroll; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSdCard", function() { return faSdCard; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSearch", function() { return faSearch; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSearchDollar", function() { return faSearchDollar; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSearchLocation", function() { return faSearchLocation; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSearchMinus", function() { return faSearchMinus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSearchPlus", function() { return faSearchPlus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSeedling", function() { return faSeedling; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faServer", function() { return faServer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faShapes", function() { return faShapes; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faShare", function() { return faShare; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faShareAlt", function() { return faShareAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faShareAltSquare", function() { return faShareAltSquare; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faShareSquare", function() { return faShareSquare; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faShekelSign", function() { return faShekelSign; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faShieldAlt", function() { return faShieldAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faShieldVirus", function() { return faShieldVirus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faShip", function() { return faShip; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faShippingFast", function() { return faShippingFast; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faShoePrints", function() { return faShoePrints; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faShoppingBag", function() { return faShoppingBag; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faShoppingBasket", function() { return faShoppingBasket; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faShoppingCart", function() { return faShoppingCart; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faShower", function() { return faShower; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faShuttleVan", function() { return faShuttleVan; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSign", function() { return faSign; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSignInAlt", function() { return faSignInAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSignLanguage", function() { return faSignLanguage; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSignOutAlt", function() { return faSignOutAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSignal", function() { return faSignal; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSignature", function() { return faSignature; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSimCard", function() { return faSimCard; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSink", function() { return faSink; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSitemap", function() { return faSitemap; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSkating", function() { return faSkating; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSkiing", function() { return faSkiing; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSkiingNordic", function() { return faSkiingNordic; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSkull", function() { return faSkull; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSkullCrossbones", function() { return faSkullCrossbones; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSlash", function() { return faSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSleigh", function() { return faSleigh; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSlidersH", function() { return faSlidersH; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSmile", function() { return faSmile; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSmileBeam", function() { return faSmileBeam; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSmileWink", function() { return faSmileWink; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSmog", function() { return faSmog; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSmoking", function() { return faSmoking; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSmokingBan", function() { return faSmokingBan; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSms", function() { return faSms; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSnowboarding", function() { return faSnowboarding; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSnowflake", function() { return faSnowflake; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSnowman", function() { return faSnowman; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSnowplow", function() { return faSnowplow; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSoap", function() { return faSoap; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSocks", function() { return faSocks; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSolarPanel", function() { return faSolarPanel; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSort", function() { return faSort; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSortAlphaDown", function() { return faSortAlphaDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSortAlphaDownAlt", function() { return faSortAlphaDownAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSortAlphaUp", function() { return faSortAlphaUp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSortAlphaUpAlt", function() { return faSortAlphaUpAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSortAmountDown", function() { return faSortAmountDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSortAmountDownAlt", function() { return faSortAmountDownAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSortAmountUp", function() { return faSortAmountUp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSortAmountUpAlt", function() { return faSortAmountUpAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSortDown", function() { return faSortDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSortNumericDown", function() { return faSortNumericDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSortNumericDownAlt", function() { return faSortNumericDownAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSortNumericUp", function() { return faSortNumericUp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSortNumericUpAlt", function() { return faSortNumericUpAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSortUp", function() { return faSortUp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSpa", function() { return faSpa; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSpaceShuttle", function() { return faSpaceShuttle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSpellCheck", function() { return faSpellCheck; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSpider", function() { return faSpider; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSpinner", function() { return faSpinner; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSplotch", function() { return faSplotch; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSprayCan", function() { return faSprayCan; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSquare", function() { return faSquare; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSquareFull", function() { return faSquareFull; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSquareRootAlt", function() { return faSquareRootAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStamp", function() { return faStamp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStar", function() { return faStar; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStarAndCrescent", function() { return faStarAndCrescent; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStarHalf", function() { return faStarHalf; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStarHalfAlt", function() { return faStarHalfAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStarOfDavid", function() { return faStarOfDavid; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStarOfLife", function() { return faStarOfLife; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStepBackward", function() { return faStepBackward; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStepForward", function() { return faStepForward; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStethoscope", function() { return faStethoscope; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStickyNote", function() { return faStickyNote; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStop", function() { return faStop; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStopCircle", function() { return faStopCircle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStopwatch", function() { return faStopwatch; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStopwatch20", function() { return faStopwatch20; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStore", function() { return faStore; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStoreAlt", function() { return faStoreAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStoreAltSlash", function() { return faStoreAltSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStoreSlash", function() { return faStoreSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStream", function() { return faStream; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStreetView", function() { return faStreetView; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStrikethrough", function() { return faStrikethrough; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faStroopwafel", function() { return faStroopwafel; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSubscript", function() { return faSubscript; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSubway", function() { return faSubway; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSuitcase", function() { return faSuitcase; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSuitcaseRolling", function() { return faSuitcaseRolling; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSun", function() { return faSun; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSuperscript", function() { return faSuperscript; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSurprise", function() { return faSurprise; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSwatchbook", function() { return faSwatchbook; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSwimmer", function() { return faSwimmer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSwimmingPool", function() { return faSwimmingPool; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSynagogue", function() { return faSynagogue; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSync", function() { return faSync; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSyncAlt", function() { return faSyncAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faSyringe", function() { return faSyringe; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTable", function() { return faTable; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTableTennis", function() { return faTableTennis; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTablet", function() { return faTablet; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTabletAlt", function() { return faTabletAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTablets", function() { return faTablets; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTachometerAlt", function() { return faTachometerAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTag", function() { return faTag; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTags", function() { return faTags; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTape", function() { return faTape; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTasks", function() { return faTasks; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTaxi", function() { return faTaxi; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTeeth", function() { return faTeeth; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTeethOpen", function() { return faTeethOpen; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTemperatureHigh", function() { return faTemperatureHigh; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTemperatureLow", function() { return faTemperatureLow; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTenge", function() { return faTenge; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTerminal", function() { return faTerminal; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTextHeight", function() { return faTextHeight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTextWidth", function() { return faTextWidth; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTh", function() { return faTh; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faThLarge", function() { return faThLarge; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faThList", function() { return faThList; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTheaterMasks", function() { return faTheaterMasks; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faThermometer", function() { return faThermometer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faThermometerEmpty", function() { return faThermometerEmpty; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faThermometerFull", function() { return faThermometerFull; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faThermometerHalf", function() { return faThermometerHalf; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faThermometerQuarter", function() { return faThermometerQuarter; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faThermometerThreeQuarters", function() { return faThermometerThreeQuarters; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faThumbsDown", function() { return faThumbsDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faThumbsUp", function() { return faThumbsUp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faThumbtack", function() { return faThumbtack; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTicketAlt", function() { return faTicketAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTimes", function() { return faTimes; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTimesCircle", function() { return faTimesCircle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTint", function() { return faTint; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTintSlash", function() { return faTintSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTired", function() { return faTired; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faToggleOff", function() { return faToggleOff; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faToggleOn", function() { return faToggleOn; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faToilet", function() { return faToilet; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faToiletPaper", function() { return faToiletPaper; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faToiletPaperSlash", function() { return faToiletPaperSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faToolbox", function() { return faToolbox; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTools", function() { return faTools; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTooth", function() { return faTooth; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTorah", function() { return faTorah; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faToriiGate", function() { return faToriiGate; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTractor", function() { return faTractor; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTrademark", function() { return faTrademark; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTrafficLight", function() { return faTrafficLight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTrailer", function() { return faTrailer; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTrain", function() { return faTrain; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTram", function() { return faTram; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTransgender", function() { return faTransgender; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTransgenderAlt", function() { return faTransgenderAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTrash", function() { return faTrash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTrashAlt", function() { return faTrashAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTrashRestore", function() { return faTrashRestore; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTrashRestoreAlt", function() { return faTrashRestoreAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTree", function() { return faTree; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTrophy", function() { return faTrophy; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTruck", function() { return faTruck; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTruckLoading", function() { return faTruckLoading; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTruckMonster", function() { return faTruckMonster; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTruckMoving", function() { return faTruckMoving; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTruckPickup", function() { return faTruckPickup; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTshirt", function() { return faTshirt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTty", function() { return faTty; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faTv", function() { return faTv; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUmbrella", function() { return faUmbrella; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUmbrellaBeach", function() { return faUmbrellaBeach; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUnderline", function() { return faUnderline; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUndo", function() { return faUndo; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUndoAlt", function() { return faUndoAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUniversalAccess", function() { return faUniversalAccess; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUniversity", function() { return faUniversity; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUnlink", function() { return faUnlink; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUnlock", function() { return faUnlock; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUnlockAlt", function() { return faUnlockAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUpload", function() { return faUpload; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUser", function() { return faUser; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserAlt", function() { return faUserAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserAltSlash", function() { return faUserAltSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserAstronaut", function() { return faUserAstronaut; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserCheck", function() { return faUserCheck; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserCircle", function() { return faUserCircle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserClock", function() { return faUserClock; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserCog", function() { return faUserCog; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserEdit", function() { return faUserEdit; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserFriends", function() { return faUserFriends; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserGraduate", function() { return faUserGraduate; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserInjured", function() { return faUserInjured; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserLock", function() { return faUserLock; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserMd", function() { return faUserMd; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserMinus", function() { return faUserMinus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserNinja", function() { return faUserNinja; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserNurse", function() { return faUserNurse; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserPlus", function() { return faUserPlus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserSecret", function() { return faUserSecret; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserShield", function() { return faUserShield; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserSlash", function() { return faUserSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserTag", function() { return faUserTag; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserTie", function() { return faUserTie; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUserTimes", function() { return faUserTimes; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUsers", function() { return faUsers; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUsersCog", function() { return faUsersCog; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUsersSlash", function() { return faUsersSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUtensilSpoon", function() { return faUtensilSpoon; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faUtensils", function() { return faUtensils; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVectorSquare", function() { return faVectorSquare; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVenus", function() { return faVenus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVenusDouble", function() { return faVenusDouble; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVenusMars", function() { return faVenusMars; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVest", function() { return faVest; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVestPatches", function() { return faVestPatches; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVial", function() { return faVial; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVials", function() { return faVials; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVideo", function() { return faVideo; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVideoSlash", function() { return faVideoSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVihara", function() { return faVihara; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVirus", function() { return faVirus; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVirusSlash", function() { return faVirusSlash; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faViruses", function() { return faViruses; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVoicemail", function() { return faVoicemail; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVolleyballBall", function() { return faVolleyballBall; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVolumeDown", function() { return faVolumeDown; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVolumeMute", function() { return faVolumeMute; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVolumeOff", function() { return faVolumeOff; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVolumeUp", function() { return faVolumeUp; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVoteYea", function() { return faVoteYea; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faVrCardboard", function() { return faVrCardboard; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWalking", function() { return faWalking; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWallet", function() { return faWallet; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWarehouse", function() { return faWarehouse; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWater", function() { return faWater; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWaveSquare", function() { return faWaveSquare; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWeight", function() { return faWeight; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWeightHanging", function() { return faWeightHanging; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWheelchair", function() { return faWheelchair; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWifi", function() { return faWifi; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWind", function() { return faWind; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWindowClose", function() { return faWindowClose; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWindowMaximize", function() { return faWindowMaximize; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWindowMinimize", function() { return faWindowMinimize; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWindowRestore", function() { return faWindowRestore; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWineBottle", function() { return faWineBottle; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWineGlass", function() { return faWineGlass; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWineGlassAlt", function() { return faWineGlassAlt; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWonSign", function() { return faWonSign; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faWrench", function() { return faWrench; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faXRay", function() { return faXRay; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faYenSign", function() { return faYenSign; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "faYinYang", function() { return faYinYang; });
- /*!
- * Font Awesome Free 5.15.1 by @fontawesome - https://fontawesome.com
- * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
- */
- var prefix = "fas";
- var faAd = {
- prefix: 'fas',
- iconName: 'ad',
- icon: [512, 512, [], "f641", "M157.52 272h36.96L176 218.78 157.52 272zM352 256c-13.23 0-24 10.77-24 24s10.77 24 24 24 24-10.77 24-24-10.77-24-24-24zM464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM250.58 352h-16.94c-6.81 0-12.88-4.32-15.12-10.75L211.15 320h-70.29l-7.38 21.25A16 16 0 0 1 118.36 352h-16.94c-11.01 0-18.73-10.85-15.12-21.25L140 176.12A23.995 23.995 0 0 1 162.67 160h26.66A23.99 23.99 0 0 1 212 176.13l53.69 154.62c3.61 10.4-4.11 21.25-15.11 21.25zM424 336c0 8.84-7.16 16-16 16h-16c-4.85 0-9.04-2.27-11.98-5.68-8.62 3.66-18.09 5.68-28.02 5.68-39.7 0-72-32.3-72-72s32.3-72 72-72c8.46 0 16.46 1.73 24 4.42V176c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v160z"]
- };
- var faAddressBook = {
- prefix: 'fas',
- iconName: 'address-book',
- icon: [448, 512, [], "f2b9", "M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-228-32c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H118.4C106 384 96 375.4 96 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"]
- };
- var faAddressCard = {
- prefix: 'fas',
- iconName: 'address-card',
- icon: [576, 512, [], "f2bb", "M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-352 96c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H86.4C74 384 64 375.4 64 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2zM512 312c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z"]
- };
- var faAdjust = {
- prefix: 'fas',
- iconName: 'adjust',
- icon: [512, 512, [], "f042", "M8 256c0 136.966 111.033 248 248 248s248-111.034 248-248S392.966 8 256 8 8 119.033 8 256zm248 184V72c101.705 0 184 82.311 184 184 0 101.705-82.311 184-184 184z"]
- };
- var faAirFreshener = {
- prefix: 'fas',
- iconName: 'air-freshener',
- icon: [384, 512, [], "f5d0", "M378.94 321.41L284.7 224h49.22c15.3 0 23.66-16.6 13.86-27.53L234.45 69.96c3.43-6.61 5.55-14 5.55-21.96 0-26.51-21.49-48-48-48s-48 21.49-48 48c0 7.96 2.12 15.35 5.55 21.96L36.22 196.47C26.42 207.4 34.78 224 50.08 224H99.3L5.06 321.41C-6.69 333.56 3.34 352 21.7 352H160v32H48c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h288c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16H224v-32h138.3c18.36 0 28.39-18.44 16.64-30.59zM192 31.98c8.85 0 16.02 7.17 16.02 16.02 0 8.84-7.17 16.02-16.02 16.02S175.98 56.84 175.98 48c0-8.85 7.17-16.02 16.02-16.02zM304 432v32H80v-32h224z"]
- };
- var faAlignCenter = {
- prefix: 'fas',
- iconName: 'align-center',
- icon: [448, 512, [], "f037", "M432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM108.1 96h231.81A12.09 12.09 0 0 0 352 83.9V44.09A12.09 12.09 0 0 0 339.91 32H108.1A12.09 12.09 0 0 0 96 44.09V83.9A12.1 12.1 0 0 0 108.1 96zm231.81 256A12.09 12.09 0 0 0 352 339.9v-39.81A12.09 12.09 0 0 0 339.91 288H108.1A12.09 12.09 0 0 0 96 300.09v39.81a12.1 12.1 0 0 0 12.1 12.1z"]
- };
- var faAlignJustify = {
- prefix: 'fas',
- iconName: 'align-justify',
- icon: [448, 512, [], "f039", "M432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"]
- };
- var faAlignLeft = {
- prefix: 'fas',
- iconName: 'align-left',
- icon: [448, 512, [], "f036", "M12.83 352h262.34A12.82 12.82 0 0 0 288 339.17v-38.34A12.82 12.82 0 0 0 275.17 288H12.83A12.82 12.82 0 0 0 0 300.83v38.34A12.82 12.82 0 0 0 12.83 352zm0-256h262.34A12.82 12.82 0 0 0 288 83.17V44.83A12.82 12.82 0 0 0 275.17 32H12.83A12.82 12.82 0 0 0 0 44.83v38.34A12.82 12.82 0 0 0 12.83 96zM432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"]
- };
- var faAlignRight = {
- prefix: 'fas',
- iconName: 'align-right',
- icon: [448, 512, [], "f038", "M16 224h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm416 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-384H172.83A12.82 12.82 0 0 0 160 44.83v38.34A12.82 12.82 0 0 0 172.83 96h262.34A12.82 12.82 0 0 0 448 83.17V44.83A12.82 12.82 0 0 0 435.17 32zm0 256H172.83A12.82 12.82 0 0 0 160 300.83v38.34A12.82 12.82 0 0 0 172.83 352h262.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288z"]
- };
- var faAllergies = {
- prefix: 'fas',
- iconName: 'allergies',
- icon: [448, 512, [], "f461", "M416 112c-17.6 0-32 14.4-32 32v72c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32s-32 14.4-32 32v152c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V32c0-17.6-14.4-32-32-32s-32 14.4-32 32v184c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32S96 46.4 96 64v241l-23.6-32.5c-13-17.9-38-21.8-55.9-8.8s-21.8 38-8.8 55.9l125.6 172.7c9 12.4 23.5 19.8 38.8 19.8h197.6c22.3 0 41.6-15.3 46.7-37l26.5-112.7c3.2-13.7 4.9-28.3 5.1-42.3V144c0-17.6-14.4-32-32-32zM176 416c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 32c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32-128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"]
- };
- var faAmbulance = {
- prefix: 'fas',
- iconName: 'ambulance',
- icon: [640, 512, [], "f0f9", "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm144-248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm176 248c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"]
- };
- var faAmericanSignLanguageInterpreting = {
- prefix: 'fas',
- iconName: 'american-sign-language-interpreting',
- icon: [640, 512, [], "f2a3", "M290.547 189.039c-20.295-10.149-44.147-11.199-64.739-3.89 42.606 0 71.208 20.475 85.578 50.576 8.576 17.899-5.148 38.071-23.617 38.071 18.429 0 32.211 20.136 23.617 38.071-14.725 30.846-46.123 50.854-80.298 50.854-.557 0-94.471-8.615-94.471-8.615l-66.406 33.347c-9.384 4.693-19.815.379-23.895-7.781L1.86 290.747c-4.167-8.615-1.111-18.897 6.946-23.621l58.072-33.069L108 159.861c6.39-57.245 34.731-109.767 79.743-146.726 11.391-9.448 28.341-7.781 37.51 3.613 9.446 11.394 7.78 28.067-3.612 37.516-12.503 10.559-23.618 22.509-32.509 35.57 21.672-14.729 46.679-24.732 74.186-28.067 14.725-1.945 28.063 8.336 29.73 23.065 1.945 14.728-8.336 28.067-23.062 29.734-16.116 1.945-31.12 7.503-44.178 15.284 26.114-5.713 58.712-3.138 88.079 11.115 13.336 6.669 18.893 22.509 12.224 35.848-6.389 13.06-22.504 18.617-35.564 12.226zm-27.229 69.472c-6.112-12.505-18.338-20.286-32.231-20.286a35.46 35.46 0 0 0-35.565 35.57c0 21.428 17.808 35.57 35.565 35.57 13.893 0 26.119-7.781 32.231-20.286 4.446-9.449 13.614-15.006 23.339-15.284-9.725-.277-18.893-5.835-23.339-15.284zm374.821-37.237c4.168 8.615 1.111 18.897-6.946 23.621l-58.071 33.069L532 352.16c-6.39 57.245-34.731 109.767-79.743 146.726-10.932 9.112-27.799 8.144-37.51-3.613-9.446-11.394-7.78-28.067 3.613-37.516 12.503-10.559 23.617-22.509 32.508-35.57-21.672 14.729-46.679 24.732-74.186 28.067-10.021 2.506-27.552-5.643-29.73-23.065-1.945-14.728 8.336-28.067 23.062-29.734 16.116-1.946 31.12-7.503 44.178-15.284-26.114 5.713-58.712 3.138-88.079-11.115-13.336-6.669-18.893-22.509-12.224-35.848 6.389-13.061 22.505-18.619 35.565-12.227 20.295 10.149 44.147 11.199 64.739 3.89-42.606 0-71.208-20.475-85.578-50.576-8.576-17.899 5.148-38.071 23.617-38.071-18.429 0-32.211-20.136-23.617-38.071 14.033-29.396 44.039-50.887 81.966-50.854l92.803 8.615 66.406-33.347c9.408-4.704 19.828-.354 23.894 7.781l44.455 88.926zm-229.227-18.618c-13.893 0-26.119 7.781-32.231 20.286-4.446 9.449-13.614 15.006-23.339 15.284 9.725.278 18.893 5.836 23.339 15.284 6.112 12.505 18.338 20.286 32.231 20.286a35.46 35.46 0 0 0 35.565-35.57c0-21.429-17.808-35.57-35.565-35.57z"]
- };
- var faAnchor = {
- prefix: 'fas',
- iconName: 'anchor',
- icon: [576, 512, [], "f13d", "M12.971 352h32.394C67.172 454.735 181.944 512 288 512c106.229 0 220.853-57.38 242.635-160h32.394c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0l-67.029 67.029c-7.56 7.56-2.206 20.485 8.485 20.485h35.146c-20.29 54.317-84.963 86.588-144.117 94.015V256h52c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-52v-5.47c37.281-13.178 63.995-48.725 64-90.518C384.005 43.772 341.605.738 289.37.01 235.723-.739 192 42.525 192 96c0 41.798 26.716 77.35 64 90.53V192h-52c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v190.015c-58.936-7.399-123.82-39.679-144.117-94.015h35.146c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0L4.485 331.515C-3.074 339.074 2.28 352 12.971 352zM288 64c17.645 0 32 14.355 32 32s-14.355 32-32 32-32-14.355-32-32 14.355-32 32-32z"]
- };
- var faAngleDoubleDown = {
- prefix: 'fas',
- iconName: 'angle-double-down',
- icon: [320, 512, [], "f103", "M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z"]
- };
- var faAngleDoubleLeft = {
- prefix: 'fas',
- iconName: 'angle-double-left',
- icon: [448, 512, [], "f100", "M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z"]
- };
- var faAngleDoubleRight = {
- prefix: 'fas',
- iconName: 'angle-double-right',
- icon: [448, 512, [], "f101", "M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z"]
- };
- var faAngleDoubleUp = {
- prefix: 'fas',
- iconName: 'angle-double-up',
- icon: [320, 512, [], "f102", "M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z"]
- };
- var faAngleDown = {
- prefix: 'fas',
- iconName: 'angle-down',
- icon: [320, 512, [], "f107", "M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z"]
- };
- var faAngleLeft = {
- prefix: 'fas',
- iconName: 'angle-left',
- icon: [256, 512, [], "f104", "M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z"]
- };
- var faAngleRight = {
- prefix: 'fas',
- iconName: 'angle-right',
- icon: [256, 512, [], "f105", "M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"]
- };
- var faAngleUp = {
- prefix: 'fas',
- iconName: 'angle-up',
- icon: [320, 512, [], "f106", "M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z"]
- };
- var faAngry = {
- prefix: 'fas',
- iconName: 'angry',
- icon: [496, 512, [], "f556", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 240c0-9.3 4.1-17.5 10.5-23.4l-31-9.3c-8.5-2.5-13.3-11.5-10.7-19.9 2.5-8.5 11.4-13.2 19.9-10.7l80 24c8.5 2.5 13.3 11.5 10.7 19.9-2.1 6.9-8.4 11.4-15.3 11.4-.5 0-1.1-.2-1.7-.2.7 2.7 1.7 5.3 1.7 8.2 0 17.7-14.3 32-32 32S136 257.7 136 240zm168 154.2c-27.8-33.4-84.2-33.4-112.1 0-13.5 16.3-38.2-4.2-24.6-20.5 20-24 49.4-37.8 80.6-37.8s60.6 13.8 80.6 37.8c13.8 16.5-11.1 36.6-24.5 20.5zm76.6-186.9l-31 9.3c6.3 5.8 10.5 14.1 10.5 23.4 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-2.9.9-5.6 1.7-8.2-.6.1-1.1.2-1.7.2-6.9 0-13.2-4.5-15.3-11.4-2.5-8.5 2.3-17.4 10.7-19.9l80-24c8.4-2.5 17.4 2.3 19.9 10.7 2.5 8.5-2.3 17.4-10.8 19.9z"]
- };
- var faAnkh = {
- prefix: 'fas',
- iconName: 'ankh',
- icon: [320, 512, [], "f644", "M296 256h-44.62C272.46 222.01 288 181.65 288 144 288 55.63 230.69 0 160 0S32 55.63 32 144c0 37.65 15.54 78.01 36.62 112H24c-13.25 0-24 10.74-24 24v32c0 13.25 10.75 24 24 24h96v152c0 13.25 10.75 24 24 24h32c13.25 0 24-10.75 24-24V336h96c13.25 0 24-10.75 24-24v-32c0-13.26-10.75-24-24-24zM160 80c29.61 0 48 24.52 48 64 0 34.66-27.14 78.14-48 100.87-20.86-22.72-48-66.21-48-100.87 0-39.48 18.39-64 48-64z"]
- };
- var faAppleAlt = {
- prefix: 'fas',
- iconName: 'apple-alt',
- icon: [448, 512, [], "f5d1", "M350.85 129c25.97 4.67 47.27 18.67 63.92 42 14.65 20.67 24.64 46.67 29.96 78 4.67 28.67 4.32 57.33-1 86-7.99 47.33-23.97 87-47.94 119-28.64 38.67-64.59 58-107.87 58-10.66 0-22.3-3.33-34.96-10-8.66-5.33-18.31-8-28.97-8s-20.3 2.67-28.97 8c-12.66 6.67-24.3 10-34.96 10-43.28 0-79.23-19.33-107.87-58-23.97-32-39.95-71.67-47.94-119-5.32-28.67-5.67-57.33-1-86 5.32-31.33 15.31-57.33 29.96-78 16.65-23.33 37.95-37.33 63.92-42 15.98-2.67 37.95-.33 65.92 7 23.97 6.67 44.28 14.67 60.93 24 16.65-9.33 36.96-17.33 60.93-24 27.98-7.33 49.96-9.67 65.94-7zm-54.94-41c-9.32 8.67-21.65 15-36.96 19-10.66 3.33-22.3 5-34.96 5l-14.98-1c-1.33-9.33-1.33-20 0-32 2.67-24 10.32-42.33 22.97-55 9.32-8.67 21.65-15 36.96-19 10.66-3.33 22.3-5 34.96-5l14.98 1 1 15c0 12.67-1.67 24.33-4.99 35-3.99 15.33-10.31 27.67-18.98 37z"]
- };
- var faArchive = {
- prefix: 'fas',
- iconName: 'archive',
- icon: [512, 512, [], "f187", "M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z"]
- };
- var faArchway = {
- prefix: 'fas',
- iconName: 'archway',
- icon: [576, 512, [], "f557", "M560 448h-16V96H32v352H16.02c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16H176c8.84 0 16-7.16 16-16V320c0-53.02 42.98-96 96-96s96 42.98 96 96l.02 160v16c0 8.84 7.16 16 16 16H560c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm0-448H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h544c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z"]
- };
- var faArrowAltCircleDown = {
- prefix: 'fas',
- iconName: 'arrow-alt-circle-down',
- icon: [512, 512, [], "f358", "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z"]
- };
- var faArrowAltCircleLeft = {
- prefix: 'fas',
- iconName: 'arrow-alt-circle-left',
- icon: [512, 512, [], "f359", "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z"]
- };
- var faArrowAltCircleRight = {
- prefix: 'fas',
- iconName: 'arrow-alt-circle-right',
- icon: [512, 512, [], "f35a", "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z"]
- };
- var faArrowAltCircleUp = {
- prefix: 'fas',
- iconName: 'arrow-alt-circle-up',
- icon: [512, 512, [], "f35b", "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z"]
- };
- var faArrowCircleDown = {
- prefix: 'fas',
- iconName: 'arrow-circle-down',
- icon: [512, 512, [], "f0ab", "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z"]
- };
- var faArrowCircleLeft = {
- prefix: 'fas',
- iconName: 'arrow-circle-left',
- icon: [512, 512, [], "f0a8", "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z"]
- };
- var faArrowCircleRight = {
- prefix: 'fas',
- iconName: 'arrow-circle-right',
- icon: [512, 512, [], "f0a9", "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z"]
- };
- var faArrowCircleUp = {
- prefix: 'fas',
- iconName: 'arrow-circle-up',
- icon: [512, 512, [], "f0aa", "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z"]
- };
- var faArrowDown = {
- prefix: 'fas',
- iconName: 'arrow-down',
- icon: [448, 512, [], "f063", "M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z"]
- };
- var faArrowLeft = {
- prefix: 'fas',
- iconName: 'arrow-left',
- icon: [448, 512, [], "f060", "M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z"]
- };
- var faArrowRight = {
- prefix: 'fas',
- iconName: 'arrow-right',
- icon: [448, 512, [], "f061", "M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z"]
- };
- var faArrowUp = {
- prefix: 'fas',
- iconName: 'arrow-up',
- icon: [448, 512, [], "f062", "M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z"]
- };
- var faArrowsAlt = {
- prefix: 'fas',
- iconName: 'arrows-alt',
- icon: [512, 512, [], "f0b2", "M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z"]
- };
- var faArrowsAltH = {
- prefix: 'fas',
- iconName: 'arrows-alt-h',
- icon: [512, 512, [], "f337", "M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z"]
- };
- var faArrowsAltV = {
- prefix: 'fas',
- iconName: 'arrows-alt-v',
- icon: [256, 512, [], "f338", "M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z"]
- };
- var faAssistiveListeningSystems = {
- prefix: 'fas',
- iconName: 'assistive-listening-systems',
- icon: [512, 512, [], "f2a2", "M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm-80 236c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zM32 448c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm480-187.993c0-1.518-.012-3.025-.045-4.531C510.076 140.525 436.157 38.47 327.994 1.511c-14.633-4.998-30.549 2.809-35.55 17.442-5 14.633 2.81 30.549 17.442 35.55 85.906 29.354 144.61 110.513 146.077 201.953l.003.188c.026 1.118.033 2.236.033 3.363 0 15.464 12.536 28 28 28s28.001-12.536 28.001-28zM152.971 439.029l-80-80L39.03 392.97l80 80 33.941-33.941z"]
- };
- var faAsterisk = {
- prefix: 'fas',
- iconName: 'asterisk',
- icon: [512, 512, [], "f069", "M478.21 334.093L336 256l142.21-78.093c11.795-6.477 15.961-21.384 9.232-33.037l-19.48-33.741c-6.728-11.653-21.72-15.499-33.227-8.523L296 186.718l3.475-162.204C299.763 11.061 288.937 0 275.48 0h-38.96c-13.456 0-24.283 11.061-23.994 24.514L216 186.718 77.265 102.607c-11.506-6.976-26.499-3.13-33.227 8.523l-19.48 33.741c-6.728 11.653-2.562 26.56 9.233 33.037L176 256 33.79 334.093c-11.795 6.477-15.961 21.384-9.232 33.037l19.48 33.741c6.728 11.653 21.721 15.499 33.227 8.523L216 325.282l-3.475 162.204C212.237 500.939 223.064 512 236.52 512h38.961c13.456 0 24.283-11.061 23.995-24.514L296 325.282l138.735 84.111c11.506 6.976 26.499 3.13 33.227-8.523l19.48-33.741c6.728-11.653 2.563-26.559-9.232-33.036z"]
- };
- var faAt = {
- prefix: 'fas',
- iconName: 'at',
- icon: [512, 512, [], "f1fa", "M256 8C118.941 8 8 118.919 8 256c0 137.059 110.919 248 248 248 48.154 0 95.342-14.14 135.408-40.223 12.005-7.815 14.625-24.288 5.552-35.372l-10.177-12.433c-7.671-9.371-21.179-11.667-31.373-5.129C325.92 429.757 291.314 440 256 440c-101.458 0-184-82.542-184-184S154.542 72 256 72c100.139 0 184 57.619 184 160 0 38.786-21.093 79.742-58.17 83.693-17.349-.454-16.91-12.857-13.476-30.024l23.433-121.11C394.653 149.75 383.308 136 368.225 136h-44.981a13.518 13.518 0 0 0-13.432 11.993l-.01.092c-14.697-17.901-40.448-21.775-59.971-21.775-74.58 0-137.831 62.234-137.831 151.46 0 65.303 36.785 105.87 96 105.87 26.984 0 57.369-15.637 74.991-38.333 9.522 34.104 40.613 34.103 70.71 34.103C462.609 379.41 504 307.798 504 232 504 95.653 394.023 8 256 8zm-21.68 304.43c-22.249 0-36.07-15.623-36.07-40.771 0-44.993 30.779-72.729 58.63-72.729 22.292 0 35.601 15.241 35.601 40.77 0 45.061-33.875 72.73-58.161 72.73z"]
- };
- var faAtlas = {
- prefix: 'fas',
- iconName: 'atlas',
- icon: [448, 512, [], "f558", "M318.38 208h-39.09c-1.49 27.03-6.54 51.35-14.21 70.41 27.71-13.24 48.02-39.19 53.3-70.41zm0-32c-5.29-31.22-25.59-57.17-53.3-70.41 7.68 19.06 12.72 43.38 14.21 70.41h39.09zM224 97.31c-7.69 7.45-20.77 34.42-23.43 78.69h46.87c-2.67-44.26-15.75-71.24-23.44-78.69zm-41.08 8.28c-27.71 13.24-48.02 39.19-53.3 70.41h39.09c1.49-27.03 6.53-51.35 14.21-70.41zm0 172.82c-7.68-19.06-12.72-43.38-14.21-70.41h-39.09c5.28 31.22 25.59 57.17 53.3 70.41zM247.43 208h-46.87c2.66 44.26 15.74 71.24 23.43 78.69 7.7-7.45 20.78-34.43 23.44-78.69zM448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM224 64c70.69 0 128 57.31 128 128s-57.31 128-128 128S96 262.69 96 192 153.31 64 224 64zm160 384H96c-19.2 0-32-12.8-32-32s16-32 32-32h288v64z"]
- };
- var faAtom = {
- prefix: 'fas',
- iconName: 'atom',
- icon: [448, 512, [], "f5d2", "M223.99908,224a32,32,0,1,0,32.00782,32A32.06431,32.06431,0,0,0,223.99908,224Zm214.172-96c-10.877-19.5-40.50979-50.75-116.27544-41.875C300.39168,34.875,267.63386,0,223.99908,0s-76.39066,34.875-97.89653,86.125C50.3369,77.375,20.706,108.5,9.82907,128-6.54984,157.375-5.17484,201.125,34.958,256-5.17484,310.875-6.54984,354.625,9.82907,384c29.13087,52.375,101.64652,43.625,116.27348,41.875C147.60842,477.125,180.36429,512,223.99908,512s76.3926-34.875,97.89652-86.125c14.62891,1.75,87.14456,10.5,116.27544-41.875C454.55,354.625,453.175,310.875,413.04017,256,453.175,201.125,454.55,157.375,438.171,128ZM63.33886,352c-4-7.25-.125-24.75,15.00391-48.25,6.87695,6.5,14.12891,12.875,21.88087,19.125,1.625,13.75,4,27.125,6.75,40.125C82.34472,363.875,67.09081,358.625,63.33886,352Zm36.88478-162.875c-7.752,6.25-15.00392,12.625-21.88087,19.125-15.12891-23.5-19.00392-41-15.00391-48.25,3.377-6.125,16.37891-11.5,37.88478-11.5,1.75,0,3.875.375,5.75.375C104.09864,162.25,101.84864,175.625,100.22364,189.125ZM223.99908,64c9.50195,0,22.25586,13.5,33.88282,37.25-11.252,3.75-22.50391,8-33.88282,12.875-11.377-4.875-22.62892-9.125-33.88283-12.875C201.74516,77.5,214.49712,64,223.99908,64Zm0,384c-9.502,0-22.25392-13.5-33.88283-37.25,11.25391-3.75,22.50587-8,33.88283-12.875C235.378,402.75,246.62994,407,257.8819,410.75,246.25494,434.5,233.501,448,223.99908,448Zm0-112a80,80,0,1,1,80-80A80.00023,80.00023,0,0,1,223.99908,336ZM384.6593,352c-3.625,6.625-19.00392,11.875-43.63479,11,2.752-13,5.127-26.375,6.752-40.125,7.75195-6.25,15.00391-12.625,21.87891-19.125C384.7843,327.25,388.6593,344.75,384.6593,352ZM369.65538,208.25c-6.875-6.5-14.127-12.875-21.87891-19.125-1.625-13.5-3.875-26.875-6.752-40.25,1.875,0,4.002-.375,5.752-.375,21.50391,0,34.50782,5.375,37.88283,11.5C388.6593,167.25,384.7843,184.75,369.65538,208.25Z"]
- };
- var faAudioDescription = {
- prefix: 'fas',
- iconName: 'audio-description',
- icon: [512, 512, [], "f29e", "M162.925 238.709l8.822 30.655h-25.606l9.041-30.652c1.277-4.421 2.651-9.994 3.872-15.245 1.22 5.251 2.594 10.823 3.871 15.242zm166.474-32.099h-14.523v98.781h14.523c29.776 0 46.175-17.678 46.175-49.776 0-32.239-17.49-49.005-46.175-49.005zM512 112v288c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48zM245.459 336.139l-57.097-168A12.001 12.001 0 0 0 177 160h-35.894a12.001 12.001 0 0 0-11.362 8.139l-57.097 168C70.003 343.922 75.789 352 84.009 352h29.133a12 12 0 0 0 11.535-8.693l8.574-29.906h51.367l8.793 29.977A12 12 0 0 0 204.926 352h29.172c8.22 0 14.006-8.078 11.361-15.861zm184.701-80.525c0-58.977-37.919-95.614-98.96-95.614h-57.366c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12H331.2c61.041 0 98.96-36.933 98.96-96.386z"]
- };
- var faAward = {
- prefix: 'fas',
- iconName: 'award',
- icon: [384, 512, [], "f559", "M97.12 362.63c-8.69-8.69-4.16-6.24-25.12-11.85-9.51-2.55-17.87-7.45-25.43-13.32L1.2 448.7c-4.39 10.77 3.81 22.47 15.43 22.03l52.69-2.01L105.56 507c8 8.44 22.04 5.81 26.43-4.96l52.05-127.62c-10.84 6.04-22.87 9.58-35.31 9.58-19.5 0-37.82-7.59-51.61-21.37zM382.8 448.7l-45.37-111.24c-7.56 5.88-15.92 10.77-25.43 13.32-21.07 5.64-16.45 3.18-25.12 11.85-13.79 13.78-32.12 21.37-51.62 21.37-12.44 0-24.47-3.55-35.31-9.58L252 502.04c4.39 10.77 18.44 13.4 26.43 4.96l36.25-38.28 52.69 2.01c11.62.44 19.82-11.27 15.43-22.03zM263 340c15.28-15.55 17.03-14.21 38.79-20.14 13.89-3.79 24.75-14.84 28.47-28.98 7.48-28.4 5.54-24.97 25.95-45.75 10.17-10.35 14.14-25.44 10.42-39.58-7.47-28.38-7.48-24.42 0-52.83 3.72-14.14-.25-29.23-10.42-39.58-20.41-20.78-18.47-17.36-25.95-45.75-3.72-14.14-14.58-25.19-28.47-28.98-27.88-7.61-24.52-5.62-44.95-26.41-10.17-10.35-25-14.4-38.89-10.61-27.87 7.6-23.98 7.61-51.9 0-13.89-3.79-28.72.25-38.89 10.61-20.41 20.78-17.05 18.8-44.94 26.41-13.89 3.79-24.75 14.84-28.47 28.98-7.47 28.39-5.54 24.97-25.95 45.75-10.17 10.35-14.15 25.44-10.42 39.58 7.47 28.36 7.48 24.4 0 52.82-3.72 14.14.25 29.23 10.42 39.59 20.41 20.78 18.47 17.35 25.95 45.75 3.72 14.14 14.58 25.19 28.47 28.98C104.6 325.96 106.27 325 121 340c13.23 13.47 33.84 15.88 49.74 5.82a39.676 39.676 0 0 1 42.53 0c15.89 10.06 36.5 7.65 49.73-5.82zM97.66 175.96c0-53.03 42.24-96.02 94.34-96.02s94.34 42.99 94.34 96.02-42.24 96.02-94.34 96.02-94.34-42.99-94.34-96.02z"]
- };
- var faBaby = {
- prefix: 'fas',
- iconName: 'baby',
- icon: [384, 512, [], "f77c", "M192 160c44.2 0 80-35.8 80-80S236.2 0 192 0s-80 35.8-80 80 35.8 80 80 80zm-53.4 248.8l25.6-32-61.5-51.2L56.8 383c-11.4 14.2-11.7 34.4-.8 49l48 64c7.9 10.5 19.9 16 32 16 8.3 0 16.8-2.6 24-8 17.7-13.2 21.2-38.3 8-56l-29.4-39.2zm142.7-83.2l-61.5 51.2 25.6 32L216 448c-13.2 17.7-9.7 42.8 8 56 7.2 5.4 15.6 8 24 8 12.2 0 24.2-5.5 32-16l48-64c10.9-14.6 10.6-34.8-.8-49l-45.9-57.4zM376.7 145c-12.7-18.1-37.6-22.4-55.7-9.8l-40.6 28.5c-52.7 37-124.2 37-176.8 0L63 135.3C44.9 122.6 20 127 7.3 145-5.4 163.1-1 188 17 200.7l40.6 28.5c17 11.9 35.4 20.9 54.4 27.9V288h160v-30.8c19-7 37.4-16 54.4-27.9l40.6-28.5c18.1-12.8 22.4-37.7 9.7-55.8z"]
- };
- var faBabyCarriage = {
- prefix: 'fas',
- iconName: 'baby-carriage',
- icon: [512, 512, [], "f77d", "M144.8 17c-11.3-17.8-37.2-22.8-54-9.4C35.3 51.9 0 118 0 192h256L144.8 17zM496 96h-48c-35.3 0-64 28.7-64 64v64H0c0 50.6 23 96.4 60.3 130.7C25.7 363.6 0 394.7 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-8.9-1.8-17.2-4.4-25.2 21.6 5.9 44.6 9.2 68.4 9.2s46.9-3.3 68.4-9.2c-2.7 8-4.4 16.3-4.4 25.2 0 44.2 35.8 80 80 80s80-35.8 80-80c0-37.3-25.7-68.4-60.3-77.3C425 320.4 448 274.6 448 224v-64h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM80 464c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm320-32c0 17.6-14.4 32-32 32s-32-14.4-32-32 14.4-32 32-32 32 14.4 32 32z"]
- };
- var faBackspace = {
- prefix: 'fas',
- iconName: 'backspace',
- icon: [640, 512, [], "f55a", "M576 64H205.26A63.97 63.97 0 0 0 160 82.75L9.37 233.37c-12.5 12.5-12.5 32.76 0 45.25L160 429.25c12 12 28.28 18.75 45.25 18.75H576c35.35 0 64-28.65 64-64V128c0-35.35-28.65-64-64-64zm-84.69 254.06c6.25 6.25 6.25 16.38 0 22.63l-22.62 22.62c-6.25 6.25-16.38 6.25-22.63 0L384 301.25l-62.06 62.06c-6.25 6.25-16.38 6.25-22.63 0l-22.62-22.62c-6.25-6.25-6.25-16.38 0-22.63L338.75 256l-62.06-62.06c-6.25-6.25-6.25-16.38 0-22.63l22.62-22.62c6.25-6.25 16.38-6.25 22.63 0L384 210.75l62.06-62.06c6.25-6.25 16.38-6.25 22.63 0l22.62 22.62c6.25 6.25 6.25 16.38 0 22.63L429.25 256l62.06 62.06z"]
- };
- var faBackward = {
- prefix: 'fas',
- iconName: 'backward',
- icon: [512, 512, [], "f04a", "M11.5 280.6l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2zm256 0l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2z"]
- };
- var faBacon = {
- prefix: 'fas',
- iconName: 'bacon',
- icon: [576, 512, [], "f7e5", "M218.92 336.39c34.89-34.89 44.2-59.7 54.05-86 10.61-28.29 21.59-57.54 61.37-97.34s69.05-50.77 97.35-61.38c23.88-9 46.64-17.68 76.79-45.37L470.81 8.91a31 31 0 0 0-40.18-2.83c-13.64 10.1-25.15 14.39-41 20.3C247 79.52 209.26 191.29 200.65 214.1c-29.75 78.83-89.55 94.68-98.72 98.09-24.86 9.26-54.73 20.38-91.07 50.36C-3 374-3.63 395 9.07 407.61l35.76 35.51C80 410.52 107 400.15 133 390.39c26.27-9.84 51.06-19.12 85.92-54zm348-232l-35.75-35.51c-35.19 32.63-62.18 43-88.25 52.79-26.26 9.85-51.06 19.16-85.95 54s-44.19 59.69-54 86C292.33 290 281.34 319.22 241.55 359s-69 50.73-97.3 61.32c-23.86 9-46.61 17.66-76.72 45.33l37.68 37.43a31 31 0 0 0 40.18 2.82c13.6-10.06 25.09-14.34 40.94-20.24 142.2-53 180-164.1 188.94-187.69C405 219.18 464.8 203.3 474 199.86c24.87-9.27 54.74-20.4 91.11-50.41 13.89-11.4 14.52-32.45 1.82-45.05z"]
- };
- var faBacteria = {
- prefix: 'fas',
- iconName: 'bacteria',
- icon: [640, 512, [], "e059", "M272.35,226.4A17.71,17.71,0,0,0,281.46,203l-4-9.08a121.29,121.29,0,0,1,12.36-3.08A83.34,83.34,0,0,0,323.57,177l10,9a17.76,17.76,0,1,0,23.92-26.27l-9.72-8.76a83.12,83.12,0,0,0,11.65-48.18l11.85-3.51a17.73,17.73,0,1,0-10.15-34l-11.34,3.36a84,84,0,0,0-36.38-35.57l2.84-10.85a17.8,17.8,0,0,0-34.47-8.93l-2.82,10.78a83.25,83.25,0,0,0-16.74,1.1C250.83,27,240,30.22,229.1,33.39l-3.38-9.46a17.8,17.8,0,0,0-33.56,11.89l3.49,9.8a286.74,286.74,0,0,0-43.94,23.57l-6.32-8.43a17.9,17.9,0,0,0-24.94-3.6A17.69,17.69,0,0,0,116.84,82l6.45,8.61a286.59,286.59,0,0,0-34.95,35.33l-8.82-6.42a17.84,17.84,0,0,0-24.89,3.86,17.66,17.66,0,0,0,3.88,24.77l8.88,6.47a286.6,286.6,0,0,0-23,43.91l-10.48-3.59a17.73,17.73,0,1,0-11.59,33.52L32.67,232c-2.79,10-5.79,19.84-7.52,30.22a83.16,83.16,0,0,0-.82,19l-11.58,3.43a17.73,17.73,0,1,0,10.13,34l11.27-3.33a83.51,83.51,0,0,0,36.39,35.43l-2.88,11.06a17.81,17.81,0,0,0,34.48,8.92l2.87-11c1,0,2.07.26,3.1.26a83.39,83.39,0,0,0,45.65-13.88l8.59,8.8a17.77,17.77,0,0,0,25.56-24.7l-9.14-9.37a83.41,83.41,0,0,0,12.08-31.05,119.08,119.08,0,0,1,3.87-15.53l9,4.22a17.74,17.74,0,1,0,15.15-32.09l-8.8-4.11c.67-1,1.2-2.08,1.9-3.05a119.89,119.89,0,0,1,7.87-9.41,121.73,121.73,0,0,1,11.65-11.4,119.49,119.49,0,0,1,9.94-7.82c1.12-.77,2.32-1.42,3.47-2.15l3.92,8.85a17.86,17.86,0,0,0,16.32,10.58A18.14,18.14,0,0,0,272.35,226.4ZM128,256a32,32,0,1,1,32-32A32,32,0,0,1,128,256Zm80-96a16,16,0,1,1,16-16A16,16,0,0,1,208,160Zm431.26,45.3a17.79,17.79,0,0,0-17.06-12.69,17.55,17.55,0,0,0-5.08.74l-11.27,3.33a83.61,83.61,0,0,0-36.39-35.43l2.88-11.06a17.81,17.81,0,0,0-34.48-8.91l-2.87,11c-1,0-2.07-.26-3.1-.26a83.32,83.32,0,0,0-45.65,13.89l-8.59-8.81a17.77,17.77,0,0,0-25.56,24.7l9.14,9.37a83.28,83.28,0,0,0-12.08,31.06,119.34,119.34,0,0,1-3.87,15.52l-9-4.22a17.74,17.74,0,1,0-15.15,32.09l8.8,4.11c-.67,1-1.2,2.08-1.89,3.05a117.71,117.71,0,0,1-7.94,9.47,119,119,0,0,1-11.57,11.33,121.59,121.59,0,0,1-10,7.83c-1.12.77-2.32,1.42-3.47,2.15l-3.92-8.85a17.86,17.86,0,0,0-16.32-10.58,18.14,18.14,0,0,0-7.18,1.5A17.71,17.71,0,0,0,358.54,309l4,9.08a118.71,118.71,0,0,1-12.36,3.08,83.34,83.34,0,0,0-33.77,13.9l-10-9a17.77,17.77,0,1,0-23.92,26.28l9.72,8.75a83.12,83.12,0,0,0-11.65,48.18l-11.86,3.51a17.73,17.73,0,1,0,10.16,34l11.34-3.36A84,84,0,0,0,326.61,479l-2.84,10.85a17.8,17.8,0,0,0,34.47,8.93L361.06,488a83.3,83.3,0,0,0,16.74-1.1c11.37-1.89,22.24-5.07,33.1-8.24l3.38,9.46a17.8,17.8,0,0,0,33.56-11.89l-3.49-9.79a287.66,287.66,0,0,0,43.94-23.58l6.32,8.43a17.88,17.88,0,0,0,24.93,3.6A17.67,17.67,0,0,0,523.16,430l-6.45-8.61a287.37,287.37,0,0,0,34.95-35.34l8.82,6.42a17.76,17.76,0,1,0,21-28.63l-8.88-6.46a287.17,287.17,0,0,0,23-43.92l10.48,3.59a17.73,17.73,0,1,0,11.59-33.52L607.33,280c2.79-10,5.79-19.84,7.52-30.21a83.27,83.27,0,0,0,.82-19.05l11.58-3.43A17.7,17.7,0,0,0,639.26,205.3ZM416,416a32,32,0,1,1,32-32A32,32,0,0,1,416,416Z"]
- };
- var faBacterium = {
- prefix: 'fas',
- iconName: 'bacterium',
- icon: [512, 512, [], "e05a", "M511,102.93A23.76,23.76,0,0,0,481.47,87l-15.12,4.48a111.85,111.85,0,0,0-48.5-47.42l3.79-14.47a23.74,23.74,0,0,0-46-11.91l-3.76,14.37a111.94,111.94,0,0,0-22.33,1.47,386.74,386.74,0,0,0-44.33,10.41l-4.3-12a23.74,23.74,0,0,0-44.75,15.85l4.3,12.05a383.4,383.4,0,0,0-58.69,31.83l-8-10.63a23.85,23.85,0,0,0-33.24-4.8,23.57,23.57,0,0,0-4.83,33.09l8,10.63a386.14,386.14,0,0,0-46.7,47.44l-11-8a23.68,23.68,0,1,0-28,38.17l11.09,8.06a383.45,383.45,0,0,0-30.92,58.75l-12.93-4.43a23.65,23.65,0,1,0-15.47,44.69l13,4.48a385.81,385.81,0,0,0-9.3,40.53A111.58,111.58,0,0,0,32.44,375L17,379.56a23.64,23.64,0,0,0,13.51,45.31l15-4.44a111.49,111.49,0,0,0,48.53,47.24l-3.85,14.75a23.66,23.66,0,0,0,17,28.83,24.7,24.7,0,0,0,6,.75,23.73,23.73,0,0,0,23-17.7L140,479.67c1.37.05,2.77.35,4.13.35A111.22,111.22,0,0,0,205,461.5l11.45,11.74a23.7,23.7,0,0,0,34.08-32.93l-12.19-12.5a111,111,0,0,0,16.11-41.4,158.69,158.69,0,0,1,5.16-20.71l12,5.64a23.66,23.66,0,1,0,20.19-42.79l-11.72-5.49c.89-1.32,1.59-2.77,2.52-4.06a157.86,157.86,0,0,1,10.46-12.49,159.5,159.5,0,0,1,15.59-15.28,162.18,162.18,0,0,1,13.23-10.4c1.5-1,3.1-1.89,4.63-2.87l5.23,11.8a23.74,23.74,0,0,0,43.48-19.08l-5.36-12.11a158.87,158.87,0,0,1,16.49-4.1,111,111,0,0,0,45-18.54l13.33,12a23.69,23.69,0,1,0,31.88-35l-12.94-11.67A110.83,110.83,0,0,0,479.21,137L495,132.32A23.61,23.61,0,0,0,511,102.93ZM160,368a48,48,0,1,1,48-48A48,48,0,0,1,160,368Zm80-136a24,24,0,1,1,24-24A24,24,0,0,1,240,232Z"]
- };
- var faBahai = {
- prefix: 'fas',
- iconName: 'bahai',
- icon: [512, 512, [], "f666", "M496.25 202.52l-110-15.44 41.82-104.34c6.67-16.64-11.6-32.18-26.59-22.63L307.44 120 273.35 12.82C270.64 4.27 263.32 0 256 0c-7.32 0-14.64 4.27-17.35 12.82l-34.09 107.19-94.04-59.89c-14.99-9.55-33.25 5.99-26.59 22.63l41.82 104.34-110 15.43c-17.54 2.46-21.68 26.27-6.03 34.67l98.16 52.66-74.48 83.54c-10.92 12.25-1.72 30.93 13.29 30.93 1.31 0 2.67-.14 4.07-.45l108.57-23.65-4.11 112.55c-.43 11.65 8.87 19.22 18.41 19.22 5.15 0 10.39-2.21 14.2-7.18l68.18-88.9 68.18 88.9c3.81 4.97 9.04 7.18 14.2 7.18 9.54 0 18.84-7.57 18.41-19.22l-4.11-112.55 108.57 23.65c17.36 3.76 29.21-17.2 17.35-30.49l-74.48-83.54 98.16-52.66c15.64-8.39 11.5-32.2-6.04-34.66zM338.51 311.68l-51.89-11.3 1.97 53.79L256 311.68l-32.59 42.49 1.96-53.79-51.89 11.3 35.6-39.93-46.92-25.17 52.57-7.38-19.99-49.87 44.95 28.62L256 166.72l16.29 51.23 44.95-28.62-19.99 49.87 52.57 7.38-46.92 25.17 35.61 39.93z"]
- };
- var faBalanceScale = {
- prefix: 'fas',
- iconName: 'balance-scale',
- icon: [640, 512, [], "f24e", "M256 336h-.02c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0C-2.06 328.75.02 320.33.02 336H0c0 44.18 57.31 80 128 80s128-35.82 128-80zM128 176l72 144H56l72-144zm511.98 160c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 320l72-144 72 144H440zm88 128H352V153.25c23.51-10.29 41.16-31.48 46.39-57.25H528c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H383.64C369.04 12.68 346.09 0 320 0s-49.04 12.68-63.64 32H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h129.61c5.23 25.76 22.87 46.96 46.39 57.25V448H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"]
- };
- var faBalanceScaleLeft = {
- prefix: 'fas',
- iconName: 'balance-scale-left',
- icon: [640, 512, [], "f515", "M528 448H352V153.25c20.42-8.94 36.1-26.22 43.38-47.47l132-44.26c8.38-2.81 12.89-11.88 10.08-20.26l-10.17-30.34C524.48 2.54 515.41-1.97 507.03.84L389.11 40.37C375.3 16.36 349.69 0 320 0c-44.18 0-80 35.82-80 80 0 3.43.59 6.71 1.01 10.03l-128.39 43.05c-8.38 2.81-12.89 11.88-10.08 20.26l10.17 30.34c2.81 8.38 11.88 12.89 20.26 10.08l142.05-47.63c4.07 2.77 8.43 5.12 12.99 7.12V496c0 8.84 7.16 16 16 16h224c8.84 0 16-7.16 16-16v-32c-.01-8.84-7.17-16-16.01-16zm111.98-144c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 288l72-144 72 144H440zm-269.07-37.51c-17.65-35.29-68.19-35.36-85.87 0C-2.06 424.75.02 416.33.02 432H0c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-16.18 1.34-8.73-85.05-181.51zM56 416l72-144 72 144H56z"]
- };
- var faBalanceScaleRight = {
- prefix: 'fas',
- iconName: 'balance-scale-right',
- icon: [640, 512, [], "f516", "M96 464v32c0 8.84 7.16 16 16 16h224c8.84 0 16-7.16 16-16V153.25c4.56-2 8.92-4.35 12.99-7.12l142.05 47.63c8.38 2.81 17.45-1.71 20.26-10.08l10.17-30.34c2.81-8.38-1.71-17.45-10.08-20.26l-128.4-43.05c.42-3.32 1.01-6.6 1.01-10.03 0-44.18-35.82-80-80-80-29.69 0-55.3 16.36-69.11 40.37L132.96.83c-8.38-2.81-17.45 1.71-20.26 10.08l-10.17 30.34c-2.81 8.38 1.71 17.45 10.08 20.26l132 44.26c7.28 21.25 22.96 38.54 43.38 47.47V448H112c-8.84 0-16 7.16-16 16zM0 304c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-15.67 2.08-7.25-85.05-181.51-17.68-35.36-68.22-35.29-85.87 0C-1.32 295.27.02 287.82.02 304H0zm56-16l72-144 72 144H56zm328.02 144H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-15.67 2.08-7.25-85.05-181.51-17.68-35.36-68.22-35.29-85.87 0-86.38 172.78-85.04 165.33-85.04 181.51zM440 416l72-144 72 144H440z"]
- };
- var faBan = {
- prefix: 'fas',
- iconName: 'ban',
- icon: [512, 512, [], "f05e", "M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z"]
- };
- var faBandAid = {
- prefix: 'fas',
- iconName: 'band-aid',
- icon: [640, 512, [], "f462", "M0 160v192c0 35.3 28.7 64 64 64h96V96H64c-35.3 0-64 28.7-64 64zm576-64h-96v320h96c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64zM192 416h256V96H192v320zm176-232c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24z"]
- };
- var faBarcode = {
- prefix: 'fas',
- iconName: 'barcode',
- icon: [512, 512, [], "f02a", "M0 448V64h18v384H0zm26.857-.273V64H36v383.727h-9.143zm27.143 0V64h8.857v383.727H54zm44.857 0V64h8.857v383.727h-8.857zm36 0V64h17.714v383.727h-17.714zm44.857 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm35.715 0V64h18v383.727h-18zm44.857 0V64h18v383.727h-18zm35.999 0V64h18.001v383.727h-18.001zm36.001 0V64h18.001v383.727h-18.001zm26.857 0V64h18v383.727h-18zm45.143 0V64h26.857v383.727h-26.857zm35.714 0V64h9.143v383.727H476zm18 .273V64h18v384h-18z"]
- };
- var faBars = {
- prefix: 'fas',
- iconName: 'bars',
- icon: [448, 512, [], "f0c9", "M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"]
- };
- var faBaseballBall = {
- prefix: 'fas',
- iconName: 'baseball-ball',
- icon: [496, 512, [], "f433", "M368.5 363.9l28.8-13.9c11.1 22.9 26 43.2 44.1 60.9 34-42.5 54.5-96.3 54.5-154.9 0-58.5-20.4-112.2-54.2-154.6-17.8 17.3-32.6 37.1-43.6 59.5l-28.7-14.1c12.8-26 30-49 50.8-69C375.6 34.7 315 8 248 8 181.1 8 120.5 34.6 75.9 77.7c20.7 19.9 37.9 42.9 50.7 68.8l-28.7 14.1c-11-22.3-25.7-42.1-43.5-59.4C20.4 143.7 0 197.4 0 256c0 58.6 20.4 112.3 54.4 154.7 18.2-17.7 33.2-38 44.3-61l28.8 13.9c-12.9 26.7-30.3 50.3-51.5 70.7 44.5 43.1 105.1 69.7 172 69.7 66.8 0 127.3-26.5 171.9-69.5-21.1-20.4-38.5-43.9-51.4-70.6zm-228.3-32l-30.5-9.8c14.9-46.4 12.7-93.8-.6-134l30.4-10c15 45.6 18 99.9.7 153.8zm216.3-153.4l30.4 10c-13.2 40.1-15.5 87.5-.6 134l-30.5 9.8c-17.3-54-14.3-108.3.7-153.8z"]
- };
- var faBasketballBall = {
- prefix: 'fas',
- iconName: 'basketball-ball',
- icon: [496, 512, [], "f434", "M212.3 10.3c-43.8 6.3-86.2 24.1-122.2 53.8l77.4 77.4c27.8-35.8 43.3-81.2 44.8-131.2zM248 222L405.9 64.1c-42.4-35-93.6-53.5-145.5-56.1-1.2 63.9-21.5 122.3-58.7 167.7L248 222zM56.1 98.1c-29.7 36-47.5 78.4-53.8 122.2 50-1.5 95.5-17 131.2-44.8L56.1 98.1zm272.2 204.2c45.3-37.1 103.7-57.4 167.7-58.7-2.6-51.9-21.1-103.1-56.1-145.5L282 256l46.3 46.3zM248 290L90.1 447.9c42.4 34.9 93.6 53.5 145.5 56.1 1.3-64 21.6-122.4 58.7-167.7L248 290zm191.9 123.9c29.7-36 47.5-78.4 53.8-122.2-50.1 1.6-95.5 17.1-131.2 44.8l77.4 77.4zM167.7 209.7C122.3 246.9 63.9 267.3 0 268.4c2.6 51.9 21.1 103.1 56.1 145.5L214 256l-46.3-46.3zm116 292c43.8-6.3 86.2-24.1 122.2-53.8l-77.4-77.4c-27.7 35.7-43.2 81.2-44.8 131.2z"]
- };
- var faBath = {
- prefix: 'fas',
- iconName: 'bath',
- icon: [512, 512, [], "f2cd", "M32,384a95.4,95.4,0,0,0,32,71.09V496a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V480H384v16a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V455.09A95.4,95.4,0,0,0,480,384V336H32ZM496,256H80V69.25a21.26,21.26,0,0,1,36.28-15l19.27,19.26c-13.13,29.88-7.61,59.11,8.62,79.73l-.17.17A16,16,0,0,0,144,176l11.31,11.31a16,16,0,0,0,22.63,0L283.31,81.94a16,16,0,0,0,0-22.63L272,48a16,16,0,0,0-22.62,0l-.17.17c-20.62-16.23-49.83-21.75-79.73-8.62L150.22,20.28A69.25,69.25,0,0,0,32,69.25V256H16A16,16,0,0,0,0,272v16a16,16,0,0,0,16,16H496a16,16,0,0,0,16-16V272A16,16,0,0,0,496,256Z"]
- };
- var faBatteryEmpty = {
- prefix: 'fas',
- iconName: 'battery-empty',
- icon: [640, 512, [], "f244", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48z"]
- };
- var faBatteryFull = {
- prefix: 'fas',
- iconName: 'battery-full',
- icon: [640, 512, [], "f240", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-48 96H96v128h416V192z"]
- };
- var faBatteryHalf = {
- prefix: 'fas',
- iconName: 'battery-half',
- icon: [640, 512, [], "f242", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-240 96H96v128h224V192z"]
- };
- var faBatteryQuarter = {
- prefix: 'fas',
- iconName: 'battery-quarter',
- icon: [640, 512, [], "f243", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-336 96H96v128h128V192z"]
- };
- var faBatteryThreeQuarters = {
- prefix: 'fas',
- iconName: 'battery-three-quarters',
- icon: [640, 512, [], "f241", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-144 96H96v128h320V192z"]
- };
- var faBed = {
- prefix: 'fas',
- iconName: 'bed',
- icon: [640, 512, [], "f236", "M176 256c44.11 0 80-35.89 80-80s-35.89-80-80-80-80 35.89-80 80 35.89 80 80 80zm352-128H304c-8.84 0-16 7.16-16 16v144H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v352c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h512v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V240c0-61.86-50.14-112-112-112z"]
- };
- var faBeer = {
- prefix: 'fas',
- iconName: 'beer',
- icon: [448, 512, [], "f0fc", "M368 96h-48V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24v-42.11l80.606-35.977C429.396 365.063 448 336.388 448 304.86V176c0-44.112-35.888-80-80-80zm16 208.86a16.018 16.018 0 0 1-9.479 14.611L320 343.805V160h48c8.822 0 16 7.178 16 16v128.86zM208 384c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16zm-96 0c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16z"]
- };
- var faBell = {
- prefix: 'fas',
- iconName: 'bell',
- icon: [448, 512, [], "f0f3", "M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z"]
- };
- var faBellSlash = {
- prefix: 'fas',
- iconName: 'bell-slash',
- icon: [640, 512, [], "f1f6", "M633.82 458.1l-90.62-70.05c.19-1.38.8-2.66.8-4.06.05-7.55-2.61-15.27-8.61-21.71-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-40.33 8.38-74.66 31.07-97.59 62.57L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.35 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.42-6.97 4.17-17.02-2.81-22.45zM157.23 251.54c-8.61 67.96-36.41 93.33-52.62 110.75-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h241.92L157.23 251.54zM320 512c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z"]
- };
- var faBezierCurve = {
- prefix: 'fas',
- iconName: 'bezier-curve',
- icon: [640, 512, [], "f55b", "M368 32h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM208 88h-84.75C113.75 64.56 90.84 48 64 48 28.66 48 0 76.65 0 112s28.66 64 64 64c26.84 0 49.75-16.56 59.25-40h79.73c-55.37 32.52-95.86 87.32-109.54 152h49.4c11.3-41.61 36.77-77.21 71.04-101.56-3.7-8.08-5.88-16.99-5.88-26.44V88zm-48 232H64c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zM576 48c-26.84 0-49.75 16.56-59.25 40H432v72c0 9.45-2.19 18.36-5.88 26.44 34.27 24.35 59.74 59.95 71.04 101.56h49.4c-13.68-64.68-54.17-119.48-109.54-152h79.73c9.5 23.44 32.41 40 59.25 40 35.34 0 64-28.65 64-64s-28.66-64-64-64zm0 272h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"]
- };
- var faBible = {
- prefix: 'fas',
- iconName: 'bible',
- icon: [448, 512, [], "f647", "M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM144 144c0-8.84 7.16-16 16-16h48V80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v48h48c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-48v112c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V192h-48c-8.84 0-16-7.16-16-16v-32zm236.8 304H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z"]
- };
- var faBicycle = {
- prefix: 'fas',
- iconName: 'bicycle',
- icon: [640, 512, [], "f206", "M512.509 192.001c-16.373-.064-32.03 2.955-46.436 8.495l-77.68-125.153A24 24 0 0 0 368.001 64h-64c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h50.649l14.896 24H256.002v-16c0-8.837-7.163-16-16-16h-87.459c-13.441 0-24.777 10.999-24.536 24.437.232 13.044 10.876 23.563 23.995 23.563h48.726l-29.417 47.52c-13.433-4.83-27.904-7.483-42.992-7.52C58.094 191.83.412 249.012.002 319.236-.413 390.279 57.055 448 128.002 448c59.642 0 109.758-40.793 123.967-96h52.033a24 24 0 0 0 20.406-11.367L410.37 201.77l14.938 24.067c-25.455 23.448-41.385 57.081-41.307 94.437.145 68.833 57.899 127.051 126.729 127.719 70.606.685 128.181-55.803 129.255-125.996 1.086-70.941-56.526-129.72-127.476-129.996zM186.75 265.772c9.727 10.529 16.673 23.661 19.642 38.228h-43.306l23.664-38.228zM128.002 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c5.869 0 11.586.653 17.099 1.859l-45.505 73.509C89.715 331.327 101.213 352 120.002 352h81.3c-12.37 28.225-40.562 48-73.3 48zm162.63-96h-35.624c-3.96-31.756-19.556-59.894-42.383-80.026L237.371 184h127.547l-74.286 120zm217.057 95.886c-41.036-2.165-74.049-35.692-75.627-76.755-.812-21.121 6.633-40.518 19.335-55.263l44.433 71.586c4.66 7.508 14.524 9.816 22.032 5.156l13.594-8.437c7.508-4.66 9.817-14.524 5.156-22.032l-44.468-71.643a79.901 79.901 0 0 1 19.858-2.497c44.112 0 80 35.888 80 80-.001 45.54-38.252 82.316-84.313 79.885z"]
- };
- var faBiking = {
- prefix: 'fas',
- iconName: 'biking',
- icon: [640, 512, [], "f84a", "M400 96a48 48 0 1 0-48-48 48 48 0 0 0 48 48zm-4 121a31.9 31.9 0 0 0 20 7h64a32 32 0 0 0 0-64h-52.78L356 103a31.94 31.94 0 0 0-40.81.68l-112 96a32 32 0 0 0 3.08 50.92L288 305.12V416a32 32 0 0 0 64 0V288a32 32 0 0 0-14.25-26.62l-41.36-27.57 58.25-49.92zm116 39a128 128 0 1 0 128 128 128 128 0 0 0-128-128zm0 192a64 64 0 1 1 64-64 64 64 0 0 1-64 64zM128 256a128 128 0 1 0 128 128 128 128 0 0 0-128-128zm0 192a64 64 0 1 1 64-64 64 64 0 0 1-64 64z"]
- };
- var faBinoculars = {
- prefix: 'fas',
- iconName: 'binoculars',
- icon: [512, 512, [], "f1e5", "M416 48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v48h96V48zM63.91 159.99C61.4 253.84 3.46 274.22 0 404v44c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V288h32V128H95.84c-17.63 0-31.45 14.37-31.93 31.99zm384.18 0c-.48-17.62-14.3-31.99-31.93-31.99H320v160h32v160c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-44c-3.46-129.78-61.4-150.16-63.91-244.01zM176 32h-64c-8.84 0-16 7.16-16 16v48h96V48c0-8.84-7.16-16-16-16zm48 256h64V128h-64v160z"]
- };
- var faBiohazard = {
- prefix: 'fas',
- iconName: 'biohazard',
- icon: [576, 512, [], "f780", "M287.9 112c18.6 0 36.2 3.8 52.8 9.6 13.3-10.3 23.6-24.3 29.5-40.7-25.2-10.9-53-17-82.2-17-29.1 0-56.9 6-82.1 16.9 5.9 16.4 16.2 30.4 29.5 40.7 16.5-5.7 34-9.5 52.5-9.5zM163.6 438.7c12-11.8 20.4-26.4 24.5-42.4-32.9-26.4-54.8-65.3-58.9-109.6-8.5-2.8-17.2-4.6-26.4-4.6-7.6 0-15.2 1-22.5 3.1 4.1 62.8 35.8 118 83.3 153.5zm224.2-42.6c4.1 16 12.5 30.7 24.5 42.5 47.4-35.5 79.1-90.7 83-153.5-7.2-2-14.7-3-22.2-3-9.2 0-18 1.9-26.6 4.7-4.1 44.2-26 82.9-58.7 109.3zm113.5-205c-17.6-10.4-36.3-16.6-55.3-19.9 6-17.7 10-36.4 10-56.2 0-41-14.5-80.8-41-112.2-2.5-3-6.6-3.7-10-1.8-3.3 1.9-4.8 6-3.6 9.7 4.5 13.8 6.6 26.3 6.6 38.5 0 67.8-53.8 122.9-120 122.9S168 117 168 49.2c0-12.1 2.2-24.7 6.6-38.5 1.2-3.7-.3-7.8-3.6-9.7-3.4-1.9-7.5-1.2-10 1.8C134.6 34.2 120 74 120 115c0 19.8 3.9 38.5 10 56.2-18.9 3.3-37.7 9.5-55.3 19.9-34.6 20.5-61 53.3-74.3 92.4-1.3 3.7.2 7.7 3.5 9.8 3.3 2 7.5 1.3 10-1.6 9.4-10.8 19-19.1 29.2-25.1 57.3-33.9 130.8-13.7 163.9 45 33.1 58.7 13.4 134-43.9 167.9-10.2 6.1-22 10.4-35.8 13.4-3.7.8-6.4 4.2-6.4 8.1.1 4 2.7 7.3 6.5 8 39.7 7.8 80.6.8 115.2-19.7 18-10.6 32.9-24.5 45.3-40.1 12.4 15.6 27.3 29.5 45.3 40.1 34.6 20.5 75.5 27.5 115.2 19.7 3.8-.7 6.4-4 6.5-8 0-3.9-2.6-7.3-6.4-8.1-13.9-2.9-25.6-7.3-35.8-13.4-57.3-33.9-77-109.2-43.9-167.9s106.6-78.9 163.9-45c10.2 6.1 19.8 14.3 29.2 25.1 2.5 2.9 6.7 3.6 10 1.6s4.8-6.1 3.5-9.8c-13.1-39.1-39.5-72-74.1-92.4zm-213.4 129c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"]
- };
- var faBirthdayCake = {
- prefix: 'fas',
- iconName: 'birthday-cake',
- icon: [448, 512, [], "f1fd", "M448 384c-28.02 0-31.26-32-74.5-32-43.43 0-46.825 32-74.75 32-27.695 0-31.454-32-74.75-32-42.842 0-47.218 32-74.5 32-28.148 0-31.202-32-74.75-32-43.547 0-46.653 32-74.75 32v-80c0-26.5 21.5-48 48-48h16V112h64v144h64V112h64v144h64V112h64v144h16c26.5 0 48 21.5 48 48v80zm0 128H0v-96c43.356 0 46.767-32 74.75-32 27.951 0 31.253 32 74.75 32 42.843 0 47.217-32 74.5-32 28.148 0 31.201 32 74.75 32 43.357 0 46.767-32 74.75-32 27.488 0 31.252 32 74.5 32v96zM96 96c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40z"]
- };
- var faBlender = {
- prefix: 'fas',
- iconName: 'blender',
- icon: [512, 512, [], "f517", "M416 384H160c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-128 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm40-416h166.54L512 0H48C21.49 0 0 21.49 0 48v160c0 26.51 21.49 48 48 48h103.27l8.73 96h256l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H328c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM64 192V64h69.82l11.64 128H64z"]
- };
- var faBlenderPhone = {
- prefix: 'fas',
- iconName: 'blender-phone',
- icon: [576, 512, [], "f6b6", "M392 64h166.54L576 0H192v352h288l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H392c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM158.8 335.01l-25.78-63.26c-2.78-6.81-9.8-10.99-17.24-10.26l-45.03 4.42c-17.28-46.94-17.65-99.78 0-147.72l45.03 4.42c7.43.73 14.46-3.46 17.24-10.26l25.78-63.26c3.02-7.39.2-15.85-6.68-20.07l-39.28-24.1C98.51-3.87 80.09-.5 68.95 11.97c-92.57 103.6-92 259.55 2.1 362.49 9.87 10.8 29.12 12.48 41.65 4.8l39.41-24.18c6.89-4.22 9.7-12.67 6.69-20.07zM480 384H192c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-144 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"]
- };
- var faBlind = {
- prefix: 'fas',
- iconName: 'blind',
- icon: [384, 512, [], "f29d", "M380.15 510.837a8 8 0 0 1-10.989-2.687l-125.33-206.427a31.923 31.923 0 0 0 12.958-9.485l126.048 207.608a8 8 0 0 1-2.687 10.991zM142.803 314.338l-32.54 89.485 36.12 88.285c6.693 16.36 25.377 24.192 41.733 17.501 16.357-6.692 24.193-25.376 17.501-41.734l-62.814-153.537zM96 88c24.301 0 44-19.699 44-44S120.301 0 96 0 52 19.699 52 44s19.699 44 44 44zm154.837 169.128l-120-152c-4.733-5.995-11.75-9.108-18.837-9.112V96H80v.026c-7.146.003-14.217 3.161-18.944 9.24L0 183.766v95.694c0 13.455 11.011 24.791 24.464 24.536C37.505 303.748 48 293.1 48 280v-79.766l16-20.571v140.698L9.927 469.055c-6.04 16.609 2.528 34.969 19.138 41.009 16.602 6.039 34.968-2.524 41.009-19.138L136 309.638V202.441l-31.406-39.816a4 4 0 1 1 6.269-4.971l102.3 129.217c9.145 11.584 24.368 11.339 33.708 3.965 10.41-8.216 12.159-23.334 3.966-33.708z"]
- };
- var faBlog = {
- prefix: 'fas',
- iconName: 'blog',
- icon: [512, 512, [], "f781", "M172.2 226.8c-14.6-2.9-28.2 8.9-28.2 23.8V301c0 10.2 7.1 18.4 16.7 22 18.2 6.8 31.3 24.4 31.3 45 0 26.5-21.5 48-48 48s-48-21.5-48-48V120c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v248c0 89.5 82.1 160.2 175 140.7 54.4-11.4 98.3-55.4 109.7-109.7 17.4-82.9-37-157.2-112.5-172.2zM209 0c-9.2-.5-17 6.8-17 16v31.6c0 8.5 6.6 15.5 15 15.9 129.4 7 233.4 112 240.9 241.5.5 8.4 7.5 15 15.9 15h32.1c9.2 0 16.5-7.8 16-17C503.4 139.8 372.2 8.6 209 0zm.3 96c-9.3-.7-17.3 6.7-17.3 16.1v32.1c0 8.4 6.5 15.3 14.8 15.9 76.8 6.3 138 68.2 144.9 145.2.8 8.3 7.6 14.7 15.9 14.7h32.2c9.3 0 16.8-8 16.1-17.3-8.4-110.1-96.5-198.2-206.6-206.7z"]
- };
- var faBold = {
- prefix: 'fas',
- iconName: 'bold',
- icon: [384, 512, [], "f032", "M333.49 238a122 122 0 0 0 27-65.21C367.87 96.49 308 32 233.42 32H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h31.87v288H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h209.32c70.8 0 134.14-51.75 141-122.4 4.74-48.45-16.39-92.06-50.83-119.6zM145.66 112h87.76a48 48 0 0 1 0 96h-87.76zm87.76 288h-87.76V288h87.76a56 56 0 0 1 0 112z"]
- };
- var faBolt = {
- prefix: 'fas',
- iconName: 'bolt',
- icon: [320, 512, [], "f0e7", "M296 160H180.6l42.6-129.8C227.2 15 215.7 0 200 0H56C44 0 33.8 8.9 32.2 20.8l-32 240C-1.7 275.2 9.5 288 24 288h118.7L96.6 482.5c-3.6 15.2 8 29.5 23.3 29.5 8.4 0 16.4-4.4 20.8-12l176-304c9.3-15.9-2.2-36-20.7-36z"]
- };
- var faBomb = {
- prefix: 'fas',
- iconName: 'bomb',
- icon: [512, 512, [], "f1e2", "M440.5 88.5l-52 52L415 167c9.4 9.4 9.4 24.6 0 33.9l-17.4 17.4c11.8 26.1 18.4 55.1 18.4 85.6 0 114.9-93.1 208-208 208S0 418.9 0 304 93.1 96 208 96c30.5 0 59.5 6.6 85.6 18.4L311 97c9.4-9.4 24.6-9.4 33.9 0l26.5 26.5 52-52 17.1 17zM500 60h-24c-6.6 0-12 5.4-12 12s5.4 12 12 12h24c6.6 0 12-5.4 12-12s-5.4-12-12-12zM440 0c-6.6 0-12 5.4-12 12v24c0 6.6 5.4 12 12 12s12-5.4 12-12V12c0-6.6-5.4-12-12-12zm33.9 55l17-17c4.7-4.7 4.7-12.3 0-17-4.7-4.7-12.3-4.7-17 0l-17 17c-4.7 4.7-4.7 12.3 0 17 4.8 4.7 12.4 4.7 17 0zm-67.8 0c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17zm67.8 34c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17zM112 272c0-35.3 28.7-64 64-64 8.8 0 16-7.2 16-16s-7.2-16-16-16c-52.9 0-96 43.1-96 96 0 8.8 7.2 16 16 16s16-7.2 16-16z"]
- };
- var faBone = {
- prefix: 'fas',
- iconName: 'bone',
- icon: [640, 512, [], "f5d7", "M598.88 244.56c25.2-12.6 41.12-38.36 41.12-66.53v-7.64C640 129.3 606.7 96 565.61 96c-32.02 0-60.44 20.49-70.57 50.86-7.68 23.03-11.6 45.14-38.11 45.14H183.06c-27.38 0-31.58-25.54-38.11-45.14C134.83 116.49 106.4 96 74.39 96 33.3 96 0 129.3 0 170.39v7.64c0 28.17 15.92 53.93 41.12 66.53 9.43 4.71 9.43 18.17 0 22.88C15.92 280.04 0 305.8 0 333.97v7.64C0 382.7 33.3 416 74.38 416c32.02 0 60.44-20.49 70.57-50.86 7.68-23.03 11.6-45.14 38.11-45.14h273.87c27.38 0 31.58 25.54 38.11 45.14C505.17 395.51 533.6 416 565.61 416c41.08 0 74.38-33.3 74.38-74.39v-7.64c0-28.18-15.92-53.93-41.12-66.53-9.42-4.71-9.42-18.17.01-22.88z"]
- };
- var faBong = {
- prefix: 'fas',
- iconName: 'bong',
- icon: [448, 512, [], "f55c", "M302.5 512c23.18 0 44.43-12.58 56-32.66C374.69 451.26 384 418.75 384 384c0-36.12-10.08-69.81-27.44-98.62L400 241.94l9.38 9.38c6.25 6.25 16.38 6.25 22.63 0l11.3-11.32c6.25-6.25 6.25-16.38 0-22.63l-52.69-52.69c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l9.38 9.38-39.41 39.41c-11.56-11.37-24.53-21.33-38.65-29.51V63.74l15.97-.02c8.82-.01 15.97-7.16 15.98-15.98l.04-31.72C320 7.17 312.82-.01 303.97 0L80.03.26c-8.82.01-15.97 7.16-15.98 15.98l-.04 31.73c-.01 8.85 7.17 16.02 16.02 16.01L96 63.96v153.93C38.67 251.1 0 312.97 0 384c0 34.75 9.31 67.27 25.5 95.34C37.08 499.42 58.33 512 81.5 512h221zM120.06 259.43L144 245.56V63.91l96-.11v181.76l23.94 13.87c24.81 14.37 44.12 35.73 56.56 60.57h-257c12.45-24.84 31.75-46.2 56.56-60.57z"]
- };
- var faBook = {
- prefix: 'fas',
- iconName: 'book',
- icon: [448, 512, [], "f02d", "M448 360V24c0-13.3-10.7-24-24-24H96C43 0 0 43 0 96v320c0 53 43 96 96 96h328c13.3 0 24-10.7 24-24v-16c0-7.5-3.5-14.3-8.9-18.7-4.2-15.4-4.2-59.3 0-74.7 5.4-4.3 8.9-11.1 8.9-18.6zM128 134c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm0 64c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm253.4 250H96c-17.7 0-32-14.3-32-32 0-17.6 14.4-32 32-32h285.4c-1.9 17.1-1.9 46.9 0 64z"]
- };
- var faBookDead = {
- prefix: 'fas',
- iconName: 'book-dead',
- icon: [448, 512, [], "f6b7", "M272 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm176 222.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM240 56c44.2 0 80 28.7 80 64 0 20.9-12.7 39.2-32 50.9V184c0 8.8-7.2 16-16 16h-64c-8.8 0-16-7.2-16-16v-13.1c-19.3-11.7-32-30-32-50.9 0-35.3 35.8-64 80-64zM124.8 223.3l6.3-14.7c1.7-4.1 6.4-5.9 10.5-4.2l98.3 42.1 98.4-42.1c4.1-1.7 8.8.1 10.5 4.2l6.3 14.7c1.7 4.1-.1 8.8-4.2 10.5L280.6 264l70.3 30.1c4.1 1.7 5.9 6.4 4.2 10.5l-6.3 14.7c-1.7 4.1-6.4 5.9-10.5 4.2L240 281.4l-98.3 42.2c-4.1 1.7-8.8-.1-10.5-4.2l-6.3-14.7c-1.7-4.1.1-8.8 4.2-10.5l70.4-30.1-70.5-30.3c-4.1-1.7-5.9-6.4-4.2-10.5zm256 224.7H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8zM208 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16z"]
- };
- var faBookMedical = {
- prefix: 'fas',
- iconName: 'book-medical',
- icon: [448, 512, [], "f7e6", "M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16q0-9.6-9.6-19.2c-3.2-16-3.2-60.8 0-73.6q9.6-4.8 9.6-19.2zM144 168a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8v48a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8zm236.8 280H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8z"]
- };
- var faBookOpen = {
- prefix: 'fas',
- iconName: 'book-open',
- icon: [576, 512, [], "f518", "M542.22 32.05c-54.8 3.11-163.72 14.43-230.96 55.59-4.64 2.84-7.27 7.89-7.27 13.17v363.87c0 11.55 12.63 18.85 23.28 13.49 69.18-34.82 169.23-44.32 218.7-46.92 16.89-.89 30.02-14.43 30.02-30.66V62.75c.01-17.71-15.35-31.74-33.77-30.7zM264.73 87.64C197.5 46.48 88.58 35.17 33.78 32.05 15.36 31.01 0 45.04 0 62.75V400.6c0 16.24 13.13 29.78 30.02 30.66 49.49 2.6 149.59 12.11 218.77 46.95 10.62 5.35 23.21-1.94 23.21-13.46V100.63c0-5.29-2.62-10.14-7.27-12.99z"]
- };
- var faBookReader = {
- prefix: 'fas',
- iconName: 'book-reader',
- icon: [512, 512, [], "f5da", "M352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM233.59 241.1c-59.33-36.32-155.43-46.3-203.79-49.05C13.55 191.13 0 203.51 0 219.14v222.8c0 14.33 11.59 26.28 26.49 27.05 43.66 2.29 131.99 10.68 193.04 41.43 9.37 4.72 20.48-1.71 20.48-11.87V252.56c-.01-4.67-2.32-8.95-6.42-11.46zm248.61-49.05c-48.35 2.74-144.46 12.73-203.78 49.05-4.1 2.51-6.41 6.96-6.41 11.63v245.79c0 10.19 11.14 16.63 20.54 11.9 61.04-30.72 149.32-39.11 192.97-41.4 14.9-.78 26.49-12.73 26.49-27.06V219.14c-.01-15.63-13.56-28.01-29.81-27.09z"]
- };
- var faBookmark = {
- prefix: 'fas',
- iconName: 'bookmark',
- icon: [384, 512, [], "f02e", "M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z"]
- };
- var faBorderAll = {
- prefix: 'fas',
- iconName: 'border-all',
- icon: [448, 512, [], "f84c", "M416 32H32A32 32 0 0 0 0 64v384a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V64a32 32 0 0 0-32-32zm-32 64v128H256V96zm-192 0v128H64V96zM64 416V288h128v128zm192 0V288h128v128z"]
- };
- var faBorderNone = {
- prefix: 'fas',
- iconName: 'border-none',
- icon: [448, 512, [], "f850", "M240 224h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-288 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM240 320h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-96 288h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96-384h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM48 224H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"]
- };
- var faBorderStyle = {
- prefix: 'fas',
- iconName: 'border-style',
- icon: [448, 512, [], "f853", "M240 416h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm192 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-288h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H32A32 32 0 0 0 0 64v400a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V96h368a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"]
- };
- var faBowlingBall = {
- prefix: 'fas',
- iconName: 'bowling-ball',
- icon: [496, 512, [], "f436", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM120 192c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64-96c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm48 144c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"]
- };
- var faBox = {
- prefix: 'fas',
- iconName: 'box',
- icon: [512, 512, [], "f466", "M509.5 184.6L458.9 32.8C452.4 13.2 434.1 0 413.4 0H272v192h238.7c-.4-2.5-.4-5-1.2-7.4zM240 0H98.6c-20.7 0-39 13.2-45.5 32.8L2.5 184.6c-.8 2.4-.8 4.9-1.2 7.4H240V0zM0 224v240c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V224H0z"]
- };
- var faBoxOpen = {
- prefix: 'fas',
- iconName: 'box-open',
- icon: [640, 512, [], "f49e", "M425.7 256c-16.9 0-32.8-9-41.4-23.4L320 126l-64.2 106.6c-8.7 14.5-24.6 23.5-41.5 23.5-4.5 0-9-.6-13.3-1.9L64 215v178c0 14.7 10 27.5 24.2 31l216.2 54.1c10.2 2.5 20.9 2.5 31 0L551.8 424c14.2-3.6 24.2-16.4 24.2-31V215l-137 39.1c-4.3 1.3-8.8 1.9-13.3 1.9zm212.6-112.2L586.8 41c-3.1-6.2-9.8-9.8-16.7-8.9L320 64l91.7 152.1c3.8 6.3 11.4 9.3 18.5 7.3l197.9-56.5c9.9-2.9 14.7-13.9 10.2-23.1zM53.2 41L1.7 143.8c-4.6 9.2.3 20.2 10.1 23l197.9 56.5c7.1 2 14.7-1 18.5-7.3L320 64 69.8 32.1c-6.9-.8-13.5 2.7-16.6 8.9z"]
- };
- var faBoxTissue = {
- prefix: 'fas',
- iconName: 'box-tissue',
- icon: [512, 512, [], "e05b", "M383.88,287.82l64-192H338.47a70.2,70.2,0,0,1-66.59-48,70.21,70.21,0,0,0-66.6-48H63.88l64,288Zm-384,192a32,32,0,0,0,32,32h448a32,32,0,0,0,32-32v-64H-.12Zm480-256H438.94l-21.33,64h14.27a16,16,0,0,1,0,32h-352a16,16,0,1,1,0-32H95.09l-14.22-64h-49a32,32,0,0,0-32,32v128h512v-128A32,32,0,0,0,479.88,223.82Z"]
- };
- var faBoxes = {
- prefix: 'fas',
- iconName: 'boxes',
- icon: [576, 512, [], "f468", "M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z"]
- };
- var faBraille = {
- prefix: 'fas',
- iconName: 'braille',
- icon: [640, 512, [], "f2a1", "M128 256c0 35.346-28.654 64-64 64S0 291.346 0 256s28.654-64 64-64 64 28.654 64 64zM64 384c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352C28.654 32 0 60.654 0 96s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm224 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-320c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z"]
- };
- var faBrain = {
- prefix: 'fas',
- iconName: 'brain',
- icon: [576, 512, [], "f5dc", "M208 0c-29.9 0-54.7 20.5-61.8 48.2-.8 0-1.4-.2-2.2-.2-35.3 0-64 28.7-64 64 0 4.8.6 9.5 1.7 14C52.5 138 32 166.6 32 200c0 12.6 3.2 24.3 8.3 34.9C16.3 248.7 0 274.3 0 304c0 33.3 20.4 61.9 49.4 73.9-.9 4.6-1.4 9.3-1.4 14.1 0 39.8 32.2 72 72 72 4.1 0 8.1-.5 12-1.2 9.6 28.5 36.2 49.2 68 49.2 39.8 0 72-32.2 72-72V64c0-35.3-28.7-64-64-64zm368 304c0-29.7-16.3-55.3-40.3-69.1 5.2-10.6 8.3-22.3 8.3-34.9 0-33.4-20.5-62-49.7-74 1-4.5 1.7-9.2 1.7-14 0-35.3-28.7-64-64-64-.8 0-1.5.2-2.2.2C422.7 20.5 397.9 0 368 0c-35.3 0-64 28.6-64 64v376c0 39.8 32.2 72 72 72 31.8 0 58.4-20.7 68-49.2 3.9.7 7.9 1.2 12 1.2 39.8 0 72-32.2 72-72 0-4.8-.5-9.5-1.4-14.1 29-12 49.4-40.6 49.4-73.9z"]
- };
- var faBreadSlice = {
- prefix: 'fas',
- iconName: 'bread-slice',
- icon: [576, 512, [], "f7ec", "M288 0C108 0 0 93.4 0 169.14 0 199.44 24.24 224 64 224v256c0 17.67 16.12 32 36 32h376c19.88 0 36-14.33 36-32V224c39.76 0 64-24.56 64-54.86C576 93.4 468 0 288 0z"]
- };
- var faBriefcase = {
- prefix: 'fas',
- iconName: 'briefcase',
- icon: [512, 512, [], "f0b1", "M320 336c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h416c25.6 0 48-22.4 48-48V288H320v48zm144-208h-80V80c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h512v-80c0-25.6-22.4-48-48-48zm-144 0H192V96h128v32z"]
- };
- var faBriefcaseMedical = {
- prefix: 'fas',
- iconName: 'briefcase-medical',
- icon: [512, 512, [], "f469", "M464 128h-80V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48zM192 96h128v32H192V96zm160 248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48z"]
- };
- var faBroadcastTower = {
- prefix: 'fas',
- iconName: 'broadcast-tower',
- icon: [640, 512, [], "f519", "M150.94 192h33.73c11.01 0 18.61-10.83 14.86-21.18-4.93-13.58-7.55-27.98-7.55-42.82s2.62-29.24 7.55-42.82C203.29 74.83 195.68 64 184.67 64h-33.73c-7.01 0-13.46 4.49-15.41 11.23C130.64 92.21 128 109.88 128 128c0 18.12 2.64 35.79 7.54 52.76 1.94 6.74 8.39 11.24 15.4 11.24zM89.92 23.34C95.56 12.72 87.97 0 75.96 0H40.63c-6.27 0-12.14 3.59-14.74 9.31C9.4 45.54 0 85.65 0 128c0 24.75 3.12 68.33 26.69 118.86 2.62 5.63 8.42 9.14 14.61 9.14h34.84c12.02 0 19.61-12.74 13.95-23.37-49.78-93.32-16.71-178.15-.17-209.29zM614.06 9.29C611.46 3.58 605.6 0 599.33 0h-35.42c-11.98 0-19.66 12.66-14.02 23.25 18.27 34.29 48.42 119.42.28 209.23-5.72 10.68 1.8 23.52 13.91 23.52h35.23c6.27 0 12.13-3.58 14.73-9.29C630.57 210.48 640 170.36 640 128s-9.42-82.48-25.94-118.71zM489.06 64h-33.73c-11.01 0-18.61 10.83-14.86 21.18 4.93 13.58 7.55 27.98 7.55 42.82s-2.62 29.24-7.55 42.82c-3.76 10.35 3.85 21.18 14.86 21.18h33.73c7.02 0 13.46-4.49 15.41-11.24 4.9-16.97 7.53-34.64 7.53-52.76 0-18.12-2.64-35.79-7.54-52.76-1.94-6.75-8.39-11.24-15.4-11.24zm-116.3 100.12c7.05-10.29 11.2-22.71 11.2-36.12 0-35.35-28.63-64-63.96-64-35.32 0-63.96 28.65-63.96 64 0 13.41 4.15 25.83 11.2 36.12l-130.5 313.41c-3.4 8.15.46 17.52 8.61 20.92l29.51 12.31c8.15 3.4 17.52-.46 20.91-8.61L244.96 384h150.07l49.2 118.15c3.4 8.16 12.76 12.01 20.91 8.61l29.51-12.31c8.15-3.4 12-12.77 8.61-20.92l-130.5-313.41zM271.62 320L320 203.81 368.38 320h-96.76z"]
- };
- var faBroom = {
- prefix: 'fas',
- iconName: 'broom',
- icon: [640, 512, [], "f51a", "M256.47 216.77l86.73 109.18s-16.6 102.36-76.57 150.12C206.66 523.85 0 510.19 0 510.19s3.8-23.14 11-55.43l94.62-112.17c3.97-4.7-.87-11.62-6.65-9.5l-60.4 22.09c14.44-41.66 32.72-80.04 54.6-97.47 59.97-47.76 163.3-40.94 163.3-40.94zM636.53 31.03l-19.86-25c-5.49-6.9-15.52-8.05-22.41-2.56l-232.48 177.8-34.14-42.97c-5.09-6.41-15.14-5.21-18.59 2.21l-25.33 54.55 86.73 109.18 58.8-12.45c8-1.69 11.42-11.2 6.34-17.6l-34.09-42.92 232.48-177.8c6.89-5.48 8.04-15.53 2.55-22.44z"]
- };
- var faBrush = {
- prefix: 'fas',
- iconName: 'brush',
- icon: [384, 512, [], "f55d", "M352 0H32C14.33 0 0 14.33 0 32v224h384V32c0-17.67-14.33-32-32-32zM0 320c0 35.35 28.66 64 64 64h64v64c0 35.35 28.66 64 64 64s64-28.65 64-64v-64h64c35.34 0 64-28.65 64-64v-32H0v32zm192 104c13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24s-24-10.75-24-24c0-13.26 10.75-24 24-24z"]
- };
- var faBug = {
- prefix: 'fas',
- iconName: 'bug',
- icon: [512, 512, [], "f188", "M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z"]
- };
- var faBuilding = {
- prefix: 'fas',
- iconName: 'building',
- icon: [448, 512, [], "f1ad", "M436 480h-20V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v456H12c-6.627 0-12 5.373-12 12v20h448v-20c0-6.627-5.373-12-12-12zM128 76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76zm0 96c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40zm52 148h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12zm76 160h-64v-84c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v84zm64-172c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40z"]
- };
- var faBullhorn = {
- prefix: 'fas',
- iconName: 'bullhorn',
- icon: [576, 512, [], "f0a1", "M576 240c0-23.63-12.95-44.04-32-55.12V32.01C544 23.26 537.02 0 512 0c-7.12 0-14.19 2.38-19.98 7.02l-85.03 68.03C364.28 109.19 310.66 128 256 128H64c-35.35 0-64 28.65-64 64v96c0 35.35 28.65 64 64 64h33.7c-1.39 10.48-2.18 21.14-2.18 32 0 39.77 9.26 77.35 25.56 110.94 5.19 10.69 16.52 17.06 28.4 17.06h74.28c26.05 0 41.69-29.84 25.9-50.56-16.4-21.52-26.15-48.36-26.15-77.44 0-11.11 1.62-21.79 4.41-32H256c54.66 0 108.28 18.81 150.98 52.95l85.03 68.03a32.023 32.023 0 0 0 19.98 7.02c24.92 0 32-22.78 32-32V295.13C563.05 284.04 576 263.63 576 240zm-96 141.42l-33.05-26.44C392.95 311.78 325.12 288 256 288v-96c69.12 0 136.95-23.78 190.95-66.98L480 98.58v282.84z"]
- };
- var faBullseye = {
- prefix: 'fas',
- iconName: 'bullseye',
- icon: [496, 512, [], "f140", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 432c-101.69 0-184-82.29-184-184 0-101.69 82.29-184 184-184 101.69 0 184 82.29 184 184 0 101.69-82.29 184-184 184zm0-312c-70.69 0-128 57.31-128 128s57.31 128 128 128 128-57.31 128-128-57.31-128-128-128zm0 192c-35.29 0-64-28.71-64-64s28.71-64 64-64 64 28.71 64 64-28.71 64-64 64z"]
- };
- var faBurn = {
- prefix: 'fas',
- iconName: 'burn',
- icon: [384, 512, [], "f46a", "M192 0C79.7 101.3 0 220.9 0 300.5 0 425 79 512 192 512s192-87 192-211.5c0-79.9-80.2-199.6-192-300.5zm0 448c-56.5 0-96-39-96-94.8 0-13.5 4.6-61.5 96-161.2 91.4 99.7 96 147.7 96 161.2 0 55.8-39.5 94.8-96 94.8z"]
- };
- var faBus = {
- prefix: 'fas',
- iconName: 'bus',
- icon: [512, 512, [], "f207", "M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM112 400c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm16-112c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h256c17.67 0 32 14.33 32 32v128c0 17.67-14.33 32-32 32H128zm272 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"]
- };
- var faBusAlt = {
- prefix: 'fas',
- iconName: 'bus-alt',
- icon: [512, 512, [], "f55e", "M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM160 72c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H168c-4.42 0-8-3.58-8-8V72zm-48 328c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128-112H128c-17.67 0-32-14.33-32-32v-96c0-17.67 14.33-32 32-32h112v160zm32 0V128h112c17.67 0 32 14.33 32 32v96c0 17.67-14.33 32-32 32H272zm128 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"]
- };
- var faBusinessTime = {
- prefix: 'fas',
- iconName: 'business-time',
- icon: [640, 512, [], "f64a", "M496 224c-79.59 0-144 64.41-144 144s64.41 144 144 144 144-64.41 144-144-64.41-144-144-144zm64 150.29c0 5.34-4.37 9.71-9.71 9.71h-60.57c-5.34 0-9.71-4.37-9.71-9.71v-76.57c0-5.34 4.37-9.71 9.71-9.71h12.57c5.34 0 9.71 4.37 9.71 9.71V352h38.29c5.34 0 9.71 4.37 9.71 9.71v12.58zM496 192c5.4 0 10.72.33 16 .81V144c0-25.6-22.4-48-48-48h-80V48c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h395.12c28.6-20.09 63.35-32 100.88-32zM320 96H192V64h128v32zm6.82 224H208c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h291.43C327.1 423.96 320 396.82 320 368c0-16.66 2.48-32.72 6.82-48z"]
- };
- var faCalculator = {
- prefix: 'fas',
- iconName: 'calculator',
- icon: [448, 512, [], "f1ec", "M400 0H48C22.4 0 0 22.4 0 48v416c0 25.6 22.4 48 48 48h352c25.6 0 48-22.4 48-48V48c0-25.6-22.4-48-48-48zM128 435.2c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8V268.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v166.4zm0-256c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8V76.8C64 70.4 70.4 64 76.8 64h294.4c6.4 0 12.8 6.4 12.8 12.8v102.4z"]
- };
- var faCalendar = {
- prefix: 'fas',
- iconName: 'calendar',
- icon: [448, 512, [], "f133", "M12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm436-44v-36c0-26.5-21.5-48-48-48h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v36c0 6.6 5.4 12 12 12h424c6.6 0 12-5.4 12-12z"]
- };
- var faCalendarAlt = {
- prefix: 'fas',
- iconName: 'calendar-alt',
- icon: [448, 512, [], "f073", "M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm320-196c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM192 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM64 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z"]
- };
- var faCalendarCheck = {
- prefix: 'fas',
- iconName: 'calendar-check',
- icon: [448, 512, [], "f274", "M436 160H12c-6.627 0-12-5.373-12-12v-36c0-26.51 21.49-48 48-48h48V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h128V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h48c26.51 0 48 21.49 48 48v36c0 6.627-5.373 12-12 12zM12 192h424c6.627 0 12 5.373 12 12v260c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V204c0-6.627 5.373-12 12-12zm333.296 95.947l-28.169-28.398c-4.667-4.705-12.265-4.736-16.97-.068L194.12 364.665l-45.98-46.352c-4.667-4.705-12.266-4.736-16.971-.068l-28.397 28.17c-4.705 4.667-4.736 12.265-.068 16.97l82.601 83.269c4.667 4.705 12.265 4.736 16.97.068l142.953-141.805c4.705-4.667 4.736-12.265.068-16.97z"]
- };
- var faCalendarDay = {
- prefix: 'fas',
- iconName: 'calendar-day',
- icon: [448, 512, [], "f783", "M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h96c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-96zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z"]
- };
- var faCalendarMinus = {
- prefix: 'fas',
- iconName: 'calendar-minus',
- icon: [448, 512, [], "f272", "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm304 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H132c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h184z"]
- };
- var faCalendarPlus = {
- prefix: 'fas',
- iconName: 'calendar-plus',
- icon: [448, 512, [], "f271", "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm316 140c0-6.6-5.4-12-12-12h-60v-60c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v60h-60c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h60v60c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-60h60c6.6 0 12-5.4 12-12v-40z"]
- };
- var faCalendarTimes = {
- prefix: 'fas',
- iconName: 'calendar-times',
- icon: [448, 512, [], "f273", "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm257.3 160l48.1-48.1c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0L224 306.7l-48.1-48.1c-4.7-4.7-12.3-4.7-17 0l-28.3 28.3c-4.7 4.7-4.7 12.3 0 17l48.1 48.1-48.1 48.1c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l48.1-48.1 48.1 48.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L269.3 352z"]
- };
- var faCalendarWeek = {
- prefix: 'fas',
- iconName: 'calendar-week',
- icon: [448, 512, [], "f784", "M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h288c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-64zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z"]
- };
- var faCamera = {
- prefix: 'fas',
- iconName: 'camera',
- icon: [512, 512, [], "f030", "M512 144v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48h88l12.3-32.9c7-18.7 24.9-31.1 44.9-31.1h125.5c20 0 37.9 12.4 44.9 31.1L376 96h88c26.5 0 48 21.5 48 48zM376 288c0-66.2-53.8-120-120-120s-120 53.8-120 120 53.8 120 120 120 120-53.8 120-120zm-32 0c0 48.5-39.5 88-88 88s-88-39.5-88-88 39.5-88 88-88 88 39.5 88 88z"]
- };
- var faCameraRetro = {
- prefix: 'fas',
- iconName: 'camera-retro',
- icon: [512, 512, [], "f083", "M48 32C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H48zm0 32h106c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H38c-3.3 0-6-2.7-6-6V80c0-8.8 7.2-16 16-16zm426 96H38c-3.3 0-6-2.7-6-6v-36c0-3.3 2.7-6 6-6h138l30.2-45.3c1.1-1.7 3-2.7 5-2.7H464c8.8 0 16 7.2 16 16v74c0 3.3-2.7 6-6 6zM256 424c-66.2 0-120-53.8-120-120s53.8-120 120-120 120 53.8 120 120-53.8 120-120 120zm0-208c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm-48 104c-8.8 0-16-7.2-16-16 0-35.3 28.7-64 64-64 8.8 0 16 7.2 16 16s-7.2 16-16 16c-17.6 0-32 14.4-32 32 0 8.8-7.2 16-16 16z"]
- };
- var faCampground = {
- prefix: 'fas',
- iconName: 'campground',
- icon: [640, 512, [], "f6bb", "M624 448h-24.68L359.54 117.75l53.41-73.55c5.19-7.15 3.61-17.16-3.54-22.35l-25.9-18.79c-7.15-5.19-17.15-3.61-22.35 3.55L320 63.3 278.83 6.6c-5.19-7.15-15.2-8.74-22.35-3.55l-25.88 18.8c-7.15 5.19-8.74 15.2-3.54 22.35l53.41 73.55L40.68 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM320 288l116.36 160H203.64L320 288z"]
- };
- var faCandyCane = {
- prefix: 'fas',
- iconName: 'candy-cane',
- icon: [512, 512, [], "f786", "M497.5 92C469.6 33.1 411.8 0 352.4 0c-27.9 0-56.2 7.3-81.8 22.6L243.1 39c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5l27.5-16.4c5.1-3.1 10.8-4.5 16.4-4.5 10.9 0 21.5 5.6 27.5 15.6 9.1 15.1 4.1 34.8-11 43.9L15.6 397.6c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5L428.6 301c71.7-42.9 104.6-133.5 68.9-209zm-177.7 13l-2.5 1.5L296.8 45c9.7-4.7 19.8-8.1 30.3-10.2l20.6 61.8c-9.8.8-19.4 3.3-27.9 8.4zM145.9 431.8l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm107.5-63.9l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zM364.3 302l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm20.4-197.3l46-46c8.4 6.5 16 14.1 22.6 22.6L407.6 127c-5.7-9.3-13.7-16.9-22.9-22.3zm82.1 107.8l-59.5-19.8c3.2-5.3 5.8-10.9 7.4-17.1 1.1-4.5 1.7-9.1 1.8-13.6l60.4 20.1c-2.1 10.4-5.5 20.6-10.1 30.4z"]
- };
- var faCannabis = {
- prefix: 'fas',
- iconName: 'cannabis',
- icon: [512, 512, [], "f55f", "M503.47 360.25c-1.56-.82-32.39-16.89-76.78-25.81 64.25-75.12 84.05-161.67 84.93-165.64 1.18-5.33-.44-10.9-4.3-14.77-3.03-3.04-7.12-4.7-11.32-4.7-1.14 0-2.29.12-3.44.38-3.88.85-86.54 19.59-160.58 79.76.01-1.46.01-2.93.01-4.4 0-118.79-59.98-213.72-62.53-217.7A15.973 15.973 0 0 0 256 0c-5.45 0-10.53 2.78-13.47 7.37-2.55 3.98-62.53 98.91-62.53 217.7 0 1.47.01 2.94.01 4.4-74.03-60.16-156.69-78.9-160.58-79.76-1.14-.25-2.29-.38-3.44-.38-4.2 0-8.29 1.66-11.32 4.7A15.986 15.986 0 0 0 .38 168.8c.88 3.97 20.68 90.52 84.93 165.64-44.39 8.92-75.21 24.99-76.78 25.81a16.003 16.003 0 0 0-.02 28.29c2.45 1.29 60.76 31.72 133.49 31.72 6.14 0 11.96-.1 17.5-.31-11.37 22.23-16.52 38.31-16.81 39.22-1.8 5.68-.29 11.89 3.91 16.11a16.019 16.019 0 0 0 16.1 3.99c1.83-.57 37.72-11.99 77.3-39.29V504c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-64.01c39.58 27.3 75.47 38.71 77.3 39.29a16.019 16.019 0 0 0 16.1-3.99c4.2-4.22 5.71-10.43 3.91-16.11-.29-.91-5.45-16.99-16.81-39.22 5.54.21 11.37.31 17.5.31 72.72 0 131.04-30.43 133.49-31.72 5.24-2.78 8.52-8.22 8.51-14.15-.01-5.94-3.29-11.39-8.53-14.15z"]
- };
- var faCapsules = {
- prefix: 'fas',
- iconName: 'capsules',
- icon: [576, 512, [], "f46b", "M555.3 300.1L424.2 112.8C401.9 81 366.4 64 330.4 64c-22.6 0-45.5 6.7-65.5 20.7-19.7 13.8-33.7 32.8-41.5 53.8C220.5 79.2 172 32 112 32 50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V218.9c3.3 8.6 7.3 17.1 12.8 25L368 431.2c22.2 31.8 57.7 48.8 93.8 48.8 22.7 0 45.5-6.7 65.5-20.7 51.7-36.2 64.2-107.5 28-159.2zM160 256H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm194.8 44.9l-65.6-93.7c-7.7-11-10.7-24.4-8.3-37.6 2.3-13.2 9.7-24.8 20.7-32.5 8.5-6 18.5-9.1 28.8-9.1 16.5 0 31.9 8 41.3 21.5l65.6 93.7-82.5 57.7z"]
- };
- var faCar = {
- prefix: 'fas',
- iconName: 'car',
- icon: [512, 512, [], "f1b9", "M499.99 176h-59.87l-16.64-41.6C406.38 91.63 365.57 64 319.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4L71.87 176H12.01C4.2 176-1.53 183.34.37 190.91l6 24C7.7 220.25 12.5 224 18.01 224h20.07C24.65 235.73 16 252.78 16 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-19.22-8.65-36.27-22.07-48H494c5.51 0 10.31-3.75 11.64-9.09l6-24c1.89-7.57-3.84-14.91-11.65-14.91zm-352.06-17.83c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L384 208H128l19.93-49.83zM96 319.8c-19.2 0-32-12.76-32-31.9S76.8 256 96 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S396.8 256 416 256s32 12.76 32 31.9-12.8 31.9-32 31.9z"]
- };
- var faCarAlt = {
- prefix: 'fas',
- iconName: 'car-alt',
- icon: [480, 512, [], "f5de", "M438.66 212.33l-11.24-28.1-19.93-49.83C390.38 91.63 349.57 64 303.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4l-19.93 49.83-11.24 28.1C17.22 221.5 0 244.66 0 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-27.34-17.22-50.5-41.34-59.67zm-306.73-54.16c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L368 208H112l19.93-49.83zM80 319.8c-19.2 0-32-12.76-32-31.9S60.8 256 80 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S380.8 256 400 256s32 12.76 32 31.9-12.8 31.9-32 31.9z"]
- };
- var faCarBattery = {
- prefix: 'fas',
- iconName: 'car-battery',
- icon: [512, 512, [], "f5df", "M480 128h-32V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v48H192V80c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v48H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32zM192 264c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm256 0c0 4.42-3.58 8-8 8h-40v40c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-40h-40c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h40v-40c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v40h40c4.42 0 8 3.58 8 8v16z"]
- };
- var faCarCrash = {
- prefix: 'fas',
- iconName: 'car-crash',
- icon: [640, 512, [], "f5e1", "M143.25 220.81l-12.42 46.37c-3.01 11.25-3.63 22.89-2.41 34.39l-35.2 28.98c-6.57 5.41-16.31-.43-14.62-8.77l15.44-76.68c1.06-5.26-2.66-10.28-8-10.79l-77.86-7.55c-8.47-.82-11.23-11.83-4.14-16.54l65.15-43.3c4.46-2.97 5.38-9.15 1.98-13.29L21.46 93.22c-5.41-6.57.43-16.3 8.78-14.62l76.68 15.44c5.26 1.06 10.28-2.66 10.8-8l7.55-77.86c.82-8.48 11.83-11.23 16.55-4.14l43.3 65.14c2.97 4.46 9.15 5.38 13.29 1.98l60.4-49.71c6.57-5.41 16.3.43 14.62 8.77L262.1 86.38c-2.71 3.05-5.43 6.09-7.91 9.4l-32.15 42.97-10.71 14.32c-32.73 8.76-59.18 34.53-68.08 67.74zm494.57 132.51l-12.42 46.36c-3.13 11.68-9.38 21.61-17.55 29.36a66.876 66.876 0 0 1-8.76 7l-13.99 52.23c-1.14 4.27-3.1 8.1-5.65 11.38-7.67 9.84-20.74 14.68-33.54 11.25L515 502.62c-17.07-4.57-27.2-22.12-22.63-39.19l8.28-30.91-247.28-66.26-8.28 30.91c-4.57 17.07-22.12 27.2-39.19 22.63l-30.91-8.28c-12.8-3.43-21.7-14.16-23.42-26.51-.57-4.12-.35-8.42.79-12.68l13.99-52.23a66.62 66.62 0 0 1-4.09-10.45c-3.2-10.79-3.65-22.52-.52-34.2l12.42-46.37c5.31-19.8 19.36-34.83 36.89-42.21a64.336 64.336 0 0 1 18.49-4.72l18.13-24.23 32.15-42.97c3.45-4.61 7.19-8.9 11.2-12.84 8-7.89 17.03-14.44 26.74-19.51 4.86-2.54 9.89-4.71 15.05-6.49 10.33-3.58 21.19-5.63 32.24-6.04 11.05-.41 22.31.82 33.43 3.8l122.68 32.87c11.12 2.98 21.48 7.54 30.85 13.43a111.11 111.11 0 0 1 34.69 34.5c8.82 13.88 14.64 29.84 16.68 46.99l6.36 53.29 3.59 30.05a64.49 64.49 0 0 1 22.74 29.93c4.39 11.88 5.29 25.19 1.75 38.39zM255.58 234.34c-18.55-4.97-34.21 4.04-39.17 22.53-4.96 18.49 4.11 34.12 22.65 39.09 18.55 4.97 45.54 15.51 50.49-2.98 4.96-18.49-15.43-53.67-33.97-58.64zm290.61 28.17l-6.36-53.29c-.58-4.87-1.89-9.53-3.82-13.86-5.8-12.99-17.2-23.01-31.42-26.82l-122.68-32.87a48.008 48.008 0 0 0-50.86 17.61l-32.15 42.97 172 46.08 75.29 20.18zm18.49 54.65c-18.55-4.97-53.8 15.31-58.75 33.79-4.95 18.49 23.69 22.86 42.24 27.83 18.55 4.97 34.21-4.04 39.17-22.53 4.95-18.48-4.11-34.12-22.66-39.09z"]
- };
- var faCarSide = {
- prefix: 'fas',
- iconName: 'car-side',
- icon: [640, 512, [], "f5e4", "M544 192h-16L419.22 56.02A64.025 64.025 0 0 0 369.24 32H155.33c-26.17 0-49.7 15.93-59.42 40.23L48 194.26C20.44 201.4 0 226.21 0 256v112c0 8.84 7.16 16 16 16h48c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h48c8.84 0 16-7.16 16-16v-80c0-53.02-42.98-96-96-96zM160 432c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm72-240H116.93l38.4-96H232v96zm48 0V96h89.24l76.8 96H280zm200 240c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z"]
- };
- var faCaravan = {
- prefix: 'fas',
- iconName: 'caravan',
- icon: [640, 512, [], "f8ff", "M416,208a16,16,0,1,0,16,16A16,16,0,0,0,416,208ZM624,320H576V160A160,160,0,0,0,416,0H64A64,64,0,0,0,0,64V320a64,64,0,0,0,64,64H96a96,96,0,0,0,192,0H624a16,16,0,0,0,16-16V336A16,16,0,0,0,624,320ZM192,432a48,48,0,1,1,48-48A48.05,48.05,0,0,1,192,432Zm64-240a32,32,0,0,1-32,32H96a32,32,0,0,1-32-32V128A32,32,0,0,1,96,96H224a32,32,0,0,1,32,32ZM448,320H320V128a32,32,0,0,1,32-32h64a32,32,0,0,1,32,32Z"]
- };
- var faCaretDown = {
- prefix: 'fas',
- iconName: 'caret-down',
- icon: [320, 512, [], "f0d7", "M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z"]
- };
- var faCaretLeft = {
- prefix: 'fas',
- iconName: 'caret-left',
- icon: [192, 512, [], "f0d9", "M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z"]
- };
- var faCaretRight = {
- prefix: 'fas',
- iconName: 'caret-right',
- icon: [192, 512, [], "f0da", "M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z"]
- };
- var faCaretSquareDown = {
- prefix: 'fas',
- iconName: 'caret-square-down',
- icon: [448, 512, [], "f150", "M448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM92.5 220.5l123 123c4.7 4.7 12.3 4.7 17 0l123-123c7.6-7.6 2.2-20.5-8.5-20.5H101c-10.7 0-16.1 12.9-8.5 20.5z"]
- };
- var faCaretSquareLeft = {
- prefix: 'fas',
- iconName: 'caret-square-left',
- icon: [448, 512, [], "f191", "M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM259.515 124.485l-123.03 123.03c-4.686 4.686-4.686 12.284 0 16.971l123.029 123.029c7.56 7.56 20.485 2.206 20.485-8.485V132.971c.001-10.691-12.925-16.045-20.484-8.486z"]
- };
- var faCaretSquareRight = {
- prefix: 'fas',
- iconName: 'caret-square-right',
- icon: [448, 512, [], "f152", "M48 32h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48zm140.485 355.515l123.029-123.029c4.686-4.686 4.686-12.284 0-16.971l-123.029-123.03c-7.56-7.56-20.485-2.206-20.485 8.485v246.059c0 10.691 12.926 16.045 20.485 8.486z"]
- };
- var faCaretSquareUp = {
- prefix: 'fas',
- iconName: 'caret-square-up',
- icon: [448, 512, [], "f151", "M0 432V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm355.515-140.485l-123.03-123.03c-4.686-4.686-12.284-4.686-16.971 0L92.485 291.515c-7.56 7.56-2.206 20.485 8.485 20.485h246.059c10.691 0 16.045-12.926 8.486-20.485z"]
- };
- var faCaretUp = {
- prefix: 'fas',
- iconName: 'caret-up',
- icon: [320, 512, [], "f0d8", "M288.662 352H31.338c-17.818 0-26.741-21.543-14.142-34.142l128.662-128.662c7.81-7.81 20.474-7.81 28.284 0l128.662 128.662c12.6 12.599 3.676 34.142-14.142 34.142z"]
- };
- var faCarrot = {
- prefix: 'fas',
- iconName: 'carrot',
- icon: [512, 512, [], "f787", "M298.2 156.6c-52.7-25.7-114.5-10.5-150.2 32.8l55.2 55.2c6.3 6.3 6.3 16.4 0 22.6-3.1 3.1-7.2 4.7-11.3 4.7s-8.2-1.6-11.3-4.7L130.4 217 2.3 479.7c-2.9 6-3.1 13.3 0 19.7 5.4 11.1 18.9 15.7 30 10.3l133.6-65.2-49.2-49.2c-6.3-6.2-6.3-16.4 0-22.6 6.3-6.2 16.4-6.2 22.6 0l57 57 102-49.8c24-11.7 44.5-31.3 57.1-57.1 30.1-61.7 4.5-136.1-57.2-166.2zm92.1-34.9C409.8 81 399.7 32.9 360 0c-50.3 41.7-52.5 107.5-7.9 151.9l8 8c44.4 44.6 110.3 42.4 151.9-7.9-32.9-39.7-81-49.8-121.7-30.3z"]
- };
- var faCartArrowDown = {
- prefix: 'fas',
- iconName: 'cart-arrow-down',
- icon: [576, 512, [], "f218", "M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM403.029 192H360v-60c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v60h-43.029c-10.691 0-16.045 12.926-8.485 20.485l67.029 67.029c4.686 4.686 12.284 4.686 16.971 0l67.029-67.029c7.559-7.559 2.205-20.485-8.486-20.485z"]
- };
- var faCartPlus = {
- prefix: 'fas',
- iconName: 'cart-plus',
- icon: [576, 512, [], "f217", "M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM408 168h-48v-40c0-8.837-7.163-16-16-16h-16c-8.837 0-16 7.163-16 16v40h-48c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h48v40c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-40h48c8.837 0 16-7.163 16-16v-16c0-8.837-7.163-16-16-16z"]
- };
- var faCashRegister = {
- prefix: 'fas',
- iconName: 'cash-register',
- icon: [512, 512, [], "f788", "M511.1 378.8l-26.7-160c-2.6-15.4-15.9-26.7-31.6-26.7H208v-64h96c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h96v64H59.1c-15.6 0-29 11.3-31.6 26.7L.8 378.7c-.6 3.5-.9 7-.9 10.5V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-90.7c.1-3.5-.2-7-.8-10.5zM280 248c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16zm-32 64h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16zm-32-80c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16zM80 80V48h192v32H80zm40 200h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16zm16 64v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16zm216 112c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16zm24-112c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16zm48-80c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16z"]
- };
- var faCat = {
- prefix: 'fas',
- iconName: 'cat',
- icon: [512, 512, [], "f6be", "M290.59 192c-20.18 0-106.82 1.98-162.59 85.95V192c0-52.94-43.06-96-96-96-17.67 0-32 14.33-32 32s14.33 32 32 32c17.64 0 32 14.36 32 32v256c0 35.3 28.7 64 64 64h176c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-32l128-96v144c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V289.86c-10.29 2.67-20.89 4.54-32 4.54-61.81 0-113.52-44.05-125.41-102.4zM448 96h-64l-64-64v134.4c0 53.02 42.98 96 96 96s96-42.98 96-96V32l-64 64zm-72 80c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm80 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z"]
- };
- var faCertificate = {
- prefix: 'fas',
- iconName: 'certificate',
- icon: [512, 512, [], "f0a3", "M458.622 255.92l45.985-45.005c13.708-12.977 7.316-36.039-10.664-40.339l-62.65-15.99 17.661-62.015c4.991-17.838-11.829-34.663-29.661-29.671l-61.994 17.667-15.984-62.671C337.085.197 313.765-6.276 300.99 7.228L256 53.57 211.011 7.229c-12.63-13.351-36.047-7.234-40.325 10.668l-15.984 62.671-61.995-17.667C74.87 57.907 58.056 74.738 63.046 92.572l17.661 62.015-62.65 15.99C.069 174.878-6.31 197.944 7.392 210.915l45.985 45.005-45.985 45.004c-13.708 12.977-7.316 36.039 10.664 40.339l62.65 15.99-17.661 62.015c-4.991 17.838 11.829 34.663 29.661 29.671l61.994-17.667 15.984 62.671c4.439 18.575 27.696 24.018 40.325 10.668L256 458.61l44.989 46.001c12.5 13.488 35.987 7.486 40.325-10.668l15.984-62.671 61.994 17.667c17.836 4.994 34.651-11.837 29.661-29.671l-17.661-62.015 62.65-15.99c17.987-4.302 24.366-27.367 10.664-40.339l-45.984-45.004z"]
- };
- var faChair = {
- prefix: 'fas',
- iconName: 'chair',
- icon: [448, 512, [], "f6c0", "M112 128c0-29.5 16.2-55 40-68.9V256h48V48h48v208h48V59.1c23.8 13.9 40 39.4 40 68.9v128h48V128C384 57.3 326.7 0 256 0h-64C121.3 0 64 57.3 64 128v128h48zm334.3 213.9l-10.7-32c-4.4-13.1-16.6-21.9-30.4-21.9H42.7c-13.8 0-26 8.8-30.4 21.9l-10.7 32C-5.2 362.6 10.2 384 32 384v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384h256v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384c21.8 0 37.2-21.4 30.3-42.1z"]
- };
- var faChalkboard = {
- prefix: 'fas',
- iconName: 'chalkboard',
- icon: [640, 512, [], "f51b", "M96 64h448v352h64V40c0-22.06-17.94-40-40-40H72C49.94 0 32 17.94 32 40v376h64V64zm528 384H480v-64H288v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"]
- };
- var faChalkboardTeacher = {
- prefix: 'fas',
- iconName: 'chalkboard-teacher',
- icon: [640, 512, [], "f51c", "M208 352c-2.39 0-4.78.35-7.06 1.09C187.98 357.3 174.35 360 160 360c-14.35 0-27.98-2.7-40.95-6.91-2.28-.74-4.66-1.09-7.05-1.09C49.94 352-.33 402.48 0 464.62.14 490.88 21.73 512 48 512h224c26.27 0 47.86-21.12 48-47.38.33-62.14-49.94-112.62-112-112.62zm-48-32c53.02 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96 42.98 96 96 96zM592 0H208c-26.47 0-48 22.25-48 49.59V96c23.42 0 45.1 6.78 64 17.8V64h352v288h-64v-64H384v64h-76.24c19.1 16.69 33.12 38.73 39.69 64H592c26.47 0 48-22.25 48-49.59V49.59C640 22.25 618.47 0 592 0z"]
- };
- var faChargingStation = {
- prefix: 'fas',
- iconName: 'charging-station',
- icon: [576, 512, [], "f5e7", "M336 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h320c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm208-320V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-32V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-16c-8.84 0-16 7.16-16 16v32c0 35.76 23.62 65.69 56 75.93v118.49c0 13.95-9.5 26.92-23.26 29.19C431.22 402.5 416 388.99 416 372v-28c0-48.6-39.4-88-88-88h-8V64c0-35.35-28.65-64-64-64H96C60.65 0 32 28.65 32 64v352h288V304h8c22.09 0 40 17.91 40 40v24.61c0 39.67 28.92 75.16 68.41 79.01C481.71 452.05 520 416.41 520 372V251.93c32.38-10.24 56-40.17 56-75.93v-32c0-8.84-7.16-16-16-16h-16zm-283.91 47.76l-93.7 139c-2.2 3.33-6.21 5.24-10.39 5.24-7.67 0-13.47-6.28-11.67-12.92L167.35 224H108c-7.25 0-12.85-5.59-11.89-11.89l16-107C112.9 99.9 117.98 96 124 96h68c7.88 0 13.62 6.54 11.6 13.21L192 160h57.7c9.24 0 15.01 8.78 10.39 15.76z"]
- };
- var faChartArea = {
- prefix: 'fas',
- iconName: 'chart-area',
- icon: [512, 512, [], "f1fe", "M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM372.7 159.5L288 216l-85.3-113.7c-5.1-6.8-15.5-6.3-19.9 1L96 248v104h384l-89.9-187.8c-3.2-6.5-11.4-8.7-17.4-4.7z"]
- };
- var faChartBar = {
- prefix: 'fas',
- iconName: 'chart-bar',
- icon: [512, 512, [], "f080", "M332.8 320h38.4c6.4 0 12.8-6.4 12.8-12.8V172.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V76.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-288 0h38.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zM496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"]
- };
- var faChartLine = {
- prefix: 'fas',
- iconName: 'chart-line',
- icon: [512, 512, [], "f201", "M496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM464 96H345.94c-21.38 0-32.09 25.85-16.97 40.97l32.4 32.4L288 242.75l-73.37-73.37c-12.5-12.5-32.76-12.5-45.25 0l-68.69 68.69c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L192 237.25l73.37 73.37c12.5 12.5 32.76 12.5 45.25 0l96-96 32.4 32.4c15.12 15.12 40.97 4.41 40.97-16.97V112c.01-8.84-7.15-16-15.99-16z"]
- };
- var faChartPie = {
- prefix: 'fas',
- iconName: 'chart-pie',
- icon: [544, 512, [], "f200", "M527.79 288H290.5l158.03 158.03c6.04 6.04 15.98 6.53 22.19.68 38.7-36.46 65.32-85.61 73.13-140.86 1.34-9.46-6.51-17.85-16.06-17.85zm-15.83-64.8C503.72 103.74 408.26 8.28 288.8.04 279.68-.59 272 7.1 272 16.24V240h223.77c9.14 0 16.82-7.68 16.19-16.8zM224 288V50.71c0-9.55-8.39-17.4-17.84-16.06C86.99 51.49-4.1 155.6.14 280.37 4.5 408.51 114.83 513.59 243.03 511.98c50.4-.63 96.97-16.87 135.26-44.03 7.9-5.6 8.42-17.23 1.57-24.08L224 288z"]
- };
- var faCheck = {
- prefix: 'fas',
- iconName: 'check',
- icon: [512, 512, [], "f00c", "M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"]
- };
- var faCheckCircle = {
- prefix: 'fas',
- iconName: 'check-circle',
- icon: [512, 512, [], "f058", "M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"]
- };
- var faCheckDouble = {
- prefix: 'fas',
- iconName: 'check-double',
- icon: [512, 512, [], "f560", "M505 174.8l-39.6-39.6c-9.4-9.4-24.6-9.4-33.9 0L192 374.7 80.6 263.2c-9.4-9.4-24.6-9.4-33.9 0L7 302.9c-9.4 9.4-9.4 24.6 0 34L175 505c9.4 9.4 24.6 9.4 33.9 0l296-296.2c9.4-9.5 9.4-24.7.1-34zm-324.3 106c6.2 6.3 16.4 6.3 22.6 0l208-208.2c6.2-6.3 6.2-16.4 0-22.6L366.1 4.7c-6.2-6.3-16.4-6.3-22.6 0L192 156.2l-55.4-55.5c-6.2-6.3-16.4-6.3-22.6 0L68.7 146c-6.2 6.3-6.2 16.4 0 22.6l112 112.2z"]
- };
- var faCheckSquare = {
- prefix: 'fas',
- iconName: 'check-square',
- icon: [448, 512, [], "f14a", "M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zm-204.686-98.059l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.248-16.379-6.249-22.628 0L184 302.745l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.25 16.379 6.25 22.628.001z"]
- };
- var faCheese = {
- prefix: 'fas',
- iconName: 'cheese',
- icon: [512, 512, [], "f7ef", "M0 288v160a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32V288zM299.83 32a32 32 0 0 0-21.13 7L0 256h512c0-119.89-94-217.8-212.17-224z"]
- };
- var faChess = {
- prefix: 'fas',
- iconName: 'chess',
- icon: [512, 512, [], "f439", "M74 208H64a16 16 0 0 0-16 16v16a16 16 0 0 0 16 16h15.94A535.78 535.78 0 0 1 64 384h128a535.78 535.78 0 0 1-15.94-128H192a16 16 0 0 0 16-16v-16a16 16 0 0 0-16-16h-10l33.89-90.38a16 16 0 0 0-15-21.62H144V64h24a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8h-24V8a8 8 0 0 0-8-8h-16a8 8 0 0 0-8 8v24H88a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h24v32H55.09a16 16 0 0 0-15 21.62zm173.16 251.58L224 448v-16a16 16 0 0 0-16-16H48a16 16 0 0 0-16 16v16L8.85 459.58A16 16 0 0 0 0 473.89V496a16 16 0 0 0 16 16h224a16 16 0 0 0 16-16v-22.11a16 16 0 0 0-8.84-14.31zm92.77-157.78l-3.29 82.2h126.72l-3.29-82.21 24.6-20.79A32 32 0 0 0 496 256.54V198a6 6 0 0 0-6-6h-26.38a6 6 0 0 0-6 6v26h-24.71v-26a6 6 0 0 0-6-6H373.1a6 6 0 0 0-6 6v26h-24.71v-26a6 6 0 0 0-6-6H310a6 6 0 0 0-6 6v58.6a32 32 0 0 0 11.36 24.4zM384 304a16 16 0 0 1 32 0v32h-32zm119.16 155.58L480 448v-16a16 16 0 0 0-16-16H336a16 16 0 0 0-16 16v16l-23.15 11.58a16 16 0 0 0-8.85 14.31V496a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-22.11a16 16 0 0 0-8.84-14.31z"]
- };
- var faChessBishop = {
- prefix: 'fas',
- iconName: 'chess-bishop',
- icon: [320, 512, [], "f43a", "M8 287.88c0 51.64 22.14 73.83 56 84.6V416h192v-43.52c33.86-10.77 56-33 56-84.6 0-30.61-10.73-67.1-26.69-102.56L185 285.65a8 8 0 0 1-11.31 0l-11.31-11.31a8 8 0 0 1 0-11.31L270.27 155.1c-20.8-37.91-46.47-72.1-70.87-92.59C213.4 59.09 224 47.05 224 32a32 32 0 0 0-32-32h-64a32 32 0 0 0-32 32c0 15 10.6 27.09 24.6 30.51C67.81 106.8 8 214.5 8 287.88zM304 448H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"]
- };
- var faChessBoard = {
- prefix: 'fas',
- iconName: 'chess-board',
- icon: [512, 512, [], "f43c", "M255.9.2h-64v64h64zM0 64.17v64h64v-64zM128 .2H64v64h64zm64 255.9v64h64v-64zM0 192.12v64h64v-64zM383.85.2h-64v64h64zm128 0h-64v64h64zM128 256.1H64v64h64zM511.8 448v-64h-64v64zm0-128v-64h-64v64zM383.85 512h64v-64h-64zm128-319.88v-64h-64v64zM128 512h64v-64h-64zM0 512h64v-64H0zm255.9 0h64v-64h-64zM0 320.07v64h64v-64zm319.88-191.92v-64h-64v64zm-64 128h64v-64h-64zm-64 128v64h64v-64zm128-64h64v-64h-64zm0-127.95h64v-64h-64zm0 191.93v64h64v-64zM64 384.05v64h64v-64zm128-255.9v-64h-64v64zm191.92 255.9h64v-64h-64zm-128-191.93v-64h-64v64zm128-127.95v64h64v-64zm-128 255.9v64h64v-64zm-64-127.95H128v64h64zm191.92 64h64v-64h-64zM128 128.15H64v64h64zm0 191.92v64h64v-64z"]
- };
- var faChessKing = {
- prefix: 'fas',
- iconName: 'chess-king',
- icon: [448, 512, [], "f43f", "M400 448H48a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm16-288H256v-48h40a8 8 0 0 0 8-8V56a8 8 0 0 0-8-8h-40V8a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v40h-40a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8h40v48H32a32 32 0 0 0-30.52 41.54L74.56 416h298.88l73.08-214.46A32 32 0 0 0 416 160z"]
- };
- var faChessKnight = {
- prefix: 'fas',
- iconName: 'chess-knight',
- icon: [384, 512, [], "f441", "M19 272.47l40.63 18.06a32 32 0 0 0 24.88.47l12.78-5.12a32 32 0 0 0 18.76-20.5l9.22-30.65a24 24 0 0 1 12.55-15.65L159.94 208v50.33a48 48 0 0 1-26.53 42.94l-57.22 28.65A80 80 0 0 0 32 401.48V416h319.86V224c0-106-85.92-192-191.92-192H12A12 12 0 0 0 0 44a16.9 16.9 0 0 0 1.79 7.58L16 80l-9 9a24 24 0 0 0-7 17v137.21a32 32 0 0 0 19 29.26zM52 128a20 20 0 1 1-20 20 20 20 0 0 1 20-20zm316 320H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"]
- };
- var faChessPawn = {
- prefix: 'fas',
- iconName: 'chess-pawn',
- icon: [320, 512, [], "f443", "M105.1 224H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h16v5.49c0 44-4.14 86.6-24 122.51h176c-19.89-35.91-24-78.51-24-122.51V288h16a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-25.1c29.39-18.38 49.1-50.78 49.1-88a104 104 0 0 0-208 0c0 37.22 19.71 69.62 49.1 88zM304 448H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"]
- };
- var faChessQueen = {
- prefix: 'fas',
- iconName: 'chess-queen',
- icon: [512, 512, [], "f445", "M256 112a56 56 0 1 0-56-56 56 56 0 0 0 56 56zm176 336H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm72.87-263.84l-28.51-15.92c-7.44-5-16.91-2.46-22.29 4.68a47.59 47.59 0 0 1-47.23 18.23C383.7 186.86 368 164.93 368 141.4a13.4 13.4 0 0 0-13.4-13.4h-38.77c-6 0-11.61 4-12.86 9.91a48 48 0 0 1-93.94 0c-1.25-5.92-6.82-9.91-12.86-9.91H157.4a13.4 13.4 0 0 0-13.4 13.4c0 25.69-19 48.75-44.67 50.49a47.5 47.5 0 0 1-41.54-19.15c-5.28-7.09-14.73-9.45-22.09-4.54l-28.57 16a16 16 0 0 0-5.44 20.47L104.24 416h303.52l102.55-211.37a16 16 0 0 0-5.44-20.47z"]
- };
- var faChessRook = {
- prefix: 'fas',
- iconName: 'chess-rook',
- icon: [384, 512, [], "f447", "M368 32h-56a16 16 0 0 0-16 16v48h-48V48a16 16 0 0 0-16-16h-80a16 16 0 0 0-16 16v48H88.1V48a16 16 0 0 0-16-16H16A16 16 0 0 0 0 48v176l64 32c0 48.33-1.54 95-13.21 160h282.42C321.54 351 320 303.72 320 256l64-32V48a16 16 0 0 0-16-16zM224 320h-64v-64a32 32 0 0 1 64 0zm144 128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"]
- };
- var faChevronCircleDown = {
- prefix: 'fas',
- iconName: 'chevron-circle-down',
- icon: [512, 512, [], "f13a", "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM273 369.9l135.5-135.5c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L256 285.1 154.4 183.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L239 369.9c9.4 9.4 24.6 9.4 34 0z"]
- };
- var faChevronCircleLeft = {
- prefix: 'fas',
- iconName: 'chevron-circle-left',
- icon: [512, 512, [], "f137", "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zM142.1 273l135.5 135.5c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L226.9 256l101.6-101.6c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L142.1 239c-9.4 9.4-9.4 24.6 0 34z"]
- };
- var faChevronCircleRight = {
- prefix: 'fas',
- iconName: 'chevron-circle-right',
- icon: [512, 512, [], "f138", "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm113.9 231L234.4 103.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L285.1 256 183.5 357.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L369.9 273c9.4-9.4 9.4-24.6 0-34z"]
- };
- var faChevronCircleUp = {
- prefix: 'fas',
- iconName: 'chevron-circle-up',
- icon: [512, 512, [], "f139", "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm231-113.9L103.5 277.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L256 226.9l101.6 101.6c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L273 142.1c-9.4-9.4-24.6-9.4-34 0z"]
- };
- var faChevronDown = {
- prefix: 'fas',
- iconName: 'chevron-down',
- icon: [448, 512, [], "f078", "M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"]
- };
- var faChevronLeft = {
- prefix: 'fas',
- iconName: 'chevron-left',
- icon: [320, 512, [], "f053", "M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z"]
- };
- var faChevronRight = {
- prefix: 'fas',
- iconName: 'chevron-right',
- icon: [320, 512, [], "f054", "M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"]
- };
- var faChevronUp = {
- prefix: 'fas',
- iconName: 'chevron-up',
- icon: [448, 512, [], "f077", "M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z"]
- };
- var faChild = {
- prefix: 'fas',
- iconName: 'child',
- icon: [384, 512, [], "f1ae", "M120 72c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.764-32.235 72-72 72s-72-32.236-72-72zm254.627 1.373c-12.496-12.497-32.758-12.497-45.254 0L242.745 160H141.254L54.627 73.373c-12.496-12.497-32.758-12.497-45.254 0-12.497 12.497-12.497 32.758 0 45.255L104 213.254V480c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V368h16v112c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V213.254l94.627-94.627c12.497-12.497 12.497-32.757 0-45.254z"]
- };
- var faChurch = {
- prefix: 'fas',
- iconName: 'church',
- icon: [640, 512, [], "f51d", "M464.46 246.68L352 179.2V128h48c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-48V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v48h-48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v51.2l-112.46 67.48A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.65-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.54A32.024 32.024 0 0 0 0 395.96zm620.61-29.42L512 320v192h112c8.84 0 16-7.16 16-16V395.96c0-12.8-7.63-24.37-19.39-29.42z"]
- };
- var faCircle = {
- prefix: 'fas',
- iconName: 'circle',
- icon: [512, 512, [], "f111", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z"]
- };
- var faCircleNotch = {
- prefix: 'fas',
- iconName: 'circle-notch',
- icon: [512, 512, [], "f1ce", "M288 39.056v16.659c0 10.804 7.281 20.159 17.686 23.066C383.204 100.434 440 171.518 440 256c0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-84.47 56.786-155.564 134.312-177.219C216.719 75.874 224 66.517 224 55.712V39.064c0-15.709-14.834-27.153-30.046-23.234C86.603 43.482 7.394 141.206 8.003 257.332c.72 137.052 111.477 246.956 248.531 246.667C393.255 503.711 504 392.788 504 256c0-115.633-79.14-212.779-186.211-240.236C302.678 11.889 288 23.456 288 39.056z"]
- };
- var faCity = {
- prefix: 'fas',
- iconName: 'city',
- icon: [640, 512, [], "f64f", "M616 192H480V24c0-13.26-10.74-24-24-24H312c-13.26 0-24 10.74-24 24v72h-64V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v80h-64V16c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v80H24c-13.26 0-24 10.74-24 24v360c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V216c0-13.26-10.75-24-24-24zM128 404c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm128 192c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12V76c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 288c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40z"]
- };
- var faClinicMedical = {
- prefix: 'fas',
- iconName: 'clinic-medical',
- icon: [576, 512, [], "f7f2", "M288 115L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2zm96 261a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8zm186.69-139.72l-255.94-226a39.85 39.85 0 0 0-53.45 0l-256 226a16 16 0 0 0-1.21 22.6L25.5 282.7a16 16 0 0 0 22.6 1.21L277.42 81.63a16 16 0 0 1 21.17 0L527.91 283.9a16 16 0 0 0 22.6-1.21l21.4-23.82a16 16 0 0 0-1.22-22.59z"]
- };
- var faClipboard = {
- prefix: 'fas',
- iconName: 'clipboard',
- icon: [384, 512, [], "f328", "M384 112v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h80c0-35.29 28.71-64 64-64s64 28.71 64 64h80c26.51 0 48 21.49 48 48zM192 40c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24m96 114v-20a6 6 0 0 0-6-6H102a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h180a6 6 0 0 0 6-6z"]
- };
- var faClipboardCheck = {
- prefix: 'fas',
- iconName: 'clipboard-check',
- icon: [384, 512, [], "f46c", "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm121.2 231.8l-143 141.8c-4.7 4.7-12.3 4.6-17-.1l-82.6-83.3c-4.7-4.7-4.6-12.3.1-17L99.1 285c4.7-4.7 12.3-4.6 17 .1l46 46.4 106-105.2c4.7-4.7 12.3-4.6 17 .1l28.2 28.4c4.7 4.8 4.6 12.3-.1 17z"]
- };
- var faClipboardList = {
- prefix: 'fas',
- iconName: 'clipboard-list',
- icon: [384, 512, [], "f46d", "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM96 424c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm96-192c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm128 368c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z"]
- };
- var faClock = {
- prefix: 'fas',
- iconName: 'clock',
- icon: [512, 512, [], "f017", "M256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8Zm92.49,313h0l-20,25a16,16,0,0,1-22.49,2.5h0l-67-49.72a40,40,0,0,1-15-31.23V112a16,16,0,0,1,16-16h32a16,16,0,0,1,16,16V256l58,42.5A16,16,0,0,1,348.49,321Z"]
- };
- var faClone = {
- prefix: 'fas',
- iconName: 'clone',
- icon: [512, 512, [], "f24d", "M464 0c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48H176c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h288M176 416c-44.112 0-80-35.888-80-80V128H48c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48v-48H176z"]
- };
- var faClosedCaptioning = {
- prefix: 'fas',
- iconName: 'closed-captioning',
- icon: [512, 512, [], "f20a", "M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM218.1 287.7c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2.1 48 51.1 70.5 92.3 32.6zm190.4 0c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.5 56.9-172.7 32.1-172.7-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 222.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6z"]
- };
- var faCloud = {
- prefix: 'fas',
- iconName: 'cloud',
- icon: [640, 512, [], "f0c2", "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4z"]
- };
- var faCloudDownloadAlt = {
- prefix: 'fas',
- iconName: 'cloud-download-alt',
- icon: [640, 512, [], "f381", "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z"]
- };
- var faCloudMeatball = {
- prefix: 'fas',
- iconName: 'cloud-meatball',
- icon: [512, 512, [], "f73b", "M48 352c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm416 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm-119 11.1c4.6-14.5 1.6-30.8-9.8-42.3-11.5-11.5-27.8-14.4-42.3-9.9-7-13.5-20.7-23-36.9-23s-29.9 9.5-36.9 23c-14.5-4.6-30.8-1.6-42.3 9.9-11.5 11.5-14.4 27.8-9.9 42.3-13.5 7-23 20.7-23 36.9s9.5 29.9 23 36.9c-4.6 14.5-1.6 30.8 9.9 42.3 8.2 8.2 18.9 12.3 29.7 12.3 4.3 0 8.5-1.1 12.6-2.5 7 13.5 20.7 23 36.9 23s29.9-9.5 36.9-23c4.1 1.3 8.3 2.5 12.6 2.5 10.8 0 21.5-4.1 29.7-12.3 11.5-11.5 14.4-27.8 9.8-42.3 13.5-7 23-20.7 23-36.9s-9.5-29.9-23-36.9zM512 224c0-53-43-96-96-96-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h43.4c3.6-8 8.4-15.4 14.8-21.8 13.5-13.5 31.5-21.1 50.8-21.3 13.5-13.2 31.7-20.9 51-20.9s37.5 7.7 51 20.9c19.3.2 37.3 7.8 50.8 21.3 6.4 6.4 11.3 13.8 14.8 21.8H416c53 0 96-43 96-96z"]
- };
- var faCloudMoon = {
- prefix: 'fas',
- iconName: 'cloud-moon',
- icon: [576, 512, [], "f6c3", "M342.8 352.7c5.7-9.6 9.2-20.7 9.2-32.7 0-35.3-28.7-64-64-64-17.2 0-32.8 6.9-44.3 17.9-16.3-29.6-47.5-49.9-83.7-49.9-53 0-96 43-96 96 0 2 .5 3.8.6 5.7C27.1 338.8 0 374.1 0 416c0 53 43 96 96 96h240c44.2 0 80-35.8 80-80 0-41.9-32.3-75.8-73.2-79.3zm222.5-54.3c-93.1 17.7-178.5-53.7-178.5-147.7 0-54.2 29-104 76.1-130.8 7.3-4.1 5.4-15.1-2.8-16.7C448.4 1.1 436.7 0 425 0 319.1 0 233.1 85.9 233.1 192c0 8.5.7 16.8 1.8 25 5.9 4.3 11.6 8.9 16.7 14.2 11.4-4.7 23.7-7.2 36.4-7.2 52.9 0 96 43.1 96 96 0 3.6-.2 7.2-.6 10.7 23.6 10.8 42.4 29.5 53.5 52.6 54.4-3.4 103.7-29.3 137.1-70.4 5.3-6.5-.5-16.1-8.7-14.5z"]
- };
- var faCloudMoonRain = {
- prefix: 'fas',
- iconName: 'cloud-moon-rain',
- icon: [576, 512, [], "f73c", "M350.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C27.6 232.9 0 265.2 0 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm217.4-1.7c-70.4 13.3-135-40.3-135-110.8 0-40.6 21.9-78 57.5-98.1 5.5-3.1 4.1-11.4-2.1-12.5C479.6.8 470.7 0 461.8 0c-77.9 0-141.1 61.2-144.4 137.9 26.7 11.9 48.2 33.8 58.9 61.7 37.1 14.3 64 47.4 70.2 86.8 5.1.5 10 1.5 15.2 1.5 44.7 0 85.6-20.2 112.6-53.3 4.2-4.8-.2-12-6.4-10.8zM364.5 418.1c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z"]
- };
- var faCloudRain = {
- prefix: 'fas',
- iconName: 'cloud-rain',
- icon: [512, 512, [], "f73d", "M416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96zM88 374.2c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0z"]
- };
- var faCloudShowersHeavy = {
- prefix: 'fas',
- iconName: 'cloud-showers-heavy',
- icon: [512, 512, [], "f740", "M183.9 370.1c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-192 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm384 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zM416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.2 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96z"]
- };
- var faCloudSun = {
- prefix: 'fas',
- iconName: 'cloud-sun',
- icon: [640, 512, [], "f6c4", "M575.2 325.7c.2-1.9.8-3.7.8-5.6 0-35.3-28.7-64-64-64-12.6 0-24.2 3.8-34.1 10-17.6-38.8-56.5-66-101.9-66-61.8 0-112 50.1-112 112 0 3 .7 5.8.9 8.7-49.6 3.7-88.9 44.7-88.9 95.3 0 53 43 96 96 96h272c53 0 96-43 96-96 0-42.1-27.2-77.4-64.8-90.4zm-430.4-22.6c-43.7-43.7-43.7-114.7 0-158.3 43.7-43.7 114.7-43.7 158.4 0 9.7 9.7 16.9 20.9 22.3 32.7 9.8-3.7 20.1-6 30.7-7.5L386 81.1c4-11.9-7.3-23.1-19.2-19.2L279 91.2 237.5 8.4C232-2.8 216-2.8 210.4 8.4L169 91.2 81.1 61.9C69.3 58 58 69.3 61.9 81.1l29.3 87.8-82.8 41.5c-11.2 5.6-11.2 21.5 0 27.1l82.8 41.4-29.3 87.8c-4 11.9 7.3 23.1 19.2 19.2l76.1-25.3c6.1-12.4 14-23.7 23.6-33.5-13.1-5.4-25.4-13.4-36-24zm-4.8-79.2c0 40.8 29.3 74.8 67.9 82.3 8-4.7 16.3-8.8 25.2-11.7 5.4-44.3 31-82.5 67.4-105C287.3 160.4 258 140 224 140c-46.3 0-84 37.6-84 83.9z"]
- };
- var faCloudSunRain = {
- prefix: 'fas',
- iconName: 'cloud-sun-rain',
- icon: [576, 512, [], "f743", "M510.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C187.6 233 160 265.2 160 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm-386.4 34.4c-37.4-37.4-37.4-98.3 0-135.8 34.6-34.6 89.1-36.8 126.7-7.4 20-12.9 43.6-20.7 69.2-20.7.7 0 1.3.2 2 .2l8.9-26.7c3.4-10.2-6.3-19.8-16.5-16.4l-75.3 25.1-35.5-71c-4.8-9.6-18.5-9.6-23.3 0l-35.5 71-75.3-25.1c-10.2-3.4-19.8 6.3-16.4 16.5l25.1 75.3-71 35.5c-9.6 4.8-9.6 18.5 0 23.3l71 35.5-25.1 75.3c-3.4 10.2 6.3 19.8 16.5 16.5l59.2-19.7c-.2-2.4-.7-4.7-.7-7.2 0-12.5 2.3-24.5 6.2-35.9-3.6-2.7-7.1-5.2-10.2-8.3zm69.8-58c4.3-24.5 15.8-46.4 31.9-64-9.8-6.2-21.4-9.9-33.8-9.9-35.3 0-64 28.7-64 64 0 18.7 8.2 35.4 21.1 47.1 11.3-15.9 26.6-28.9 44.8-37.2zm330.6 216.2c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z"]
- };
- var faCloudUploadAlt = {
- prefix: 'fas',
- iconName: 'cloud-upload-alt',
- icon: [640, 512, [], "f382", "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zM393.4 288H328v112c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V288h-65.4c-14.3 0-21.4-17.2-11.3-27.3l105.4-105.4c6.2-6.2 16.4-6.2 22.6 0l105.4 105.4c10.1 10.1 2.9 27.3-11.3 27.3z"]
- };
- var faCocktail = {
- prefix: 'fas',
- iconName: 'cocktail',
- icon: [576, 512, [], "f561", "M296 464h-56V338.78l168.74-168.73c15.52-15.52 4.53-42.05-17.42-42.05H24.68c-21.95 0-32.94 26.53-17.42 42.05L176 338.78V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM432 0c-62.61 0-115.35 40.2-135.18 96h52.54c16.65-28.55 47.27-48 82.64-48 52.93 0 96 43.06 96 96s-43.07 96-96 96c-14.04 0-27.29-3.2-39.32-8.64l-35.26 35.26C379.23 279.92 404.59 288 432 288c79.53 0 144-64.47 144-144S511.53 0 432 0z"]
- };
- var faCode = {
- prefix: 'fas',
- iconName: 'code',
- icon: [640, 512, [], "f121", "M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z"]
- };
- var faCodeBranch = {
- prefix: 'fas',
- iconName: 'code-branch',
- icon: [384, 512, [], "f126", "M384 144c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 36.4 24.3 67.1 57.5 76.8-.6 16.1-4.2 28.5-11 36.9-15.4 19.2-49.3 22.4-85.2 25.7-28.2 2.6-57.4 5.4-81.3 16.9v-144c32.5-10.2 56-40.5 56-76.3 0-44.2-35.8-80-80-80S0 35.8 0 80c0 35.8 23.5 66.1 56 76.3v199.3C23.5 365.9 0 396.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-34-21.2-63.1-51.2-74.6 3.1-5.2 7.8-9.8 14.9-13.4 16.2-8.2 40.4-10.4 66.1-12.8 42.2-3.9 90-8.4 118.2-43.4 14-17.4 21.1-39.8 21.6-67.9 31.6-10.8 54.4-40.7 54.4-75.9zM80 64c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16zm0 384c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm224-320c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16z"]
- };
- var faCoffee = {
- prefix: 'fas',
- iconName: 'coffee',
- icon: [640, 512, [], "f0f4", "M192 384h192c53 0 96-43 96-96h32c70.6 0 128-57.4 128-128S582.6 32 512 32H120c-13.3 0-24 10.7-24 24v232c0 53 43 96 96 96zM512 96c35.3 0 64 28.7 64 64s-28.7 64-64 64h-32V96h32zm47.7 384H48.3c-47.6 0-61-64-36-64h583.3c25 0 11.8 64-35.9 64z"]
- };
- var faCog = {
- prefix: 'fas',
- iconName: 'cog',
- icon: [512, 512, [], "f013", "M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"]
- };
- var faCogs = {
- prefix: 'fas',
- iconName: 'cogs',
- icon: [640, 512, [], "f085", "M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z"]
- };
- var faCoins = {
- prefix: 'fas',
- iconName: 'coins',
- icon: [512, 512, [], "f51e", "M0 405.3V448c0 35.3 86 64 192 64s192-28.7 192-64v-42.7C342.7 434.4 267.2 448 192 448S41.3 434.4 0 405.3zM320 128c106 0 192-28.7 192-64S426 0 320 0 128 28.7 128 64s86 64 192 64zM0 300.4V352c0 35.3 86 64 192 64s192-28.7 192-64v-51.6c-41.3 34-116.9 51.6-192 51.6S41.3 334.4 0 300.4zm416 11c57.3-11.1 96-31.7 96-55.4v-42.7c-23.2 16.4-57.3 27.6-96 34.5v63.6zM192 160C86 160 0 195.8 0 240s86 80 192 80 192-35.8 192-80-86-80-192-80zm219.3 56.3c60-10.8 100.7-32 100.7-56.3v-42.7c-35.5 25.1-96.5 38.6-160.7 41.8 29.5 14.3 51.2 33.5 60 57.2z"]
- };
- var faColumns = {
- prefix: 'fas',
- iconName: 'columns',
- icon: [512, 512, [], "f0db", "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z"]
- };
- var faComment = {
- prefix: 'fas',
- iconName: 'comment',
- icon: [512, 512, [], "f075", "M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32z"]
- };
- var faCommentAlt = {
- prefix: 'fas',
- iconName: 'comment-alt',
- icon: [512, 512, [], "f27a", "M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 9.8 11.2 15.5 19.1 9.7L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64z"]
- };
- var faCommentDollar = {
- prefix: 'fas',
- iconName: 'comment-dollar',
- icon: [512, 512, [], "f651", "M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95.01 57.02 130.74C44.46 421.05 2.7 465.97 2.2 466.5A7.995 7.995 0 0 0 8 480c66.26 0 115.99-31.75 140.6-51.38C181.29 440.93 217.59 448 256 448c141.38 0 256-93.12 256-208S397.38 32 256 32zm24 302.44V352c0 8.84-7.16 16-16 16h-16c-8.84 0-16-7.16-16-16v-17.73c-11.42-1.35-22.28-5.19-31.78-11.46-6.22-4.11-6.82-13.11-1.55-18.38l17.52-17.52c3.74-3.74 9.31-4.24 14.11-2.03 3.18 1.46 6.66 2.22 10.26 2.22h32.78c4.66 0 8.44-3.78 8.44-8.42 0-3.75-2.52-7.08-6.12-8.11l-50.07-14.3c-22.25-6.35-40.01-24.71-42.91-47.67-4.05-32.07 19.03-59.43 49.32-63.05V128c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v17.73c11.42 1.35 22.28 5.19 31.78 11.46 6.22 4.11 6.82 13.11 1.55 18.38l-17.52 17.52c-3.74 3.74-9.31 4.24-14.11 2.03a24.516 24.516 0 0 0-10.26-2.22h-32.78c-4.66 0-8.44 3.78-8.44 8.42 0 3.75 2.52 7.08 6.12 8.11l50.07 14.3c22.25 6.36 40.01 24.71 42.91 47.67 4.05 32.06-19.03 59.42-49.32 63.04z"]
- };
- var faCommentDots = {
- prefix: 'fas',
- iconName: 'comment-dots',
- icon: [512, 512, [], "f4ad", "M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128 272c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"]
- };
- var faCommentMedical = {
- prefix: 'fas',
- iconName: 'comment-medical',
- icon: [512, 512, [], "f7f5", "M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95 57 130.74C44.46 421.05 2.7 466 2.2 466.5A8 8 0 0 0 8 480c66.26 0 116-31.75 140.6-51.38A304.66 304.66 0 0 0 256 448c141.39 0 256-93.12 256-208S397.39 32 256 32zm96 232a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8z"]
- };
- var faCommentSlash = {
- prefix: 'fas',
- iconName: 'comment-slash',
- icon: [640, 512, [], "f4b3", "M64 240c0 49.6 21.4 95 57 130.7-12.6 50.3-54.3 95.2-54.8 95.8-2.2 2.3-2.8 5.7-1.5 8.7 1.3 2.9 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 27.4 0 53.7-3.6 78.4-10L72.9 186.4c-5.6 17.1-8.9 35-8.9 53.6zm569.8 218.1l-114.4-88.4C554.6 334.1 576 289.2 576 240c0-114.9-114.6-208-256-208-65.1 0-124.2 20.1-169.4 52.7L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z"]
- };
- var faComments = {
- prefix: 'fas',
- iconName: 'comments',
- icon: [576, 512, [], "f086", "M416 192c0-88.4-93.1-160-208-160S0 103.6 0 192c0 34.3 14.1 65.9 38 92-13.4 30.2-35.5 54.2-35.8 54.5-2.2 2.3-2.8 5.7-1.5 8.7S4.8 352 8 352c36.6 0 66.9-12.3 88.7-25 32.2 15.7 70.3 25 111.3 25 114.9 0 208-71.6 208-160zm122 220c23.9-26 38-57.7 38-92 0-66.9-53.5-124.2-129.3-148.1.9 6.6 1.3 13.3 1.3 20.1 0 105.9-107.7 192-240 192-10.8 0-21.3-.8-31.7-1.9C207.8 439.6 281.8 480 368 480c41 0 79.1-9.2 111.3-25 21.8 12.7 52.1 25 88.7 25 3.2 0 6.1-1.9 7.3-4.8 1.3-2.9.7-6.3-1.5-8.7-.3-.3-22.4-24.2-35.8-54.5z"]
- };
- var faCommentsDollar = {
- prefix: 'fas',
- iconName: 'comments-dollar',
- icon: [576, 512, [], "f653", "M416 192c0-88.37-93.12-160-208-160S0 103.63 0 192c0 34.27 14.13 65.95 37.97 91.98C24.61 314.22 2.52 338.16 2.2 338.5A7.995 7.995 0 0 0 8 352c36.58 0 66.93-12.25 88.73-24.98C128.93 342.76 167.02 352 208 352c114.88 0 208-71.63 208-160zm-224 96v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V96c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07V288c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm346.01 123.99C561.87 385.96 576 354.27 576 320c0-66.94-53.49-124.2-129.33-148.07.86 6.6 1.33 13.29 1.33 20.07 0 105.87-107.66 192-240 192-10.78 0-21.32-.77-31.73-1.88C207.8 439.63 281.77 480 368 480c40.98 0 79.07-9.24 111.27-24.98C501.07 467.75 531.42 480 568 480c3.2 0 6.09-1.91 7.34-4.84 1.27-2.94.66-6.34-1.55-8.67-.31-.33-22.42-24.24-35.78-54.5z"]
- };
- var faCompactDisc = {
- prefix: 'fas',
- iconName: 'compact-disc',
- icon: [496, 512, [], "f51f", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 256H56c0-105.9 86.1-192 192-192v32c-88.2 0-160 71.8-160 160zm160 96c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"]
- };
- var faCompass = {
- prefix: 'fas',
- iconName: 'compass',
- icon: [496, 512, [], "f14e", "M225.38 233.37c-12.5 12.5-12.5 32.76 0 45.25 12.49 12.5 32.76 12.5 45.25 0 12.5-12.5 12.5-32.76 0-45.25-12.5-12.49-32.76-12.49-45.25 0zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm126.14 148.05L308.17 300.4a31.938 31.938 0 0 1-15.77 15.77l-144.34 65.97c-16.65 7.61-33.81-9.55-26.2-26.2l65.98-144.35a31.938 31.938 0 0 1 15.77-15.77l144.34-65.97c16.65-7.6 33.8 9.55 26.19 26.2z"]
- };
- var faCompress = {
- prefix: 'fas',
- iconName: 'compress',
- icon: [448, 512, [], "f066", "M436 192H312c-13.3 0-24-10.7-24-24V44c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v84h84c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm-276-24V44c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v84H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24zm0 300V344c0-13.3-10.7-24-24-24H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-84h84c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H312c-13.3 0-24 10.7-24 24v124c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z"]
- };
- var faCompressAlt = {
- prefix: 'fas',
- iconName: 'compress-alt',
- icon: [448, 512, [], "f422", "M4.686 427.314L104 328l-32.922-31.029C55.958 281.851 66.666 256 88.048 256h112C213.303 256 224 266.745 224 280v112c0 21.382-25.803 32.09-40.922 16.971L152 376l-99.314 99.314c-6.248 6.248-16.379 6.248-22.627 0L4.686 449.941c-6.248-6.248-6.248-16.379 0-22.627zM443.314 84.686L344 184l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C234.697 256 224 245.255 224 232V120c0-21.382 25.803-32.09 40.922-16.971L296 136l99.314-99.314c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.248 6.248 6.248 16.379 0 22.627z"]
- };
- var faCompressArrowsAlt = {
- prefix: 'fas',
- iconName: 'compress-arrows-alt',
- icon: [512, 512, [], "f78c", "M200 288H88c-21.4 0-32.1 25.8-17 41l32.9 31-99.2 99.3c-6.2 6.2-6.2 16.4 0 22.6l25.4 25.4c6.2 6.2 16.4 6.2 22.6 0L152 408l31.1 33c15.1 15.1 40.9 4.4 40.9-17V312c0-13.3-10.7-24-24-24zm112-64h112c21.4 0 32.1-25.9 17-41l-33-31 99.3-99.3c6.2-6.2 6.2-16.4 0-22.6L481.9 4.7c-6.2-6.2-16.4-6.2-22.6 0L360 104l-31.1-33C313.8 55.9 288 66.6 288 88v112c0 13.3 10.7 24 24 24zm96 136l33-31.1c15.1-15.1 4.4-40.9-17-40.9H312c-13.3 0-24 10.7-24 24v112c0 21.4 25.9 32.1 41 17l31-32.9 99.3 99.3c6.2 6.2 16.4 6.2 22.6 0l25.4-25.4c6.2-6.2 6.2-16.4 0-22.6L408 360zM183 71.1L152 104 52.7 4.7c-6.2-6.2-16.4-6.2-22.6 0L4.7 30.1c-6.2 6.2-6.2 16.4 0 22.6L104 152l-33 31.1C55.9 198.2 66.6 224 88 224h112c13.3 0 24-10.7 24-24V88c0-21.3-25.9-32-41-16.9z"]
- };
- var faConciergeBell = {
- prefix: 'fas',
- iconName: 'concierge-bell',
- icon: [512, 512, [], "f562", "M288 130.54V112h16c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h16v18.54C115.49 146.11 32 239.18 32 352h448c0-112.82-83.49-205.89-192-221.46zM496 384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"]
- };
- var faCookie = {
- prefix: 'fas',
- iconName: 'cookie',
- icon: [512, 512, [], "f563", "M510.37 254.79l-12.08-76.26a132.493 132.493 0 0 0-37.16-72.95l-54.76-54.75c-19.73-19.72-45.18-32.7-72.71-37.05l-76.7-12.15c-27.51-4.36-55.69.11-80.52 12.76L107.32 49.6a132.25 132.25 0 0 0-57.79 57.8l-35.1 68.88a132.602 132.602 0 0 0-12.82 80.94l12.08 76.27a132.493 132.493 0 0 0 37.16 72.95l54.76 54.75a132.087 132.087 0 0 0 72.71 37.05l76.7 12.14c27.51 4.36 55.69-.11 80.52-12.75l69.12-35.21a132.302 132.302 0 0 0 57.79-57.8l35.1-68.87c12.71-24.96 17.2-53.3 12.82-80.96zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"]
- };
- var faCookieBite = {
- prefix: 'fas',
- iconName: 'cookie-bite',
- icon: [512, 512, [], "f564", "M510.52 255.82c-69.97-.85-126.47-57.69-126.47-127.86-70.17 0-127-56.49-127.86-126.45-27.26-4.14-55.13.3-79.72 12.82l-69.13 35.22a132.221 132.221 0 0 0-57.79 57.81l-35.1 68.88a132.645 132.645 0 0 0-12.82 80.95l12.08 76.27a132.521 132.521 0 0 0 37.16 72.96l54.77 54.76a132.036 132.036 0 0 0 72.71 37.06l76.71 12.15c27.51 4.36 55.7-.11 80.53-12.76l69.13-35.21a132.273 132.273 0 0 0 57.79-57.81l35.1-68.88c12.56-24.64 17.01-52.58 12.91-79.91zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"]
- };
- var faCopy = {
- prefix: 'fas',
- iconName: 'copy',
- icon: [448, 512, [], "f0c5", "M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z"]
- };
- var faCopyright = {
- prefix: 'fas',
- iconName: 'copyright',
- icon: [512, 512, [], "f1f9", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm117.134 346.753c-1.592 1.867-39.776 45.731-109.851 45.731-84.692 0-144.484-63.26-144.484-145.567 0-81.303 62.004-143.401 143.762-143.401 66.957 0 101.965 37.315 103.422 38.904a12 12 0 0 1 1.238 14.623l-22.38 34.655c-4.049 6.267-12.774 7.351-18.234 2.295-.233-.214-26.529-23.88-61.88-23.88-46.116 0-73.916 33.575-73.916 76.082 0 39.602 25.514 79.692 74.277 79.692 38.697 0 65.28-28.338 65.544-28.625 5.132-5.565 14.059-5.033 18.508 1.053l24.547 33.572a12.001 12.001 0 0 1-.553 14.866z"]
- };
- var faCouch = {
- prefix: 'fas',
- iconName: 'couch',
- icon: [640, 512, [], "f4b8", "M160 224v64h320v-64c0-35.3 28.7-64 64-64h32c0-53-43-96-96-96H160c-53 0-96 43-96 96h32c35.3 0 64 28.7 64 64zm416-32h-32c-17.7 0-32 14.3-32 32v96H128v-96c0-17.7-14.3-32-32-32H64c-35.3 0-64 28.7-64 64 0 23.6 13 44 32 55.1V432c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-16h384v16c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V311.1c19-11.1 32-31.5 32-55.1 0-35.3-28.7-64-64-64z"]
- };
- var faCreditCard = {
- prefix: 'fas',
- iconName: 'credit-card',
- icon: [576, 512, [], "f09d", "M0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V256H0v176zm192-68c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-40zm-128 0c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM576 80v48H0V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48z"]
- };
- var faCrop = {
- prefix: 'fas',
- iconName: 'crop',
- icon: [512, 512, [], "f125", "M488 352h-40V109.25l59.31-59.31c6.25-6.25 6.25-16.38 0-22.63L484.69 4.69c-6.25-6.25-16.38-6.25-22.63 0L402.75 64H192v96h114.75L160 306.75V24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v264c0 13.25 10.75 24 24 24h232v-96H205.25L352 205.25V488c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z"]
- };
- var faCropAlt = {
- prefix: 'fas',
- iconName: 'crop-alt',
- icon: [512, 512, [], "f565", "M488 352h-40V96c0-17.67-14.33-32-32-32H192v96h160v328c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24zM160 24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v256c0 17.67 14.33 32 32 32h224v-96H160V24z"]
- };
- var faCross = {
- prefix: 'fas',
- iconName: 'cross',
- icon: [384, 512, [], "f654", "M352 128h-96V32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h96v224c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V256h96c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z"]
- };
- var faCrosshairs = {
- prefix: 'fas',
- iconName: 'crosshairs',
- icon: [512, 512, [], "f05b", "M500 224h-30.364C455.724 130.325 381.675 56.276 288 42.364V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v30.364C130.325 56.276 56.276 130.325 42.364 224H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h30.364C56.276 381.675 130.325 455.724 224 469.636V500c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-30.364C381.675 455.724 455.724 381.675 469.636 288H500c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zM288 404.634V364c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40.634C165.826 392.232 119.783 346.243 107.366 288H148c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40.634C119.768 165.826 165.757 119.783 224 107.366V148c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40.634C346.174 119.768 392.217 165.757 404.634 224H364c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40.634C392.232 346.174 346.243 392.217 288 404.634zM288 256c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z"]
- };
- var faCrow = {
- prefix: 'fas',
- iconName: 'crow',
- icon: [640, 512, [], "f520", "M544 32h-16.36C513.04 12.68 490.09 0 464 0c-44.18 0-80 35.82-80 80v20.98L12.09 393.57A30.216 30.216 0 0 0 0 417.74c0 22.46 23.64 37.07 43.73 27.03L165.27 384h96.49l44.41 120.1c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38L312.94 384H352c1.91 0 3.76-.23 5.66-.29l44.51 120.38c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38l-41.24-111.53C485.74 352.8 544 279.26 544 192v-80l96-16c0-35.35-42.98-64-96-64zm-80 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"]
- };
- var faCrown = {
- prefix: 'fas',
- iconName: 'crown',
- icon: [640, 512, [], "f521", "M528 448H112c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h416c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm64-320c-26.5 0-48 21.5-48 48 0 7.1 1.6 13.7 4.4 19.8L476 239.2c-15.4 9.2-35.3 4-44.2-11.6L350.3 85C361 76.2 368 63 368 48c0-26.5-21.5-48-48-48s-48 21.5-48 48c0 15 7 28.2 17.7 37l-81.5 142.6c-8.9 15.6-28.9 20.8-44.2 11.6l-72.3-43.4c2.7-6 4.4-12.7 4.4-19.8 0-26.5-21.5-48-48-48S0 149.5 0 176s21.5 48 48 48c2.6 0 5.2-.4 7.7-.8L128 416h384l72.3-192.8c2.5.4 5.1.8 7.7.8 26.5 0 48-21.5 48-48s-21.5-48-48-48z"]
- };
- var faCrutch = {
- prefix: 'fas',
- iconName: 'crutch',
- icon: [512, 512, [], "f7f7", "M507.31 185.71l-181-181a16 16 0 0 0-22.62 0L281 27.31a16 16 0 0 0 0 22.63l181 181a16 16 0 0 0 22.63 0l22.62-22.63a16 16 0 0 0 .06-22.6zm-179.54 66.41l-67.89-67.89 55.1-55.1-45.25-45.25-109.67 109.67a96.08 96.08 0 0 0-25.67 46.29L106.65 360.1l-102 102a16 16 0 0 0 0 22.63l22.62 22.62a16 16 0 0 0 22.63 0l102-102 120.25-27.75a95.88 95.88 0 0 0 46.29-25.65l109.68-109.68L382.87 197zm-54.57 54.57a32 32 0 0 1-15.45 8.54l-79.3 18.32 18.3-79.3a32.22 32.22 0 0 1 8.56-15.45l9.31-9.31 67.89 67.89z"]
- };
- var faCube = {
- prefix: 'fas',
- iconName: 'cube',
- icon: [512, 512, [], "f1b2", "M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z"]
- };
- var faCubes = {
- prefix: 'fas',
- iconName: 'cubes',
- icon: [512, 512, [], "f1b3", "M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z"]
- };
- var faCut = {
- prefix: 'fas',
- iconName: 'cut',
- icon: [448, 512, [], "f0c4", "M278.06 256L444.48 89.57c4.69-4.69 4.69-12.29 0-16.97-32.8-32.8-85.99-32.8-118.79 0L210.18 188.12l-24.86-24.86c4.31-10.92 6.68-22.81 6.68-35.26 0-53.02-42.98-96-96-96S0 74.98 0 128s42.98 96 96 96c4.54 0 8.99-.32 13.36-.93L142.29 256l-32.93 32.93c-4.37-.61-8.83-.93-13.36-.93-53.02 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96c0-12.45-2.37-24.34-6.68-35.26l24.86-24.86L325.69 439.4c32.8 32.8 85.99 32.8 118.79 0 4.69-4.68 4.69-12.28 0-16.97L278.06 256zM96 160c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32zm0 256c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z"]
- };
- var faDatabase = {
- prefix: 'fas',
- iconName: 'database',
- icon: [448, 512, [], "f1c0", "M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z"]
- };
- var faDeaf = {
- prefix: 'fas',
- iconName: 'deaf',
- icon: [512, 512, [], "f2a4", "M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm268.485-52.201L480.2 3.515c-4.687-4.686-12.284-4.686-16.971 0L376.2 90.544c-4.686 4.686-4.686 12.284 0 16.971l28.285 28.285c4.686 4.686 12.284 4.686 16.97 0l87.03-87.029c4.687-4.688 4.687-12.286 0-16.972zM168.97 314.745c-4.686-4.686-12.284-4.686-16.97 0L3.515 463.23c-4.686 4.686-4.686 12.284 0 16.971L31.8 508.485c4.687 4.686 12.284 4.686 16.971 0L197.256 360c4.686-4.686 4.686-12.284 0-16.971l-28.286-28.284z"]
- };
- var faDemocrat = {
- prefix: 'fas',
- iconName: 'democrat',
- icon: [640, 512, [], "f747", "M637.3 256.9l-19.6-29.4c-28.2-42.3-75.3-67.5-126.1-67.5H256l-81.2-81.2c20.1-20.1 22.6-51.1 7.5-73.9-3.4-5.2-10.8-5.9-15.2-1.5l-41.8 41.8L82.4 2.4c-3.6-3.6-9.6-3-12.4 1.2-12.3 18.6-10.3 44 6.1 60.4 3.3 3.3 7.3 5.3 11.3 7.5-2.2 1.7-4.7 3.1-6.4 5.4L6.4 176.2c-7.3 9.7-8.4 22.7-3 33.5l14.3 28.6c5.4 10.8 16.5 17.7 28.6 17.7h31c8.5 0 16.6-3.4 22.6-9.4L138 212l54 108h352v-77.8c16.2 12.2 18.3 17.6 40.1 50.3 4.9 7.4 14.8 9.3 22.2 4.4l26.6-17.7c7.3-5 9.3-14.9 4.4-22.3zm-341.1-13.6l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L256 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L368 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L480 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zM192 496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80h160v80c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V352H192v144z"]
- };
- var faDesktop = {
- prefix: 'fas',
- iconName: 'desktop',
- icon: [576, 512, [], "f108", "M528 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h192l-16 48h-72c-13.3 0-24 10.7-24 24s10.7 24 24 24h272c13.3 0 24-10.7 24-24s-10.7-24-24-24h-72l-16-48h192c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h448v288z"]
- };
- var faDharmachakra = {
- prefix: 'fas',
- iconName: 'dharmachakra',
- icon: [512, 512, [], "f655", "M495 225.06l-17.22 1.08c-5.27-39.49-20.79-75.64-43.86-105.84l12.95-11.43c6.92-6.11 7.25-16.79.73-23.31L426.44 64.4c-6.53-6.53-17.21-6.19-23.31.73L391.7 78.07c-30.2-23.06-66.35-38.58-105.83-43.86L286.94 17c.58-9.21-6.74-17-15.97-17h-29.94c-9.23 0-16.54 7.79-15.97 17l1.08 17.22c-39.49 5.27-75.64 20.79-105.83 43.86l-11.43-12.95c-6.11-6.92-16.79-7.25-23.31-.73L64.4 85.56c-6.53 6.53-6.19 17.21.73 23.31l12.95 11.43c-23.06 30.2-38.58 66.35-43.86 105.84L17 225.06c-9.21-.58-17 6.74-17 15.97v29.94c0 9.23 7.79 16.54 17 15.97l17.22-1.08c5.27 39.49 20.79 75.64 43.86 105.83l-12.95 11.43c-6.92 6.11-7.25 16.79-.73 23.31l21.17 21.17c6.53 6.53 17.21 6.19 23.31-.73l11.43-12.95c30.2 23.06 66.35 38.58 105.84 43.86L225.06 495c-.58 9.21 6.74 17 15.97 17h29.94c9.23 0 16.54-7.79 15.97-17l-1.08-17.22c39.49-5.27 75.64-20.79 105.84-43.86l11.43 12.95c6.11 6.92 16.79 7.25 23.31.73l21.17-21.17c6.53-6.53 6.19-17.21-.73-23.31l-12.95-11.43c23.06-30.2 38.58-66.35 43.86-105.83l17.22 1.08c9.21.58 17-6.74 17-15.97v-29.94c-.01-9.23-7.8-16.54-17.01-15.97zM281.84 98.61c24.81 4.07 47.63 13.66 67.23 27.78l-42.62 48.29c-8.73-5.44-18.32-9.54-28.62-11.95l4.01-64.12zm-51.68 0l4.01 64.12c-10.29 2.41-19.89 6.52-28.62 11.95l-42.62-48.29c19.6-14.12 42.42-23.71 67.23-27.78zm-103.77 64.33l48.3 42.61c-5.44 8.73-9.54 18.33-11.96 28.62l-64.12-4.01c4.07-24.81 13.66-47.62 27.78-67.22zm-27.78 118.9l64.12-4.01c2.41 10.29 6.52 19.89 11.95 28.62l-48.29 42.62c-14.12-19.6-23.71-42.42-27.78-67.23zm131.55 131.55c-24.81-4.07-47.63-13.66-67.23-27.78l42.61-48.3c8.73 5.44 18.33 9.54 28.62 11.96l-4 64.12zM256 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm25.84 125.39l-4.01-64.12c10.29-2.41 19.89-6.52 28.62-11.96l42.61 48.3c-19.6 14.12-42.41 23.71-67.22 27.78zm103.77-64.33l-48.29-42.62c5.44-8.73 9.54-18.32 11.95-28.62l64.12 4.01c-4.07 24.82-13.66 47.64-27.78 67.23zm-36.34-114.89c-2.41-10.29-6.52-19.89-11.96-28.62l48.3-42.61c14.12 19.6 23.71 42.42 27.78 67.23l-64.12 4z"]
- };
- var faDiagnoses = {
- prefix: 'fas',
- iconName: 'diagnoses',
- icon: [640, 512, [], "f470", "M496 256c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm-176-80c48.5 0 88-39.5 88-88S368.5 0 320 0s-88 39.5-88 88 39.5 88 88 88zM59.8 364c10.2 15.3 29.3 17.8 42.9 9.8 16.2-9.6 56.2-31.7 105.3-48.6V416h224v-90.7c49.1 16.8 89.1 39 105.3 48.6 13.6 8 32.7 5.3 42.9-9.8l17.8-26.7c8.8-13.2 7.6-34.6-10-45.1-11.9-7.1-29.7-17-51.1-27.4-28.1 46.1-99.4 17.8-87.7-35.1C409.3 217.2 365.1 208 320 208c-57 0-112.9 14.5-160 32.2-.2 40.2-47.6 63.3-79.2 36-11.2 6-21.3 11.6-28.7 16-17.6 10.5-18.8 31.8-10 45.1L59.8 364zM368 344c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-160 8c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm512 192H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z"]
- };
- var faDice = {
- prefix: 'fas',
- iconName: 'dice',
- icon: [640, 512, [], "f522", "M592 192H473.26c12.69 29.59 7.12 65.2-17 89.32L320 417.58V464c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48V240c0-26.51-21.49-48-48-48zM480 376c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm-46.37-186.7L258.7 14.37c-19.16-19.16-50.23-19.16-69.39 0L14.37 189.3c-19.16 19.16-19.16 50.23 0 69.39L189.3 433.63c19.16 19.16 50.23 19.16 69.39 0L433.63 258.7c19.16-19.17 19.16-50.24 0-69.4zM96 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"]
- };
- var faDiceD20 = {
- prefix: 'fas',
- iconName: 'dice-d20',
- icon: [480, 512, [], "f6cf", "M106.75 215.06L1.2 370.95c-3.08 5 .1 11.5 5.93 12.14l208.26 22.07-108.64-190.1zM7.41 315.43L82.7 193.08 6.06 147.1c-2.67-1.6-6.06.32-6.06 3.43v162.81c0 4.03 5.29 5.53 7.41 2.09zM18.25 423.6l194.4 87.66c5.3 2.45 11.35-1.43 11.35-7.26v-65.67l-203.55-22.3c-4.45-.5-6.23 5.59-2.2 7.57zm81.22-257.78L179.4 22.88c4.34-7.06-3.59-15.25-10.78-11.14L17.81 110.35c-2.47 1.62-2.39 5.26.13 6.78l81.53 48.69zM240 176h109.21L253.63 7.62C250.5 2.54 245.25 0 240 0s-10.5 2.54-13.63 7.62L130.79 176H240zm233.94-28.9l-76.64 45.99 75.29 122.35c2.11 3.44 7.41 1.94 7.41-2.1V150.53c0-3.11-3.39-5.03-6.06-3.43zm-93.41 18.72l81.53-48.7c2.53-1.52 2.6-5.16.13-6.78l-150.81-98.6c-7.19-4.11-15.12 4.08-10.78 11.14l79.93 142.94zm79.02 250.21L256 438.32v65.67c0 5.84 6.05 9.71 11.35 7.26l194.4-87.66c4.03-1.97 2.25-8.06-2.2-7.56zm-86.3-200.97l-108.63 190.1 208.26-22.07c5.83-.65 9.01-7.14 5.93-12.14L373.25 215.06zM240 208H139.57L240 383.75 340.43 208H240z"]
- };
- var faDiceD6 = {
- prefix: 'fas',
- iconName: 'dice-d6',
- icon: [448, 512, [], "f6d1", "M422.19 109.95L256.21 9.07c-19.91-12.1-44.52-12.1-64.43 0L25.81 109.95c-5.32 3.23-5.29 11.27.06 14.46L224 242.55l198.14-118.14c5.35-3.19 5.38-11.22.05-14.46zm13.84 44.63L240 271.46v223.82c0 12.88 13.39 20.91 24.05 14.43l152.16-92.48c19.68-11.96 31.79-33.94 31.79-57.7v-197.7c0-6.41-6.64-10.43-11.97-7.25zM0 161.83v197.7c0 23.77 12.11 45.74 31.79 57.7l152.16 92.47c10.67 6.48 24.05-1.54 24.05-14.43V271.46L11.97 154.58C6.64 151.4 0 155.42 0 161.83z"]
- };
- var faDiceFive = {
- prefix: 'fas',
- iconName: 'dice-five',
- icon: [448, 512, [], "f523", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"]
- };
- var faDiceFour = {
- prefix: 'fas',
- iconName: 'dice-four',
- icon: [448, 512, [], "f524", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"]
- };
- var faDiceOne = {
- prefix: 'fas',
- iconName: 'dice-one',
- icon: [448, 512, [], "f525", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM224 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"]
- };
- var faDiceSix = {
- prefix: 'fas',
- iconName: 'dice-six',
- icon: [448, 512, [], "f526", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"]
- };
- var faDiceThree = {
- prefix: 'fas',
- iconName: 'dice-three',
- icon: [448, 512, [], "f527", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"]
- };
- var faDiceTwo = {
- prefix: 'fas',
- iconName: 'dice-two',
- icon: [448, 512, [], "f528", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"]
- };
- var faDigitalTachograph = {
- prefix: 'fas',
- iconName: 'digital-tachograph',
- icon: [640, 512, [], "f566", "M608 96H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128c0-17.67-14.33-32-32-32zM304 352c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8zM72 288v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H80c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm40-64c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-48c0-8.84 7.16-16 16-16h208c8.84 0 16 7.16 16 16v48zm272 128c0 4.42-3.58 8-8 8H344c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8z"]
- };
- var faDirections = {
- prefix: 'fas',
- iconName: 'directions',
- icon: [512, 512, [], "f5eb", "M502.61 233.32L278.68 9.39c-12.52-12.52-32.83-12.52-45.36 0L9.39 233.32c-12.52 12.53-12.52 32.83 0 45.36l223.93 223.93c12.52 12.53 32.83 12.53 45.36 0l223.93-223.93c12.52-12.53 12.52-32.83 0-45.36zm-100.98 12.56l-84.21 77.73c-5.12 4.73-13.43 1.1-13.43-5.88V264h-96v64c0 4.42-3.58 8-8 8h-32c-4.42 0-8-3.58-8-8v-80c0-17.67 14.33-32 32-32h112v-53.73c0-6.97 8.3-10.61 13.43-5.88l84.21 77.73c3.43 3.17 3.43 8.59 0 11.76z"]
- };
- var faDisease = {
- prefix: 'fas',
- iconName: 'disease',
- icon: [512, 512, [], "f7fa", "M472.29 195.9l-67.06-23c-19.28-6.6-33.54-20.92-38.14-38.31l-16-60.45c-11.58-43.77-76.57-57.13-110-22.62L195 99.24c-13.26 13.71-33.54 20.93-54.2 19.31l-71.9-5.62c-52-4.07-86.93 44.89-59 82.84l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24l-28.43 57C4 396.67 47.46 440.29 98.11 429.23l70-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101 7.57 104.45-37.22l4.7-61.86c1.35-17.8 12.8-33.87 30.63-43l62-31.74c44.84-22.96 39.55-80.17-8.99-96.79zM160 256a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm128 96a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm16-128a16 16 0 1 1 16-16 16 16 0 0 1-16 16z"]
- };
- var faDivide = {
- prefix: 'fas',
- iconName: 'divide',
- icon: [448, 512, [], "f529", "M224 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm0-192c35.35 0 64-28.65 64-64s-28.65-64-64-64-64 28.65-64 64 28.65 64 64 64zm192 48H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"]
- };
- var faDizzy = {
- prefix: 'fas',
- iconName: 'dizzy',
- icon: [496, 512, [], "f567", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-96 206.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L174.6 192l28.7 28.7c15.2 15.2-7.9 37.4-22.6 22.6L152 214.6zM248 416c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm147.3-195.3c15.2 15.2-7.9 37.4-22.6 22.6L344 214.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L366.6 192l28.7 28.7z"]
- };
- var faDna = {
- prefix: 'fas',
- iconName: 'dna',
- icon: [448, 512, [], "f471", "M.1 494.1c-1.1 9.5 6.3 17.8 15.9 17.8l32.3.1c8.1 0 14.9-5.9 16-13.9.7-4.9 1.8-11.1 3.4-18.1H380c1.6 6.9 2.9 13.2 3.5 18.1 1.1 8 7.9 14 16 13.9l32.3-.1c9.6 0 17.1-8.3 15.9-17.8-4.6-37.9-25.6-129-118.9-207.7-17.6 12.4-37.1 24.2-58.5 35.4 6.2 4.6 11.4 9.4 17 14.2H159.7c21.3-18.1 47-35.6 78.7-51.4C410.5 199.1 442.1 65.8 447.9 17.9 449 8.4 441.6.1 432 .1L399.6 0c-8.1 0-14.9 5.9-16 13.9-.7 4.9-1.8 11.1-3.4 18.1H67.8c-1.6-7-2.7-13.1-3.4-18.1-1.1-8-7.9-14-16-13.9L16.1.1C6.5.1-1 8.4.1 17.9 5.3 60.8 31.4 171.8 160 256 31.5 340.2 5.3 451.2.1 494.1zM224 219.6c-25.1-13.7-46.4-28.4-64.3-43.6h128.5c-17.8 15.2-39.1 30-64.2 43.6zM355.1 96c-5.8 10.4-12.8 21.1-21 32H114c-8.3-10.9-15.3-21.6-21-32h262.1zM92.9 416c5.8-10.4 12.8-21.1 21-32h219.4c8.3 10.9 15.4 21.6 21.2 32H92.9z"]
- };
- var faDog = {
- prefix: 'fas',
- iconName: 'dog',
- icon: [576, 512, [], "f6d3", "M298.06,224,448,277.55V496a16,16,0,0,1-16,16H368a16,16,0,0,1-16-16V384H192V496a16,16,0,0,1-16,16H112a16,16,0,0,1-16-16V282.09C58.84,268.84,32,233.66,32,192a32,32,0,0,1,64,0,32.06,32.06,0,0,0,32,32ZM544,112v32a64,64,0,0,1-64,64H448v35.58L320,197.87V48c0-14.25,17.22-21.39,27.31-11.31L374.59,64h53.63c10.91,0,23.75,7.92,28.62,17.69L464,96h64A16,16,0,0,1,544,112Zm-112,0a16,16,0,1,0-16,16A16,16,0,0,0,432,112Z"]
- };
- var faDollarSign = {
- prefix: 'fas',
- iconName: 'dollar-sign',
- icon: [288, 512, [], "f155", "M209.2 233.4l-108-31.6C88.7 198.2 80 186.5 80 173.5c0-16.3 13.2-29.5 29.5-29.5h66.3c12.2 0 24.2 3.7 34.2 10.5 6.1 4.1 14.3 3.1 19.5-2l34.8-34c7.1-6.9 6.1-18.4-1.8-24.5C238 74.8 207.4 64.1 176 64V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48h-2.5C45.8 64-5.4 118.7.5 183.6c4.2 46.1 39.4 83.6 83.8 96.6l102.5 30c12.5 3.7 21.2 15.3 21.2 28.3 0 16.3-13.2 29.5-29.5 29.5h-66.3C100 368 88 364.3 78 357.5c-6.1-4.1-14.3-3.1-19.5 2l-34.8 34c-7.1 6.9-6.1 18.4 1.8 24.5 24.5 19.2 55.1 29.9 86.5 30v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48.2c46.6-.9 90.3-28.6 105.7-72.7 21.5-61.6-14.6-124.8-72.5-141.7z"]
- };
- var faDolly = {
- prefix: 'fas',
- iconName: 'dolly',
- icon: [576, 512, [], "f472", "M294.2 277.7c18 5 34.7 13.4 49.5 24.7l161.5-53.8c8.4-2.8 12.9-11.9 10.1-20.2L454.9 47.2c-2.8-8.4-11.9-12.9-20.2-10.1l-61.1 20.4 33.1 99.4L346 177l-33.1-99.4-61.6 20.5c-8.4 2.8-12.9 11.9-10.1 20.2l53 159.4zm281 48.7L565 296c-2.8-8.4-11.9-12.9-20.2-10.1l-213.5 71.2c-17.2-22-43.6-36.4-73.5-37L158.4 21.9C154 8.8 141.8 0 128 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h88.9l92.2 276.7c-26.1 20.4-41.7 53.6-36 90.5 6.1 39.4 37.9 72.3 77.3 79.2 60.2 10.7 112.3-34.8 113.4-92.6l213.3-71.2c8.3-2.8 12.9-11.8 10.1-20.2zM256 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"]
- };
- var faDollyFlatbed = {
- prefix: 'fas',
- iconName: 'dolly-flatbed',
- icon: [640, 512, [], "f474", "M208 320h384c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H448v128l-48-32-48 32V32H208c-8.8 0-16 7.2-16 16v256c0 8.8 7.2 16 16 16zm416 64H128V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h82.9c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H451c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H624c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z"]
- };
- var faDonate = {
- prefix: 'fas',
- iconName: 'donate',
- icon: [512, 512, [], "f4b9", "M256 416c114.9 0 208-93.1 208-208S370.9 0 256 0 48 93.1 48 208s93.1 208 208 208zM233.8 97.4V80.6c0-9.2 7.4-16.6 16.6-16.6h11.1c9.2 0 16.6 7.4 16.6 16.6v17c15.5.8 30.5 6.1 43 15.4 5.6 4.1 6.2 12.3 1.2 17.1L306 145.6c-3.8 3.7-9.5 3.8-14 1-5.4-3.4-11.4-5.1-17.8-5.1h-38.9c-9 0-16.3 8.2-16.3 18.3 0 8.2 5 15.5 12.1 17.6l62.3 18.7c25.7 7.7 43.7 32.4 43.7 60.1 0 34-26.4 61.5-59.1 62.4v16.8c0 9.2-7.4 16.6-16.6 16.6h-11.1c-9.2 0-16.6-7.4-16.6-16.6v-17c-15.5-.8-30.5-6.1-43-15.4-5.6-4.1-6.2-12.3-1.2-17.1l16.3-15.5c3.8-3.7 9.5-3.8 14-1 5.4 3.4 11.4 5.1 17.8 5.1h38.9c9 0 16.3-8.2 16.3-18.3 0-8.2-5-15.5-12.1-17.6l-62.3-18.7c-25.7-7.7-43.7-32.4-43.7-60.1.1-34 26.4-61.5 59.1-62.4zM480 352h-32.5c-19.6 26-44.6 47.7-73 64h63.8c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8h63.8c-28.4-16.3-53.3-38-73-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32z"]
- };
- var faDoorClosed = {
- prefix: 'fas',
- iconName: 'door-closed',
- icon: [640, 512, [], "f52a", "M624 448H512V50.8C512 22.78 490.47 0 464 0H175.99c-26.47 0-48 22.78-48 50.8V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM415.99 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32c.01 17.67-14.32 32-32 32z"]
- };
- var faDoorOpen = {
- prefix: 'fas',
- iconName: 'door-open',
- icon: [640, 512, [], "f52b", "M624 448h-80V113.45C544 86.19 522.47 64 496 64H384v64h96v384h144c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM312.24 1.01l-192 49.74C105.99 54.44 96 67.7 96 82.92V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h336V33.18c0-21.58-19.56-37.41-39.76-32.17zM264 288c-13.25 0-24-14.33-24-32s10.75-32 24-32 24 14.33 24 32-10.75 32-24 32z"]
- };
- var faDotCircle = {
- prefix: 'fas',
- iconName: 'dot-circle',
- icon: [512, 512, [], "f192", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm80 248c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80z"]
- };
- var faDove = {
- prefix: 'fas',
- iconName: 'dove',
- icon: [512, 512, [], "f4ba", "M288 167.2v-28.1c-28.2-36.3-47.1-79.3-54.1-125.2-2.1-13.5-19-18.8-27.8-8.3-21.1 24.9-37.7 54.1-48.9 86.5 34.2 38.3 80 64.6 130.8 75.1zM400 64c-44.2 0-80 35.9-80 80.1v59.4C215.6 197.3 127 133 87 41.8c-5.5-12.5-23.2-13.2-29-.9C41.4 76 32 115.2 32 156.6c0 70.8 34.1 136.9 85.1 185.9 13.2 12.7 26.1 23.2 38.9 32.8l-143.9 36C1.4 414-3.4 426.4 2.6 435.7 20 462.6 63 508.2 155.8 512c8 .3 16-2.6 22.1-7.9l65.2-56.1H320c88.4 0 160-71.5 160-159.9V128l32-64H400zm0 96.1c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"]
- };
- var faDownload = {
- prefix: 'fas',
- iconName: 'download',
- icon: [512, 512, [], "f019", "M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z"]
- };
- var faDraftingCompass = {
- prefix: 'fas',
- iconName: 'drafting-compass',
- icon: [512, 512, [], "f568", "M457.01 344.42c-25.05 20.33-52.63 37.18-82.54 49.05l54.38 94.19 53.95 23.04c9.81 4.19 20.89-2.21 22.17-12.8l7.02-58.25-54.98-95.23zm42.49-94.56c4.86-7.67 1.89-17.99-6.05-22.39l-28.07-15.57c-7.48-4.15-16.61-1.46-21.26 5.72C403.01 281.15 332.25 320 256 320c-23.93 0-47.23-4.25-69.41-11.53l67.36-116.68c.7.02 1.34.21 2.04.21s1.35-.19 2.04-.21l51.09 88.5c31.23-8.96 59.56-25.75 82.61-48.92l-51.79-89.71C347.39 128.03 352 112.63 352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96c0 16.63 4.61 32.03 12.05 45.66l-68.3 118.31c-12.55-11.61-23.96-24.59-33.68-39-4.79-7.1-13.97-9.62-21.38-5.33l-27.75 16.07c-7.85 4.54-10.63 14.9-5.64 22.47 15.57 23.64 34.69 44.21 55.98 62.02L0 439.66l7.02 58.25c1.28 10.59 12.36 16.99 22.17 12.8l53.95-23.04 70.8-122.63C186.13 377.28 220.62 384 256 384c99.05 0 190.88-51.01 243.5-134.14zM256 64c17.67 0 32 14.33 32 32s-14.33 32-32 32-32-14.33-32-32 14.33-32 32-32z"]
- };
- var faDragon = {
- prefix: 'fas',
- iconName: 'dragon',
- icon: [640, 512, [], "f6d5", "M18.32 255.78L192 223.96l-91.28 68.69c-10.08 10.08-2.94 27.31 11.31 27.31h222.7c-9.44-26.4-14.73-54.47-14.73-83.38v-42.27l-119.73-87.6c-23.82-15.88-55.29-14.01-77.06 4.59L5.81 227.64c-12.38 10.33-3.45 30.42 12.51 28.14zm556.87 34.1l-100.66-50.31A47.992 47.992 0 0 1 448 196.65v-36.69h64l28.09 22.63c6 6 14.14 9.37 22.63 9.37h30.97a32 32 0 0 0 28.62-17.69l14.31-28.62a32.005 32.005 0 0 0-3.02-33.51l-74.53-99.38C553.02 4.7 543.54 0 533.47 0H296.02c-7.13 0-10.7 8.57-5.66 13.61L352 63.96 292.42 88.8c-5.9 2.95-5.9 11.36 0 14.31L352 127.96v108.62c0 72.08 36.03 139.39 96 179.38-195.59 6.81-344.56 41.01-434.1 60.91C5.78 478.67 0 485.88 0 494.2 0 504 7.95 512 17.76 512h499.08c63.29.01 119.61-47.56 122.99-110.76 2.52-47.28-22.73-90.4-64.64-111.36zM489.18 66.25l45.65 11.41c-2.75 10.91-12.47 18.89-24.13 18.26-12.96-.71-25.85-12.53-21.52-29.67z"]
- };
- var faDrawPolygon = {
- prefix: 'fas',
- iconName: 'draw-polygon',
- icon: [448, 512, [], "f5ee", "M384 352c-.35 0-.67.1-1.02.1l-39.2-65.32c5.07-9.17 8.22-19.56 8.22-30.78s-3.14-21.61-8.22-30.78l39.2-65.32c.35.01.67.1 1.02.1 35.35 0 64-28.65 64-64s-28.65-64-64-64c-23.63 0-44.04 12.95-55.12 32H119.12C108.04 44.95 87.63 32 64 32 28.65 32 0 60.65 0 96c0 23.63 12.95 44.04 32 55.12v209.75C12.95 371.96 0 392.37 0 416c0 35.35 28.65 64 64 64 23.63 0 44.04-12.95 55.12-32h209.75c11.09 19.05 31.49 32 55.12 32 35.35 0 64-28.65 64-64 .01-35.35-28.64-64-63.99-64zm-288 8.88V151.12A63.825 63.825 0 0 0 119.12 128h208.36l-38.46 64.1c-.35-.01-.67-.1-1.02-.1-35.35 0-64 28.65-64 64s28.65 64 64 64c.35 0 .67-.1 1.02-.1l38.46 64.1H119.12A63.748 63.748 0 0 0 96 360.88zM272 256c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zM400 96c0 8.82-7.18 16-16 16s-16-7.18-16-16 7.18-16 16-16 16 7.18 16 16zM64 80c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zM48 416c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zm336 16c-8.82 0-16-7.18-16-16s7.18-16 16-16 16 7.18 16 16-7.18 16-16 16z"]
- };
- var faDrum = {
- prefix: 'fas',
- iconName: 'drum',
- icon: [512, 512, [], "f569", "M431.34 122.05l73.53-47.42a16 16 0 0 0 4.44-22.19l-8.87-13.31a16 16 0 0 0-22.19-4.44l-110.06 71C318.43 96.91 271.22 96 256 96 219.55 96 0 100.55 0 208.15v160.23c0 30.27 27.5 57.68 72 77.86v-101.9a24 24 0 1 1 48 0v118.93c33.05 9.11 71.07 15.06 112 16.73V376.39a24 24 0 1 1 48 0V480c40.93-1.67 78.95-7.62 112-16.73V344.34a24 24 0 1 1 48 0v101.9c44.5-20.18 72-47.59 72-77.86V208.15c0-43.32-35.76-69.76-80.66-86.1zM256 272.24c-114.88 0-208-28.69-208-64.09s93.12-64.08 208-64.08c17.15 0 33.73.71 49.68 1.91l-72.81 47a16 16 0 0 0-4.43 22.19l8.87 13.31a16 16 0 0 0 22.19 4.44l118.64-76.52C430.09 168 464 186.84 464 208.15c0 35.4-93.13 64.09-208 64.09z"]
- };
- var faDrumSteelpan = {
- prefix: 'fas',
- iconName: 'drum-steelpan',
- icon: [576, 512, [], "f56a", "M288 32C128.94 32 0 89.31 0 160v192c0 70.69 128.94 128 288 128s288-57.31 288-128V160c0-70.69-128.94-128-288-128zm-82.99 158.36c-4.45 16.61-14.54 30.57-28.31 40.48C100.23 217.46 48 190.78 48 160c0-30.16 50.11-56.39 124.04-70.03l25.6 44.34c9.86 17.09 12.48 36.99 7.37 56.05zM288 240c-21.08 0-41.41-1-60.89-2.7 8.06-26.13 32.15-45.3 60.89-45.3s52.83 19.17 60.89 45.3C329.41 239 309.08 240 288 240zm64-144c0 35.29-28.71 64-64 64s-64-28.71-64-64V82.96c20.4-1.88 41.8-2.96 64-2.96s43.6 1.08 64 2.96V96zm46.93 134.9c-13.81-9.91-23.94-23.9-28.4-40.54-5.11-19.06-2.49-38.96 7.38-56.04l25.65-44.42C477.72 103.5 528 129.79 528 160c0 30.83-52.4 57.54-129.07 70.9z"]
- };
- var faDrumstickBite = {
- prefix: 'fas',
- iconName: 'drumstick-bite',
- icon: [512, 512, [], "f6d7", "M462.8 49.57a169.44 169.44 0 0 0-239.5 0C187.82 85 160.13 128 160.13 192v85.83l-40.62 40.59c-9.7 9.69-24 11.07-36.78 6a60.33 60.33 0 0 0-65 98.72C33 438.39 54.24 442.7 73.85 438.21c-4.5 19.6-.18 40.83 15.1 56.1a60.35 60.35 0 0 0 98.8-65c-5.09-12.73-3.72-27 6-36.75L234.36 352h85.89a187.87 187.87 0 0 0 61.89-10c-39.64-43.89-39.83-110.23 1.05-151.07 34.38-34.36 86.76-39.46 128.74-16.8 1.3-44.96-14.81-90.28-49.13-124.56z"]
- };
- var faDumbbell = {
- prefix: 'fas',
- iconName: 'dumbbell',
- icon: [640, 512, [], "f44b", "M104 96H56c-13.3 0-24 10.7-24 24v104H8c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h24v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm528 128h-24V120c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v272c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h24c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM456 32h-48c-13.3 0-24 10.7-24 24v168H256V56c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v400c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h128v168c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24z"]
- };
- var faDumpster = {
- prefix: 'fas',
- iconName: 'dumpster',
- icon: [576, 512, [], "f793", "M560 160c10.4 0 18-9.8 15.5-19.9l-24-96C549.7 37 543.3 32 536 32h-98.9l25.6 128H560zM272 32H171.5l-25.6 128H272V32zm132.5 0H304v128h126.1L404.5 32zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm544 64h-20l4-32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h320v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16l20-160h28c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z"]
- };
- var faDumpsterFire = {
- prefix: 'fas',
- iconName: 'dumpster-fire',
- icon: [640, 512, [], "f794", "M418.7 104.1l.2-.2-14.4-72H304v128h60.8c16.2-19.3 34.2-38.2 53.9-55.8zM272 32H171.5l-25.6 128H272V32zm189.3 72.1c18.2 16.3 35.5 33.7 51.1 51.5 5.7-5.6 11.4-11.1 17.3-16.3l21.3-19 21.3 19c1.1.9 2.1 2.1 3.1 3.1-.1-.8.2-1.5 0-2.3l-24-96C549.7 37 543.3 32 536 32h-98.9l12.3 61.5 11.9 10.6zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm324.6 32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208.8c-30.2-33.7-48.8-77.9-48.8-126.4 0-35.9 19.9-82.9 52.6-129.6zm210.5-28.8c-14.9 13.3-28.3 27.2-40.2 41.2-19.5-25.8-43.6-52-71-76.4-70.2 62.7-120 144.3-120 193.6 0 87.5 71.6 158.4 160 158.4s160-70.9 160-158.4c.1-36.6-37-112.2-88.8-158.4zm-18.6 229.4c-14.7 10.7-32.9 17-52.5 17-49 0-88.9-33.5-88.9-88 0-27.1 16.5-51 49.4-91.9 4.7 5.6 67.1 88.1 67.1 88.1l39.8-47c2.8 4.8 5.4 9.5 7.7 14 18.6 36.7 10.8 83.6-22.6 107.8z"]
- };
- var faDungeon = {
- prefix: 'fas',
- iconName: 'dungeon',
- icon: [512, 512, [], "f6d9", "M128.73 195.32l-82.81-51.76c-8.04-5.02-18.99-2.17-22.93 6.45A254.19 254.19 0 0 0 .54 239.28C-.05 248.37 7.59 256 16.69 256h97.13c7.96 0 14.08-6.25 15.01-14.16 1.09-9.33 3.24-18.33 6.24-26.94 2.56-7.34.25-15.46-6.34-19.58zM319.03 8C298.86 2.82 277.77 0 256 0s-42.86 2.82-63.03 8c-9.17 2.35-13.91 12.6-10.39 21.39l37.47 104.03A16.003 16.003 0 0 0 235.1 144h41.8c6.75 0 12.77-4.23 15.05-10.58l37.47-104.03c3.52-8.79-1.22-19.03-10.39-21.39zM112 288H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm77.31-283.67l-36.32-90.8c-3.53-8.83-14.13-12.99-22.42-8.31a257.308 257.308 0 0 0-71.61 59.89c-6.06 7.32-3.85 18.48 4.22 23.52l82.93 51.83c6.51 4.07 14.66 2.62 20.11-2.79 5.18-5.15 10.79-9.85 16.79-14.05 6.28-4.41 9.15-12.17 6.3-19.29zM398.18 256h97.13c9.1 0 16.74-7.63 16.15-16.72a254.135 254.135 0 0 0-22.45-89.27c-3.94-8.62-14.89-11.47-22.93-6.45l-82.81 51.76c-6.59 4.12-8.9 12.24-6.34 19.58 3.01 8.61 5.15 17.62 6.24 26.94.93 7.91 7.05 14.16 15.01 14.16zm54.85-162.89a257.308 257.308 0 0 0-71.61-59.89c-8.28-4.68-18.88-.52-22.42 8.31l-36.32 90.8c-2.85 7.12.02 14.88 6.3 19.28 6 4.2 11.61 8.9 16.79 14.05 5.44 5.41 13.6 6.86 20.11 2.79l82.93-51.83c8.07-5.03 10.29-16.19 4.22-23.51zM496 288h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zM240 177.62V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V177.62c-5.23-.89-10.52-1.62-16-1.62s-10.77.73-16 1.62zm-64 41.51V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V189.36c-12.78 7.45-23.84 17.47-32 29.77zm128-29.77V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V219.13c-8.16-12.3-19.22-22.32-32-29.77z"]
- };
- var faEdit = {
- prefix: 'fas',
- iconName: 'edit',
- icon: [576, 512, [], "f044", "M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z"]
- };
- var faEgg = {
- prefix: 'fas',
- iconName: 'egg',
- icon: [384, 512, [], "f7fb", "M192 0C86 0 0 214 0 320s86 192 192 192 192-86 192-192S298 0 192 0z"]
- };
- var faEject = {
- prefix: 'fas',
- iconName: 'eject',
- icon: [448, 512, [], "f052", "M448 384v64c0 17.673-14.327 32-32 32H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h384c17.673 0 32 14.327 32 32zM48.053 320h351.886c41.651 0 63.581-49.674 35.383-80.435L259.383 47.558c-19.014-20.743-51.751-20.744-70.767 0L12.67 239.565C-15.475 270.268 6.324 320 48.053 320z"]
- };
- var faEllipsisH = {
- prefix: 'fas',
- iconName: 'ellipsis-h',
- icon: [512, 512, [], "f141", "M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"]
- };
- var faEllipsisV = {
- prefix: 'fas',
- iconName: 'ellipsis-v',
- icon: [192, 512, [], "f142", "M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z"]
- };
- var faEnvelope = {
- prefix: 'fas',
- iconName: 'envelope',
- icon: [512, 512, [], "f0e0", "M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z"]
- };
- var faEnvelopeOpen = {
- prefix: 'fas',
- iconName: 'envelope-open',
- icon: [512, 512, [], "f2b6", "M512 464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V200.724a48 48 0 0 1 18.387-37.776c24.913-19.529 45.501-35.365 164.2-121.511C199.412 29.17 232.797-.347 256 .003c23.198-.354 56.596 29.172 73.413 41.433 118.687 86.137 139.303 101.995 164.2 121.512A48 48 0 0 1 512 200.724V464zm-65.666-196.605c-2.563-3.728-7.7-4.595-11.339-1.907-22.845 16.873-55.462 40.705-105.582 77.079-16.825 12.266-50.21 41.781-73.413 41.43-23.211.344-56.559-29.143-73.413-41.43-50.114-36.37-82.734-60.204-105.582-77.079-3.639-2.688-8.776-1.821-11.339 1.907l-9.072 13.196a7.998 7.998 0 0 0 1.839 10.967c22.887 16.899 55.454 40.69 105.303 76.868 20.274 14.781 56.524 47.813 92.264 47.573 35.724.242 71.961-32.771 92.263-47.573 49.85-36.179 82.418-59.97 105.303-76.868a7.998 7.998 0 0 0 1.839-10.967l-9.071-13.196z"]
- };
- var faEnvelopeOpenText = {
- prefix: 'fas',
- iconName: 'envelope-open-text',
- icon: [512, 512, [], "f658", "M176 216h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16zm-16 80c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16zm96 121.13c-16.42 0-32.84-5.06-46.86-15.19L0 250.86V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V250.86L302.86 401.94c-14.02 10.12-30.44 15.19-46.86 15.19zm237.61-254.18c-8.85-6.94-17.24-13.47-29.61-22.81V96c0-26.51-21.49-48-48-48h-77.55c-3.04-2.2-5.87-4.26-9.04-6.56C312.6 29.17 279.2-.35 256 0c-23.2-.35-56.59 29.17-73.41 41.44-3.17 2.3-6 4.36-9.04 6.56H96c-26.51 0-48 21.49-48 48v44.14c-12.37 9.33-20.76 15.87-29.61 22.81A47.995 47.995 0 0 0 0 200.72v10.65l96 69.35V96h320v184.72l96-69.35v-10.65c0-14.74-6.78-28.67-18.39-37.77z"]
- };
- var faEnvelopeSquare = {
- prefix: 'fas',
- iconName: 'envelope-square',
- icon: [448, 512, [], "f199", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM178.117 262.104C87.429 196.287 88.353 196.121 64 177.167V152c0-13.255 10.745-24 24-24h272c13.255 0 24 10.745 24 24v25.167c-24.371 18.969-23.434 19.124-114.117 84.938-10.5 7.655-31.392 26.12-45.883 25.894-14.503.218-35.367-18.227-45.883-25.895zM384 217.775V360c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V217.775c13.958 10.794 33.329 25.236 95.303 70.214 14.162 10.341 37.975 32.145 64.694 32.01 26.887.134 51.037-22.041 64.72-32.025 61.958-44.965 81.325-59.406 95.283-70.199z"]
- };
- var faEquals = {
- prefix: 'fas',
- iconName: 'equals',
- icon: [448, 512, [], "f52c", "M416 304H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32zm0-192H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"]
- };
- var faEraser = {
- prefix: 'fas',
- iconName: 'eraser',
- icon: [512, 512, [], "f12d", "M497.941 273.941c18.745-18.745 18.745-49.137 0-67.882l-160-160c-18.745-18.745-49.136-18.746-67.883 0l-256 256c-18.745 18.745-18.745 49.137 0 67.882l96 96A48.004 48.004 0 0 0 144 480h356c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H355.883l142.058-142.059zm-302.627-62.627l137.373 137.373L265.373 416H150.628l-80-80 124.686-124.686z"]
- };
- var faEthernet = {
- prefix: 'fas',
- iconName: 'ethernet',
- icon: [512, 512, [], "f796", "M496 192h-48v-48c0-8.8-7.2-16-16-16h-48V80c0-8.8-7.2-16-16-16H144c-8.8 0-16 7.2-16 16v48H80c-8.8 0-16 7.2-16 16v48H16c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16h80V320h32v128h64V320h32v128h64V320h32v128h64V320h32v128h80c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16z"]
- };
- var faEuroSign = {
- prefix: 'fas',
- iconName: 'euro-sign',
- icon: [320, 512, [], "f153", "M310.706 413.765c-1.314-6.63-7.835-10.872-14.424-9.369-10.692 2.439-27.422 5.413-45.426 5.413-56.763 0-101.929-34.79-121.461-85.449h113.689a12 12 0 0 0 11.708-9.369l6.373-28.36c1.686-7.502-4.019-14.631-11.708-14.631H115.22c-1.21-14.328-1.414-28.287.137-42.245H261.95a12 12 0 0 0 11.723-9.434l6.512-29.755c1.638-7.484-4.061-14.566-11.723-14.566H130.184c20.633-44.991 62.69-75.03 117.619-75.03 14.486 0 28.564 2.25 37.851 4.145 6.216 1.268 12.347-2.498 14.002-8.623l11.991-44.368c1.822-6.741-2.465-13.616-9.326-14.917C290.217 34.912 270.71 32 249.635 32 152.451 32 74.03 92.252 45.075 176H12c-6.627 0-12 5.373-12 12v29.755c0 6.627 5.373 12 12 12h21.569c-1.009 13.607-1.181 29.287-.181 42.245H12c-6.627 0-12 5.373-12 12v28.36c0 6.627 5.373 12 12 12h30.114C67.139 414.692 145.264 480 249.635 480c26.301 0 48.562-4.544 61.101-7.788 6.167-1.595 10.027-7.708 8.788-13.957l-8.818-44.49z"]
- };
- var faExchangeAlt = {
- prefix: 'fas',
- iconName: 'exchange-alt',
- icon: [512, 512, [], "f362", "M0 168v-16c0-13.255 10.745-24 24-24h360V80c0-21.367 25.899-32.042 40.971-16.971l80 80c9.372 9.373 9.372 24.569 0 33.941l-80 80C409.956 271.982 384 261.456 384 240v-48H24c-13.255 0-24-10.745-24-24zm488 152H128v-48c0-21.314-25.862-32.08-40.971-16.971l-80 80c-9.372 9.373-9.372 24.569 0 33.941l80 80C102.057 463.997 128 453.437 128 432v-48h360c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z"]
- };
- var faExclamation = {
- prefix: 'fas',
- iconName: 'exclamation',
- icon: [192, 512, [], "f12a", "M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z"]
- };
- var faExclamationCircle = {
- prefix: 'fas',
- iconName: 'exclamation-circle',
- icon: [512, 512, [], "f06a", "M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"]
- };
- var faExclamationTriangle = {
- prefix: 'fas',
- iconName: 'exclamation-triangle',
- icon: [576, 512, [], "f071", "M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"]
- };
- var faExpand = {
- prefix: 'fas',
- iconName: 'expand',
- icon: [448, 512, [], "f065", "M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z"]
- };
- var faExpandAlt = {
- prefix: 'fas',
- iconName: 'expand-alt',
- icon: [448, 512, [], "f424", "M212.686 315.314L120 408l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C10.697 480 0 469.255 0 456V344c0-21.382 25.803-32.09 40.922-16.971L72 360l92.686-92.686c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.249 6.248 6.249 16.378 0 22.627zm22.628-118.628L328 104l-32.922-31.029C279.958 57.851 290.666 32 312.048 32h112C437.303 32 448 42.745 448 56v112c0 21.382-25.803 32.09-40.922 16.971L376 152l-92.686 92.686c-6.248 6.248-16.379 6.248-22.627 0l-25.373-25.373c-6.249-6.248-6.249-16.378 0-22.627z"]
- };
- var faExpandArrowsAlt = {
- prefix: 'fas',
- iconName: 'expand-arrows-alt',
- icon: [448, 512, [], "f31e", "M448 344v112a23.94 23.94 0 0 1-24 24H312c-21.39 0-32.09-25.9-17-41l36.2-36.2L224 295.6 116.77 402.9 153 439c15.09 15.1 4.39 41-17 41H24a23.94 23.94 0 0 1-24-24V344c0-21.4 25.89-32.1 41-17l36.19 36.2L184.46 256 77.18 148.7 41 185c-15.1 15.1-41 4.4-41-17V56a23.94 23.94 0 0 1 24-24h112c21.39 0 32.09 25.9 17 41l-36.2 36.2L224 216.4l107.23-107.3L295 73c-15.09-15.1-4.39-41 17-41h112a23.94 23.94 0 0 1 24 24v112c0 21.4-25.89 32.1-41 17l-36.19-36.2L263.54 256l107.28 107.3L407 327.1c15.1-15.2 41-4.5 41 16.9z"]
- };
- var faExternalLinkAlt = {
- prefix: 'fas',
- iconName: 'external-link-alt',
- icon: [512, 512, [], "f35d", "M432,320H400a16,16,0,0,0-16,16V448H64V128H208a16,16,0,0,0,16-16V80a16,16,0,0,0-16-16H48A48,48,0,0,0,0,112V464a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V336A16,16,0,0,0,432,320ZM488,0h-128c-21.37,0-32.05,25.91-17,41l35.73,35.73L135,320.37a24,24,0,0,0,0,34L157.67,377a24,24,0,0,0,34,0L435.28,133.32,471,169c15,15,41,4.5,41-17V24A24,24,0,0,0,488,0Z"]
- };
- var faExternalLinkSquareAlt = {
- prefix: 'fas',
- iconName: 'external-link-square-alt',
- icon: [448, 512, [], "f360", "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-88 16H248.029c-21.313 0-32.08 25.861-16.971 40.971l31.984 31.987L67.515 364.485c-4.686 4.686-4.686 12.284 0 16.971l31.029 31.029c4.687 4.686 12.285 4.686 16.971 0l195.526-195.526 31.988 31.991C358.058 263.977 384 253.425 384 231.979V120c0-13.255-10.745-24-24-24z"]
- };
- var faEye = {
- prefix: 'fas',
- iconName: 'eye',
- icon: [576, 512, [], "f06e", "M572.52 241.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400a144 144 0 1 1 144-144 143.93 143.93 0 0 1-144 144zm0-240a95.31 95.31 0 0 0-25.31 3.79 47.85 47.85 0 0 1-66.9 66.9A95.78 95.78 0 1 0 288 160z"]
- };
- var faEyeDropper = {
- prefix: 'fas',
- iconName: 'eye-dropper',
- icon: [512, 512, [], "f1fb", "M50.75 333.25c-12 12-18.75 28.28-18.75 45.26V424L0 480l32 32 56-32h45.49c16.97 0 33.25-6.74 45.25-18.74l126.64-126.62-128-128L50.75 333.25zM483.88 28.12c-37.47-37.5-98.28-37.5-135.75 0l-77.09 77.09-13.1-13.1c-9.44-9.44-24.65-9.31-33.94 0l-40.97 40.97c-9.37 9.37-9.37 24.57 0 33.94l161.94 161.94c9.44 9.44 24.65 9.31 33.94 0L419.88 288c9.37-9.37 9.37-24.57 0-33.94l-13.1-13.1 77.09-77.09c37.51-37.48 37.51-98.26.01-135.75z"]
- };
- var faEyeSlash = {
- prefix: 'fas',
- iconName: 'eye-slash',
- icon: [640, 512, [], "f070", "M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z"]
- };
- var faFan = {
- prefix: 'fas',
- iconName: 'fan',
- icon: [512, 512, [], "f863", "M352.57 128c-28.09 0-54.09 4.52-77.06 12.86l12.41-123.11C289 7.31 279.81-1.18 269.33.13 189.63 10.13 128 77.64 128 159.43c0 28.09 4.52 54.09 12.86 77.06L17.75 224.08C7.31 223-1.18 232.19.13 242.67c10 79.7 77.51 141.33 159.3 141.33 28.09 0 54.09-4.52 77.06-12.86l-12.41 123.11c-1.05 10.43 8.11 18.93 18.59 17.62 79.7-10 141.33-77.51 141.33-159.3 0-28.09-4.52-54.09-12.86-77.06l123.11 12.41c10.44 1.05 18.93-8.11 17.62-18.59-10-79.7-77.51-141.33-159.3-141.33zM256 288a32 32 0 1 1 32-32 32 32 0 0 1-32 32z"]
- };
- var faFastBackward = {
- prefix: 'fas',
- iconName: 'fast-backward',
- icon: [512, 512, [], "f049", "M0 436V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v151.9L235.5 71.4C256.1 54.3 288 68.6 288 96v131.9L459.5 71.4C480.1 54.3 512 68.6 512 96v320c0 27.4-31.9 41.7-52.5 24.6L288 285.3V416c0 27.4-31.9 41.7-52.5 24.6L64 285.3V436c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12z"]
- };
- var faFastForward = {
- prefix: 'fas',
- iconName: 'fast-forward',
- icon: [512, 512, [], "f050", "M512 76v360c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V284.1L276.5 440.6c-20.6 17.2-52.5 2.8-52.5-24.6V284.1L52.5 440.6C31.9 457.8 0 443.4 0 416V96c0-27.4 31.9-41.7 52.5-24.6L224 226.8V96c0-27.4 31.9-41.7 52.5-24.6L448 226.8V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12z"]
- };
- var faFaucet = {
- prefix: 'fas',
- iconName: 'faucet',
- icon: [512, 512, [], "e005", "M352,256H313.39c-15.71-13.44-35.46-23.07-57.39-28V180.44l-32-3.38-32,3.38V228c-21.93,5-41.68,14.6-57.39,28H16A16,16,0,0,0,0,272v96a16,16,0,0,0,16,16h92.79C129.38,421.73,173,448,224,448s94.62-26.27,115.21-64H352a32,32,0,0,1,32,32,32,32,0,0,0,32,32h64a32,32,0,0,0,32-32A160,160,0,0,0,352,256ZM81.59,159.91l142.41-15,142.41,15c9.42,1,17.59-6.81,17.59-16.8V112.89c0-10-8.17-17.8-17.59-16.81L256,107.74V80a16,16,0,0,0-16-16H208a16,16,0,0,0-16,16v27.74L81.59,96.08C72.17,95.09,64,102.9,64,112.89v30.22C64,153.1,72.17,160.91,81.59,159.91Z"]
- };
- var faFax = {
- prefix: 'fas',
- iconName: 'fax',
- icon: [512, 512, [], "f1ac", "M480 160V77.25a32 32 0 0 0-9.38-22.63L425.37 9.37A32 32 0 0 0 402.75 0H160a32 32 0 0 0-32 32v448a32 32 0 0 0 32 32h320a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zM288 432a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm128 128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-112H192V64h160v48a16 16 0 0 0 16 16h48zM64 128H32a32 32 0 0 0-32 32v320a32 32 0 0 0 32 32h32a32 32 0 0 0 32-32V160a32 32 0 0 0-32-32z"]
- };
- var faFeather = {
- prefix: 'fas',
- iconName: 'feather',
- icon: [512, 512, [], "f52d", "M467.14 44.84c-62.55-62.48-161.67-64.78-252.28 25.73-78.61 78.52-60.98 60.92-85.75 85.66-60.46 60.39-70.39 150.83-63.64 211.17l178.44-178.25c6.26-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.6 9.37 33.98 0l66.1-66.03C159.42 454.65 279 457.11 353.95 384h-98.19l147.57-49.14c49.99-49.93 36.38-36.18 46.31-46.86h-97.78l131.54-43.8c45.44-74.46 34.31-148.84-16.26-199.36z"]
- };
- var faFeatherAlt = {
- prefix: 'fas',
- iconName: 'feather-alt',
- icon: [512, 512, [], "f56b", "M512 0C460.22 3.56 96.44 38.2 71.01 287.61c-3.09 26.66-4.84 53.44-5.99 80.24l178.87-178.69c6.25-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.59 9.37 33.98 0l57.13-57.07c42.09-.14 84.15-2.53 125.96-7.36 53.48-5.44 97.02-26.47 132.58-56.54H255.74l146.79-48.88c11.25-14.89 21.37-30.71 30.45-47.12h-81.14l106.54-53.21C500.29 132.86 510.19 26.26 512 0z"]
- };
- var faFemale = {
- prefix: 'fas',
- iconName: 'female',
- icon: [256, 512, [], "f182", "M128 0c35.346 0 64 28.654 64 64s-28.654 64-64 64c-35.346 0-64-28.654-64-64S92.654 0 128 0m119.283 354.179l-48-192A24 24 0 0 0 176 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H80a24 24 0 0 0-23.283 18.179l-48 192C4.935 369.305 16.383 384 32 384h56v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V384h56c15.591 0 27.071-14.671 23.283-29.821z"]
- };
- var faFighterJet = {
- prefix: 'fas',
- iconName: 'fighter-jet',
- icon: [640, 512, [], "f0fb", "M544 224l-128-16-48-16h-24L227.158 44h39.509C278.333 44 288 41.375 288 38s-9.667-6-21.333-6H152v12h16v164h-48l-66.667-80H18.667L8 138.667V208h8v16h48v2.666l-64 8v42.667l64 8V288H16v16H8v69.333L18.667 384h34.667L120 304h48v164h-16v12h114.667c11.667 0 21.333-2.625 21.333-6s-9.667-6-21.333-6h-39.509L344 320h24l48-16 128-16c96-21.333 96-26.583 96-32 0-5.417 0-10.667-96-32z"]
- };
- var faFile = {
- prefix: 'fas',
- iconName: 'file',
- icon: [384, 512, [], "f15b", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm160-14.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"]
- };
- var faFileAlt = {
- prefix: 'fas',
- iconName: 'file-alt',
- icon: [384, 512, [], "f15c", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 236c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-64c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-72v8c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm96-114.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"]
- };
- var faFileArchive = {
- prefix: 'fas',
- iconName: 'file-archive',
- icon: [384, 512, [], "f1c6", "M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zM128.4 336c-17.9 0-32.4 12.1-32.4 27 0 15 14.6 27 32.5 27s32.4-12.1 32.4-27-14.6-27-32.5-27zM224 136V0h-63.6v32h-32V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM95.9 32h32v32h-32zm32.3 384c-33.2 0-58-30.4-51.4-62.9L96.4 256v-32h32v-32h-32v-32h32v-32h-32V96h32V64h32v32h-32v32h32v32h-32v32h32v32h-32v32h22.1c5.7 0 10.7 4.1 11.8 9.7l17.3 87.7c6.4 32.4-18.4 62.6-51.4 62.6z"]
- };
- var faFileAudio = {
- prefix: 'fas',
- iconName: 'file-audio',
- icon: [384, 512, [], "f1c7", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-64 268c0 10.7-12.9 16-20.5 8.5L104 376H76c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h28l35.5-36.5c7.6-7.6 20.5-2.2 20.5 8.5v136zm33.2-47.6c9.1-9.3 9.1-24.1 0-33.4-22.1-22.8 12.2-56.2 34.4-33.5 27.2 27.9 27.2 72.4 0 100.4-21.8 22.3-56.9-10.4-34.4-33.5zm86-117.1c54.4 55.9 54.4 144.8 0 200.8-21.8 22.4-57-10.3-34.4-33.5 36.2-37.2 36.3-96.5 0-133.8-22.1-22.8 12.3-56.3 34.4-33.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"]
- };
- var faFileCode = {
- prefix: 'fas',
- iconName: 'file-code',
- icon: [384, 512, [], "f1c9", "M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zM123.206 400.505a5.4 5.4 0 0 1-7.633.246l-64.866-60.812a5.4 5.4 0 0 1 0-7.879l64.866-60.812a5.4 5.4 0 0 1 7.633.246l19.579 20.885a5.4 5.4 0 0 1-.372 7.747L101.65 336l40.763 35.874a5.4 5.4 0 0 1 .372 7.747l-19.579 20.884zm51.295 50.479l-27.453-7.97a5.402 5.402 0 0 1-3.681-6.692l61.44-211.626a5.402 5.402 0 0 1 6.692-3.681l27.452 7.97a5.4 5.4 0 0 1 3.68 6.692l-61.44 211.626a5.397 5.397 0 0 1-6.69 3.681zm160.792-111.045l-64.866 60.812a5.4 5.4 0 0 1-7.633-.246l-19.58-20.885a5.4 5.4 0 0 1 .372-7.747L284.35 336l-40.763-35.874a5.4 5.4 0 0 1-.372-7.747l19.58-20.885a5.4 5.4 0 0 1 7.633-.246l64.866 60.812a5.4 5.4 0 0 1-.001 7.879z"]
- };
- var faFileContract = {
- prefix: 'fas',
- iconName: 'file-contract',
- icon: [384, 512, [], "f56c", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm192.81 248H304c8.84 0 16 7.16 16 16s-7.16 16-16 16h-47.19c-16.45 0-31.27-9.14-38.64-23.86-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34a15.986 15.986 0 0 1-14.31 8.84c-.38 0-.75-.02-1.14-.05-6.45-.45-12-4.75-14.03-10.89L144 354.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.77-16.19 54.05-9.7 66 14.16 2.02 4.06 5.96 6.5 10.16 6.5zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"]
- };
- var faFileCsv = {
- prefix: 'fas',
- iconName: 'file-csv',
- icon: [384, 512, [], "f6dd", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-96 144c0 4.42-3.58 8-8 8h-8c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h8c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-8c-26.51 0-48-21.49-48-48v-32c0-26.51 21.49-48 48-48h8c4.42 0 8 3.58 8 8v16zm44.27 104H160c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h12.27c5.95 0 10.41-3.5 10.41-6.62 0-1.3-.75-2.66-2.12-3.84l-21.89-18.77c-8.47-7.22-13.33-17.48-13.33-28.14 0-21.3 19.02-38.62 42.41-38.62H200c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-12.27c-5.95 0-10.41 3.5-10.41 6.62 0 1.3.75 2.66 2.12 3.84l21.89 18.77c8.47 7.22 13.33 17.48 13.33 28.14.01 21.29-19 38.62-42.39 38.62zM256 264v20.8c0 20.27 5.7 40.17 16 56.88 10.3-16.7 16-36.61 16-56.88V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v20.8c0 35.48-12.88 68.89-36.28 94.09-3.02 3.25-7.27 5.11-11.72 5.11s-8.7-1.86-11.72-5.11c-23.4-25.2-36.28-58.61-36.28-94.09V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8zm121-159L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"]
- };
- var faFileDownload = {
- prefix: 'fas',
- iconName: 'file-download',
- icon: [384, 512, [], "f56d", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm76.45 211.36l-96.42 95.7c-6.65 6.61-17.39 6.61-24.04 0l-96.42-95.7C73.42 337.29 80.54 320 94.82 320H160v-80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v80h65.18c14.28 0 21.4 17.29 11.27 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"]
- };
- var faFileExcel = {
- prefix: 'fas',
- iconName: 'file-excel',
- icon: [384, 512, [], "f1c3", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm60.1 106.5L224 336l60.1 93.5c5.1 8-.6 18.5-10.1 18.5h-34.9c-4.4 0-8.5-2.4-10.6-6.3C208.9 405.5 192 373 192 373c-6.4 14.8-10 20-36.6 68.8-2.1 3.9-6.1 6.3-10.5 6.3H110c-9.5 0-15.2-10.5-10.1-18.5l60.3-93.5-60.3-93.5c-5.2-8 .6-18.5 10.1-18.5h34.8c4.4 0 8.5 2.4 10.6 6.3 26.1 48.8 20 33.6 36.6 68.5 0 0 6.1-11.7 36.6-68.5 2.1-3.9 6.2-6.3 10.6-6.3H274c9.5-.1 15.2 10.4 10.1 18.4zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"]
- };
- var faFileExport = {
- prefix: 'fas',
- iconName: 'file-export',
- icon: [576, 512, [], "f56e", "M384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128zM571 308l-95.7-96.4c-10.1-10.1-27.4-3-27.4 11.3V288h-64v64h64v65.2c0 14.3 17.3 21.4 27.4 11.3L571 332c6.6-6.6 6.6-17.4 0-24zm-379 28v-32c0-8.8 7.2-16 16-16h176V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V352H208c-8.8 0-16-7.2-16-16z"]
- };
- var faFileImage = {
- prefix: 'fas',
- iconName: 'file-image',
- icon: [384, 512, [], "f1c5", "M384 121.941V128H256V0h6.059a24 24 0 0 1 16.97 7.029l97.941 97.941a24.002 24.002 0 0 1 7.03 16.971zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zm-135.455 16c26.51 0 48 21.49 48 48s-21.49 48-48 48-48-21.49-48-48 21.491-48 48-48zm208 240h-256l.485-48.485L104.545 328c4.686-4.686 11.799-4.201 16.485.485L160.545 368 264.06 264.485c4.686-4.686 12.284-4.686 16.971 0L320.545 304v112z"]
- };
- var faFileImport = {
- prefix: 'fas',
- iconName: 'file-import',
- icon: [512, 512, [], "f56f", "M16 288c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h112v-64zm489-183L407.1 7c-4.5-4.5-10.6-7-17-7H384v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H152c-13.3 0-24 10.7-24 24v264h128v-65.2c0-14.3 17.3-21.4 27.4-11.3L379 308c6.6 6.7 6.6 17.4 0 24l-95.7 96.4c-10.1 10.1-27.4 3-27.4-11.3V352H128v136c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H376c-13.2 0-24-10.8-24-24z"]
- };
- var faFileInvoice = {
- prefix: 'fas',
- iconName: 'file-invoice',
- icon: [384, 512, [], "f570", "M288 256H96v64h192v-64zm89-151L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm256 304c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-200v96c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-96c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16z"]
- };
- var faFileInvoiceDollar = {
- prefix: 'fas',
- iconName: 'file-invoice-dollar',
- icon: [384, 512, [], "f571", "M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 80v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8zm144 263.88V440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-24.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V232c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v24.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07z"]
- };
- var faFileMedical = {
- prefix: 'fas',
- iconName: 'file-medical',
- icon: [384, 512, [], "f477", "M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 160v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8z"]
- };
- var faFileMedicalAlt = {
- prefix: 'fas',
- iconName: 'file-medical-alt',
- icon: [448, 512, [], "f478", "M288 136V0H88C74.7 0 64 10.7 64 24v232H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h140.9c3 0 5.8 1.7 7.2 4.4l19.9 39.8 56.8-113.7c2.9-5.9 11.4-5.9 14.3 0l34.7 69.5H352c8.8 0 16 7.2 16 16s-7.2 16-16 16h-89.9L240 275.8l-56.8 113.7c-2.9 5.9-11.4 5.9-14.3 0L134.1 320H64v168c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H312c-13.2 0-24-10.8-24-24zm153-31L343.1 7c-4.5-4.5-10.6-7-17-7H320v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"]
- };
- var faFilePdf = {
- prefix: 'fas',
- iconName: 'file-pdf',
- icon: [384, 512, [], "f1c1", "M181.9 256.1c-5-16-4.9-46.9-2-46.9 8.4 0 7.6 36.9 2 46.9zm-1.7 47.2c-7.7 20.2-17.3 43.3-28.4 62.7 18.3-7 39-17.2 62.9-21.9-12.7-9.6-24.9-23.4-34.5-40.8zM86.1 428.1c0 .8 13.2-5.4 34.9-40.2-6.7 6.3-29.1 24.5-34.9 40.2zM248 160h136v328c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V24C0 10.7 10.7 0 24 0h200v136c0 13.2 10.8 24 24 24zm-8 171.8c-20-12.2-33.3-29-42.7-53.8 4.5-18.5 11.6-46.6 6.2-64.2-4.7-29.4-42.4-26.5-47.8-6.8-5 18.3-.4 44.1 8.1 77-11.6 27.6-28.7 64.6-40.8 85.8-.1 0-.1.1-.2.1-27.1 13.9-73.6 44.5-54.5 68 5.6 6.9 16 10 21.5 10 17.9 0 35.7-18 61.1-61.8 25.8-8.5 54.1-19.1 79-23.2 21.7 11.8 47.1 19.5 64 19.5 29.2 0 31.2-32 19.7-43.4-13.9-13.6-54.3-9.7-73.6-7.2zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-74.1 255.3c4.1-2.7-2.5-11.9-42.8-9 37.1 15.8 42.8 9 42.8 9z"]
- };
- var faFilePowerpoint = {
- prefix: 'fas',
- iconName: 'file-powerpoint',
- icon: [384, 512, [], "f1c4", "M193.7 271.2c8.8 0 15.5 2.7 20.3 8.1 9.6 10.9 9.8 32.7-.2 44.1-4.9 5.6-11.9 8.5-21.1 8.5h-26.9v-60.7h27.9zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm53 165.2c0 90.3-88.8 77.6-111.1 77.6V436c0 6.6-5.4 12-12 12h-30.8c-6.6 0-12-5.4-12-12V236.2c0-6.6 5.4-12 12-12h81c44.5 0 72.9 32.8 72.9 77z"]
- };
- var faFilePrescription = {
- prefix: 'fas',
- iconName: 'file-prescription',
- icon: [384, 512, [], "f572", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm68.53 179.48l11.31 11.31c6.25 6.25 6.25 16.38 0 22.63l-29.9 29.9L304 409.38c6.25 6.25 6.25 16.38 0 22.63l-11.31 11.31c-6.25 6.25-16.38 6.25-22.63 0L240 413.25l-30.06 30.06c-6.25 6.25-16.38 6.25-22.63 0L176 432c-6.25-6.25-6.25-16.38 0-22.63l30.06-30.06L146.74 320H128v48c0 8.84-7.16 16-16 16H96c-8.84 0-16-7.16-16-16V208c0-8.84 7.16-16 16-16h80c35.35 0 64 28.65 64 64 0 24.22-13.62 45.05-33.46 55.92L240 345.38l29.9-29.9c6.25-6.25 16.38-6.25 22.63 0zM176 272h-48v-32h48c8.82 0 16 7.18 16 16s-7.18 16-16 16zm208-150.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"]
- };
- var faFileSignature = {
- prefix: 'fas',
- iconName: 'file-signature',
- icon: [576, 512, [], "f573", "M218.17 424.14c-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34c-6.37 12.78-25.03 11.37-29.48-2.09L144 386.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.75-16.19 54.06-9.7 66 14.16 1.89 3.78 5.49 5.95 9.36 6.26v-82.12l128-127.09V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24v-40l-128-.11c-16.12-.31-30.58-9.28-37.83-23.75zM384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1zm-96 225.06V416h68.99l161.68-162.78-67.88-67.88L288 346.96zm280.54-179.63l-31.87-31.87c-9.94-9.94-26.07-9.94-36.01 0l-27.25 27.25 67.88 67.88 27.25-27.25c9.95-9.94 9.95-26.07 0-36.01z"]
- };
- var faFileUpload = {
- prefix: 'fas',
- iconName: 'file-upload',
- icon: [384, 512, [], "f574", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm65.18 216.01H224v80c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-80H94.82c-14.28 0-21.41-17.29-11.27-27.36l96.42-95.7c6.65-6.61 17.39-6.61 24.04 0l96.42 95.7c10.15 10.07 3.03 27.36-11.25 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"]
- };
- var faFileVideo = {
- prefix: 'fas',
- iconName: 'file-video',
- icon: [384, 512, [], "f1c8", "M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM224 136V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248c-13.2 0-24-10.8-24-24zm96 144.016v111.963c0 21.445-25.943 31.998-40.971 16.971L224 353.941V392c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V280c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v38.059l55.029-55.013c15.011-15.01 40.971-4.491 40.971 16.97z"]
- };
- var faFileWord = {
- prefix: 'fas',
- iconName: 'file-word',
- icon: [384, 512, [], "f1c2", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm57.1 120H305c7.7 0 13.4 7.1 11.7 14.7l-38 168c-1.2 5.5-6.1 9.3-11.7 9.3h-38c-5.5 0-10.3-3.8-11.6-9.1-25.8-103.5-20.8-81.2-25.6-110.5h-.5c-1.1 14.3-2.4 17.4-25.6 110.5-1.3 5.3-6.1 9.1-11.6 9.1H117c-5.6 0-10.5-3.9-11.7-9.4l-37.8-168c-1.7-7.5 4-14.6 11.7-14.6h24.5c5.7 0 10.7 4 11.8 9.7 15.6 78 20.1 109.5 21 122.2 1.6-10.2 7.3-32.7 29.4-122.7 1.3-5.4 6.1-9.1 11.7-9.1h29.1c5.6 0 10.4 3.8 11.7 9.2 24 100.4 28.8 124 29.6 129.4-.2-11.2-2.6-17.8 21.6-129.2 1-5.6 5.9-9.5 11.5-9.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"]
- };
- var faFill = {
- prefix: 'fas',
- iconName: 'fill',
- icon: [512, 512, [], "f575", "M502.63 217.06L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.77c-6.24-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.63l86.19 86.18-94.76 94.76c-37.49 37.49-37.49 98.26 0 135.75l117.19 117.19c18.75 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.88-28.12l221.57-221.57c12.49-12.5 12.49-32.76 0-45.26zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.61 58.6c12.49 12.49 32.75 12.49 45.24 0 12.49-12.49 12.49-32.75 0-45.24l-58.61-58.6 58.95-58.95 162.45 162.44-48.35 48.34z"]
- };
- var faFillDrip = {
- prefix: 'fas',
- iconName: 'fill-drip',
- icon: [576, 512, [], "f576", "M512 320s-64 92.65-64 128c0 35.35 28.66 64 64 64s64-28.65 64-64-64-128-64-128zm-9.37-102.94L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.76c-6.25-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.62l86.19 86.18-94.76 94.76c-37.49 37.48-37.49 98.26 0 135.75l117.19 117.19c18.74 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.87-28.12l221.57-221.57c12.5-12.5 12.5-32.75.01-45.25zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.6 58.6c12.49 12.49 32.75 12.49 45.24 0s12.49-32.75 0-45.24l-58.6-58.6 58.95-58.95 162.44 162.44-48.34 48.34z"]
- };
- var faFilm = {
- prefix: 'fas',
- iconName: 'film',
- icon: [512, 512, [], "f008", "M488 64h-8v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V64H96v20c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12V64h-8C10.7 64 0 74.7 0 88v336c0 13.3 10.7 24 24 24h8v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h320v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h8c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24zM96 372c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm272 208c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm0-168c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm112 152c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z"]
- };
- var faFilter = {
- prefix: 'fas',
- iconName: 'filter',
- icon: [512, 512, [], "f0b0", "M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z"]
- };
- var faFingerprint = {
- prefix: 'fas',
- iconName: 'fingerprint',
- icon: [512, 512, [], "f577", "M256.12 245.96c-13.25 0-24 10.74-24 24 1.14 72.25-8.14 141.9-27.7 211.55-2.73 9.72 2.15 30.49 23.12 30.49 10.48 0 20.11-6.92 23.09-17.52 13.53-47.91 31.04-125.41 29.48-224.52.01-13.25-10.73-24-23.99-24zm-.86-81.73C194 164.16 151.25 211.3 152.1 265.32c.75 47.94-3.75 95.91-13.37 142.55-2.69 12.98 5.67 25.69 18.64 28.36 13.05 2.67 25.67-5.66 28.36-18.64 10.34-50.09 15.17-101.58 14.37-153.02-.41-25.95 19.92-52.49 54.45-52.34 31.31.47 57.15 25.34 57.62 55.47.77 48.05-2.81 96.33-10.61 143.55-2.17 13.06 6.69 25.42 19.76 27.58 19.97 3.33 26.81-15.1 27.58-19.77 8.28-50.03 12.06-101.21 11.27-152.11-.88-55.8-47.94-101.88-104.91-102.72zm-110.69-19.78c-10.3-8.34-25.37-6.8-33.76 3.48-25.62 31.5-39.39 71.28-38.75 112 .59 37.58-2.47 75.27-9.11 112.05-2.34 13.05 6.31 25.53 19.36 27.89 20.11 3.5 27.07-14.81 27.89-19.36 7.19-39.84 10.5-80.66 9.86-121.33-.47-29.88 9.2-57.88 28-80.97 8.35-10.28 6.79-25.39-3.49-33.76zm109.47-62.33c-15.41-.41-30.87 1.44-45.78 4.97-12.89 3.06-20.87 15.98-17.83 28.89 3.06 12.89 16 20.83 28.89 17.83 11.05-2.61 22.47-3.77 34-3.69 75.43 1.13 137.73 61.5 138.88 134.58.59 37.88-1.28 76.11-5.58 113.63-1.5 13.17 7.95 25.08 21.11 26.58 16.72 1.95 25.51-11.88 26.58-21.11a929.06 929.06 0 0 0 5.89-119.85c-1.56-98.75-85.07-180.33-186.16-181.83zm252.07 121.45c-2.86-12.92-15.51-21.2-28.61-18.27-12.94 2.86-21.12 15.66-18.26 28.61 4.71 21.41 4.91 37.41 4.7 61.6-.11 13.27 10.55 24.09 23.8 24.2h.2c13.17 0 23.89-10.61 24-23.8.18-22.18.4-44.11-5.83-72.34zm-40.12-90.72C417.29 43.46 337.6 1.29 252.81.02 183.02-.82 118.47 24.91 70.46 72.94 24.09 119.37-.9 181.04.14 246.65l-.12 21.47c-.39 13.25 10.03 24.31 23.28 24.69.23.02.48.02.72.02 12.92 0 23.59-10.3 23.97-23.3l.16-23.64c-.83-52.5 19.16-101.86 56.28-139 38.76-38.8 91.34-59.67 147.68-58.86 69.45 1.03 134.73 35.56 174.62 92.39 7.61 10.86 22.56 13.45 33.42 5.86 10.84-7.62 13.46-22.59 5.84-33.43z"]
- };
- var faFire = {
- prefix: 'fas',
- iconName: 'fire',
- icon: [384, 512, [], "f06d", "M216 23.86c0-23.8-30.65-32.77-44.15-13.04C48 191.85 224 200 224 288c0 35.63-29.11 64.46-64.85 63.99-35.17-.45-63.15-29.77-63.15-64.94v-85.51c0-21.7-26.47-32.23-41.43-16.5C27.8 213.16 0 261.33 0 320c0 105.87 86.13 192 192 192s192-86.13 192-192c0-170.29-168-193-168-296.14z"]
- };
- var faFireAlt = {
- prefix: 'fas',
- iconName: 'fire-alt',
- icon: [448, 512, [], "f7e4", "M323.56 51.2c-20.8 19.3-39.58 39.59-56.22 59.97C240.08 73.62 206.28 35.53 168 0 69.74 91.17 0 209.96 0 281.6 0 408.85 100.29 512 224 512s224-103.15 224-230.4c0-53.27-51.98-163.14-124.44-230.4zm-19.47 340.65C282.43 407.01 255.72 416 226.86 416 154.71 416 96 368.26 96 290.75c0-38.61 24.31-72.63 72.79-130.75 6.93 7.98 98.83 125.34 98.83 125.34l58.63-66.88c4.14 6.85 7.91 13.55 11.27 19.97 27.35 52.19 15.81 118.97-33.43 153.42z"]
- };
- var faFireExtinguisher = {
- prefix: 'fas',
- iconName: 'fire-extinguisher',
- icon: [448, 512, [], "f134", "M434.027 26.329l-168 28C254.693 56.218 256 67.8 256 72h-58.332C208.353 36.108 181.446 0 144 0c-39.435 0-66.368 39.676-52.228 76.203-52.039 13.051-75.381 54.213-90.049 90.884-4.923 12.307 1.063 26.274 13.37 31.197 12.317 4.926 26.279-1.075 31.196-13.37C75.058 112.99 106.964 120 168 120v27.076c-41.543 10.862-72 49.235-72 94.129V488c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V240c0-44.731-30.596-82.312-72-92.97V120h40c0 2.974-1.703 15.716 10.027 17.671l168 28C441.342 166.89 448 161.25 448 153.834V38.166c0-7.416-6.658-13.056-13.973-11.837zM144 72c-8.822 0-16-7.178-16-16s7.178-16 16-16 16 7.178 16 16-7.178 16-16 16z"]
- };
- var faFirstAid = {
- prefix: 'fas',
- iconName: 'first-aid',
- icon: [576, 512, [], "f479", "M0 80v352c0 26.5 21.5 48 48 48h48V32H48C21.5 32 0 53.5 0 80zm128 400h320V32H128v448zm64-248c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48zM528 32h-48v448h48c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"]
- };
- var faFish = {
- prefix: 'fas',
- iconName: 'fish',
- icon: [576, 512, [], "f578", "M327.1 96c-89.97 0-168.54 54.77-212.27 101.63L27.5 131.58c-12.13-9.18-30.24.6-27.14 14.66L24.54 256 .35 365.77c-3.1 14.06 15.01 23.83 27.14 14.66l87.33-66.05C158.55 361.23 237.13 416 327.1 416 464.56 416 576 288 576 256S464.56 96 327.1 96zm87.43 184c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24 13.26 0 24 10.74 24 24 0 13.25-10.75 24-24 24z"]
- };
- var faFistRaised = {
- prefix: 'fas',
- iconName: 'fist-raised',
- icon: [384, 512, [], "f6de", "M255.98 160V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v146.93c5.02-1.78 10.34-2.93 15.97-2.93h48.03zm128 95.99c-.01-35.34-28.66-63.99-63.99-63.99H207.85c-8.78 0-15.9 7.07-15.9 15.85v.56c0 26.27 21.3 47.59 47.57 47.59h35.26c9.68 0 13.2 3.58 13.2 8v16.2c0 4.29-3.59 7.78-7.88 8-44.52 2.28-64.16 24.71-96.05 72.55l-6.31 9.47a7.994 7.994 0 0 1-11.09 2.22l-13.31-8.88a7.994 7.994 0 0 1-2.22-11.09l6.31-9.47c15.73-23.6 30.2-43.26 47.31-58.08-17.27-5.51-31.4-18.12-38.87-34.45-6.59 3.41-13.96 5.52-21.87 5.52h-32c-12.34 0-23.49-4.81-32-12.48C71.48 251.19 60.33 256 48 256H16c-5.64 0-10.97-1.15-16-2.95v77.93c0 33.95 13.48 66.5 37.49 90.51L63.99 448v64h255.98v-63.96l35.91-35.92A96.035 96.035 0 0 0 384 344.21l-.02-88.22zm-32.01-90.09V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v112h32c11.28 0 21.94 2.31 32 5.9zM16 224h32c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v128c0 8.84 7.16 16 16 16zm95.99 0h32c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v160c0 8.84 7.16 16 16 16z"]
- };
- var faFlag = {
- prefix: 'fas',
- iconName: 'flag',
- icon: [512, 512, [], "f024", "M349.565 98.783C295.978 98.783 251.721 64 184.348 64c-24.955 0-47.309 4.384-68.045 12.013a55.947 55.947 0 0 0 3.586-23.562C118.117 24.015 94.806 1.206 66.338.048 34.345-1.254 8 24.296 8 56c0 19.026 9.497 35.825 24 45.945V488c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-94.4c28.311-12.064 63.582-22.122 114.435-22.122 53.588 0 97.844 34.783 165.217 34.783 48.169 0 86.667-16.294 122.505-40.858C506.84 359.452 512 349.571 512 339.045v-243.1c0-23.393-24.269-38.87-45.485-29.016-34.338 15.948-76.454 31.854-116.95 31.854z"]
- };
- var faFlagCheckered = {
- prefix: 'fas',
- iconName: 'flag-checkered',
- icon: [512, 512, [], "f11e", "M243.2 189.9V258c26.1 5.9 49.3 15.6 73.6 22.3v-68.2c-26-5.8-49.4-15.5-73.6-22.2zm223.3-123c-34.3 15.9-76.5 31.9-117 31.9C296 98.8 251.7 64 184.3 64c-25 0-47.3 4.4-68 12 2.8-7.3 4.1-15.2 3.6-23.6C118.1 24 94.8 1.2 66.3 0 34.3-1.3 8 24.3 8 56c0 19 9.5 35.8 24 45.9V488c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24v-94.4c28.3-12.1 63.6-22.1 114.4-22.1 53.6 0 97.8 34.8 165.2 34.8 48.2 0 86.7-16.3 122.5-40.9 8.7-6 13.8-15.8 13.8-26.4V95.9c.1-23.3-24.2-38.8-45.4-29zM169.6 325.5c-25.8 2.7-50 8.2-73.6 16.6v-70.5c26.2-9.3 47.5-15 73.6-17.4zM464 191c-23.6 9.8-46.3 19.5-73.6 23.9V286c24.8-3.4 51.4-11.8 73.6-26v70.5c-25.1 16.1-48.5 24.7-73.6 27.1V286c-27 3.7-47.9 1.5-73.6-5.6v67.4c-23.9-7.4-47.3-16.7-73.6-21.3V258c-19.7-4.4-40.8-6.8-73.6-3.8v-70c-22.4 3.1-44.6 10.2-73.6 20.9v-70.5c33.2-12.2 50.1-19.8 73.6-22v71.6c27-3.7 48.4-1.3 73.6 5.7v-67.4c23.7 7.4 47.2 16.7 73.6 21.3v68.4c23.7 5.3 47.6 6.9 73.6 2.7V143c27-4.8 52.3-13.6 73.6-22.5z"]
- };
- var faFlagUsa = {
- prefix: 'fas',
- iconName: 'flag-usa',
- icon: [512, 512, [], "f74d", "M32 0C14.3 0 0 14.3 0 32v464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32C64 14.3 49.7 0 32 0zm267.9 303.6c-57.2-15.1-111.7-28.8-203.9 11.1V384c185.7-92.2 221.7 53.3 397.5-23.1 11.4-5 18.5-16.5 18.5-28.8v-36c-43.6 17.3-80.2 24.1-112.1 24.1-37.4-.1-68.9-8.4-100-16.6zm0-96c-57.2-15.1-111.7-28.8-203.9 11.1v61.5c94.8-37.6 154.6-22.7 212.1-7.6 57.2 15.1 111.7 28.8 203.9-11.1V200c-43.6 17.3-80.2 24.1-112.1 24.1-37.4 0-68.9-8.3-100-16.5zm9.5-125.9c51.8 15.6 97.4 29 202.6-20.1V30.8c0-25.1-26.8-38.1-49.4-26.6C291.3 91.5 305.4-62.2 96 32.4v151.9c94.8-37.5 154.6-22.7 212.1-7.6 57.2 15 111.7 28.7 203.9-11.1V96.7c-53.6 23.5-93.3 31.4-126.1 31.4s-59-7.8-85.7-15.9c-4-1.2-8.1-2.4-12.1-3.5V75.5c7.2 2 14.3 4.1 21.3 6.2zM160 128.1c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16-7.2 16-16 16zm0-55.8c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm64 47.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm0-55.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16z"]
- };
- var faFlask = {
- prefix: 'fas',
- iconName: 'flask',
- icon: [448, 512, [], "f0c3", "M437.2 403.5L320 215V64h8c13.3 0 24-10.7 24-24V24c0-13.3-10.7-24-24-24H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h8v151L10.8 403.5C-18.5 450.6 15.3 512 70.9 512h306.2c55.7 0 89.4-61.5 60.1-108.5zM137.9 320l48.2-77.6c3.7-5.2 5.8-11.6 5.8-18.4V64h64v160c0 6.9 2.2 13.2 5.8 18.4l48.2 77.6h-172z"]
- };
- var faFlushed = {
- prefix: 'fas',
- iconName: 'flushed',
- icon: [496, 512, [], "f579", "M344 200c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-192 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM80 224c0-39.8 32.2-72 72-72s72 32.2 72 72-32.2 72-72 72-72-32.2-72-72zm232 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-104c-39.8 0-72-32.2-72-72s32.2-72 72-72 72 32.2 72 72-32.2 72-72 72z"]
- };
- var faFolder = {
- prefix: 'fas',
- iconName: 'folder',
- icon: [512, 512, [], "f07b", "M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48z"]
- };
- var faFolderMinus = {
- prefix: 'fas',
- iconName: 'folder-minus',
- icon: [512, 512, [], "f65d", "M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-96 168c0 8.84-7.16 16-16 16H160c-8.84 0-16-7.16-16-16v-16c0-8.84 7.16-16 16-16h192c8.84 0 16 7.16 16 16v16z"]
- };
- var faFolderOpen = {
- prefix: 'fas',
- iconName: 'folder-open',
- icon: [576, 512, [], "f07c", "M572.694 292.093L500.27 416.248A63.997 63.997 0 0 1 444.989 448H45.025c-18.523 0-30.064-20.093-20.731-36.093l72.424-124.155A64 64 0 0 1 152 256h399.964c18.523 0 30.064 20.093 20.73 36.093zM152 224h328v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v278.046l69.077-118.418C86.214 242.25 117.989 224 152 224z"]
- };
- var faFolderPlus = {
- prefix: 'fas',
- iconName: 'folder-plus',
- icon: [512, 512, [], "f65e", "M464,128H272L208,64H48A48,48,0,0,0,0,112V400a48,48,0,0,0,48,48H464a48,48,0,0,0,48-48V176A48,48,0,0,0,464,128ZM359.5,296a16,16,0,0,1-16,16h-64v64a16,16,0,0,1-16,16h-16a16,16,0,0,1-16-16V312h-64a16,16,0,0,1-16-16V280a16,16,0,0,1,16-16h64V200a16,16,0,0,1,16-16h16a16,16,0,0,1,16,16v64h64a16,16,0,0,1,16,16Z"]
- };
- var faFont = {
- prefix: 'fas',
- iconName: 'font',
- icon: [448, 512, [], "f031", "M432 416h-23.41L277.88 53.69A32 32 0 0 0 247.58 32h-47.16a32 32 0 0 0-30.3 21.69L39.41 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-19.58l23.3-64h152.56l23.3 64H304a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM176.85 272L224 142.51 271.15 272z"]
- };
- var faFontAwesomeLogoFull = {
- prefix: 'fas',
- iconName: 'font-awesome-logo-full',
- icon: [3992, 512, ["Font Awesome"], "f4e6", "M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z"]
- };
- var faFootballBall = {
- prefix: 'fas',
- iconName: 'football-ball',
- icon: [496, 512, [], "f44e", "M481.5 60.3c-4.8-18.2-19.1-32.5-37.3-37.4C420.3 16.5 383 8.9 339.4 8L496 164.8c-.8-43.5-8.2-80.6-14.5-104.5zm-467 391.4c4.8 18.2 19.1 32.5 37.3 37.4 23.9 6.4 61.2 14 104.8 14.9L0 347.2c.8 43.5 8.2 80.6 14.5 104.5zM4.2 283.4L220.4 500c132.5-19.4 248.8-118.7 271.5-271.4L275.6 12C143.1 31.4 26.8 130.7 4.2 283.4zm317.3-123.6c3.1-3.1 8.2-3.1 11.3 0l11.3 11.3c3.1 3.1 3.1 8.2 0 11.3l-28.3 28.3 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-22.6 22.7 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L248 278.6l-22.6 22.6 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-28.3 28.3c-3.1 3.1-8.2 3.1-11.3 0l-11.3-11.3c-3.1-3.1-3.1-8.2 0-11.3l28.3-28.3-28.3-28.2c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 28.3-28.5z"]
- };
- var faForward = {
- prefix: 'fas',
- iconName: 'forward',
- icon: [512, 512, [], "f04e", "M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z"]
- };
- var faFrog = {
- prefix: 'fas',
- iconName: 'frog',
- icon: [576, 512, [], "f52e", "M446.53 97.43C439.67 60.23 407.19 32 368 32c-39.23 0-71.72 28.29-78.54 65.54C126.75 112.96-.5 250.12 0 416.98.11 451.9 29.08 480 64 480h304c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-79.49l35.8-48.33c24.14-36.23 10.35-88.28-33.71-106.6-23.89-9.93-51.55-4.65-72.24 10.88l-32.76 24.59c-7.06 5.31-17.09 3.91-22.41-3.19-5.3-7.08-3.88-17.11 3.19-22.41l34.78-26.09c36.84-27.66 88.28-27.62 125.13 0 10.87 8.15 45.87 39.06 40.8 93.21L469.62 480H560c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-53.63l-98.52-104.68 154.44-86.65A58.16 58.16 0 0 0 576 189.94c0-21.4-11.72-40.95-30.48-51.23-40.56-22.22-98.99-41.28-98.99-41.28zM368 136c-13.26 0-24-10.75-24-24 0-13.26 10.74-24 24-24 13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24z"]
- };
- var faFrown = {
- prefix: 'fas',
- iconName: 'frown',
- icon: [496, 512, [], "f119", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm170.2 218.2C315.8 367.4 282.9 352 248 352s-67.8 15.4-90.2 42.2c-13.5 16.3-38.1-4.2-24.6-20.5C161.7 339.6 203.6 320 248 320s86.3 19.6 114.7 53.8c13.6 16.2-11 36.7-24.5 20.4z"]
- };
- var faFrownOpen = {
- prefix: 'fas',
- iconName: 'frown-open',
- icon: [496, 512, [], "f57a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm187.3 183.3c-31.2-9.6-59.4-15.3-75.3-15.3s-44.1 5.7-75.3 15.3c-11.5 3.5-22.5-6.3-20.5-18.1 7-40 60.1-61.2 95.8-61.2s88.8 21.3 95.8 61.2c2 11.9-9.1 21.6-20.5 18.1zM328 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"]
- };
- var faFunnelDollar = {
- prefix: 'fas',
- iconName: 'funnel-dollar',
- icon: [640, 512, [], "f662", "M433.46 165.94l101.2-111.87C554.61 34.12 540.48 0 512.26 0H31.74C3.52 0-10.61 34.12 9.34 54.07L192 256v155.92c0 12.59 5.93 24.44 16 32l79.99 60c20.86 15.64 48.47 6.97 59.22-13.57C310.8 455.38 288 406.35 288 352c0-89.79 62.05-165.17 145.46-186.06zM480 192c-88.37 0-160 71.63-160 160s71.63 160 160 160 160-71.63 160-160-71.63-160-160-160zm16 239.88V448c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V256c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.04 44.44-42.67 45.07z"]
- };
- var faFutbol = {
- prefix: 'fas',
- iconName: 'futbol',
- icon: [512, 512, [], "f1e3", "M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-48 0l-.003-.282-26.064 22.741-62.679-58.5 16.454-84.355 34.303 3.072c-24.889-34.216-60.004-60.089-100.709-73.141l13.651 31.939L256 139l-74.953-41.525 13.651-31.939c-40.631 13.028-75.78 38.87-100.709 73.141l34.565-3.073 16.192 84.355-62.678 58.5-26.064-22.741-.003.282c0 43.015 13.497 83.952 38.472 117.991l7.704-33.897 85.138 10.447 36.301 77.826-29.902 17.786c40.202 13.122 84.29 13.148 124.572 0l-29.902-17.786 36.301-77.826 85.138-10.447 7.704 33.897C442.503 339.952 456 299.015 456 256zm-248.102 69.571l-29.894-91.312L256 177.732l77.996 56.527-29.622 91.312h-96.476z"]
- };
- var faGamepad = {
- prefix: 'fas',
- iconName: 'gamepad',
- icon: [640, 512, [], "f11b", "M480.07 96H160a160 160 0 1 0 114.24 272h91.52A160 160 0 1 0 480.07 96zM248 268a12 12 0 0 1-12 12h-52v52a12 12 0 0 1-12 12h-24a12 12 0 0 1-12-12v-52H84a12 12 0 0 1-12-12v-24a12 12 0 0 1 12-12h52v-52a12 12 0 0 1 12-12h24a12 12 0 0 1 12 12v52h52a12 12 0 0 1 12 12zm216 76a40 40 0 1 1 40-40 40 40 0 0 1-40 40zm64-96a40 40 0 1 1 40-40 40 40 0 0 1-40 40z"]
- };
- var faGasPump = {
- prefix: 'fas',
- iconName: 'gas-pump',
- icon: [512, 512, [], "f52f", "M336 448H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm157.2-340.7l-81-81c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-6.2 6.2-6.2 16.4 0 22.6L416 97.9V160c0 28.1 20.9 51.3 48 55.2V376c0 13.2-10.8 24-24 24s-24-10.8-24-24v-32c0-48.6-39.4-88-88-88h-8V64c0-35.3-28.7-64-64-64H96C60.7 0 32 28.7 32 64v352h288V304h8c22.1 0 40 17.9 40 40v27.8c0 37.7 27 72 64.5 75.9 43 4.3 79.5-29.5 79.5-71.7V152.6c0-17-6.8-33.3-18.8-45.3zM256 192H96V64h160v128z"]
- };
- var faGavel = {
- prefix: 'fas',
- iconName: 'gavel',
- icon: [512, 512, [], "f0e3", "M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z"]
- };
- var faGem = {
- prefix: 'fas',
- iconName: 'gem',
- icon: [576, 512, [], "f3a5", "M485.5 0L576 160H474.9L405.7 0h79.8zm-128 0l69.2 160H149.3L218.5 0h139zm-267 0h79.8l-69.2 160H0L90.5 0zM0 192h100.7l123 251.7c1.5 3.1-2.7 5.9-5 3.3L0 192zm148.2 0h279.6l-137 318.2c-1 2.4-4.5 2.4-5.5 0L148.2 192zm204.1 251.7l123-251.7H576L357.3 446.9c-2.3 2.7-6.5-.1-5-3.2z"]
- };
- var faGenderless = {
- prefix: 'fas',
- iconName: 'genderless',
- icon: [288, 512, [], "f22d", "M144 176c44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80 35.9-80 80-80m0-64C64.5 112 0 176.5 0 256s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144z"]
- };
- var faGhost = {
- prefix: 'fas',
- iconName: 'ghost',
- icon: [384, 512, [], "f6e2", "M186.1.09C81.01 3.24 0 94.92 0 200.05v263.92c0 14.26 17.23 21.39 27.31 11.31l24.92-18.53c6.66-4.95 16-3.99 21.51 2.21l42.95 48.35c6.25 6.25 16.38 6.25 22.63 0l40.72-45.85c6.37-7.17 17.56-7.17 23.92 0l40.72 45.85c6.25 6.25 16.38 6.25 22.63 0l42.95-48.35c5.51-6.2 14.85-7.17 21.51-2.21l24.92 18.53c10.08 10.08 27.31 2.94 27.31-11.31V192C384 84 294.83-3.17 186.1.09zM128 224c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128 0c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"]
- };
- var faGift = {
- prefix: 'fas',
- iconName: 'gift',
- icon: [512, 512, [], "f06b", "M32 448c0 17.7 14.3 32 32 32h160V320H32v128zm256 32h160c17.7 0 32-14.3 32-32V320H288v160zm192-320h-42.1c6.2-12.1 10.1-25.5 10.1-40 0-48.5-39.5-88-88-88-41.6 0-68.5 21.3-103 68.3-34.5-47-61.4-68.3-103-68.3-48.5 0-88 39.5-88 88 0 14.5 3.8 27.9 10.1 40H32c-17.7 0-32 14.3-32 32v80c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-80c0-17.7-14.3-32-32-32zm-326.1 0c-22.1 0-40-17.9-40-40s17.9-40 40-40c19.9 0 34.6 3.3 86.1 80h-86.1zm206.1 0h-86.1c51.4-76.5 65.7-80 86.1-80 22.1 0 40 17.9 40 40s-17.9 40-40 40z"]
- };
- var faGifts = {
- prefix: 'fas',
- iconName: 'gifts',
- icon: [640, 512, [], "f79c", "M240.6 194.1c1.9-30.8 17.3-61.2 44-79.8C279.4 103.5 268.7 96 256 96h-29.4l30.7-22c7.2-5.1 8.9-15.1 3.7-22.3l-9.3-13c-5.1-7.2-15.1-8.9-22.3-3.7l-32 22.9 11.5-30.6c3.1-8.3-1.1-17.5-9.4-20.6l-15-5.6c-8.3-3.1-17.5 1.1-20.6 9.4l-19.9 53-19.9-53.1C121 2.1 111.8-2.1 103.5 1l-15 5.6C80.2 9.7 76 19 79.2 27.2l11.5 30.6L58.6 35c-7.2-5.1-17.2-3.5-22.3 3.7l-9.3 13c-5.1 7.2-3.5 17.2 3.7 22.3l30.7 22H32c-17.7 0-32 14.3-32 32v352c0 17.7 14.3 32 32 32h168.9c-5.5-9.5-8.9-20.3-8.9-32V256c0-29.9 20.8-55 48.6-61.9zM224 480c0 17.7 14.3 32 32 32h160V384H224v96zm224 32h160c17.7 0 32-14.3 32-32v-96H448v128zm160-288h-20.4c2.6-7.6 4.4-15.5 4.4-23.8 0-35.5-27-72.2-72.1-72.2-48.1 0-75.9 47.7-87.9 75.3-12.1-27.6-39.9-75.3-87.9-75.3-45.1 0-72.1 36.7-72.1 72.2 0 8.3 1.7 16.2 4.4 23.8H256c-17.7 0-32 14.3-32 32v96h192V224h15.3l.7-.2.7.2H448v128h192v-96c0-17.7-14.3-32-32-32zm-272 0c-2.7-1.4-5.1-3-7.2-4.8-7.3-6.4-8.8-13.8-8.8-19 0-9.7 6.4-24.2 24.1-24.2 18.7 0 35.6 27.4 44.5 48H336zm199.2-4.8c-2.1 1.8-4.5 3.4-7.2 4.8h-52.6c8.8-20.3 25.8-48 44.5-48 17.7 0 24.1 14.5 24.1 24.2 0 5.2-1.5 12.6-8.8 19z"]
- };
- var faGlassCheers = {
- prefix: 'fas',
- iconName: 'glass-cheers',
- icon: [640, 512, [], "f79f", "M639.4 433.6c-8.4-20.4-31.8-30.1-52.2-21.6l-22.1 9.2-38.7-101.9c47.9-35 64.8-100.3 34.5-152.8L474.3 16c-8-13.9-25.1-19.7-40-13.6L320 49.8 205.7 2.4c-14.9-6.2-32-.3-40 13.6L79.1 166.5C48.9 219 65.7 284.3 113.6 319.2L74.9 421.1l-22.1-9.2c-20.4-8.5-43.7 1.2-52.2 21.6-1.7 4.1.2 8.8 4.3 10.5l162.3 67.4c4.1 1.7 8.7-.2 10.4-4.3 8.4-20.4-1.2-43.8-21.6-52.3l-22.1-9.2L173.3 342c4.4.5 8.8 1.3 13.1 1.3 51.7 0 99.4-33.1 113.4-85.3l20.2-75.4 20.2 75.4c14 52.2 61.7 85.3 113.4 85.3 4.3 0 8.7-.8 13.1-1.3L506 445.6l-22.1 9.2c-20.4 8.5-30.1 31.9-21.6 52.3 1.7 4.1 6.4 6 10.4 4.3L635.1 444c4-1.7 6-6.3 4.3-10.4zM275.9 162.1l-112.1-46.5 36.5-63.4 94.5 39.2-18.9 70.7zm88.2 0l-18.9-70.7 94.5-39.2 36.5 63.4-112.1 46.5z"]
- };
- var faGlassMartini = {
- prefix: 'fas',
- iconName: 'glass-martini',
- icon: [512, 512, [], "f000", "M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6z"]
- };
- var faGlassMartiniAlt = {
- prefix: 'fas',
- iconName: 'glass-martini-alt',
- icon: [512, 512, [], "f57b", "M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6zM443.77 48l-48 48H116.24l-48-48h375.53z"]
- };
- var faGlassWhiskey = {
- prefix: 'fas',
- iconName: 'glass-whiskey',
- icon: [512, 512, [], "f7a0", "M480 32H32C12.5 32-2.4 49.2.3 68.5l56 356.5c4.5 31.5 31.5 54.9 63.4 54.9h273c31.8 0 58.9-23.4 63.4-54.9l55.6-356.5C514.4 49.2 499.5 32 480 32zm-37.4 64l-30 192h-313L69.4 96h373.2z"]
- };
- var faGlasses = {
- prefix: 'fas',
- iconName: 'glasses',
- icon: [576, 512, [], "f530", "M574.1 280.37L528.75 98.66c-5.91-23.7-21.59-44.05-43-55.81-21.44-11.73-46.97-14.11-70.19-6.33l-15.25 5.08c-8.39 2.79-12.92 11.86-10.12 20.24l5.06 15.18c2.79 8.38 11.85 12.91 20.23 10.12l13.18-4.39c10.87-3.62 23-3.57 33.16 1.73 10.29 5.37 17.57 14.56 20.37 25.82l38.46 153.82c-22.19-6.81-49.79-12.46-81.2-12.46-34.77 0-73.98 7.02-114.85 26.74h-73.18c-40.87-19.74-80.08-26.75-114.86-26.75-31.42 0-59.02 5.65-81.21 12.46l38.46-153.83c2.79-11.25 10.09-20.45 20.38-25.81 10.16-5.3 22.28-5.35 33.15-1.73l13.17 4.39c8.38 2.79 17.44-1.74 20.23-10.12l5.06-15.18c2.8-8.38-1.73-17.45-10.12-20.24l-15.25-5.08c-23.22-7.78-48.75-5.41-70.19 6.33-21.41 11.77-37.09 32.11-43 55.8L1.9 280.37A64.218 64.218 0 0 0 0 295.86v70.25C0 429.01 51.58 480 115.2 480h37.12c60.28 0 110.37-45.94 114.88-105.37l2.93-38.63h35.75l2.93 38.63C313.31 434.06 363.4 480 423.68 480h37.12c63.62 0 115.2-50.99 115.2-113.88v-70.25c0-5.23-.64-10.43-1.9-15.5zm-370.72 89.42c-1.97 25.91-24.4 46.21-51.06 46.21H115.2C86.97 416 64 393.62 64 366.11v-37.54c18.12-6.49 43.42-12.92 72.58-12.92 23.86 0 47.26 4.33 69.93 12.92l-3.13 41.22zM512 366.12c0 27.51-22.97 49.88-51.2 49.88h-37.12c-26.67 0-49.1-20.3-51.06-46.21l-3.13-41.22c22.67-8.59 46.08-12.92 69.95-12.92 29.12 0 54.43 6.44 72.55 12.93v37.54z"]
- };
- var faGlobe = {
- prefix: 'fas',
- iconName: 'globe',
- icon: [496, 512, [], "f0ac", "M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z"]
- };
- var faGlobeAfrica = {
- prefix: 'fas',
- iconName: 'globe-africa',
- icon: [496, 512, [], "f57c", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm160 215.5v6.93c0 5.87-3.32 11.24-8.57 13.86l-15.39 7.7a15.485 15.485 0 0 1-15.53-.97l-18.21-12.14a15.52 15.52 0 0 0-13.5-1.81l-2.65.88c-9.7 3.23-13.66 14.79-7.99 23.3l13.24 19.86c2.87 4.31 7.71 6.9 12.89 6.9h8.21c8.56 0 15.5 6.94 15.5 15.5v11.34c0 3.35-1.09 6.62-3.1 9.3l-18.74 24.98c-1.42 1.9-2.39 4.1-2.83 6.43l-4.3 22.83c-.62 3.29-2.29 6.29-4.76 8.56a159.608 159.608 0 0 0-25 29.16l-13.03 19.55a27.756 27.756 0 0 1-23.09 12.36c-10.51 0-20.12-5.94-24.82-15.34a78.902 78.902 0 0 1-8.33-35.29V367.5c0-8.56-6.94-15.5-15.5-15.5h-25.88c-14.49 0-28.38-5.76-38.63-16a54.659 54.659 0 0 1-16-38.63v-14.06c0-17.19 8.1-33.38 21.85-43.7l27.58-20.69a54.663 54.663 0 0 1 32.78-10.93h.89c8.48 0 16.85 1.97 24.43 5.77l14.72 7.36c3.68 1.84 7.93 2.14 11.83.84l47.31-15.77c6.33-2.11 10.6-8.03 10.6-14.7 0-8.56-6.94-15.5-15.5-15.5h-10.09c-4.11 0-8.05-1.63-10.96-4.54l-6.92-6.92a15.493 15.493 0 0 0-10.96-4.54H199.5c-8.56 0-15.5-6.94-15.5-15.5v-4.4c0-7.11 4.84-13.31 11.74-15.04l14.45-3.61c3.74-.94 7-3.23 9.14-6.44l8.08-12.11c2.87-4.31 7.71-6.9 12.89-6.9h24.21c8.56 0 15.5-6.94 15.5-15.5v-21.7C359.23 71.63 422.86 131.02 441.93 208H423.5c-8.56 0-15.5 6.94-15.5 15.5z"]
- };
- var faGlobeAmericas = {
- prefix: 'fas',
- iconName: 'globe-americas',
- icon: [496, 512, [], "f57d", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm82.29 357.6c-3.9 3.88-7.99 7.95-11.31 11.28-2.99 3-5.1 6.7-6.17 10.71-1.51 5.66-2.73 11.38-4.77 16.87l-17.39 46.85c-13.76 3-28 4.69-42.65 4.69v-27.38c1.69-12.62-7.64-36.26-22.63-51.25-6-6-9.37-14.14-9.37-22.63v-32.01c0-11.64-6.27-22.34-16.46-27.97-14.37-7.95-34.81-19.06-48.81-26.11-11.48-5.78-22.1-13.14-31.65-21.75l-.8-.72a114.792 114.792 0 0 1-18.06-20.74c-9.38-13.77-24.66-36.42-34.59-51.14 20.47-45.5 57.36-82.04 103.2-101.89l24.01 12.01C203.48 89.74 216 82.01 216 70.11v-11.3c7.99-1.29 16.12-2.11 24.39-2.42l28.3 28.3c6.25 6.25 6.25 16.38 0 22.63L264 112l-10.34 10.34c-3.12 3.12-3.12 8.19 0 11.31l4.69 4.69c3.12 3.12 3.12 8.19 0 11.31l-8 8a8.008 8.008 0 0 1-5.66 2.34h-8.99c-2.08 0-4.08.81-5.58 2.27l-9.92 9.65a8.008 8.008 0 0 0-1.58 9.31l15.59 31.19c2.66 5.32-1.21 11.58-7.15 11.58h-5.64c-1.93 0-3.79-.7-5.24-1.96l-9.28-8.06a16.017 16.017 0 0 0-15.55-3.1l-31.17 10.39a11.95 11.95 0 0 0-8.17 11.34c0 4.53 2.56 8.66 6.61 10.69l11.08 5.54c9.41 4.71 19.79 7.16 30.31 7.16s22.59 27.29 32 32h66.75c8.49 0 16.62 3.37 22.63 9.37l13.69 13.69a30.503 30.503 0 0 1 8.93 21.57 46.536 46.536 0 0 1-13.72 32.98zM417 274.25c-5.79-1.45-10.84-5-14.15-9.97l-17.98-26.97a23.97 23.97 0 0 1 0-26.62l19.59-29.38c2.32-3.47 5.5-6.29 9.24-8.15l12.98-6.49C440.2 193.59 448 223.87 448 256c0 8.67-.74 17.16-1.82 25.54L417 274.25z"]
- };
- var faGlobeAsia = {
- prefix: 'fas',
- iconName: 'globe-asia',
- icon: [496, 512, [], "f57e", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm-11.34 240.23c-2.89 4.82-8.1 7.77-13.72 7.77h-.31c-4.24 0-8.31 1.69-11.31 4.69l-5.66 5.66c-3.12 3.12-3.12 8.19 0 11.31l5.66 5.66c3 3 4.69 7.07 4.69 11.31V304c0 8.84-7.16 16-16 16h-6.11c-6.06 0-11.6-3.42-14.31-8.85l-22.62-45.23c-2.44-4.88-8.95-5.94-12.81-2.08l-19.47 19.46c-3 3-7.07 4.69-11.31 4.69H50.81C49.12 277.55 48 266.92 48 256c0-110.28 89.72-200 200-200 21.51 0 42.2 3.51 61.63 9.82l-50.16 38.53c-5.11 3.41-4.63 11.06.86 13.81l10.83 5.41c5.42 2.71 8.84 8.25 8.84 14.31V216c0 4.42-3.58 8-8 8h-3.06c-3.03 0-5.8-1.71-7.15-4.42-1.56-3.12-5.96-3.29-7.76-.3l-17.37 28.95zM408 358.43c0 4.24-1.69 8.31-4.69 11.31l-9.57 9.57c-3 3-7.07 4.69-11.31 4.69h-15.16c-4.24 0-8.31-1.69-11.31-4.69l-13.01-13.01a26.767 26.767 0 0 0-25.42-7.04l-21.27 5.32c-1.27.32-2.57.48-3.88.48h-10.34c-4.24 0-8.31-1.69-11.31-4.69l-11.91-11.91a8.008 8.008 0 0 1-2.34-5.66v-10.2c0-3.27 1.99-6.21 5.03-7.43l39.34-15.74c1.98-.79 3.86-1.82 5.59-3.05l23.71-16.89a7.978 7.978 0 0 1 4.64-1.48h12.09c3.23 0 6.15 1.94 7.39 4.93l5.35 12.85a4 4 0 0 0 3.69 2.46h3.8c1.78 0 3.35-1.18 3.84-2.88l4.2-14.47c.5-1.71 2.06-2.88 3.84-2.88h6.06c2.21 0 4 1.79 4 4v12.93c0 2.12.84 4.16 2.34 5.66l11.91 11.91c3 3 4.69 7.07 4.69 11.31v24.6z"]
- };
- var faGlobeEurope = {
- prefix: 'fas',
- iconName: 'globe-europe',
- icon: [496, 512, [], "f7a2", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm200 248c0 22.5-3.9 44.2-10.8 64.4h-20.3c-4.3 0-8.4-1.7-11.4-4.8l-32-32.6c-4.5-4.6-4.5-12.1.1-16.7l12.5-12.5v-8.7c0-3-1.2-5.9-3.3-8l-9.4-9.4c-2.1-2.1-5-3.3-8-3.3h-16c-6.2 0-11.3-5.1-11.3-11.3 0-3 1.2-5.9 3.3-8l9.4-9.4c2.1-2.1 5-3.3 8-3.3h32c6.2 0 11.3-5.1 11.3-11.3v-9.4c0-6.2-5.1-11.3-11.3-11.3h-36.7c-8.8 0-16 7.2-16 16v4.5c0 6.9-4.4 13-10.9 15.2l-31.6 10.5c-3.3 1.1-5.5 4.1-5.5 7.6v2.2c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8s-3.6-8-8-8H247c-3 0-5.8 1.7-7.2 4.4l-9.4 18.7c-2.7 5.4-8.2 8.8-14.3 8.8H194c-8.8 0-16-7.2-16-16V199c0-4.2 1.7-8.3 4.7-11.3l20.1-20.1c4.6-4.6 7.2-10.9 7.2-17.5 0-3.4 2.2-6.5 5.5-7.6l40-13.3c1.7-.6 3.2-1.5 4.4-2.7l26.8-26.8c2.1-2.1 3.3-5 3.3-8 0-6.2-5.1-11.3-11.3-11.3H258l-16 16v8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-20c0-2.5 1.2-4.9 3.2-6.4l28.9-21.7c1.9-.1 3.8-.3 5.7-.3C358.3 56 448 145.7 448 256zM130.1 149.1c0-3 1.2-5.9 3.3-8l25.4-25.4c2.1-2.1 5-3.3 8-3.3 6.2 0 11.3 5.1 11.3 11.3v16c0 3-1.2 5.9-3.3 8l-9.4 9.4c-2.1 2.1-5 3.3-8 3.3h-16c-6.2 0-11.3-5.1-11.3-11.3zm128 306.4v-7.1c0-8.8-7.2-16-16-16h-20.2c-10.8 0-26.7-5.3-35.4-11.8l-22.2-16.7c-11.5-8.6-18.2-22.1-18.2-36.4v-23.9c0-16 8.4-30.8 22.1-39l42.9-25.7c7.1-4.2 15.2-6.5 23.4-6.5h31.2c10.9 0 21.4 3.9 29.6 10.9l43.2 37.1h18.3c8.5 0 16.6 3.4 22.6 9.4l17.3 17.3c3.4 3.4 8.1 5.3 12.9 5.3H423c-32.4 58.9-93.8 99.5-164.9 103.1z"]
- };
- var faGolfBall = {
- prefix: 'fas',
- iconName: 'golf-ball',
- icon: [416, 512, [], "f450", "M96 416h224c0 17.7-14.3 32-32 32h-16c-17.7 0-32 14.3-32 32v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-20c0-17.7-14.3-32-32-32h-16c-17.7 0-32-14.3-32-32zm320-208c0 74.2-39 139.2-97.5 176h-221C39 347.2 0 282.2 0 208 0 93.1 93.1 0 208 0s208 93.1 208 208zm-180.1 43.9c18.3 0 33.1-14.8 33.1-33.1 0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1zm49.1 46.9c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1zm64-64c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1z"]
- };
- var faGopuram = {
- prefix: 'fas',
- iconName: 'gopuram',
- icon: [512, 512, [], "f664", "M496 352h-16V240c0-8.8-7.2-16-16-16h-16v-80c0-8.8-7.2-16-16-16h-16V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16S96 7.2 96 16v112H80c-8.8 0-16 7.2-16 16v80H48c-8.8 0-16 7.2-16 16v112H16c-8.8 0-16 7.2-16 16v128c0 8.8 7.2 16 16 16h80V352h32V224h32v-96h32v96h-32v128h-32v160h80v-80c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16v80h80V352h-32V224h-32v-96h32v96h32v128h32v160h80c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zM232 176c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v48h-48zm56 176h-64v-64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16z"]
- };
- var faGraduationCap = {
- prefix: 'fas',
- iconName: 'graduation-cap',
- icon: [640, 512, [], "f19d", "M622.34 153.2L343.4 67.5c-15.2-4.67-31.6-4.67-46.79 0L17.66 153.2c-23.54 7.23-23.54 38.36 0 45.59l48.63 14.94c-10.67 13.19-17.23 29.28-17.88 46.9C38.78 266.15 32 276.11 32 288c0 10.78 5.68 19.85 13.86 25.65L20.33 428.53C18.11 438.52 25.71 448 35.94 448h56.11c10.24 0 17.84-9.48 15.62-19.47L82.14 313.65C90.32 307.85 96 298.78 96 288c0-11.57-6.47-21.25-15.66-26.87.76-15.02 8.44-28.3 20.69-36.72L296.6 284.5c9.06 2.78 26.44 6.25 46.79 0l278.95-85.7c23.55-7.24 23.55-38.36 0-45.6zM352.79 315.09c-28.53 8.76-52.84 3.92-65.59 0l-145.02-44.55L128 384c0 35.35 85.96 64 192 64s192-28.65 192-64l-14.18-113.47-145.03 44.56z"]
- };
- var faGreaterThan = {
- prefix: 'fas',
- iconName: 'greater-than',
- icon: [384, 512, [], "f531", "M365.52 209.85L59.22 67.01c-16.06-7.49-35.15-.54-42.64 15.52L3.01 111.61c-7.49 16.06-.54 35.15 15.52 42.64L236.96 256.1 18.49 357.99C2.47 365.46-4.46 384.5 3.01 400.52l13.52 29C24 445.54 43.04 452.47 59.06 445l306.47-142.91a32.003 32.003 0 0 0 18.48-29v-34.23c-.01-12.45-7.21-23.76-18.49-29.01z"]
- };
- var faGreaterThanEqual = {
- prefix: 'fas',
- iconName: 'greater-than-equal',
- icon: [448, 512, [], "f532", "M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z"]
- };
- var faGrimace = {
- prefix: 'fas',
- iconName: 'grimace',
- icon: [496, 512, [], "f57f", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM144 400h-8c-17.7 0-32-14.3-32-32v-8h40v40zm0-56h-40v-8c0-17.7 14.3-32 32-32h8v40zm-8-136c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm72 192h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm-8-104c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64 128c0 17.7-14.3 32-32 32h-8v-40h40v8zm0-24h-40v-40h8c17.7 0 32 14.3 32 32v8z"]
- };
- var faGrin = {
- prefix: 'fas',
- iconName: 'grin',
- icon: [496, 512, [], "f580", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm80 256c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"]
- };
- var faGrinAlt = {
- prefix: 'fas',
- iconName: 'grin-alt',
- icon: [496, 512, [], "f581", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm63.7 128.7c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zm-160 0c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"]
- };
- var faGrinBeam = {
- prefix: 'fas',
- iconName: 'grin-beam',
- icon: [496, 512, [], "f582", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 144c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"]
- };
- var faGrinBeamSweat = {
- prefix: 'fas',
- iconName: 'grin-beam-sweat',
- icon: [504, 512, [], "f583", "M456 128c26.5 0 48-21 48-47 0-20-28.5-60.4-41.6-77.8-3.2-4.3-9.6-4.3-12.8 0C436.5 20.6 408 61 408 81c0 26 21.5 47 48 47zm0 32c-44.1 0-80-35.4-80-79 0-4.4.3-14.2 8.1-32.2C345 23.1 298.3 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-35.1-7.4-68.4-20.5-98.6-6.3 1.5-12.7 2.6-19.5 2.6zm-128-8c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"]
- };
- var faGrinHearts = {
- prefix: 'fas',
- iconName: 'grin-hearts',
- icon: [496, 512, [], "f584", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM90.4 183.6c6.7-17.6 26.7-26.7 44.9-21.9l7.1 1.9 2-7.1c5-18.1 22.8-30.9 41.5-27.9 21.4 3.4 34.4 24.2 28.8 44.5L195.3 243c-1.2 4.5-5.9 7.2-10.5 6l-70.2-18.2c-20.4-5.4-31.9-27-24.2-47.2zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm133.4-201.3l-70.2 18.2c-4.5 1.2-9.2-1.5-10.5-6L281.3 173c-5.6-20.3 7.4-41.1 28.8-44.5 18.6-3 36.4 9.8 41.5 27.9l2 7.1 7.1-1.9c18.2-4.7 38.2 4.3 44.9 21.9 7.7 20.3-3.8 41.9-24.2 47.2z"]
- };
- var faGrinSquint = {
- prefix: 'fas',
- iconName: 'grin-squint',
- icon: [496, 512, [], "f585", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"]
- };
- var faGrinSquintTears = {
- prefix: 'fas',
- iconName: 'grin-squint-tears',
- icon: [512, 512, [], "f586", "M409.6 111.9c22.6-3.2 73.5-12 88.3-26.8 19.2-19.2 18.9-50.6-.7-70.2S446-5 426.9 14.2c-14.8 14.8-23.5 65.7-26.8 88.3-.8 5.5 3.9 10.2 9.5 9.4zM102.4 400.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm311.7-256.5c-33 3.9-48.6-25.1-45.7-45.7 3.4-24 7.4-42.1 11.5-56.5C285.1-13.4 161.8-.5 80.6 80.6-.5 161.7-13.4 285 41.4 379.9c14.4-4.1 32.4-8 56.5-11.5 33.2-3.9 48.6 25.2 45.7 45.7-3.4 24-7.4 42.1-11.5 56.5 94.8 54.8 218.1 41.9 299.3-39.2s94-204.4 39.2-299.3c-14.4 4.1-32.5 8-56.5 11.5zM255.7 106c3.3-13.2 22.4-11.5 23.6 1.8l4.8 52.3 52.3 4.8c13.4 1.2 14.9 20.3 1.8 23.6l-90.5 22.6c-8.9 2.2-16.7-5.9-14.5-14.5l22.5-90.6zm-90.9 230.3L160 284l-52.3-4.8c-13.4-1.2-14.9-20.3-1.8-23.6l90.5-22.6c8.8-2.2 16.7 5.8 14.5 14.5L188.3 338c-3.1 13.2-22.2 11.7-23.5-1.7zm215.7 44.2c-29.3 29.3-75.7 50.4-116.7 50.4-18.9 0-36.6-4.5-51-14.7-9.8-6.9-8.7-21.8 2-27.2 28.3-14.6 63.9-42.4 97.8-76.3s61.7-69.6 76.3-97.8c5.4-10.5 20.2-11.9 27.3-2 32.3 45.3 7.1 124.7-35.7 167.6z"]
- };
- var faGrinStars = {
- prefix: 'fas',
- iconName: 'grin-stars',
- icon: [496, 512, [], "f587", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM94.6 168.9l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.2 1 8.9 8.6 4.3 13.2l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L152 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.6-4.7-1.9-12.3 4.3-13.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm157.7-249.9l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L344 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.5-4.6-1.9-12.2 4.3-13.2l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.3.9 9 8.5 4.4 13.1z"]
- };
- var faGrinTears = {
- prefix: 'fas',
- iconName: 'grin-tears',
- icon: [640, 512, [], "f588", "M102.4 256.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm523.4 26.8c-14.8-14.8-65.7-23.5-88.3-26.8-5.5-.8-10.3 3.9-9.5 9.5 3.2 22.6 12 73.5 26.8 88.3 19.2 19.2 50.6 18.9 70.2-.7s20-51.2.8-70.3zm-129.4-12.8c-3.8-26.6 19.1-49.5 45.7-45.7 8.9 1.3 16.8 2.7 24.3 4.1C552.7 104.5 447.7 8 320 8S87.3 104.5 73.6 228.5c7.5-1.4 15.4-2.8 24.3-4.1 33.2-3.9 48.6 25.3 45.7 45.7-11.8 82.3-29.9 100.4-35.8 106.4-.9.9-2 1.6-3 2.5 42.7 74.6 123 125 215.2 125s172.5-50.4 215.2-125.1c-1-.9-2.1-1.5-3-2.5-5.9-5.9-24-24-35.8-106.3zM400 152c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.7 9.2-21.6 20.7-17.9C227.1 330.5 272 336 320 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"]
- };
- var faGrinTongue = {
- prefix: 'fas',
- iconName: 'grin-tongue',
- icon: [496, 512, [], "f589", "M248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-34.9 134.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z"]
- };
- var faGrinTongueSquint = {
- prefix: 'fas',
- iconName: 'grin-tongue-squint',
- icon: [496, 512, [], "f58a", "M293.1 374.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-33.8 210.3l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.7 4.7 7.7 15.9 0 20.6zm163 30c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.8-4.7-7.8-15.9 0-20.6l80-48c11.7-6.9 23.9 7.7 15.4 18L343.6 208l33.6 40.3z"]
- };
- var faGrinTongueWink = {
- prefix: 'fas',
- iconName: 'grin-tongue-wink',
- icon: [496, 512, [], "f58b", "M344 184c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-56 225l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L112 233c-8.5 7.4-21.6.3-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c1.6 11.1-11.6 18.2-20 10.8zm152 39c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm-50.9 102.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z"]
- };
- var faGrinWink = {
- prefix: 'fas',
- iconName: 'grin-wink',
- icon: [496, 512, [], "f58c", "M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm168 25l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.6 11-11.5 18.2-20 10.8zm-243.1 87.8C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6 20.7 17.9-9.2 55-83.2 93.3-143.8 93.3s-134.5-38.3-143.8-93.3c-2-11.9 9.3-21.6 20.7-17.9z"]
- };
- var faGripHorizontal = {
- prefix: 'fas',
- iconName: 'grip-horizontal',
- icon: [448, 512, [], "f58d", "M96 288H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM96 96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z"]
- };
- var faGripLines = {
- prefix: 'fas',
- iconName: 'grip-lines',
- icon: [512, 512, [], "f7a4", "M496 288H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-128H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z"]
- };
- var faGripLinesVertical = {
- prefix: 'fas',
- iconName: 'grip-lines-vertical',
- icon: [256, 512, [], "f7a5", "M96 496V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16zm128 0V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16z"]
- };
- var faGripVertical = {
- prefix: 'fas',
- iconName: 'grip-vertical',
- icon: [320, 512, [], "f58e", "M96 32H32C14.33 32 0 46.33 0 64v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM288 32h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z"]
- };
- var faGuitar = {
- prefix: 'fas',
- iconName: 'guitar',
- icon: [512, 512, [], "f7a6", "M502.63 39L473 9.37a32 32 0 0 0-45.26 0L381.46 55.7a35.14 35.14 0 0 0-8.53 13.79L360.77 106l-76.26 76.26c-12.16-8.76-25.5-15.74-40.1-19.14-33.45-7.78-67-.88-89.88 22a82.45 82.45 0 0 0-20.24 33.47c-6 18.56-23.21 32.69-42.15 34.46-23.7 2.27-45.73 11.45-62.61 28.44C-16.11 327-7.9 409 47.58 464.45S185 528 230.56 482.52c17-16.88 26.16-38.9 28.45-62.71 1.76-18.85 15.89-36.13 34.43-42.14a82.6 82.6 0 0 0 33.48-20.25c22.87-22.88 29.74-56.36 22-89.75-3.39-14.64-10.37-28-19.16-40.2L406 151.23l36.48-12.16a35.14 35.14 0 0 0 13.79-8.53l46.33-46.32a32 32 0 0 0 .03-45.22zM208 352a48 48 0 1 1 48-48 48 48 0 0 1-48 48z"]
- };
- var faHSquare = {
- prefix: 'fas',
- iconName: 'h-square',
- icon: [448, 512, [], "f0fd", "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-112 48h-32c-8.837 0-16 7.163-16 16v80H160v-80c0-8.837-7.163-16-16-16h-32c-8.837 0-16 7.163-16 16v224c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16v-80h128v80c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144c0-8.837-7.163-16-16-16z"]
- };
- var faHamburger = {
- prefix: 'fas',
- iconName: 'hamburger',
- icon: [512, 512, [], "f805", "M464 256H48a48 48 0 0 0 0 96h416a48 48 0 0 0 0-96zm16 128H32a16 16 0 0 0-16 16v16a64 64 0 0 0 64 64h352a64 64 0 0 0 64-64v-16a16 16 0 0 0-16-16zM58.64 224h394.72c34.57 0 54.62-43.9 34.82-75.88C448 83.2 359.55 32.1 256 32c-103.54.1-192 51.2-232.18 116.11C4 180.09 24.07 224 58.64 224zM384 112a16 16 0 1 1-16 16 16 16 0 0 1 16-16zM256 80a16 16 0 1 1-16 16 16 16 0 0 1 16-16zm-128 32a16 16 0 1 1-16 16 16 16 0 0 1 16-16z"]
- };
- var faHammer = {
- prefix: 'fas',
- iconName: 'hammer',
- icon: [576, 512, [], "f6e3", "M571.31 193.94l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31-28.9-28.9c5.63-21.31.36-44.9-16.35-61.61l-45.25-45.25c-62.48-62.48-163.79-62.48-226.28 0l90.51 45.25v18.75c0 16.97 6.74 33.25 18.75 45.25l49.14 49.14c16.71 16.71 40.3 21.98 61.61 16.35l28.9 28.9-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l90.51-90.51c6.23-6.24 6.23-16.37-.02-22.62zm-286.72-15.2c-3.7-3.7-6.84-7.79-9.85-11.95L19.64 404.96c-25.57 23.88-26.26 64.19-1.53 88.93s65.05 24.05 88.93-1.53l238.13-255.07c-3.96-2.91-7.9-5.87-11.44-9.41l-49.14-49.14z"]
- };
- var faHamsa = {
- prefix: 'fas',
- iconName: 'hamsa',
- icon: [512, 512, [], "f665", "M509.34 307.25C504.28 295.56 492.75 288 480 288h-64V80c0-22-18-40-40-40s-40 18-40 40v134c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V40c0-22-18-40-40-40s-40 18-40 40v174c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V80c0-22-18-40-40-40S96 58 96 80v208H32c-12.75 0-24.28 7.56-29.34 19.25a31.966 31.966 0 0 0 5.94 34.58l102.69 110.03C146.97 490.08 199.69 512 256 512s109.03-21.92 144.72-60.14L503.4 341.83a31.966 31.966 0 0 0 5.94-34.58zM256 416c-53.02 0-96-64-96-64s42.98-64 96-64 96 64 96 64-42.98 64-96 64zm0-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z"]
- };
- var faHandHolding = {
- prefix: 'fas',
- iconName: 'hand-holding',
- icon: [576, 512, [], "f4bd", "M565.3 328.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z"]
- };
- var faHandHoldingHeart = {
- prefix: 'fas',
- iconName: 'hand-holding-heart',
- icon: [576, 512, [], "f4be", "M275.3 250.5c7 7.4 18.4 7.4 25.5 0l108.9-114.2c31.6-33.2 29.8-88.2-5.6-118.8-30.8-26.7-76.7-21.9-104.9 7.7L288 36.9l-11.1-11.6C248.7-4.4 202.8-9.2 172 17.5c-35.3 30.6-37.2 85.6-5.6 118.8l108.9 114.2zm290 77.6c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z"]
- };
- var faHandHoldingMedical = {
- prefix: 'fas',
- iconName: 'hand-holding-medical',
- icon: [576, 512, [], "e05c", "M159.88,175.82h64v64a16,16,0,0,0,16,16h64a16,16,0,0,0,16-16v-64h64a16,16,0,0,0,16-16v-64a16,16,0,0,0-16-16h-64v-64a16,16,0,0,0-16-16h-64a16,16,0,0,0-16,16v64h-64a16,16,0,0,0-16,16v64A16,16,0,0,0,159.88,175.82ZM568.07,336.13a39.91,39.91,0,0,0-55.93-8.47L392.47,415.84H271.86a16,16,0,0,1,0-32H350.1c16,0,30.75-10.87,33.37-26.61a32.06,32.06,0,0,0-31.62-37.38h-160a117.7,117.7,0,0,0-74.12,26.25l-46.5,37.74H15.87a16.11,16.11,0,0,0-16,16v96a16.11,16.11,0,0,0,16,16h347a104.8,104.8,0,0,0,61.7-20.27L559.6,392A40,40,0,0,0,568.07,336.13Z"]
- };
- var faHandHoldingUsd = {
- prefix: 'fas',
- iconName: 'hand-holding-usd',
- icon: [576, 512, [], "f4c0", "M271.06,144.3l54.27,14.3a8.59,8.59,0,0,1,6.63,8.1c0,4.6-4.09,8.4-9.12,8.4h-35.6a30,30,0,0,1-11.19-2.2c-5.24-2.2-11.28-1.7-15.3,2l-19,17.5a11.68,11.68,0,0,0-2.25,2.66,11.42,11.42,0,0,0,3.88,15.74,83.77,83.77,0,0,0,34.51,11.5V240c0,8.8,7.83,16,17.37,16h17.37c9.55,0,17.38-7.2,17.38-16V222.4c32.93-3.6,57.84-31,53.5-63-3.15-23-22.46-41.3-46.56-47.7L282.68,97.4a8.59,8.59,0,0,1-6.63-8.1c0-4.6,4.09-8.4,9.12-8.4h35.6A30,30,0,0,1,332,83.1c5.23,2.2,11.28,1.7,15.3-2l19-17.5A11.31,11.31,0,0,0,368.47,61a11.43,11.43,0,0,0-3.84-15.78,83.82,83.82,0,0,0-34.52-11.5V16c0-8.8-7.82-16-17.37-16H295.37C285.82,0,278,7.2,278,16V33.6c-32.89,3.6-57.85,31-53.51,63C227.63,119.6,247,137.9,271.06,144.3ZM565.27,328.1c-11.8-10.7-30.2-10-42.6,0L430.27,402a63.64,63.64,0,0,1-40,14H272a16,16,0,0,1,0-32h78.29c15.9,0,30.71-10.9,33.25-26.6a31.2,31.2,0,0,0,.46-5.46A32,32,0,0,0,352,320H192a117.66,117.66,0,0,0-74.1,26.29L71.4,384H16A16,16,0,0,0,0,400v96a16,16,0,0,0,16,16H372.77a64,64,0,0,0,40-14L564,377a32,32,0,0,0,1.28-48.9Z"]
- };
- var faHandHoldingWater = {
- prefix: 'fas',
- iconName: 'hand-holding-water',
- icon: [576, 512, [], "f4c1", "M288 256c53 0 96-42.1 96-94 0-40-57.1-120.7-83.2-155.6-6.4-8.5-19.2-8.5-25.6 0C249.1 41.3 192 122 192 162c0 51.9 43 94 96 94zm277.3 72.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z"]
- };
- var faHandLizard = {
- prefix: 'fas',
- iconName: 'hand-lizard',
- icon: [576, 512, [], "f258", "M384 480h192V363.778a95.998 95.998 0 0 0-14.833-51.263L398.127 54.368A48 48 0 0 0 357.544 32H24C10.745 32 0 42.745 0 56v16c0 30.928 25.072 56 56 56h229.981c12.844 0 21.556 13.067 16.615 24.923l-21.41 51.385A32 32 0 0 1 251.648 224H128c-35.346 0-64 28.654-64 64v8c0 13.255 10.745 24 24 24h147.406a47.995 47.995 0 0 1 25.692 7.455l111.748 70.811A24.001 24.001 0 0 1 384 418.539V480z"]
- };
- var faHandMiddleFinger = {
- prefix: 'fas',
- iconName: 'hand-middle-finger',
- icon: [512, 512, [], "f806", "M479.93 317.12a37.33 37.33 0 0 0-28.28-36.19L416 272v-49.59c0-11.44-9.69-21.29-23.15-23.54l-38.4-6.4C336.63 189.5 320 200.86 320 216v32a8 8 0 0 1-16 0V50c0-26.28-20.25-49.2-46.52-50A48 48 0 0 0 208 48v200a8 8 0 0 1-16 0v-32c0-15.15-16.63-26.51-34.45-23.54l-30.68 5.12c-18 3-30.87 16.12-30.87 31.38V376a8 8 0 0 1-16 0v-76l-27.36 15A37.34 37.34 0 0 0 32 348.4v73.47a37.31 37.31 0 0 0 10.93 26.39l30.93 30.93A112 112 0 0 0 153.05 512h215A112 112 0 0 0 480 400z"]
- };
- var faHandPaper = {
- prefix: 'fas',
- iconName: 'hand-paper',
- icon: [448, 512, [], "f256", "M408.781 128.007C386.356 127.578 368 146.36 368 168.79V256h-8V79.79c0-22.43-18.356-41.212-40.781-40.783C297.488 39.423 280 57.169 280 79v177h-8V40.79C272 18.36 253.644-.422 231.219.007 209.488.423 192 18.169 192 40v216h-8V80.79c0-22.43-18.356-41.212-40.781-40.783C121.488 40.423 104 58.169 104 80v235.992l-31.648-43.519c-12.993-17.866-38.009-21.817-55.877-8.823-17.865 12.994-21.815 38.01-8.822 55.877l125.601 172.705A48 48 0 0 0 172.073 512h197.59c22.274 0 41.622-15.324 46.724-37.006l26.508-112.66a192.011 192.011 0 0 0 5.104-43.975V168c.001-21.831-17.487-39.577-39.218-39.993z"]
- };
- var faHandPeace = {
- prefix: 'fas',
- iconName: 'hand-peace',
- icon: [448, 512, [], "f25b", "M408 216c-22.092 0-40 17.909-40 40h-8v-32c0-22.091-17.908-40-40-40s-40 17.909-40 40v32h-8V48c0-26.51-21.49-48-48-48s-48 21.49-48 48v208h-13.572L92.688 78.449C82.994 53.774 55.134 41.63 30.461 51.324 5.787 61.017-6.356 88.877 3.337 113.551l74.765 190.342-31.09 24.872c-15.381 12.306-19.515 33.978-9.741 51.081l64 112A39.998 39.998 0 0 0 136 512h240c18.562 0 34.686-12.77 38.937-30.838l32-136A39.97 39.97 0 0 0 448 336v-80c0-22.091-17.908-40-40-40z"]
- };
- var faHandPointDown = {
- prefix: 'fas',
- iconName: 'hand-point-down',
- icon: [384, 512, [], "f0a7", "M91.826 467.2V317.966c-8.248 5.841-16.558 10.57-24.918 14.153C35.098 345.752-.014 322.222 0 288c.008-18.616 10.897-32.203 29.092-40 28.286-12.122 64.329-78.648 77.323-107.534 7.956-17.857 25.479-28.453 43.845-28.464l.001-.002h171.526c11.812 0 21.897 8.596 23.703 20.269 7.25 46.837 38.483 61.76 38.315 123.731-.007 2.724.195 13.254.195 16 0 50.654-22.122 81.574-71.263 72.6-9.297 18.597-39.486 30.738-62.315 16.45-21.177 24.645-53.896 22.639-70.944 6.299V467.2c0 24.15-20.201 44.8-43.826 44.8-23.283 0-43.826-21.35-43.826-44.8zM112 72V24c0-13.255 10.745-24 24-24h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24zm212-24c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z"]
- };
- var faHandPointLeft = {
- prefix: 'fas',
- iconName: 'hand-point-left',
- icon: [512, 512, [], "f0a5", "M44.8 155.826h149.234c-5.841-8.248-10.57-16.558-14.153-24.918C166.248 99.098 189.778 63.986 224 64c18.616.008 32.203 10.897 40 29.092 12.122 28.286 78.648 64.329 107.534 77.323 17.857 7.956 28.453 25.479 28.464 43.845l.002.001v171.526c0 11.812-8.596 21.897-20.269 23.703-46.837 7.25-61.76 38.483-123.731 38.315-2.724-.007-13.254.195-16 .195-50.654 0-81.574-22.122-72.6-71.263-18.597-9.297-30.738-39.486-16.45-62.315-24.645-21.177-22.639-53.896-6.299-70.944H44.8c-24.15 0-44.8-20.201-44.8-43.826 0-23.283 21.35-43.826 44.8-43.826zM440 176h48c13.255 0 24 10.745 24 24v192c0 13.255-10.745 24-24 24h-48c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24zm24 212c11.046 0 20-8.954 20-20s-8.954-20-20-20-20 8.954-20 20 8.954 20 20 20z"]
- };
- var faHandPointRight = {
- prefix: 'fas',
- iconName: 'hand-point-right',
- icon: [512, 512, [], "f0a4", "M512 199.652c0 23.625-20.65 43.826-44.8 43.826h-99.851c16.34 17.048 18.346 49.766-6.299 70.944 14.288 22.829 2.147 53.017-16.45 62.315C353.574 425.878 322.654 448 272 448c-2.746 0-13.276-.203-16-.195-61.971.168-76.894-31.065-123.731-38.315C120.596 407.683 112 397.599 112 385.786V214.261l.002-.001c.011-18.366 10.607-35.889 28.464-43.845 28.886-12.994 95.413-49.038 107.534-77.323 7.797-18.194 21.384-29.084 40-29.092 34.222-.014 57.752 35.098 44.119 66.908-3.583 8.359-8.312 16.67-14.153 24.918H467.2c23.45 0 44.8 20.543 44.8 43.826zM96 200v192c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24h48c13.255 0 24 10.745 24 24zM68 368c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z"]
- };
- var faHandPointUp = {
- prefix: 'fas',
- iconName: 'hand-point-up',
- icon: [384, 512, [], "f0a6", "M135.652 0c23.625 0 43.826 20.65 43.826 44.8v99.851c17.048-16.34 49.766-18.346 70.944 6.299 22.829-14.288 53.017-2.147 62.315 16.45C361.878 158.426 384 189.346 384 240c0 2.746-.203 13.276-.195 16 .168 61.971-31.065 76.894-38.315 123.731C343.683 391.404 333.599 400 321.786 400H150.261l-.001-.002c-18.366-.011-35.889-10.607-43.845-28.464C93.421 342.648 57.377 276.122 29.092 264 10.897 256.203.008 242.616 0 224c-.014-34.222 35.098-57.752 66.908-44.119 8.359 3.583 16.67 8.312 24.918 14.153V44.8c0-23.45 20.543-44.8 43.826-44.8zM136 416h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24v-48c0-13.255 10.745-24 24-24zm168 28c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z"]
- };
- var faHandPointer = {
- prefix: 'fas',
- iconName: 'hand-pointer',
- icon: [448, 512, [], "f25a", "M448 240v96c0 3.084-.356 6.159-1.063 9.162l-32 136C410.686 499.23 394.562 512 376 512H168a40.004 40.004 0 0 1-32.35-16.473l-127.997-176c-12.993-17.866-9.043-42.883 8.822-55.876 17.867-12.994 42.884-9.043 55.877 8.823L104 315.992V40c0-22.091 17.908-40 40-40s40 17.909 40 40v200h8v-40c0-22.091 17.908-40 40-40s40 17.909 40 40v40h8v-24c0-22.091 17.908-40 40-40s40 17.909 40 40v24h8c0-22.091 17.908-40 40-40s40 17.909 40 40zm-256 80h-8v96h8v-96zm88 0h-8v96h8v-96zm88 0h-8v96h8v-96z"]
- };
- var faHandRock = {
- prefix: 'fas',
- iconName: 'hand-rock',
- icon: [512, 512, [], "f255", "M464.8 80c-26.9-.4-48.8 21.2-48.8 48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v32h-8V80.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v136l-8-7.1v-48.1c0-26.3-20.9-48.3-47.2-48.8C21.9 127.6 0 149.2 0 176v66.4c0 27.4 11.7 53.5 32.2 71.8l111.7 99.3c10.2 9.1 16.1 22.2 16.1 35.9v6.7c0 13.3 10.7 24 24 24h240c13.3 0 24-10.7 24-24v-2.9c0-12.8 2.6-25.5 7.5-37.3l49-116.3c5-11.8 7.5-24.5 7.5-37.3V128.8c0-26.3-20.9-48.4-47.2-48.8z"]
- };
- var faHandScissors = {
- prefix: 'fas',
- iconName: 'hand-scissors',
- icon: [512, 512, [], "f257", "M216 440c0-22.092 17.909-40 40-40v-8h-32c-22.091 0-40-17.908-40-40s17.909-40 40-40h32v-8H48c-26.51 0-48-21.49-48-48s21.49-48 48-48h208v-13.572l-177.551-69.74c-24.674-9.694-36.818-37.555-27.125-62.228 9.693-24.674 37.554-36.817 62.228-27.124l190.342 74.765 24.872-31.09c12.306-15.381 33.978-19.515 51.081-9.741l112 64A40.002 40.002 0 0 1 512 168v240c0 18.562-12.77 34.686-30.838 38.937l-136 32A39.982 39.982 0 0 1 336 480h-80c-22.091 0-40-17.908-40-40z"]
- };
- var faHandSparkles = {
- prefix: 'fas',
- iconName: 'hand-sparkles',
- icon: [640, 512, [], "e05d", "M106.66,170.64l.09,0,49.55-20.65a7.32,7.32,0,0,0,3.68-6h0a7.29,7.29,0,0,0-3.68-6l-49.57-20.67-.07,0L86,67.68a6.66,6.66,0,0,0-11.92,0l-20.7,49.63-.05,0L3.7,138A7.29,7.29,0,0,0,0,144H0a7.32,7.32,0,0,0,3.68,6L53.27,170.6l.07,0L74,220.26a6.65,6.65,0,0,0,11.92,0l20.69-49.62ZM471.38,467.41l-1-.42-1-.5a38.67,38.67,0,0,1,0-69.14l1-.49,1-.43,37.49-15.63,15.63-37.48.41-1,.47-.95c3.85-7.74,10.58-13.63,18.35-17.34,0-1.33.25-2.69.27-4V144a32,32,0,0,0-64,0v72a8,8,0,0,1-8,8H456a8,8,0,0,1-8-8V64a32,32,0,0,0-64,0V216a8,8,0,0,1-8,8H360a8,8,0,0,1-8-8V32a32,32,0,0,0-64,0V216a8,8,0,0,1-8,8H264a8,8,0,0,1-8-8V64a32,32,0,0,0-64,0v241l-23.59-32.49a40,40,0,0,0-64.71,47.09L229.3,492.21A48.07,48.07,0,0,0,268.09,512H465.7c19.24,0,35.65-11.73,43.24-28.79l-.07-.17ZM349.79,339.52,320,351.93l-12.42,29.78a4,4,0,0,1-7.15,0L288,351.93l-29.79-12.41a4,4,0,0,1,0-7.16L288,319.94l12.42-29.78a4,4,0,0,1,7.15,0L320,319.94l29.79,12.42a4,4,0,0,1,0,7.16ZM640,431.91a7.28,7.28,0,0,0-3.68-6l-49.57-20.67-.07,0L566,355.63a6.66,6.66,0,0,0-11.92,0l-20.7,49.63-.05,0L483.7,426a7.28,7.28,0,0,0-3.68,6h0a7.29,7.29,0,0,0,3.68,5.95l49.57,20.67.07,0L554,508.21a6.65,6.65,0,0,0,11.92,0l20.69-49.62h0l.09,0,49.55-20.66a7.29,7.29,0,0,0,3.68-5.95h0Z"]
- };
- var faHandSpock = {
- prefix: 'fas',
- iconName: 'hand-spock',
- icon: [512, 512, [], "f259", "M510.9005,145.27027,442.604,432.09391A103.99507,103.99507,0,0,1,341.43745,512H214.074a135.96968,135.96968,0,0,1-93.18489-36.95291L12.59072,373.12723a39.992,39.992,0,0,1,54.8122-58.24988l60.59342,57.02528v0a283.24849,283.24849,0,0,0-11.6703-80.46734L73.63726,147.36011a40.00575,40.00575,0,1,1,76.71833-22.7187l37.15458,125.39477a8.33113,8.33113,0,0,0,16.05656-4.4414L153.26183,49.95406A39.99638,39.99638,0,1,1,230.73015,30.0166l56.09491,218.15825a10.42047,10.42047,0,0,0,20.30018-.501L344.80766,63.96966a40.052,40.052,0,0,1,51.30245-30.0893c19.86073,6.2998,30.86262,27.67378,26.67564,48.08487l-33.83869,164.966a7.55172,7.55172,0,0,0,14.74406,3.2666l29.3973-123.45874a39.99414,39.99414,0,1,1,77.81208,18.53121Z"]
- };
- var faHands = {
- prefix: 'fas',
- iconName: 'hands',
- icon: [640, 512, [], "f4c2", "M204.8 230.4c-10.6-14.1-30.7-17-44.8-6.4-14.1 10.6-17 30.7-6.4 44.8l38.1 50.8c4.8 6.4 4.1 15.3-1.5 20.9l-12.8 12.8c-6.7 6.7-17.6 6.2-23.6-1.1L64 244.4V96c0-17.7-14.3-32-32-32S0 78.3 0 96v218.4c0 10.9 3.7 21.5 10.5 30l104.1 134.3c5 6.5 8.4 13.9 10.4 21.7 1.8 6.9 8.1 11.6 15.3 11.6H272c8.8 0 16-7.2 16-16V384c0-27.7-9-54.6-25.6-76.8l-57.6-76.8zM608 64c-17.7 0-32 14.3-32 32v148.4l-89.8 107.8c-6 7.2-17 7.7-23.6 1.1l-12.8-12.8c-5.6-5.6-6.3-14.5-1.5-20.9l38.1-50.8c10.6-14.1 7.7-34.2-6.4-44.8-14.1-10.6-34.2-7.7-44.8 6.4l-57.6 76.8C361 329.4 352 356.3 352 384v112c0 8.8 7.2 16 16 16h131.7c7.1 0 13.5-4.7 15.3-11.6 2-7.8 5.4-15.2 10.4-21.7l104.1-134.3c6.8-8.5 10.5-19.1 10.5-30V96c0-17.7-14.3-32-32-32z"]
- };
- var faHandsHelping = {
- prefix: 'fas',
- iconName: 'hands-helping',
- icon: [640, 512, [], "f4c4", "M488 192H336v56c0 39.7-32.3 72-72 72s-72-32.3-72-72V126.4l-64.9 39C107.8 176.9 96 197.8 96 220.2v47.3l-80 46.2C.7 322.5-4.6 342.1 4.3 357.4l80 138.6c8.8 15.3 28.4 20.5 43.7 11.7L231.4 448H368c35.3 0 64-28.7 64-64h16c17.7 0 32-14.3 32-32v-64h8c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24zm147.7-37.4L555.7 16C546.9.7 527.3-4.5 512 4.3L408.6 64H306.4c-12 0-23.7 3.4-33.9 9.7L239 94.6c-9.4 5.8-15 16.1-15 27.1V248c0 22.1 17.9 40 40 40s40-17.9 40-40v-88h184c30.9 0 56 25.1 56 56v28.5l80-46.2c15.3-8.9 20.5-28.4 11.7-43.7z"]
- };
- var faHandsWash = {
- prefix: 'fas',
- iconName: 'hands-wash',
- icon: [576, 512, [], "e05e", "M496,224a48,48,0,1,0-48-48A48,48,0,0,0,496,224ZM311.47,178.45A56.77,56.77,0,0,1,328,176a56,56,0,0,1,19,3.49l15.35-48.61A24,24,0,0,0,342,99.74c-11.53-1.35-22.21,6.44-25.71,17.51l-20.9,66.17ZM93.65,386.33c.8-.19,1.54-.54,2.35-.71V359.93a156,156,0,0,1,107.06-148l73.7-22.76L310.92,81.05a24,24,0,0,0-20.33-31.11c-11.53-1.34-22.22,6.45-25.72,17.52L231.42,173.88a8,8,0,0,1-15.26-4.83L259.53,31.26A24,24,0,0,0,239.2.15C227.67-1.19,217,6.6,213.49,17.66L165.56,169.37a8,8,0,1,1-15.26-4.82l38.56-122a24,24,0,0,0-20.33-31.11C157,10,146.32,17.83,142.82,28.9l-60,189.85L80.76,168.7A24,24,0,0,0,56.9,144.55c-13.23-.05-24.72,10.54-24.9,23.86V281.14A123.69,123.69,0,0,0,93.65,386.33ZM519.1,336H360a8,8,0,0,1,0-16H488a24,24,0,0,0,23.54-28.76C509.35,279.84,498.71,272,487.1,272H288l47.09-17.06a24,24,0,0,0-14.18-45.88L213.19,242.31A123.88,123.88,0,0,0,128,360v25.65a79.78,79.78,0,0,1,58,108.63A118.9,118.9,0,0,0,248,512H456a24,24,0,0,0,23.54-28.76C477.35,471.84,466.71,464,455.1,464H360a8,8,0,0,1,0-16H488a24,24,0,0,0,23.54-28.76C509.35,407.84,498.71,400,487.1,400H360a8,8,0,0,1,0-16H520a24,24,0,0,0,23.54-28.76C541.35,343.84,530.71,336,519.1,336ZM416,64a32,32,0,1,0-32-32A32,32,0,0,0,416,64ZM112,416a48,48,0,1,0,48,48A48,48,0,0,0,112,416Z"]
- };
- var faHandshake = {
- prefix: 'fas',
- iconName: 'handshake',
- icon: [640, 512, [], "f2b5", "M434.7 64h-85.9c-8 0-15.7 3-21.6 8.4l-98.3 90c-.1.1-.2.3-.3.4-16.6 15.6-16.3 40.5-2.1 56 12.7 13.9 39.4 17.6 56.1 2.7.1-.1.3-.1.4-.2l79.9-73.2c6.5-5.9 16.7-5.5 22.6 1 6 6.5 5.5 16.6-1 22.6l-26.1 23.9L504 313.8c2.9 2.4 5.5 5 7.9 7.7V128l-54.6-54.6c-5.9-6-14.1-9.4-22.6-9.4zM544 128.2v223.9c0 17.7 14.3 32 32 32h64V128.2h-96zm48 223.9c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM0 384h64c17.7 0 32-14.3 32-32V128.2H0V384zm48-63.9c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16c0-8.9 7.2-16 16-16zm435.9 18.6L334.6 217.5l-30 27.5c-29.7 27.1-75.2 24.5-101.7-4.4-26.9-29.4-24.8-74.9 4.4-101.7L289.1 64h-83.8c-8.5 0-16.6 3.4-22.6 9.4L128 128v223.9h18.3l90.5 81.9c27.4 22.3 67.7 18.1 90-9.3l.2-.2 17.9 15.5c15.9 13 39.4 10.5 52.3-5.4l31.4-38.6 5.4 4.4c13.7 11.1 33.9 9.1 45-4.7l9.5-11.7c11.2-13.8 9.1-33.9-4.6-45.1z"]
- };
- var faHandshakeAltSlash = {
- prefix: 'fas',
- iconName: 'handshake-alt-slash',
- icon: [640, 512, [], "e05f", "M358.59,195.6,504.2,313.8a63.4,63.4,0,0,1,22.21,37.91H624a16.05,16.05,0,0,0,16-16V143.91A16,16,0,0,0,624,128H512L457.41,73.41A32,32,0,0,0,434.8,64H348.91a32,32,0,0,0-21.61,8.41l-88.12,80.68-25.69-19.85L289.09,64H205.3a32,32,0,0,0-22.6,9.41l-20.34,20.3L45.47,3.38A16,16,0,0,0,23,6.19L3.38,31.46A16,16,0,0,0,6.19,53.91L594.54,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45L303.4,202.72l32.69-29.92,27-24.7a16,16,0,0,1,21.61,23.61ZM16,128A16.05,16.05,0,0,0,0,144V335.91a16,16,0,0,0,16,16H146.3l90.5,81.89a64,64,0,0,0,90-9.3l.2-.2,17.91,15.5a37.16,37.16,0,0,0,52.29-5.39l8.8-10.82L23.56,128Z"]
- };
- var faHandshakeSlash = {
- prefix: 'fas',
- iconName: 'handshake-slash',
- icon: [640, 512, [], "e060", "M0,128.21V384H64a32,32,0,0,0,32-32V184L23.83,128.21ZM48,320.1a16,16,0,1,1-16,16A16,16,0,0,1,48,320.1Zm80,31.81h18.3l90.5,81.89a64,64,0,0,0,90-9.3l.2-.2,17.91,15.5a37.16,37.16,0,0,0,52.29-5.39l8.8-10.82L128,208.72Zm416-223.7V352.1a32,32,0,0,0,32,32h64V128.21ZM592,352.1a16,16,0,1,1,16-16A16,16,0,0,1,592,352.1ZM303.33,202.67l59.58-54.57a16,16,0,0,1,21.59,23.61L358.41,195.6,504,313.8a73.08,73.08,0,0,1,7.91,7.7V128L457.3,73.41A31.76,31.76,0,0,0,434.7,64H348.8a31.93,31.93,0,0,0-21.6,8.41l-88.07,80.64-25.64-19.81L289.09,64H205.3a32,32,0,0,0-22.6,9.41L162.36,93.72,45.47,3.38A16,16,0,0,0,23,6.19L3.38,31.46A16,16,0,0,0,6.19,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.65-25.27a16,16,0,0,0-2.82-22.45Z"]
- };
- var faHanukiah = {
- prefix: 'fas',
- iconName: 'hanukiah',
- icon: [640, 512, [], "f6e6", "M232 160c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm-64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm224 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm88 8c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v120h32V168zm-440-8c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm520 0h-32c-8.84 0-16 7.16-16 16v112c0 17.67-14.33 32-32 32H352V128c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v192H96c-17.67 0-32-14.33-32-32V176c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v112c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V176c0-8.84-7.16-16-16-16zm-16-32c13.25 0 24-11.94 24-26.67S608 48 608 48s-24 38.61-24 53.33S594.75 128 608 128zm-576 0c13.25 0 24-11.94 24-26.67S32 48 32 48 8 86.61 8 101.33 18.75 128 32 128zm288-48c13.25 0 24-11.94 24-26.67S320 0 320 0s-24 38.61-24 53.33S306.75 80 320 80zm-208 48c13.25 0 24-11.94 24-26.67S112 48 112 48s-24 38.61-24 53.33S98.75 128 112 128zm64 0c13.25 0 24-11.94 24-26.67S176 48 176 48s-24 38.61-24 53.33S162.75 128 176 128zm64 0c13.25 0 24-11.94 24-26.67S240 48 240 48s-24 38.61-24 53.33S226.75 128 240 128zm160 0c13.25 0 24-11.94 24-26.67S400 48 400 48s-24 38.61-24 53.33S386.75 128 400 128zm64 0c13.25 0 24-11.94 24-26.67S464 48 464 48s-24 38.61-24 53.33S450.75 128 464 128zm64 0c13.25 0 24-11.94 24-26.67S528 48 528 48s-24 38.61-24 53.33S514.75 128 528 128z"]
- };
- var faHardHat = {
- prefix: 'fas',
- iconName: 'hard-hat',
- icon: [512, 512, [], "f807", "M480 288c0-80.25-49.28-148.92-119.19-177.62L320 192V80a16 16 0 0 0-16-16h-96a16 16 0 0 0-16 16v112l-40.81-81.62C81.28 139.08 32 207.75 32 288v64h448zm16 96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"]
- };
- var faHashtag = {
- prefix: 'fas',
- iconName: 'hashtag',
- icon: [448, 512, [], "f292", "M440.667 182.109l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l14.623-81.891C377.123 38.754 371.468 32 363.997 32h-40.632a12 12 0 0 0-11.813 9.891L296.175 128H197.54l14.623-81.891C213.477 38.754 207.822 32 200.35 32h-40.632a12 12 0 0 0-11.813 9.891L132.528 128H53.432a12 12 0 0 0-11.813 9.891l-7.143 40C33.163 185.246 38.818 192 46.289 192h74.81L98.242 320H19.146a12 12 0 0 0-11.813 9.891l-7.143 40C-1.123 377.246 4.532 384 12.003 384h74.81L72.19 465.891C70.877 473.246 76.532 480 84.003 480h40.632a12 12 0 0 0 11.813-9.891L151.826 384h98.634l-14.623 81.891C234.523 473.246 240.178 480 247.65 480h40.632a12 12 0 0 0 11.813-9.891L315.472 384h79.096a12 12 0 0 0 11.813-9.891l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l22.857-128h79.096a12 12 0 0 0 11.813-9.891zM261.889 320h-98.634l22.857-128h98.634l-22.857 128z"]
- };
- var faHatCowboy = {
- prefix: 'fas',
- iconName: 'hat-cowboy',
- icon: [640, 512, [], "f8c0", "M490 296.9C480.51 239.51 450.51 64 392.3 64c-14 0-26.49 5.93-37 14a58.21 58.21 0 0 1-70.58 0c-10.51-8-23-14-37-14-58.2 0-88.2 175.47-97.71 232.88C188.81 309.47 243.73 320 320 320s131.23-10.51 170-23.1zm142.9-37.18a16 16 0 0 0-19.75 1.5c-1 .9-101.27 90.78-293.16 90.78-190.82 0-292.22-89.94-293.24-90.84A16 16 0 0 0 1 278.53C1.73 280.55 78.32 480 320 480s318.27-199.45 319-201.47a16 16 0 0 0-6.09-18.81z"]
- };
- var faHatCowboySide = {
- prefix: 'fas',
- iconName: 'hat-cowboy-side',
- icon: [640, 512, [], "f8c1", "M260.8 291.06c-28.63-22.94-62-35.06-96.4-35.06C87 256 21.47 318.72 1.43 412.06c-3.55 16.6-.43 33.83 8.57 47.3C18.75 472.47 31.83 480 45.88 480H592c-103.21 0-155-37.07-233.19-104.46zm234.65-18.29L468.4 116.2A64 64 0 0 0 392 64.41L200.85 105a64 64 0 0 0-50.35 55.79L143.61 226c6.9-.83 13.7-2 20.79-2 41.79 0 82 14.55 117.29 42.82l98 84.48C450.76 412.54 494.9 448 592 448a48 48 0 0 0 48-48c0-25.39-29.6-119.33-144.55-127.23z"]
- };
- var faHatWizard = {
- prefix: 'fas',
- iconName: 'hat-wizard',
- icon: [512, 512, [], "f6e8", "M496 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-304-64l-64-32 64-32 32-64 32 64 64 32-64 32-16 32h208l-86.41-201.63a63.955 63.955 0 0 1-1.89-45.45L416 0 228.42 107.19a127.989 127.989 0 0 0-53.46 59.15L64 416h144l-16-32zm64-224l16-32 16 32 32 16-32 16-16 32-16-32-32-16 32-16z"]
- };
- var faHdd = {
- prefix: 'fas',
- iconName: 'hdd',
- icon: [576, 512, [], "f0a0", "M576 304v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48zm-48-80a79.557 79.557 0 0 1 30.777 6.165L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L17.223 230.165A79.557 79.557 0 0 1 48 224h480zm-48 96c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm-96 0c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z"]
- };
- var faHeadSideCough = {
- prefix: 'fas',
- iconName: 'head-side-cough',
- icon: [640, 512, [], "e061", "M616,304a24,24,0,1,0-24-24A24,24,0,0,0,616,304ZM552,416a24,24,0,1,0,24,24A24,24,0,0,0,552,416Zm-64-56a24,24,0,1,0,24,24A24,24,0,0,0,488,360ZM616,464a24,24,0,1,0,24,24A24,24,0,0,0,616,464Zm0-104a24,24,0,1,0,24,24A24,24,0,0,0,616,360Zm-64-40a24,24,0,1,0,24,24A24,24,0,0,0,552,320Zm-74.78-45c-21-47.12-48.5-151.75-73.12-186.75A208.13,208.13,0,0,0,234.1,0H192C86,0,0,86,0,192c0,56.75,24.75,107.62,64,142.88V512H288V480h64a64,64,0,0,0,64-64H320a32,32,0,0,1,0-64h96V320h32A32,32,0,0,0,477.22,275ZM288,224a32,32,0,1,1,32-32A32.07,32.07,0,0,1,288,224Z"]
- };
- var faHeadSideCoughSlash = {
- prefix: 'fas',
- iconName: 'head-side-cough-slash',
- icon: [640, 512, [], "e062", "M454.11,319.21c19.56-3.81,31.62-25,23.11-44.21-21-47.12-48.5-151.75-73.12-186.75A208.13,208.13,0,0,0,234.1,0H192A190.64,190.64,0,0,0,84.18,33.3L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45ZM313.39,210.45,263.61,172c5.88-7.14,14.43-12,24.36-12a32.06,32.06,0,0,1,32,32C320,199,317.24,205.17,313.39,210.45ZM616,304a24,24,0,1,0-24-24A24,24,0,0,0,616,304Zm-64,64a24,24,0,1,0-24-24A24,24,0,0,0,552,368ZM288,384a32,32,0,0,1,32-32h19.54L20.73,105.59A190.86,190.86,0,0,0,0,192c0,56.75,24.75,107.62,64,142.88V512H288V480h64a64,64,0,0,0,64-64H320A32,32,0,0,1,288,384Zm328-24a24,24,0,1,0,24,24A24,24,0,0,0,616,360Z"]
- };
- var faHeadSideMask = {
- prefix: 'fas',
- iconName: 'head-side-mask',
- icon: [512, 512, [], "e063", "M.15,184.42C-2.17,244.21,23,298.06,64,334.88V512H224V316.51L3.67,156.25A182.28,182.28,0,0,0,.15,184.42ZM509.22,275c-21-47.12-48.5-151.75-73.12-186.75A208.11,208.11,0,0,0,266.11,0H200C117,0,42.48,50.57,13.25,123.65L239.21,288H511.76A31.35,31.35,0,0,0,509.22,275ZM320,224a32,32,0,1,1,32-32A32.07,32.07,0,0,1,320,224Zm16,144H496l16-48H256V512H401.88a64,64,0,0,0,60.71-43.76L464,464H336a16,16,0,0,1,0-32H474.67l10.67-32H336a16,16,0,0,1,0-32Z"]
- };
- var faHeadSideVirus = {
- prefix: 'fas',
- iconName: 'head-side-virus',
- icon: [512, 512, [], "e064", "M272,240a16,16,0,1,0,16,16A16,16,0,0,0,272,240Zm-64-64a16,16,0,1,0,16,16A16,16,0,0,0,208,176Zm301.2,99c-20.93-47.12-48.43-151.73-73.07-186.75A207.9,207.9,0,0,0,266.09,0H192C86,0,0,86,0,192A191.23,191.23,0,0,0,64,334.81V512H320V448h64a64,64,0,0,0,64-64V320H480A32,32,0,0,0,509.2,275ZM368,240H355.88c-28.51,0-42.79,34.47-22.63,54.63l8.58,8.57a16,16,0,1,1-22.63,22.63l-8.57-8.58C290.47,297.09,256,311.37,256,339.88V352a16,16,0,0,1-32,0V339.88c0-28.51-34.47-42.79-54.63-22.63l-8.57,8.58a16,16,0,0,1-22.63-22.63l8.58-8.57c20.16-20.16,5.88-54.63-22.63-54.63H112a16,16,0,0,1,0-32h12.12c28.51,0,42.79-34.47,22.63-54.63l-8.58-8.57a16,16,0,0,1,22.63-22.63l8.57,8.58c20.16,20.16,54.63,5.88,54.63-22.63V96a16,16,0,0,1,32,0v12.12c0,28.51,34.47,42.79,54.63,22.63l8.57-8.58a16,16,0,0,1,22.63,22.63l-8.58,8.57C313.09,173.53,327.37,208,355.88,208H368a16,16,0,0,1,0,32Z"]
- };
- var faHeading = {
- prefix: 'fas',
- iconName: 'heading',
- icon: [512, 512, [], "f1dc", "M448 96v320h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H320a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V288H160v128h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V96H32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16h-32v128h192V96h-32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16z"]
- };
- var faHeadphones = {
- prefix: 'fas',
- iconName: 'headphones',
- icon: [512, 512, [], "f025", "M256 32C114.52 32 0 146.496 0 288v48a32 32 0 0 0 17.689 28.622l14.383 7.191C34.083 431.903 83.421 480 144 480h24c13.255 0 24-10.745 24-24V280c0-13.255-10.745-24-24-24h-24c-31.342 0-59.671 12.879-80 33.627V288c0-105.869 86.131-192 192-192s192 86.131 192 192v1.627C427.671 268.879 399.342 256 368 256h-24c-13.255 0-24 10.745-24 24v176c0 13.255 10.745 24 24 24h24c60.579 0 109.917-48.098 111.928-108.187l14.382-7.191A32 32 0 0 0 512 336v-48c0-141.479-114.496-256-256-256z"]
- };
- var faHeadphonesAlt = {
- prefix: 'fas',
- iconName: 'headphones-alt',
- icon: [512, 512, [], "f58f", "M160 288h-16c-35.35 0-64 28.7-64 64.12v63.76c0 35.41 28.65 64.12 64 64.12h16c17.67 0 32-14.36 32-32.06V320.06c0-17.71-14.33-32.06-32-32.06zm208 0h-16c-17.67 0-32 14.35-32 32.06v127.88c0 17.7 14.33 32.06 32 32.06h16c35.35 0 64-28.71 64-64.12v-63.76c0-35.41-28.65-64.12-64-64.12zM256 32C112.91 32 4.57 151.13 0 288v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288c0-114.67 93.33-207.8 208-207.82 114.67.02 208 93.15 208 207.82v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288C507.43 151.13 399.09 32 256 32z"]
- };
- var faHeadset = {
- prefix: 'fas',
- iconName: 'headset',
- icon: [512, 512, [], "f590", "M192 208c0-17.67-14.33-32-32-32h-16c-35.35 0-64 28.65-64 64v48c0 35.35 28.65 64 64 64h16c17.67 0 32-14.33 32-32V208zm176 144c35.35 0 64-28.65 64-64v-48c0-35.35-28.65-64-64-64h-16c-17.67 0-32 14.33-32 32v112c0 17.67 14.33 32 32 32h16zM256 0C113.18 0 4.58 118.83 0 256v16c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-16c0-114.69 93.31-208 208-208s208 93.31 208 208h-.12c.08 2.43.12 165.72.12 165.72 0 23.35-18.93 42.28-42.28 42.28H320c0-26.51-21.49-48-48-48h-32c-26.51 0-48 21.49-48 48s21.49 48 48 48h181.72c49.86 0 90.28-40.42 90.28-90.28V256C507.42 118.83 398.82 0 256 0z"]
- };
- var faHeart = {
- prefix: 'fas',
- iconName: 'heart',
- icon: [512, 512, [], "f004", "M462.3 62.6C407.5 15.9 326 24.3 275.7 76.2L256 96.5l-19.7-20.3C186.1 24.3 104.5 15.9 49.7 62.6c-62.8 53.6-66.1 149.8-9.9 207.9l193.5 199.8c12.5 12.9 32.8 12.9 45.3 0l193.5-199.8c56.3-58.1 53-154.3-9.8-207.9z"]
- };
- var faHeartBroken = {
- prefix: 'fas',
- iconName: 'heart-broken',
- icon: [512, 512, [], "f7a9", "M473.7 73.8l-2.4-2.5c-46-47-118-51.7-169.6-14.8L336 159.9l-96 64 48 128-144-144 96-64-28.6-86.5C159.7 19.6 87 24 40.7 71.4l-2.4 2.4C-10.4 123.6-12.5 202.9 31 256l212.1 218.6c7.1 7.3 18.6 7.3 25.7 0L481 255.9c43.5-53 41.4-132.3-7.3-182.1z"]
- };
- var faHeartbeat = {
- prefix: 'fas',
- iconName: 'heartbeat',
- icon: [512, 512, [], "f21e", "M320.2 243.8l-49.7 99.4c-6 12.1-23.4 11.7-28.9-.6l-56.9-126.3-30 71.7H60.6l182.5 186.5c7.1 7.3 18.6 7.3 25.7 0L451.4 288H342.3l-22.1-44.2zM473.7 73.9l-2.4-2.5c-51.5-52.6-135.8-52.6-187.4 0L256 100l-27.9-28.5c-51.5-52.7-135.9-52.7-187.4 0l-2.4 2.4C-10.4 123.7-12.5 203 31 256h102.4l35.9-86.2c5.4-12.9 23.6-13.2 29.4-.4l58.2 129.3 49-97.9c5.9-11.8 22.7-11.8 28.6 0l27.6 55.2H481c43.5-53 41.4-132.3-7.3-182.1z"]
- };
- var faHelicopter = {
- prefix: 'fas',
- iconName: 'helicopter',
- icon: [640, 512, [], "f533", "M304 384h272c17.67 0 32-14.33 32-32 0-123.71-100.29-224-224-224V64h176c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H144c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h176v64H112L68.8 70.4C65.78 66.37 61.03 64 56 64H16.01C5.6 64-2.04 73.78.49 83.88L32 192l160 64 86.4 115.2A31.992 31.992 0 0 0 304 384zm112-188.49C478.55 208.3 528.03 257.44 540.79 320H416V195.51zm219.37 263.3l-22.15-22.2c-6.25-6.26-16.24-6.1-22.64.01-7.09 6.77-13.84 11.25-24.64 11.25H240c-8.84 0-16 7.18-16 16.03v32.06c0 8.85 7.16 16.03 16 16.03h325.94c14.88 0 35.3-.47 68.45-29.52 7.02-6.14 7.57-17.05.98-23.66z"]
- };
- var faHighlighter = {
- prefix: 'fas',
- iconName: 'highlighter',
- icon: [544, 512, [], "f591", "M0 479.98L99.92 512l35.45-35.45-67.04-67.04L0 479.98zm124.61-240.01a36.592 36.592 0 0 0-10.79 38.1l13.05 42.83-50.93 50.94 96.23 96.23 50.86-50.86 42.74 13.08c13.73 4.2 28.65-.01 38.15-10.78l35.55-41.64-173.34-173.34-41.52 35.44zm403.31-160.7l-63.2-63.2c-20.49-20.49-53.38-21.52-75.12-2.35L190.55 183.68l169.77 169.78L530.27 154.4c19.18-21.74 18.15-54.63-2.35-75.13z"]
- };
- var faHiking = {
- prefix: 'fas',
- iconName: 'hiking',
- icon: [384, 512, [], "f6ec", "M80.95 472.23c-4.28 17.16 6.14 34.53 23.28 38.81 2.61.66 5.22.95 7.8.95 14.33 0 27.37-9.7 31.02-24.23l25.24-100.97-52.78-52.78-34.56 138.22zm14.89-196.12L137 117c2.19-8.42-3.14-16.95-11.92-19.06-43.88-10.52-88.35 15.07-99.32 57.17L.49 253.24c-2.19 8.42 3.14 16.95 11.92 19.06l63.56 15.25c8.79 2.1 17.68-3.02 19.87-11.44zM368 160h-16c-8.84 0-16 7.16-16 16v16h-34.75l-46.78-46.78C243.38 134.11 228.61 128 212.91 128c-27.02 0-50.47 18.3-57.03 44.52l-26.92 107.72a32.012 32.012 0 0 0 8.42 30.39L224 397.25V480c0 17.67 14.33 32 32 32s32-14.33 32-32v-82.75c0-17.09-6.66-33.16-18.75-45.25l-46.82-46.82c.15-.5.49-.89.62-1.41l19.89-79.57 22.43 22.43c6 6 14.14 9.38 22.62 9.38h48v240c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V176c.01-8.84-7.15-16-15.99-16zM240 96c26.51 0 48-21.49 48-48S266.51 0 240 0s-48 21.49-48 48 21.49 48 48 48z"]
- };
- var faHippo = {
- prefix: 'fas',
- iconName: 'hippo',
- icon: [640, 512, [], "f6ed", "M581.12 96.2c-27.67-.15-52.5 17.58-76.6 26.62C489.98 88.27 455.83 64 416 64c-11.28 0-21.95 2.3-32 5.88V56c0-13.26-10.75-24-24-24h-16c-13.25 0-24 10.74-24 24v48.98C286.01 79.58 241.24 64 192 64 85.96 64 0 135.64 0 224v240c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16v-70.79C128.35 407.57 166.72 416 208 416s79.65-8.43 112-22.79V464c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V288h128v32c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-32c17.67 0 32-14.33 32-32v-92.02c0-34.09-24.79-67.59-58.88-67.78zM448 176c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z"]
- };
- var faHistory = {
- prefix: 'fas',
- iconName: 'history',
- icon: [512, 512, [], "f1da", "M504 255.531c.253 136.64-111.18 248.372-247.82 248.468-59.015.042-113.223-20.53-155.822-54.911-11.077-8.94-11.905-25.541-1.839-35.607l11.267-11.267c8.609-8.609 22.353-9.551 31.891-1.984C173.062 425.135 212.781 440 256 440c101.705 0 184-82.311 184-184 0-101.705-82.311-184-184-184-48.814 0-93.149 18.969-126.068 49.932l50.754 50.754c10.08 10.08 2.941 27.314-11.313 27.314H24c-8.837 0-16-7.163-16-16V38.627c0-14.254 17.234-21.393 27.314-11.314l49.372 49.372C129.209 34.136 189.552 8 256 8c136.81 0 247.747 110.78 248 247.531zm-180.912 78.784l9.823-12.63c8.138-10.463 6.253-25.542-4.21-33.679L288 256.349V152c0-13.255-10.745-24-24-24h-16c-13.255 0-24 10.745-24 24v135.651l65.409 50.874c10.463 8.137 25.541 6.253 33.679-4.21z"]
- };
- var faHockeyPuck = {
- prefix: 'fas',
- iconName: 'hockey-puck',
- icon: [512, 512, [], "f453", "M0 160c0-53 114.6-96 256-96s256 43 256 96-114.6 96-256 96S0 213 0 160zm0 82.2V352c0 53 114.6 96 256 96s256-43 256-96V242.2c-113.4 82.3-398.5 82.4-512 0z"]
- };
- var faHollyBerry = {
- prefix: 'fas',
- iconName: 'holly-berry',
- icon: [448, 512, [], "f7aa", "M144 192c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm112-48c0 26.5 21.5 48 48 48s48-21.5 48-48-21.5-48-48-48-48 21.5-48 48zm-32-48c26.5 0 48-21.5 48-48S250.5 0 224 0s-48 21.5-48 48 21.5 48 48 48zm-16.2 139.1c.1-12.4-13.1-20.1-23.8-13.7-34.3 20.3-71.4 32.7-108.7 36.2-9.7.9-15.6 11.3-11.6 20.2 6.2 13.9 11.1 28.6 14.7 43.8 3.6 15.2-5.3 30.6-20.2 35.1-14.9 4.5-30.1 7.6-45.3 9.1-9.7 1-15.7 11.3-11.7 20.2 15 32.8 22.9 69.5 23 107.7.1 14.4 15.2 23.1 27.6 16 33.2-19 68.9-30.5 104.8-33.9 9.7-.9 15.6-11.3 11.6-20.2-6.2-13.9-11.1-28.6-14.7-43.8-3.6-15.2 5.3-30.6 20.2-35.1 14.9-4.5 30.1-7.6 45.3-9.1 9.7-1 15.7-11.3 11.7-20.2-15.5-34.2-23.3-72.5-22.9-112.3zM435 365.6c-15.2-1.6-30.3-4.7-45.3-9.1-14.9-4.5-23.8-19.9-20.2-35.1 3.6-15.2 8.5-29.8 14.7-43.8 4-8.9-1.9-19.3-11.6-20.2-37.3-3.5-74.4-15.9-108.7-36.2-10.7-6.3-23.9 1.4-23.8 13.7 0 1.6-.2 3.2-.2 4.9.2 33.3 7 65.7 19.9 94 5.7 12.4 5.2 26.6-.6 38.9 4.9 1.2 9.9 2.2 14.8 3.7 14.9 4.5 23.8 19.9 20.2 35.1-3.6 15.2-8.5 29.8-14.7 43.8-4 8.9 1.9 19.3 11.6 20.2 35.9 3.4 71.6 14.9 104.8 33.9 12.5 7.1 27.6-1.6 27.6-16 .2-38.2 8-75 23-107.7 4.3-8.7-1.8-19.1-11.5-20.1z"]
- };
- var faHome = {
- prefix: 'fas',
- iconName: 'home',
- icon: [576, 512, [], "f015", "M280.37 148.26L96 300.11V464a16 16 0 0 0 16 16l112.06-.29a16 16 0 0 0 15.92-16V368a16 16 0 0 1 16-16h64a16 16 0 0 1 16 16v95.64a16 16 0 0 0 16 16.05L464 480a16 16 0 0 0 16-16V300L295.67 148.26a12.19 12.19 0 0 0-15.3 0zM571.6 251.47L488 182.56V44.05a12 12 0 0 0-12-12h-56a12 12 0 0 0-12 12v72.61L318.47 43a48 48 0 0 0-61 0L4.34 251.47a12 12 0 0 0-1.6 16.9l25.5 31A12 12 0 0 0 45.15 301l235.22-193.74a12.19 12.19 0 0 1 15.3 0L530.9 301a12 12 0 0 0 16.9-1.6l25.5-31a12 12 0 0 0-1.7-16.93z"]
- };
- var faHorse = {
- prefix: 'fas',
- iconName: 'horse',
- icon: [576, 512, [], "f6f0", "M575.92 76.6c-.01-8.13-3.02-15.87-8.58-21.8-3.78-4.03-8.58-9.12-13.69-14.5 11.06-6.84 19.5-17.49 22.18-30.66C576.85 4.68 572.96 0 567.9 0H447.92c-70.69 0-128 57.31-128 128H160c-28.84 0-54.4 12.98-72 33.11V160c-48.53 0-88 39.47-88 88v56c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-56c0-13.22 6.87-24.39 16.78-31.68-.21 2.58-.78 5.05-.78 7.68 0 27.64 11.84 52.36 30.54 69.88l-25.72 68.6a63.945 63.945 0 0 0-2.16 37.99l24.85 99.41A15.982 15.982 0 0 0 107.02 512h65.96c10.41 0 18.05-9.78 15.52-19.88l-26.31-105.26 23.84-63.59L320 345.6V496c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V318.22c19.74-20.19 32-47.75 32-78.22 0-.22-.07-.42-.08-.64V136.89l16 7.11 18.9 37.7c7.45 14.87 25.05 21.55 40.49 15.37l32.55-13.02a31.997 31.997 0 0 0 20.12-29.74l-.06-77.71zm-64 19.4c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z"]
- };
- var faHorseHead = {
- prefix: 'fas',
- iconName: 'horse-head',
- icon: [512, 512, [], "f7ab", "M509.8 332.5l-69.9-164.3c-14.9-41.2-50.4-71-93-79.2 18-10.6 46.3-35.9 34.2-82.3-1.3-5-7.1-7.9-12-6.1L166.9 76.3C35.9 123.4 0 238.9 0 398.8V480c0 17.7 14.3 32 32 32h236.2c23.8 0 39.3-25 28.6-46.3L256 384v-.7c-45.6-3.5-84.6-30.7-104.3-69.6-1.6-3.1-.9-6.9 1.6-9.3l12.1-12.1c3.9-3.9 10.6-2.7 12.9 2.4 14.8 33.7 48.2 57.4 87.4 57.4 17.2 0 33-5.1 46.8-13.2l46 63.9c6 8.4 15.7 13.3 26 13.3h50.3c8.5 0 16.6-3.4 22.6-9.4l45.3-39.8c8.9-9.1 11.7-22.6 7.1-34.4zM328 224c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24z"]
- };
- var faHospital = {
- prefix: 'fas',
- iconName: 'hospital',
- icon: [448, 512, [], "f0f8", "M448 492v20H0v-20c0-6.627 5.373-12 12-12h20V120c0-13.255 10.745-24 24-24h88V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v72h88c13.255 0 24 10.745 24 24v360h20c6.627 0 12 5.373 12 12zM308 192h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-168 64h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm104 128h-40c-6.627 0-12 5.373-12 12v84h64v-84c0-6.627-5.373-12-12-12zm64-96h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-116 12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zM182 96h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6z"]
- };
- var faHospitalAlt = {
- prefix: 'fas',
- iconName: 'hospital-alt',
- icon: [576, 512, [], "f47d", "M544 96H416V32c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32v64H32c-17.7 0-32 14.3-32 32v368c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16V128c0-17.7-14.3-32-32-32zM160 436c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm160 128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm16-170c0 3.3-2.7 6-6 6h-26v26c0 3.3-2.7 6-6 6h-20c-3.3 0-6-2.7-6-6v-26h-26c-3.3 0-6-2.7-6-6v-20c0-3.3 2.7-6 6-6h26V86c0-3.3 2.7-6 6-6h20c3.3 0 6 2.7 6 6v26h26c3.3 0 6 2.7 6 6v20zm144 298c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z"]
- };
- var faHospitalSymbol = {
- prefix: 'fas',
- iconName: 'hospital-symbol',
- icon: [512, 512, [], "f47e", "M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm112 376c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-88h-96v88c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V136c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v88h96v-88c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v240z"]
- };
- var faHospitalUser = {
- prefix: 'fas',
- iconName: 'hospital-user',
- icon: [640, 512, [], "f80d", "M480 320a96 96 0 1 0-96-96 96 96 0 0 0 96 96zm48 32a22.88 22.88 0 0 0-7.06 1.09 124.76 124.76 0 0 1-81.89 0A22.82 22.82 0 0 0 432 352a112 112 0 0 0-112 112.62c.14 26.26 21.73 47.38 48 47.38h224c26.27 0 47.86-21.12 48-47.38A112 112 0 0 0 528 352zm-198.09 10.45A145.19 145.19 0 0 1 352 344.62V128a32 32 0 0 0-32-32h-32V32a32 32 0 0 0-32-32H96a32 32 0 0 0-32 32v64H32a32 32 0 0 0-32 32v368a16 16 0 0 0 16 16h288.31A78.62 78.62 0 0 1 288 464.79a143.06 143.06 0 0 1 41.91-102.34zM144 404a12 12 0 0 1-12 12H92a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm0-128a12 12 0 0 1-12 12H92a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm48-122a6 6 0 0 1-6 6h-20a6 6 0 0 1-6-6v-26h-26a6 6 0 0 1-6-6v-20a6 6 0 0 1 6-6h26V70a6 6 0 0 1 6-6h20a6 6 0 0 1 6 6v26h26a6 6 0 0 1 6 6v20a6 6 0 0 1-6 6h-26zm80 250a12 12 0 0 1-12 12h-40a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm0-128a12 12 0 0 1-12 12h-40a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12z"]
- };
- var faHotTub = {
- prefix: 'fas',
- iconName: 'hot-tub',
- icon: [512, 512, [], "f593", "M414.21 177.65c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C378.96 6.14 372.22 0 364.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zm-108 0c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C270.96 6.14 264.22 0 256.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zM480 256H256l-110.93-83.2a63.99 63.99 0 0 0-38.4-12.8H64c-35.35 0-64 28.65-64 64v224c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V288c0-17.67-14.33-32-32-32zM128 440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zM64 128c35.35 0 64-28.65 64-64S99.35 0 64 0 0 28.65 0 64s28.65 64 64 64z"]
- };
- var faHotdog = {
- prefix: 'fas',
- iconName: 'hotdog',
- icon: [512, 512, [], "f80f", "M488.56 23.44a80 80 0 0 0-113.12 0l-352 352a80 80 0 1 0 113.12 113.12l352-352a80 80 0 0 0 0-113.12zm-49.93 95.19c-19.6 19.59-37.52 22.67-51.93 25.14C373.76 146 364.4 147.6 352 160s-14 21.76-16.23 34.71c-2.48 14.4-5.55 32.33-25.15 51.92s-37.52 22.67-51.92 25.15C245.75 274 236.4 275.6 224 288s-14 21.75-16.23 34.7c-2.47 14.4-5.54 32.33-25.14 51.92s-37.53 22.68-51.93 25.15C117.76 402 108.4 403.6 96 416a16 16 0 0 1-22.63-22.63c19.6-19.59 37.52-22.67 51.92-25.14 13-2.22 22.3-3.82 34.71-16.23s14-21.75 16.22-34.7c2.48-14.4 5.55-32.33 25.15-51.92s37.52-22.67 51.92-25.14c13-2.22 22.3-3.83 34.7-16.23s14-21.76 16.24-34.71c2.47-14.4 5.54-32.33 25.14-51.92s37.52-22.68 51.92-25.15C394.24 110 403.59 108.41 416 96a16 16 0 0 1 22.63 22.63zM31.44 322.18L322.18 31.44l-11.54-11.55c-25-25-63.85-26.66-86.79-3.72L16.17 223.85c-22.94 22.94-21.27 61.79 3.72 86.78zm449.12-132.36L189.82 480.56l11.54 11.55c25 25 63.85 26.66 86.79 3.72l207.68-207.68c22.94-22.94 21.27-61.79-3.72-86.79z"]
- };
- var faHotel = {
- prefix: 'fas',
- iconName: 'hotel',
- icon: [576, 512, [], "f594", "M560 64c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h15.98v384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h240v-80c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v80h240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-16V64h16zm-304 44.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm0 96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm-128-96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zM179.2 256h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8zM192 384c0-53.02 42.98-96 96-96s96 42.98 96 96H192zm256-140.8c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-96c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4z"]
- };
- var faHourglass = {
- prefix: 'fas',
- iconName: 'hourglass',
- icon: [384, 512, [], "f254", "M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64z"]
- };
- var faHourglassEnd = {
- prefix: 'fas',
- iconName: 'hourglass-end',
- icon: [384, 512, [], "f253", "M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64zM192 208c-57.787 0-104-66.518-104-144h208c0 77.945-46.51 144-104 144z"]
- };
- var faHourglassHalf = {
- prefix: 'fas',
- iconName: 'hourglass-half',
- icon: [384, 512, [], "f252", "M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-75.078 384H99.08c17.059-46.797 52.096-80 92.92-80 40.821 0 75.862 33.196 92.922 80zm.019-256H99.078C91.988 108.548 88 86.748 88 64h208c0 22.805-3.987 44.587-11.059 64z"]
- };
- var faHourglassStart = {
- prefix: 'fas',
- iconName: 'hourglass-start',
- icon: [384, 512, [], "f251", "M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-64 448H88c0-77.458 46.204-144 104-144 57.786 0 104 66.517 104 144z"]
- };
- var faHouseDamage = {
- prefix: 'fas',
- iconName: 'house-damage',
- icon: [576, 512, [], "f6f1", "M288 114.96L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496c0 8.84 7.16 16 16 16h149.23L192 439.19l104.11-64-60.16-119.22L384 392.75l-104.11 64L319.81 512H496c8.84 0 16-7.16 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2L288 114.96zm282.69 121.32L512 184.45V48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v51.69L314.75 10.31C307.12 3.45 297.56.01 288 0s-19.1 3.41-26.7 10.27L5.31 236.28c-6.57 5.91-7.12 16.02-1.21 22.6l21.4 23.82c5.9 6.57 16.02 7.12 22.6 1.21L277.42 81.63c6.05-5.33 15.12-5.33 21.17 0L527.91 283.9c6.57 5.9 16.69 5.36 22.6-1.21l21.4-23.82c5.9-6.57 5.36-16.69-1.22-22.59z"]
- };
- var faHouseUser = {
- prefix: 'fas',
- iconName: 'house-user',
- icon: [576, 512, [], "e065", "M570.69,236.27,512,184.44V48a16,16,0,0,0-16-16H432a16,16,0,0,0-16,16V99.67L314.78,10.3C308.5,4.61,296.53,0,288,0s-20.46,4.61-26.74,10.3l-256,226A18.27,18.27,0,0,0,0,248.2a18.64,18.64,0,0,0,4.09,10.71L25.5,282.7a21.14,21.14,0,0,0,12,5.3,21.67,21.67,0,0,0,10.69-4.11l15.9-14V480a32,32,0,0,0,32,32H480a32,32,0,0,0,32-32V269.88l15.91,14A21.94,21.94,0,0,0,538.63,288a20.89,20.89,0,0,0,11.87-5.31l21.41-23.81A21.64,21.64,0,0,0,576,248.19,21,21,0,0,0,570.69,236.27ZM288,176a64,64,0,1,1-64,64A64,64,0,0,1,288,176ZM400,448H176a16,16,0,0,1-16-16,96,96,0,0,1,96-96h64a96,96,0,0,1,96,96A16,16,0,0,1,400,448Z"]
- };
- var faHryvnia = {
- prefix: 'fas',
- iconName: 'hryvnia',
- icon: [384, 512, [], "f6f2", "M368 240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-41.86c13.41-28.63 13.74-63.33-4.13-94.05C303.34 49.84 267.1 32 229.96 32h-78.82c-24.32 0-47.86 8.53-66.54 24.09L72.83 65.9c-10.18 8.49-11.56 23.62-3.07 33.8l20.49 24.59c8.49 10.19 23.62 11.56 33.81 3.07l11.73-9.78c4.32-3.6 9.77-5.57 15.39-5.57h83.62c11.69 0 21.2 9.52 21.2 21.2 0 5.91-2.48 11.58-6.81 15.58L219.7 176H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h134.37l-34.67 32H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h41.86c-13.41 28.63-13.74 63.33 4.13 94.05C80.66 462.15 116.9 480 154.04 480h78.82c24.32 0 47.86-8.53 66.54-24.09l11.77-9.81c10.18-8.49 11.56-23.62 3.07-33.8l-20.49-24.59c-8.49-10.19-23.62-11.56-33.81-3.07l-11.75 9.8a23.992 23.992 0 0 1-15.36 5.56H149.2c-11.69 0-21.2-9.52-21.2-21.2 0-5.91 2.48-11.58 6.81-15.58L164.3 336H368c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H233.63l34.67-32H368z"]
- };
- var faICursor = {
- prefix: 'fas',
- iconName: 'i-cursor',
- icon: [256, 512, [], "f246", "M256 52.048V12.065C256 5.496 250.726.148 244.158.066 211.621-.344 166.469.011 128 37.959 90.266.736 46.979-.114 11.913.114 5.318.157 0 5.519 0 12.114v39.645c0 6.687 5.458 12.078 12.145 11.998C38.111 63.447 96 67.243 96 112.182V224H60c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h36v112c0 44.932-56.075 48.031-83.95 47.959C5.404 447.942 0 453.306 0 459.952v39.983c0 6.569 5.274 11.917 11.842 11.999 32.537.409 77.689.054 116.158-37.894 37.734 37.223 81.021 38.073 116.087 37.845 6.595-.043 11.913-5.405 11.913-12V460.24c0-6.687-5.458-12.078-12.145-11.998C217.889 448.553 160 444.939 160 400V288h36c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-36V112.182c0-44.932 56.075-48.213 83.95-48.142 6.646.018 12.05-5.346 12.05-11.992z"]
- };
- var faIceCream = {
- prefix: 'fas',
- iconName: 'ice-cream',
- icon: [448, 512, [], "f810", "M368 160h-.94a144 144 0 1 0-286.12 0H80a48 48 0 0 0 0 96h288a48 48 0 0 0 0-96zM195.38 493.69a31.52 31.52 0 0 0 57.24 0L352 288H96z"]
- };
- var faIcicles = {
- prefix: 'fas',
- iconName: 'icicles',
- icon: [512, 512, [], "f7ad", "M511.4 37.9C515.1 18.2 500 0 480 0H32C10.6 0-4.8 20.7 1.4 41.2l87.1 273.4c2.5 7.2 12.7 7.2 15.1 0L140 190.5l44.2 187.3c1.9 8.3 13.7 8.3 15.6 0l46.5-196.9 34.1 133.4c2.3 7.6 13 7.6 15.3 0l45.8-172.5 66.7 363.8c1.7 8.6 14 8.6 15.7 0l87.5-467.7z"]
- };
- var faIcons = {
- prefix: 'fas',
- iconName: 'icons',
- icon: [512, 512, [], "f86d", "M116.65 219.35a15.68 15.68 0 0 0 22.65 0l96.75-99.83c28.15-29 26.5-77.1-4.91-103.88C203.75-7.7 163-3.5 137.86 22.44L128 32.58l-9.85-10.14C93.05-3.5 52.25-7.7 24.86 15.64c-31.41 26.78-33 74.85-5 103.88zm143.92 100.49h-48l-7.08-14.24a27.39 27.39 0 0 0-25.66-17.78h-71.71a27.39 27.39 0 0 0-25.66 17.78l-7 14.24h-48A27.45 27.45 0 0 0 0 347.3v137.25A27.44 27.44 0 0 0 27.43 512h233.14A27.45 27.45 0 0 0 288 484.55V347.3a27.45 27.45 0 0 0-27.43-27.46zM144 468a52 52 0 1 1 52-52 52 52 0 0 1-52 52zm355.4-115.9h-60.58l22.36-50.75c2.1-6.65-3.93-13.21-12.18-13.21h-75.59c-6.3 0-11.66 3.9-12.5 9.1l-16.8 106.93c-1 6.3 4.88 11.89 12.5 11.89h62.31l-24.2 83c-1.89 6.65 4.2 12.9 12.23 12.9a13.26 13.26 0 0 0 10.92-5.25l92.4-138.91c4.88-6.91-1.16-15.7-10.87-15.7zM478.08.33L329.51 23.17C314.87 25.42 304 38.92 304 54.83V161.6a83.25 83.25 0 0 0-16-1.7c-35.35 0-64 21.48-64 48s28.65 48 64 48c35.2 0 63.73-21.32 64-47.66V99.66l112-17.22v47.18a83.25 83.25 0 0 0-16-1.7c-35.35 0-64 21.48-64 48s28.65 48 64 48c35.2 0 63.73-21.32 64-47.66V32c0-19.48-16-34.42-33.92-31.67z"]
- };
- var faIdBadge = {
- prefix: 'fas',
- iconName: 'id-badge',
- icon: [384, 512, [], "f2c1", "M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM144 32h96c8.8 0 16 7.2 16 16s-7.2 16-16 16h-96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm48 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 416 80 407.4 80 396.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"]
- };
- var faIdCard = {
- prefix: 'fas',
- iconName: 'id-card',
- icon: [576, 512, [], "f2c2", "M528 32H48C21.5 32 0 53.5 0 80v16h576V80c0-26.5-21.5-48-48-48zM0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V128H0v304zm352-232c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zM176 192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM67.1 396.2C75.5 370.5 99.6 352 128 352h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.9-5.2 19.8-15.6 19.8H82.7c-10.4 0-18.8-10-15.6-19.8z"]
- };
- var faIdCardAlt = {
- prefix: 'fas',
- iconName: 'id-card-alt',
- icon: [576, 512, [], "f47f", "M528 64H384v96H192V64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM288 224c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm93.3 224H194.7c-10.4 0-18.8-10-15.6-19.8 8.3-25.6 32.4-44.2 60.9-44.2h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.8-5.2 19.8-15.6 19.8zM352 32c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32v96h128V32z"]
- };
- var faIgloo = {
- prefix: 'fas',
- iconName: 'igloo',
- icon: [576, 512, [], "f7ae", "M320 33.9c-10.5-1.2-21.2-1.9-32-1.9-99.8 0-187.8 50.8-239.4 128H320V33.9zM96 192H30.3C11.1 230.6 0 274 0 320h96V192zM352 39.4V160h175.4C487.2 99.9 424.8 55.9 352 39.4zM480 320h96c0-46-11.1-89.4-30.3-128H480v128zm-64 64v96h128c17.7 0 32-14.3 32-32v-96H411.5c2.6 10.3 4.5 20.9 4.5 32zm32-192H128v128h49.8c22.2-38.1 63-64 110.2-64s88 25.9 110.2 64H448V192zM0 448c0 17.7 14.3 32 32 32h128v-96c0-11.1 1.9-21.7 4.5-32H0v96zm288-160c-53 0-96 43-96 96v96h192v-96c0-53-43-96-96-96z"]
- };
- var faImage = {
- prefix: 'fas',
- iconName: 'image',
- icon: [512, 512, [], "f03e", "M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z"]
- };
- var faImages = {
- prefix: 'fas',
- iconName: 'images',
- icon: [576, 512, [], "f302", "M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v208c0 44.112 35.888 80 80 80h336zm96-80V80c0-26.51-21.49-48-48-48H144c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48h384c26.51 0 48-21.49 48-48zM256 128c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-96 144l55.515-55.515c4.686-4.686 12.284-4.686 16.971 0L272 256l135.515-135.515c4.686-4.686 12.284-4.686 16.971 0L512 208v112H160v-48z"]
- };
- var faInbox = {
- prefix: 'fas',
- iconName: 'inbox',
- icon: [576, 512, [], "f01c", "M567.938 243.908L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L8.062 243.908A47.994 47.994 0 0 0 0 270.533V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V270.533a47.994 47.994 0 0 0-8.062-26.625zM162.252 128h251.497l85.333 128H376l-32 64H232l-32-64H76.918l85.334-128z"]
- };
- var faIndent = {
- prefix: 'fas',
- iconName: 'indent',
- icon: [448, 512, [], "f03c", "M27.31 363.3l96-96a16 16 0 0 0 0-22.62l-96-96C17.27 138.66 0 145.78 0 160v192c0 14.31 17.33 21.3 27.31 11.3zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"]
- };
- var faIndustry = {
- prefix: 'fas',
- iconName: 'industry',
- icon: [512, 512, [], "f275", "M475.115 163.781L336 252.309v-68.28c0-18.916-20.931-30.399-36.885-20.248L160 252.309V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h464c13.255 0 24-10.745 24-24V184.029c0-18.917-20.931-30.399-36.885-20.248z"]
- };
- var faInfinity = {
- prefix: 'fas',
- iconName: 'infinity',
- icon: [640, 512, [], "f534", "M471.1 96C405 96 353.3 137.3 320 174.6 286.7 137.3 235 96 168.9 96 75.8 96 0 167.8 0 256s75.8 160 168.9 160c66.1 0 117.8-41.3 151.1-78.6 33.3 37.3 85 78.6 151.1 78.6 93.1 0 168.9-71.8 168.9-160S564.2 96 471.1 96zM168.9 320c-40.2 0-72.9-28.7-72.9-64s32.7-64 72.9-64c38.2 0 73.4 36.1 94 64-20.4 27.6-55.9 64-94 64zm302.2 0c-38.2 0-73.4-36.1-94-64 20.4-27.6 55.9-64 94-64 40.2 0 72.9 28.7 72.9 64s-32.7 64-72.9 64z"]
- };
- var faInfo = {
- prefix: 'fas',
- iconName: 'info',
- icon: [192, 512, [], "f129", "M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z"]
- };
- var faInfoCircle = {
- prefix: 'fas',
- iconName: 'info-circle',
- icon: [512, 512, [], "f05a", "M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"]
- };
- var faItalic = {
- prefix: 'fas',
- iconName: 'italic',
- icon: [320, 512, [], "f033", "M320 48v32a16 16 0 0 1-16 16h-62.76l-80 320H208a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h62.76l80-320H112a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h192a16 16 0 0 1 16 16z"]
- };
- var faJedi = {
- prefix: 'fas',
- iconName: 'jedi',
- icon: [576, 512, [], "f669", "M535.95308,352c-42.64069,94.17188-137.64086,160-247.9848,160q-6.39844,0-12.84377-.29688C171.15558,506.9375,81.26481,442.23438,40.01474,352H79.93668L21.3272,293.40625a264.82522,264.82522,0,0,1-5.10938-39.42187,273.6653,273.6653,0,0,1,.5-29.98438H63.93665L22.546,182.625A269.79782,269.79782,0,0,1,130.51489,20.54688a16.06393,16.06393,0,0,1,9.28127-3,16.36332,16.36332,0,0,1,13.5,7.25,16.02739,16.02739,0,0,1,1.625,15.09374,138.387,138.387,0,0,0-9.84376,51.26563c0,45.10937,21.04691,86.57813,57.71884,113.73437a16.29989,16.29989,0,0,1,1.20313,25.39063c-26.54692,23.98437-41.17194,56.5-41.17194,91.57813,0,60.03124,42.95319,110.28124,99.89079,121.92187l2.5-65.26563L238.062,397a8.33911,8.33911,0,0,1-10-.75,8.025,8.025,0,0,1-1.39063-9.9375l20.125-33.76562-42.06257-8.73438a7.9898,7.9898,0,0,1,0-15.65625l42.06257-8.71875-20.10941-33.73438a7.99122,7.99122,0,0,1,11.35939-10.71874L268.437,295.64062,279.95265,7.67188a7.97138,7.97138,0,0,1,8-7.67188h.04687a8.02064,8.02064,0,0,1,7.95314,7.70312L307.48394,295.625l30.39068-20.67188a8.08327,8.08327,0,0,1,10,.8125,7.99866,7.99866,0,0,1,1.39062,9.90626L329.12461,319.4375l42.07819,8.73438a7.99373,7.99373,0,0,1,0,15.65624l-42.07819,8.71876,20.1094,33.73437a7.97791,7.97791,0,0,1-1.32812,9.92187A8.25739,8.25739,0,0,1,337.87462,397L310.7027,378.53125l2.5,65.34375c48.48446-9.40625,87.57828-48.15625,97.31267-96.5A123.52652,123.52652,0,0,0,371.9528,230.29688a16.30634,16.30634,0,0,1,1.20313-25.42188c36.65631-27.17188,57.6876-68.60938,57.6876-113.73438a138.01689,138.01689,0,0,0-9.85939-51.3125,15.98132,15.98132,0,0,1,1.60937-15.09374,16.36914,16.36914,0,0,1,13.5-7.23438,16.02453,16.02453,0,0,1,9.25,2.98438A271.26947,271.26947,0,0,1,553.25,182.76562L511.99992,224h46.9532C559.3125,229.76562,560,235.45312,560,241.26562a270.092,270.092,0,0,1-5.125,51.85938L495.98427,352Z"]
- };
- var faJoint = {
- prefix: 'fas',
- iconName: 'joint',
- icon: [640, 512, [], "f595", "M444.34 181.1c22.38 15.68 35.66 41.16 35.66 68.59V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-43.24-21.01-83.41-56.34-108.06C463.85 125.02 448 99.34 448 70.31V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v66.4c0 43.69 24.56 81.63 60.34 106.7zM194.97 358.98C126.03 370.07 59.69 394.69 0 432c83.65 52.28 180.3 80 278.94 80h88.57L254.79 380.49c-14.74-17.2-37.45-25.11-59.82-21.51zM553.28 87.09c-5.67-3.8-9.28-9.96-9.28-16.78V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v62.31c0 22.02 10.17 43.41 28.64 55.39C550.79 153.04 576 199.54 576 249.69V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-65.44-32.41-126.19-86.72-162.6zM360.89 352.05c-34.4.06-86.81.15-88.21.17l117.8 137.43A63.987 63.987 0 0 0 439.07 512h88.45L409.57 374.4a63.955 63.955 0 0 0-48.68-22.35zM616 352H432l117.99 137.65A63.987 63.987 0 0 0 598.58 512H616c13.25 0 24-10.75 24-24V376c0-13.26-10.75-24-24-24z"]
- };
- var faJournalWhills = {
- prefix: 'fas',
- iconName: 'journal-whills',
- icon: [448, 512, [], "f66a", "M438.40625,377.59375c-3.20313,12.8125-3.20313,57.60937,0,73.60937Q447.9922,460.78907,448,470.40625v16c0,16-12.79688,25.59375-25.59375,25.59375H96c-54.40625,0-96-41.59375-96-96V96C0,41.59375,41.59375,0,96,0H422.40625C438.40625,0,448,9.59375,448,25.59375v332.8125Q448,372.79688,438.40625,377.59375ZM380.79688,384H96c-16,0-32,12.79688-32,32s12.79688,32,32,32H380.79688ZM128.01562,176.01562c0,.51563.14063.98438.14063,1.5l37.10937,32.46876A7.99954,7.99954,0,0,1,160,224h-.01562a9.17678,9.17678,0,0,1-5.25-1.98438L131.14062,201.375C142.6875,250.95312,186.90625,288,240,288s97.3125-37.04688,108.875-86.625l-23.59375,20.64062a8.02516,8.02516,0,0,1-5.26563,1.96876H320a9.14641,9.14641,0,0,1-6.01562-2.71876A9.26508,9.26508,0,0,1,312,216a9.097,9.097,0,0,1,2.73438-6.01562l37.10937-32.46876c.01563-.53124.15625-1,.15625-1.51562,0-11.04688-2.09375-21.51562-5.06251-31.59375l-21.26562,21.25a8.00467,8.00467,0,0,1-11.32812-11.3125l26.42187-26.40625a111.81517,111.81517,0,0,0-46.35937-49.26562,63.02336,63.02336,0,0,1-14.0625,82.64062A55.83846,55.83846,0,0,1,251.625,254.73438l-1.42188-34.28126,12.67188,8.625a3.967,3.967,0,0,0,2.25.6875,3.98059,3.98059,0,0,0,3.43749-6.03124l-8.53124-14.3125,17.90625-3.71876a4.00647,4.00647,0,0,0,0-7.84374l-17.90625-3.71876,8.53124-14.3125a3.98059,3.98059,0,0,0-3.43749-6.03124,4.726,4.726,0,0,0-2.25.67187L248.6875,184.125,244,71.82812a4.00386,4.00386,0,0,0-8,0l-4.625,110.8125-12-8.15624a4.003,4.003,0,0,0-5.68751,5.35937l8.53126,14.3125L204.3125,197.875a3.99686,3.99686,0,0,0,0,7.82812l17.90625,3.73438-8.53126,14.29688a4.72469,4.72469,0,0,0-.56249,2.04687,4.59547,4.59547,0,0,0,1.25,2.90625,4.01059,4.01059,0,0,0,2.75,1.09375,4.09016,4.09016,0,0,0,2.25-.6875l10.35937-7.04687L228.375,254.76562a55.86414,55.86414,0,0,1-28.71875-93.45312,63.01119,63.01119,0,0,1-14.04688-82.65625,111.93158,111.93158,0,0,0-46.375,49.26563l26.42187,26.42187a7.99917,7.99917,0,0,1-11.3125,11.3125l-21.26563-21.26563C130.09375,154.48438,128,164.95312,128.01562,176.01562Z"]
- };
- var faKaaba = {
- prefix: 'fas',
- iconName: 'kaaba',
- icon: [576, 512, [], "f66b", "M554.12 83.51L318.36 4.93a95.962 95.962 0 0 0-60.71 0L21.88 83.51A32.006 32.006 0 0 0 0 113.87v49.01l265.02-79.51c15.03-4.5 30.92-4.5 45.98 0l265 79.51v-49.01c0-13.77-8.81-26-21.88-30.36zm-279.9 30.52L0 196.3v228.38c0 15 10.42 27.98 25.06 31.24l242.12 53.8a95.937 95.937 0 0 0 41.65 0l242.12-53.8c14.64-3.25 25.06-16.24 25.06-31.24V196.29l-274.2-82.26c-9.04-2.72-18.59-2.72-27.59 0zM128 230.11c0 3.61-2.41 6.77-5.89 7.72l-80 21.82C37.02 261.03 32 257.2 32 251.93v-16.58c0-3.61 2.41-6.77 5.89-7.72l80-21.82c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm144-39.28c0 3.61-2.41 6.77-5.89 7.72l-96 26.18c-5.09 1.39-10.11-2.44-10.11-7.72v-16.58c0-3.61 2.41-6.77 5.89-7.72l96-26.18c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm176 22.7c0-5.28 5.02-9.11 10.11-7.72l80 21.82c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-80-21.82a7.997 7.997 0 0 1-5.89-7.72v-16.58zm-144-39.27c0-5.28 5.02-9.11 10.11-7.72l96 26.18c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-96-26.18a7.997 7.997 0 0 1-5.89-7.72v-16.58z"]
- };
- var faKey = {
- prefix: 'fas',
- iconName: 'key',
- icon: [512, 512, [], "f084", "M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z"]
- };
- var faKeyboard = {
- prefix: 'fas',
- iconName: 'keyboard',
- icon: [576, 512, [], "f11c", "M528 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM128 180v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z"]
- };
- var faKhanda = {
- prefix: 'fas',
- iconName: 'khanda',
- icon: [512, 512, [], "f66d", "M415.81 66c-6.37-3.5-14.37-2.33-19.36 3.02a15.974 15.974 0 0 0-1.91 19.52c16.49 26.16 25.2 56.39 25.2 87.41-.19 53.25-26.77 102.69-71.27 132.41l-76.63 53.35v-20.1l44.05-36.09c3.92-4.2 5-10.09 2.81-15.28L310.85 273c33.84-19.26 56.94-55.25 56.94-96.99 0-40.79-22.02-76.13-54.59-95.71l5.22-11.44c2.34-5.53.93-11.83-3.57-16.04L255.86 0l-58.99 52.81c-4.5 4.21-5.9 10.51-3.57 16.04l5.22 11.44c-32.57 19.58-54.59 54.93-54.59 95.72 0 41.75 23.09 77.73 56.94 96.99l-7.85 17.24c-2.19 5.18-1.1 11.07 2.81 15.28l44.05 36.09v19.9l-76.59-53.33C119.02 278.62 92.44 229.19 92.26 176c0-31.08 8.71-61.31 25.2-87.47 3.87-6.16 2.4-13.77-2.59-19.08-5-5.34-13.68-6.2-20.02-2.7C16.32 109.6-22.3 205.3 13.36 295.99c7.07 17.99 17.89 34.38 30.46 49.06l55.97 65.36c4.87 5.69 13.04 7.24 19.65 3.72l79.35-42.23L228 392.23l-47.08 32.78c-1.67-.37-3.23-1.01-5.01-1.01-13.25 0-23.99 10.74-23.99 24 0 13.25 10.74 24 23.99 24 12.1 0 21.69-9.11 23.33-20.76l40.63-28.28v29.95c-9.39 5.57-15.99 15.38-15.99 27.1 0 17.67 14.32 32 31.98 32s31.98-14.33 31.98-32c0-11.71-6.61-21.52-15.99-27.1v-30.15l40.91 28.48C314.41 462.89 324 472 336.09 472c13.25 0 23.99-10.75 23.99-24 0-13.26-10.74-24-23.99-24-1.78 0-3.34.64-5.01 1.01L284 392.23l29.21-20.34 79.35 42.23c6.61 3.52 14.78 1.97 19.65-3.71l52.51-61.31c18.87-22.02 34-47.5 41.25-75.59 21.62-83.66-16.45-167.27-90.16-207.51zm-95.99 110c0 22.3-11.49 41.92-28.83 53.38l-5.65-12.41c-8.75-24.52-8.75-51.04 0-75.56l7.83-17.18c16.07 11.65 26.65 30.45 26.65 51.77zm-127.93 0c0-21.32 10.58-40.12 26.66-51.76l7.83 17.18c8.75 24.52 8.75 51.03 0 75.56l-5.65 12.41c-17.34-11.46-28.84-31.09-28.84-53.39z"]
- };
- var faKiss = {
- prefix: 'fas',
- iconName: 'kiss',
- icon: [496, 512, [], "f596", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm136 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm24-156c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"]
- };
- var faKissBeam = {
- prefix: 'fas',
- iconName: 'kiss-beam',
- icon: [496, 512, [], "f597", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-39 219.9l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5zM304 396c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm65-168.1l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5z"]
- };
- var faKissWinkHeart = {
- prefix: 'fas',
- iconName: 'kiss-wink-heart',
- icon: [504, 512, [], "f598", "M501.1 402.5c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zm-177.6-4c-5.6-20.3-2.3-42 9-59.7 29.7-46.3 98.7-45.5 127.8 4.3 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-.3-.7-23.9-84.6-23.9-84.6zM168 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm120 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-5.7-12.3 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.8-3.7-4.6-16.6 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C274.6 368.7 288 383 288 396zm16-179c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S400 181 404 206.2c1.7 11.1-11.3 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 217z"]
- };
- var faKiwiBird = {
- prefix: 'fas',
- iconName: 'kiwi-bird',
- icon: [576, 512, [], "f535", "M575.81 217.98C572.64 157.41 518.28 112 457.63 112h-9.37c-52.82 0-104.25-16.25-147.74-46.24-41.99-28.96-96.04-41.62-153.21-28.7C129.3 41.12-.08 78.24 0 224c.04 70.95 38.68 132.8 95.99 166.01V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-54.26c15.36 3.96 31.4 6.26 48 6.26 5.44 0 10.68-.73 16-1.18V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-59.43c14.24-5.06 27.88-11.39 40.34-19.51C342.07 355.25 393.86 336 448.46 336c25.48 0 16.01-.31 23.05-.78l74.41 136.44c2.86 5.23 8.3 8.34 14.05 8.34 1.31 0 2.64-.16 3.95-.5 7.09-1.8 12.05-8.19 12.05-15.5 0 0 .14-240.24-.16-246.02zM463.97 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm80 153.25l-39.86-73.08c15.12-5.83 28.73-14.6 39.86-25.98v99.06z"]
- };
- var faLandmark = {
- prefix: 'fas',
- iconName: 'landmark',
- icon: [512, 512, [], "f66f", "M501.62 92.11L267.24 2.04a31.958 31.958 0 0 0-22.47 0L10.38 92.11A16.001 16.001 0 0 0 0 107.09V144c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-36.91c0-6.67-4.14-12.64-10.38-14.98zM64 192v160H48c-8.84 0-16 7.16-16 16v48h448v-48c0-8.84-7.16-16-16-16h-16V192h-64v160h-96V192h-64v160h-96V192H64zm432 256H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"]
- };
- var faLanguage = {
- prefix: 'fas',
- iconName: 'language',
- icon: [640, 512, [], "f1ab", "M152.1 236.2c-3.5-12.1-7.8-33.2-7.8-33.2h-.5s-4.3 21.1-7.8 33.2l-11.1 37.5H163zM616 96H336v320h280c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm-24 120c0 6.6-5.4 12-12 12h-11.4c-6.9 23.6-21.7 47.4-42.7 69.9 8.4 6.4 17.1 12.5 26.1 18 5.5 3.4 7.3 10.5 4.1 16.2l-7.9 13.9c-3.4 5.9-10.9 7.8-16.7 4.3-12.6-7.8-24.5-16.1-35.4-24.9-10.9 8.7-22.7 17.1-35.4 24.9-5.8 3.5-13.3 1.6-16.7-4.3l-7.9-13.9c-3.2-5.6-1.4-12.8 4.2-16.2 9.3-5.7 18-11.7 26.1-18-7.9-8.4-14.9-17-21-25.7-4-5.7-2.2-13.6 3.7-17.1l6.5-3.9 7.3-4.3c5.4-3.2 12.4-1.7 16 3.4 5 7 10.8 14 17.4 20.9 13.5-14.2 23.8-28.9 30-43.2H412c-6.6 0-12-5.4-12-12v-16c0-6.6 5.4-12 12-12h64v-16c0-6.6 5.4-12 12-12h16c6.6 0 12 5.4 12 12v16h64c6.6 0 12 5.4 12 12zM0 120v272c0 13.3 10.7 24 24 24h280V96H24c-13.3 0-24 10.7-24 24zm58.9 216.1L116.4 167c1.7-4.9 6.2-8.1 11.4-8.1h32.5c5.1 0 9.7 3.3 11.4 8.1l57.5 169.1c2.6 7.8-3.1 15.9-11.4 15.9h-22.9a12 12 0 0 1-11.5-8.6l-9.4-31.9h-60.2l-9.1 31.8c-1.5 5.1-6.2 8.7-11.5 8.7H70.3c-8.2 0-14-8.1-11.4-15.9z"]
- };
- var faLaptop = {
- prefix: 'fas',
- iconName: 'laptop',
- icon: [640, 512, [], "f109", "M624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z"]
- };
- var faLaptopCode = {
- prefix: 'fas',
- iconName: 'laptop-code',
- icon: [640, 512, [], "f5fc", "M255.03 261.65c6.25 6.25 16.38 6.25 22.63 0l11.31-11.31c6.25-6.25 6.25-16.38 0-22.63L253.25 192l35.71-35.72c6.25-6.25 6.25-16.38 0-22.63l-11.31-11.31c-6.25-6.25-16.38-6.25-22.63 0l-58.34 58.34c-6.25 6.25-6.25 16.38 0 22.63l58.35 58.34zm96.01-11.3l11.31 11.31c6.25 6.25 16.38 6.25 22.63 0l58.34-58.34c6.25-6.25 6.25-16.38 0-22.63l-58.34-58.34c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63L386.75 192l-35.71 35.72c-6.25 6.25-6.25 16.38 0 22.63zM624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z"]
- };
- var faLaptopHouse = {
- prefix: 'fas',
- iconName: 'laptop-house',
- icon: [640, 512, [], "e066", "M272,288H208a16,16,0,0,1-16-16V208a16,16,0,0,1,16-16h64a16,16,0,0,1,16,16v37.12C299.11,232.24,315,224,332.8,224H469.74l6.65-7.53A16.51,16.51,0,0,0,480,207a16.31,16.31,0,0,0-4.75-10.61L416,144V48a16,16,0,0,0-16-16H368a16,16,0,0,0-16,16V87.3L263.5,8.92C258,4,247.45,0,240.05,0s-17.93,4-23.47,8.92L4.78,196.42A16.15,16.15,0,0,0,0,207a16.4,16.4,0,0,0,3.55,9.39L22.34,237.7A16.22,16.22,0,0,0,33,242.48,16.51,16.51,0,0,0,42.34,239L64,219.88V384a32,32,0,0,0,32,32H272ZM629.33,448H592V288c0-17.67-12.89-32-28.8-32H332.8c-15.91,0-28.8,14.33-28.8,32V448H266.67A10.67,10.67,0,0,0,256,458.67v10.66A42.82,42.82,0,0,0,298.6,512H597.4A42.82,42.82,0,0,0,640,469.33V458.67A10.67,10.67,0,0,0,629.33,448ZM544,448H352V304H544Z"]
- };
- var faLaptopMedical = {
- prefix: 'fas',
- iconName: 'laptop-medical',
- icon: [640, 512, [], "f812", "M232 224h56v56a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-56h56a8 8 0 0 0 8-8v-48a8 8 0 0 0-8-8h-56v-56a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v56h-56a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8zM576 48a48.14 48.14 0 0 0-48-48H112a48.14 48.14 0 0 0-48 48v336h512zm-64 272H128V64h384zm112 96H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33-17.47-32.77-32H16a16 16 0 0 0-16 16v16a64.19 64.19 0 0 0 64 64h512a64.19 64.19 0 0 0 64-64v-16a16 16 0 0 0-16-16z"]
- };
- var faLaugh = {
- prefix: 'fas',
- iconName: 'laugh',
- icon: [496, 512, [], "f599", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 152c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm88 272h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18-8.9 71-69.5 126-142.9 126z"]
- };
- var faLaughBeam = {
- prefix: 'fas',
- iconName: 'laugh-beam',
- icon: [496, 512, [], "f59a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm24 199.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.8 4.1-15.1-4.5zm-160 0c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z"]
- };
- var faLaughSquint = {
- prefix: 'fas',
- iconName: 'laugh-squint',
- icon: [496, 512, [], "f59b", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 161.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 180l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z"]
- };
- var faLaughWink = {
- prefix: 'fas',
- iconName: 'laugh-wink',
- icon: [496, 512, [], "f59c", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm20.1 198.1c4-25.2 34.2-42.1 59.9-42.1s55.9 16.9 59.9 42.1c1.7 11.1-11.4 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 217c-8.4 7.4-21.6.3-19.9-10.9zM168 160c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm230.9 146C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z"]
- };
- var faLayerGroup = {
- prefix: 'fas',
- iconName: 'layer-group',
- icon: [512, 512, [], "f5fd", "M12.41 148.02l232.94 105.67c6.8 3.09 14.49 3.09 21.29 0l232.94-105.67c16.55-7.51 16.55-32.52 0-40.03L266.65 2.31a25.607 25.607 0 0 0-21.29 0L12.41 107.98c-16.55 7.51-16.55 32.53 0 40.04zm487.18 88.28l-58.09-26.33-161.64 73.27c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.51 209.97l-58.1 26.33c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 276.3c16.55-7.5 16.55-32.5 0-40zm0 127.8l-57.87-26.23-161.86 73.37c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.29 337.87 12.41 364.1c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 404.1c16.55-7.5 16.55-32.5 0-40z"]
- };
- var faLeaf = {
- prefix: 'fas',
- iconName: 'leaf',
- icon: [576, 512, [], "f06c", "M546.2 9.7c-5.6-12.5-21.6-13-28.3-1.2C486.9 62.4 431.4 96 368 96h-80C182 96 96 182 96 288c0 7 .8 13.7 1.5 20.5C161.3 262.8 253.4 224 384 224c8.8 0 16 7.2 16 16s-7.2 16-16 16C132.6 256 26 410.1 2.4 468c-6.6 16.3 1.2 34.9 17.5 41.6 16.4 6.8 35-1.1 41.8-17.3 1.5-3.6 20.9-47.9 71.9-90.6 32.4 43.9 94 85.8 174.9 77.2C465.5 467.5 576 326.7 576 154.3c0-50.2-10.8-102.2-29.8-144.6z"]
- };
- var faLemon = {
- prefix: 'fas',
- iconName: 'lemon',
- icon: [512, 512, [], "f094", "M489.038 22.963C465.944-.13 434.648-5.93 413.947 6.129c-58.906 34.312-181.25-53.077-321.073 86.746S40.441 355.041 6.129 413.945c-12.059 20.702-6.26 51.999 16.833 75.093 23.095 23.095 54.392 28.891 75.095 16.832 58.901-34.31 181.246 53.079 321.068-86.743S471.56 156.96 505.871 98.056c12.059-20.702 6.261-51.999-16.833-75.093zM243.881 95.522c-58.189 14.547-133.808 90.155-148.358 148.358-1.817 7.27-8.342 12.124-15.511 12.124-1.284 0-2.59-.156-3.893-.481-8.572-2.144-13.784-10.83-11.642-19.403C81.901 166.427 166.316 81.93 236.119 64.478c8.575-2.143 17.261 3.069 19.403 11.642s-3.069 17.259-11.641 19.402z"]
- };
- var faLessThan = {
- prefix: 'fas',
- iconName: 'less-than',
- icon: [384, 512, [], "f536", "M365.46 357.74L147.04 255.89l218.47-101.88c16.02-7.47 22.95-26.51 15.48-42.53l-13.52-29C360 66.46 340.96 59.53 324.94 67L18.48 209.91a32.014 32.014 0 0 0-18.48 29v34.24c0 12.44 7.21 23.75 18.48 29l306.31 142.83c16.06 7.49 35.15.54 42.64-15.52l13.56-29.08c7.49-16.06.54-35.15-15.53-42.64z"]
- };
- var faLessThanEqual = {
- prefix: 'fas',
- iconName: 'less-than-equal',
- icon: [448, 512, [], "f537", "M54.98 214.2l301.41 119.87c18.39 6.03 38.71-2.54 45.38-19.15l12.09-30.08c6.68-16.61-2.82-34.97-21.21-41l-175.44-68.05 175.56-68.09c18.29-6 27.74-24.27 21.1-40.79l-12.03-29.92c-6.64-16.53-26.86-25.06-45.15-19.06L54.98 137.89C41.21 142.41 32 154.5 32 168.07v15.96c0 13.56 9.21 25.65 22.98 30.17zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z"]
- };
- var faLevelDownAlt = {
- prefix: 'fas',
- iconName: 'level-down-alt',
- icon: [320, 512, [], "f3be", "M313.553 392.331L209.587 504.334c-9.485 10.214-25.676 10.229-35.174 0L70.438 392.331C56.232 377.031 67.062 352 88.025 352H152V80H68.024a11.996 11.996 0 0 1-8.485-3.515l-56-56C-4.021 12.926 1.333 0 12.024 0H208c13.255 0 24 10.745 24 24v328h63.966c20.878 0 31.851 24.969 17.587 40.331z"]
- };
- var faLevelUpAlt = {
- prefix: 'fas',
- iconName: 'level-up-alt',
- icon: [320, 512, [], "f3bf", "M313.553 119.669L209.587 7.666c-9.485-10.214-25.676-10.229-35.174 0L70.438 119.669C56.232 134.969 67.062 160 88.025 160H152v272H68.024a11.996 11.996 0 0 0-8.485 3.515l-56 56C-4.021 499.074 1.333 512 12.024 512H208c13.255 0 24-10.745 24-24V160h63.966c20.878 0 31.851-24.969 17.587-40.331z"]
- };
- var faLifeRing = {
- prefix: 'fas',
- iconName: 'life-ring',
- icon: [512, 512, [], "f1cd", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm173.696 119.559l-63.399 63.399c-10.987-18.559-26.67-34.252-45.255-45.255l63.399-63.399a218.396 218.396 0 0 1 45.255 45.255zM256 352c-53.019 0-96-42.981-96-96s42.981-96 96-96 96 42.981 96 96-42.981 96-96 96zM127.559 82.304l63.399 63.399c-18.559 10.987-34.252 26.67-45.255 45.255l-63.399-63.399a218.372 218.372 0 0 1 45.255-45.255zM82.304 384.441l63.399-63.399c10.987 18.559 26.67 34.252 45.255 45.255l-63.399 63.399a218.396 218.396 0 0 1-45.255-45.255zm302.137 45.255l-63.399-63.399c18.559-10.987 34.252-26.67 45.255-45.255l63.399 63.399a218.403 218.403 0 0 1-45.255 45.255z"]
- };
- var faLightbulb = {
- prefix: 'fas',
- iconName: 'lightbulb',
- icon: [352, 512, [], "f0eb", "M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z"]
- };
- var faLink = {
- prefix: 'fas',
- iconName: 'link',
- icon: [512, 512, [], "f0c1", "M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z"]
- };
- var faLiraSign = {
- prefix: 'fas',
- iconName: 'lira-sign',
- icon: [384, 512, [], "f195", "M371.994 256h-48.019C317.64 256 312 260.912 312 267.246 312 368 230.179 416 144 416V256.781l134.603-29.912A12 12 0 0 0 288 215.155v-40.976c0-7.677-7.109-13.38-14.603-11.714L144 191.219V160.78l134.603-29.912A12 12 0 0 0 288 119.154V78.179c0-7.677-7.109-13.38-14.603-11.714L144 95.219V44c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v68.997L9.397 125.131A12 12 0 0 0 0 136.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 178.558v30.439L9.397 221.131A12 12 0 0 0 0 232.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 274.558V468c0 6.627 5.373 12 12 12h79.583c134.091 0 223.255-77.834 228.408-211.592.261-6.782-5.211-12.408-11.997-12.408z"]
- };
- var faList = {
- prefix: 'fas',
- iconName: 'list',
- icon: [512, 512, [], "f03a", "M80 368H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm0-320H16A16 16 0 0 0 0 64v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16V64a16 16 0 0 0-16-16zm0 160H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm416 176H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"]
- };
- var faListAlt = {
- prefix: 'fas',
- iconName: 'list-alt',
- icon: [512, 512, [], "f022", "M464 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM128 120c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm288-136v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12z"]
- };
- var faListOl = {
- prefix: 'fas',
- iconName: 'list-ol',
- icon: [512, 512, [], "f0cb", "M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"]
- };
- var faListUl = {
- prefix: 'fas',
- iconName: 'list-ul',
- icon: [512, 512, [], "f0ca", "M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"]
- };
- var faLocationArrow = {
- prefix: 'fas',
- iconName: 'location-arrow',
- icon: [512, 512, [], "f124", "M444.52 3.52L28.74 195.42c-47.97 22.39-31.98 92.75 19.19 92.75h175.91v175.91c0 51.17 70.36 67.17 92.75 19.19l191.9-415.78c15.99-38.39-25.59-79.97-63.97-63.97z"]
- };
- var faLock = {
- prefix: 'fas',
- iconName: 'lock',
- icon: [448, 512, [], "f023", "M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z"]
- };
- var faLockOpen = {
- prefix: 'fas',
- iconName: 'lock-open',
- icon: [576, 512, [], "f3c1", "M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z"]
- };
- var faLongArrowAltDown = {
- prefix: 'fas',
- iconName: 'long-arrow-alt-down',
- icon: [256, 512, [], "f309", "M168 345.941V44c0-6.627-5.373-12-12-12h-56c-6.627 0-12 5.373-12 12v301.941H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.569 9.373 33.941 0l86.059-86.059c15.119-15.119 4.411-40.971-16.971-40.971H168z"]
- };
- var faLongArrowAltLeft = {
- prefix: 'fas',
- iconName: 'long-arrow-alt-left',
- icon: [448, 512, [], "f30a", "M134.059 296H436c6.627 0 12-5.373 12-12v-56c0-6.627-5.373-12-12-12H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.569 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296z"]
- };
- var faLongArrowAltRight = {
- prefix: 'fas',
- iconName: 'long-arrow-alt-right',
- icon: [448, 512, [], "f30b", "M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z"]
- };
- var faLongArrowAltUp = {
- prefix: 'fas',
- iconName: 'long-arrow-alt-up',
- icon: [256, 512, [], "f30c", "M88 166.059V468c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12V166.059h46.059c21.382 0 32.09-25.851 16.971-40.971l-86.059-86.059c-9.373-9.373-24.569-9.373-33.941 0l-86.059 86.059c-15.119 15.119-4.411 40.971 16.971 40.971H88z"]
- };
- var faLowVision = {
- prefix: 'fas',
- iconName: 'low-vision',
- icon: [576, 512, [], "f2a8", "M569.344 231.631C512.96 135.949 407.81 72 288 72c-28.468 0-56.102 3.619-82.451 10.409L152.778 10.24c-7.601-10.858-22.564-13.5-33.423-5.9l-13.114 9.178c-10.86 7.601-13.502 22.566-5.9 33.426l43.131 58.395C89.449 131.73 40.228 174.683 6.682 231.581c-.01.017-.023.033-.034.05-8.765 14.875-8.964 33.528 0 48.739 38.5 65.332 99.742 115.862 172.859 141.349L55.316 244.302A272.194 272.194 0 0 1 83.61 208.39l119.4 170.58h.01l40.63 58.04a330.055 330.055 0 0 0 78.94 1.17l-189.98-271.4a277.628 277.628 0 0 1 38.777-21.563l251.836 356.544c7.601 10.858 22.564 13.499 33.423 5.9l13.114-9.178c10.86-7.601 13.502-22.567 5.9-33.426l-43.12-58.377-.007-.009c57.161-27.978 104.835-72.04 136.81-126.301a47.938 47.938 0 0 0 .001-48.739zM390.026 345.94l-19.066-27.23c24.682-32.567 27.711-76.353 8.8-111.68v.03c0 23.65-19.17 42.82-42.82 42.82-23.828 0-42.82-19.349-42.82-42.82 0-23.65 19.17-42.82 42.82-42.82h.03c-24.75-13.249-53.522-15.643-79.51-7.68l-19.068-27.237C253.758 123.306 270.488 120 288 120c75.162 0 136 60.826 136 136 0 34.504-12.833 65.975-33.974 89.94z"]
- };
- var faLuggageCart = {
- prefix: 'fas',
- iconName: 'luggage-cart',
- icon: [640, 512, [], "f59d", "M224 320h32V96h-32c-17.67 0-32 14.33-32 32v160c0 17.67 14.33 32 32 32zm352-32V128c0-17.67-14.33-32-32-32h-32v224h32c17.67 0 32-14.33 32-32zm48 96H128V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h48v368c0 8.84 7.16 16 16 16h82.94c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16h197.88c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM480 96V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v272h192V96zm-48 0h-96V48h96v48z"]
- };
- var faLungs = {
- prefix: 'fas',
- iconName: 'lungs',
- icon: [640, 512, [], "f604", "M636.11 390.15C614.44 308.85 580.07 231 534.1 159.13 511.98 124.56 498.03 96 454.05 96 415.36 96 384 125.42 384 161.71v60.11l-32.88-21.92a15.996 15.996 0 0 1-7.12-13.31V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v170.59c0 5.35-2.67 10.34-7.12 13.31L256 221.82v-60.11C256 125.42 224.64 96 185.95 96c-43.98 0-57.93 28.56-80.05 63.13C59.93 231 25.56 308.85 3.89 390.15 1.3 399.84 0 409.79 0 419.78c0 61.23 62.48 105.44 125.24 88.62l59.5-15.95c42.18-11.3 71.26-47.47 71.26-88.62v-87.49l-85.84 57.23a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09L320 235.23l167.59 111.72a7.994 7.994 0 0 1 2.22 11.09l-8.88 13.31a7.994 7.994 0 0 1-11.09 2.22L384 316.34v87.49c0 41.15 29.08 77.31 71.26 88.62l59.5 15.95C577.52 525.22 640 481.01 640 419.78c0-9.99-1.3-19.94-3.89-29.63z"]
- };
- var faLungsVirus = {
- prefix: 'fas',
- iconName: 'lungs-virus',
- icon: [640, 512, [], "e067", "M344,150.68V16A16,16,0,0,0,328,0H312a16,16,0,0,0-16,16V150.68a46.45,46.45,0,0,1,48,0ZM195.54,444.46a48.06,48.06,0,0,1,0-67.88l8.58-8.58H192a48,48,0,0,1,0-96h12.12l-8.58-8.57a48,48,0,0,1,60.46-74V161.75C256,125.38,224.62,96,186,96c-44,0-58,28.5-80.12,63.13a819.52,819.52,0,0,0-102,231A113.16,113.16,0,0,0,0,419.75C0,481,62.5,525.26,125.25,508.38l59.5-15.87a98.51,98.51,0,0,0,52.5-34.75,46.49,46.49,0,0,1-41.71-13.3Zm226.29-22.63a16,16,0,0,0,0-22.62l-8.58-8.58C393.09,370.47,407.37,336,435.88,336H448a16,16,0,0,0,0-32H435.88c-28.51,0-42.79-34.47-22.63-54.62l8.58-8.58a16,16,0,0,0-22.63-22.63l-8.57,8.58C370.47,246.91,336,232.63,336,204.12V192a16,16,0,0,0-32,0v12.12c0,28.51-34.47,42.79-54.63,22.63l-8.57-8.58a16,16,0,0,0-22.63,22.63l8.58,8.58c20.16,20.15,5.88,54.62-22.63,54.62H192a16,16,0,0,0,0,32h12.12c28.51,0,42.79,34.47,22.63,54.63l-8.58,8.58a16,16,0,1,0,22.63,22.62l8.57-8.57C269.53,393.1,304,407.38,304,435.88V448a16,16,0,0,0,32,0V435.88c0-28.5,34.47-42.78,54.63-22.62l8.57,8.57a16,16,0,0,0,22.63,0ZM288,304a16,16,0,1,1,16-16A16,16,0,0,1,288,304Zm64,64a16,16,0,1,1,16-16A16,16,0,0,1,352,368Zm284.12,22.13a819.52,819.52,0,0,0-102-231C512,124.5,498,96,454,96c-38.62,0-70,29.38-70,65.75v27.72a48,48,0,0,1,60.46,74L435.88,272H448a48,48,0,0,1,0,96H435.88l8.58,8.58a47.7,47.7,0,0,1-41.71,81.18,98.51,98.51,0,0,0,52.5,34.75l59.5,15.87C577.5,525.26,640,481,640,419.75A113.16,113.16,0,0,0,636.12,390.13Z"]
- };
- var faMagic = {
- prefix: 'fas',
- iconName: 'magic',
- icon: [512, 512, [], "f0d0", "M224 96l16-32 32-16-32-16-16-32-16 32-32 16 32 16 16 32zM80 160l26.66-53.33L160 80l-53.34-26.67L80 0 53.34 53.33 0 80l53.34 26.67L80 160zm352 128l-26.66 53.33L352 368l53.34 26.67L432 448l26.66-53.33L512 368l-53.34-26.67L432 288zm70.62-193.77L417.77 9.38C411.53 3.12 403.34 0 395.15 0c-8.19 0-16.38 3.12-22.63 9.38L9.38 372.52c-12.5 12.5-12.5 32.76 0 45.25l84.85 84.85c6.25 6.25 14.44 9.37 22.62 9.37 8.19 0 16.38-3.12 22.63-9.37l363.14-363.15c12.5-12.48 12.5-32.75 0-45.24zM359.45 203.46l-50.91-50.91 86.6-86.6 50.91 50.91-86.6 86.6z"]
- };
- var faMagnet = {
- prefix: 'fas',
- iconName: 'magnet',
- icon: [512, 512, [], "f076", "M164.07 148.1H12a12 12 0 0 1-12-12v-80a36 36 0 0 1 36-36h104a36 36 0 0 1 36 36v80a11.89 11.89 0 0 1-11.93 12zm347.93-12V56a36 36 0 0 0-36-36H372a36 36 0 0 0-36 36v80a12 12 0 0 0 12 12h152a11.89 11.89 0 0 0 12-11.9zm-164 44a12 12 0 0 0-12 12v52c0 128.1-160 127.9-160 0v-52a12 12 0 0 0-12-12H12.1a12 12 0 0 0-12 12.1c.1 21.4.6 40.3 0 53.3 0 150.6 136.17 246.6 256.75 246.6s255-96 255-246.7c-.6-12.8-.2-33 0-53.2a12 12 0 0 0-12-12.1z"]
- };
- var faMailBulk = {
- prefix: 'fas',
- iconName: 'mail-bulk',
- icon: [576, 512, [], "f674", "M160 448c-25.6 0-51.2-22.4-64-32-64-44.8-83.2-60.8-96-70.4V480c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V345.6c-12.8 9.6-32 25.6-96 70.4-12.8 9.6-38.4 32-64 32zm128-192H32c-17.67 0-32 14.33-32 32v16c25.6 19.2 22.4 19.2 115.2 86.4 9.6 6.4 28.8 25.6 44.8 25.6s35.2-19.2 44.8-22.4c92.8-67.2 89.6-67.2 115.2-86.4V288c0-17.67-14.33-32-32-32zm256-96H224c-17.67 0-32 14.33-32 32v32h96c33.21 0 60.59 25.42 63.71 57.82l.29-.22V416h192c17.67 0 32-14.33 32-32V192c0-17.67-14.33-32-32-32zm-32 128h-64v-64h64v64zm-352-96c0-35.29 28.71-64 64-64h224V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v192h96v-32z"]
- };
- var faMale = {
- prefix: 'fas',
- iconName: 'male',
- icon: [192, 512, [], "f183", "M96 0c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64S60.654 0 96 0m48 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H48c-26.51 0-48 21.49-48 48v136c0 13.255 10.745 24 24 24h16v136c0 13.255 10.745 24 24 24h64c13.255 0 24-10.745 24-24V352h16c13.255 0 24-10.745 24-24V192c0-26.51-21.49-48-48-48z"]
- };
- var faMap = {
- prefix: 'fas',
- iconName: 'map',
- icon: [576, 512, [], "f279", "M0 117.66v346.32c0 11.32 11.43 19.06 21.94 14.86L160 416V32L20.12 87.95A32.006 32.006 0 0 0 0 117.66zM192 416l192 64V96L192 32v384zM554.06 33.16L416 96v384l139.88-55.95A31.996 31.996 0 0 0 576 394.34V48.02c0-11.32-11.43-19.06-21.94-14.86z"]
- };
- var faMapMarked = {
- prefix: 'fas',
- iconName: 'map-marked',
- icon: [576, 512, [], "f59f", "M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z"]
- };
- var faMapMarkedAlt = {
- prefix: 'fas',
- iconName: 'map-marked-alt',
- icon: [576, 512, [], "f5a0", "M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zm0 168c-23.2 0-42-18.8-42-42s18.8-42 42-42 42 18.8 42 42-18.8 42-42 42zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z"]
- };
- var faMapMarker = {
- prefix: 'fas',
- iconName: 'map-marker',
- icon: [384, 512, [], "f041", "M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0z"]
- };
- var faMapMarkerAlt = {
- prefix: 'fas',
- iconName: 'map-marker-alt',
- icon: [384, 512, [], "f3c5", "M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z"]
- };
- var faMapPin = {
- prefix: 'fas',
- iconName: 'map-pin',
- icon: [288, 512, [], "f276", "M112 316.94v156.69l22.02 33.02c4.75 7.12 15.22 7.12 19.97 0L176 473.63V316.94c-10.39 1.92-21.06 3.06-32 3.06s-21.61-1.14-32-3.06zM144 0C64.47 0 0 64.47 0 144s64.47 144 144 144 144-64.47 144-144S223.53 0 144 0zm0 76c-37.5 0-68 30.5-68 68 0 6.62-5.38 12-12 12s-12-5.38-12-12c0-50.73 41.28-92 92-92 6.62 0 12 5.38 12 12s-5.38 12-12 12z"]
- };
- var faMapSigns = {
- prefix: 'fas',
- iconName: 'map-signs',
- icon: [512, 512, [], "f277", "M507.31 84.69L464 41.37c-6-6-14.14-9.37-22.63-9.37H288V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v16H56c-13.25 0-24 10.75-24 24v80c0 13.25 10.75 24 24 24h385.37c8.49 0 16.62-3.37 22.63-9.37l43.31-43.31c6.25-6.26 6.25-16.38 0-22.63zM224 496c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V384h-64v112zm232-272H288v-32h-64v32H70.63c-8.49 0-16.62 3.37-22.63 9.37L4.69 276.69c-6.25 6.25-6.25 16.38 0 22.63L48 342.63c6 6 14.14 9.37 22.63 9.37H456c13.25 0 24-10.75 24-24v-80c0-13.25-10.75-24-24-24z"]
- };
- var faMarker = {
- prefix: 'fas',
- iconName: 'marker',
- icon: [512, 512, [], "f5a1", "M93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l75.4-75.4-128.02-128.02-75.4 75.4zM485.49 26.51c-35.35-35.35-92.67-35.35-128.02 0l-21.76 21.76-36.56-36.55c-15.62-15.62-40.95-15.62-56.56 0L138.47 115.84c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0l87.15-87.15 19.59 19.59L191.98 192 320 320.02l165.49-165.49c35.35-35.35 35.35-92.66 0-128.02z"]
- };
- var faMars = {
- prefix: 'fas',
- iconName: 'mars',
- icon: [384, 512, [], "f222", "M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c0-6.6-5.4-12-12-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"]
- };
- var faMarsDouble = {
- prefix: 'fas',
- iconName: 'mars-double',
- icon: [512, 512, [], "f227", "M340 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C198.5 72.1 172.2 64 144 64 64.5 64 0 128.5 0 208s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.5 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 288c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80zm356-128.1h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7c-18.2-11.4-39-18.9-61.5-21.3-2.1 21.8-8.2 43.3-18.4 63.3 1.1 0 2.2-.1 3.2-.1 44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80c0-1.1 0-2.2.1-3.2-20 10.2-41.5 16.4-63.3 18.4C168.4 455.6 229.6 512 304 512c79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12v-79c0-6.7-5.4-12.1-12-12.1z"]
- };
- var faMarsStroke = {
- prefix: 'fas',
- iconName: 'mars-stroke',
- icon: [384, 512, [], "f229", "M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-17.5 17.5-14.1-14.1c-4.7-4.7-12.3-4.7-17 0L224.5 133c-4.7 4.7-4.7 12.3 0 17l14.1 14.1-18 18c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l18-18 14.1 14.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L329.2 164l17.5-17.5 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c-.1-6.6-5.5-12-12.1-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"]
- };
- var faMarsStrokeH = {
- prefix: 'fas',
- iconName: 'mars-stroke-h',
- icon: [480, 512, [], "f22b", "M476.2 247.5l-55.9-55.9c-7.6-7.6-20.5-2.2-20.5 8.5V224H376v-20c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v20h-27.6c-5.8-25.6-18.7-49.9-38.6-69.8C189.6 98 98.4 98 42.2 154.2c-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 19.9-19.9 32.8-44.2 38.6-69.8H312v20c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-20h23.9v23.9c0 10.7 12.9 16 20.5 8.5l55.9-55.9c4.6-4.7 4.6-12.3-.1-17zm-275.6 65.1c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z"]
- };
- var faMarsStrokeV = {
- prefix: 'fas',
- iconName: 'mars-stroke-v',
- icon: [288, 512, [], "f22a", "M245.8 234.2c-19.9-19.9-44.2-32.8-69.8-38.6v-25.4h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V81.4h23.9c10.7 0 16-12.9 8.5-20.5L152.5 5.1c-4.7-4.7-12.3-4.7-17 0L79.6 61c-7.6 7.6-2.2 20.5 8.5 20.5H112v24.7H92c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h20v25.4c-25.6 5.8-49.9 18.7-69.8 38.6-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 56.3-56.2 56.3-147.4 0-203.6zm-45.2 158.4c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z"]
- };
- var faMask = {
- prefix: 'fas',
- iconName: 'mask',
- icon: [640, 512, [], "f6fa", "M320.67 64c-442.6 0-357.57 384-158.46 384 39.9 0 77.47-20.69 101.42-55.86l25.73-37.79c15.66-22.99 46.97-22.99 62.63 0l25.73 37.79C401.66 427.31 439.23 448 479.13 448c189.86 0 290.63-384-158.46-384zM184 308.36c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05zm272 0c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05z"]
- };
- var faMedal = {
- prefix: 'fas',
- iconName: 'medal',
- icon: [512, 512, [], "f5a2", "M223.75 130.75L154.62 15.54A31.997 31.997 0 0 0 127.18 0H16.03C3.08 0-4.5 14.57 2.92 25.18l111.27 158.96c29.72-27.77 67.52-46.83 109.56-53.39zM495.97 0H384.82c-11.24 0-21.66 5.9-27.44 15.54l-69.13 115.21c42.04 6.56 79.84 25.62 109.56 53.38L509.08 25.18C516.5 14.57 508.92 0 495.97 0zM256 160c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm92.52 157.26l-37.93 36.96 8.97 52.22c1.6 9.36-8.26 16.51-16.65 12.09L256 393.88l-46.9 24.65c-8.4 4.45-18.25-2.74-16.65-12.09l8.97-52.22-37.93-36.96c-6.82-6.64-3.05-18.23 6.35-19.59l52.43-7.64 23.43-47.52c2.11-4.28 6.19-6.39 10.28-6.39 4.11 0 8.22 2.14 10.33 6.39l23.43 47.52 52.43 7.64c9.4 1.36 13.17 12.95 6.35 19.59z"]
- };
- var faMedkit = {
- prefix: 'fas',
- iconName: 'medkit',
- icon: [512, 512, [], "f0fa", "M96 480h320V128h-32V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H96v352zm96-384h128v32H192V96zm320 80v256c0 26.51-21.49 48-48 48h-16V128h16c26.51 0 48 21.49 48 48zM64 480H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v352zm288-208v32c0 8.837-7.163 16-16 16h-48v48c0 8.837-7.163 16-16 16h-32c-8.837 0-16-7.163-16-16v-48h-48c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h48v-48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v48h48c8.837 0 16 7.163 16 16z"]
- };
- var faMeh = {
- prefix: 'fas',
- iconName: 'meh',
- icon: [496, 512, [], "f11a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm176 192H152c-21.2 0-21.2-32 0-32h192c21.2 0 21.2 32 0 32zm-16-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"]
- };
- var faMehBlank = {
- prefix: 'fas',
- iconName: 'meh-blank',
- icon: [496, 512, [], "f5a4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"]
- };
- var faMehRollingEyes = {
- prefix: 'fas',
- iconName: 'meh-rolling-eyes',
- icon: [496, 512, [], "f5a5", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 224c0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64s-64-28.7-64-64zm224 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-112c-35.3 0-64-28.7-64-64 0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64z"]
- };
- var faMemory = {
- prefix: 'fas',
- iconName: 'memory',
- icon: [640, 512, [], "f538", "M640 130.94V96c0-17.67-14.33-32-32-32H32C14.33 64 0 78.33 0 96v34.94c18.6 6.61 32 24.19 32 45.06s-13.4 38.45-32 45.06V320h640v-98.94c-18.6-6.61-32-24.19-32-45.06s13.4-38.45 32-45.06zM224 256h-64V128h64v128zm128 0h-64V128h64v128zm128 0h-64V128h64v128zM0 448h64v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h64v-96H0v96z"]
- };
- var faMenorah = {
- prefix: 'fas',
- iconName: 'menorah',
- icon: [640, 512, [], "f676", "M144 128h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm192 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm80-32c17.67 0 32-14.33 32-32S608 0 608 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S512 0 512 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S416 0 416 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S320 0 320 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S224 0 224 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S128 0 128 0 96 46.33 96 64s14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S32 0 32 0 0 46.33 0 64s14.33 32 32 32zm544 192c0 17.67-14.33 32-32 32H352V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v176H96c-17.67 0-32-14.33-32-32V144c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v144c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v144z"]
- };
- var faMercury = {
- prefix: 'fas',
- iconName: 'mercury',
- icon: [288, 512, [], "f223", "M288 208c0-44.2-19.9-83.7-51.2-110.1 2.5-1.8 4.9-3.8 7.2-5.8 24.7-21.2 39.8-48.8 43.2-78.8.9-7.1-4.7-13.3-11.9-13.3h-40.5C229 0 224.1 4.1 223 9.8c-2.4 12.5-9.6 24.3-20.7 33.8C187 56.8 166.3 64 144 64s-43-7.2-58.4-20.4C74.5 34.1 67.4 22.3 64.9 9.8 63.8 4.1 58.9 0 53.2 0H12.7C5.5 0-.1 6.2.8 13.3 4.2 43.4 19.2 71 44 92.2c2.3 2 4.7 3.9 7.2 5.8C19.9 124.3 0 163.8 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z"]
- };
- var faMeteor = {
- prefix: 'fas',
- iconName: 'meteor',
- icon: [512, 512, [], "f753", "M511.328,20.8027c-11.60759,38.70264-34.30724,111.70173-61.30311,187.70077,6.99893,2.09372,13.4042,4,18.60653,5.59368a16.06158,16.06158,0,0,1,9.49854,22.906c-22.106,42.29635-82.69047,152.795-142.47819,214.40356-.99984,1.09373-1.99969,2.5-2.99954,3.49995A194.83046,194.83046,0,1,1,57.085,179.41009c.99985-1,2.40588-2,3.49947-3,61.59994-59.90549,171.97367-120.40473,214.37343-142.4982a16.058,16.058,0,0,1,22.90274,9.49988c1.59351,5.09368,3.49947,11.5936,5.5929,18.59351C379.34818,35.00565,452.43074,12.30281,491.12794.70921A16.18325,16.18325,0,0,1,511.328,20.8027ZM319.951,320.00207A127.98041,127.98041,0,1,0,191.97061,448.00046,127.97573,127.97573,0,0,0,319.951,320.00207Zm-127.98041-31.9996a31.9951,31.9951,0,1,1-31.9951-31.9996A31.959,31.959,0,0,1,191.97061,288.00247Zm31.9951,79.999a15.99755,15.99755,0,1,1-15.99755-15.9998A16.04975,16.04975,0,0,1,223.96571,368.00147Z"]
- };
- var faMicrochip = {
- prefix: 'fas',
- iconName: 'microchip',
- icon: [512, 512, [], "f2db", "M416 48v416c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h224c26.51 0 48 21.49 48 48zm96 58v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42V88h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zM30 376h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6z"]
- };
- var faMicrophone = {
- prefix: 'fas',
- iconName: 'microphone',
- icon: [352, 512, [], "f130", "M176 352c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96zm160-160h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16z"]
- };
- var faMicrophoneAlt = {
- prefix: 'fas',
- iconName: 'microphone-alt',
- icon: [352, 512, [], "f3c9", "M336 192h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16zM176 352c53.02 0 96-42.98 96-96h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96z"]
- };
- var faMicrophoneAltSlash = {
- prefix: 'fas',
- iconName: 'microphone-alt-slash',
- icon: [640, 512, [], "f539", "M633.82 458.1L476.26 336.33C488.74 312.21 496 284.98 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67h-43.67l-41.4-32H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.78c11.71-1.62 23.1-4.28 33.96-8.08l-50.4-38.96c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z"]
- };
- var faMicrophoneSlash = {
- prefix: 'fas',
- iconName: 'microphone-slash',
- icon: [640, 512, [], "f131", "M633.82 458.1l-157.8-121.96C488.61 312.13 496 285.01 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67V96c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.77c11.66-1.6 22.85-4.54 33.67-8.31l-50.11-38.73c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z"]
- };
- var faMicroscope = {
- prefix: 'fas',
- iconName: 'microscope',
- icon: [512, 512, [], "f610", "M160 320h12v16c0 8.84 7.16 16 16 16h40c8.84 0 16-7.16 16-16v-16h12c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32V16c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v16c-17.67 0-32 14.33-32 32v224c0 17.67 14.33 32 32 32zm304 128h-1.29C493.24 413.99 512 369.2 512 320c0-105.88-86.12-192-192-192v64c70.58 0 128 57.42 128 128s-57.42 128-128 128H48c-26.51 0-48 21.49-48 48 0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48zm-360-32h208c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8H104c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8z"]
- };
- var faMinus = {
- prefix: 'fas',
- iconName: 'minus',
- icon: [448, 512, [], "f068", "M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"]
- };
- var faMinusCircle = {
- prefix: 'fas',
- iconName: 'minus-circle',
- icon: [512, 512, [], "f056", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z"]
- };
- var faMinusSquare = {
- prefix: 'fas',
- iconName: 'minus-square',
- icon: [448, 512, [], "f146", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z"]
- };
- var faMitten = {
- prefix: 'fas',
- iconName: 'mitten',
- icon: [448, 512, [], "f7b5", "M368 416H48c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16zm57-209.1c-27.2-22.6-67.5-19-90.1 8.2l-20.9 25-29.6-128.4c-18-77.5-95.4-125.9-172.8-108C34.2 21.6-14.2 98.9 3.7 176.4L51.6 384h309l72.5-87c22.7-27.2 19-67.5-8.1-90.1z"]
- };
- var faMobile = {
- prefix: 'fas',
- iconName: 'mobile',
- icon: [320, 512, [], "f10b", "M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"]
- };
- var faMobileAlt = {
- prefix: 'fas',
- iconName: 'mobile-alt',
- icon: [320, 512, [], "f3cd", "M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm112-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v312z"]
- };
- var faMoneyBill = {
- prefix: 'fas',
- iconName: 'money-bill',
- icon: [640, 512, [], "f0d6", "M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 176c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 48h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z"]
- };
- var faMoneyBillAlt = {
- prefix: 'fas',
- iconName: 'money-bill-alt',
- icon: [640, 512, [], "f3d1", "M352 288h-16v-88c0-4.42-3.58-8-8-8h-13.58c-4.74 0-9.37 1.4-13.31 4.03l-15.33 10.22a7.994 7.994 0 0 0-2.22 11.09l8.88 13.31a7.994 7.994 0 0 0 11.09 2.22l.47-.31V288h-16c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8h64c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 192c-53.02 0-96-50.15-96-112 0-61.86 42.98-112 96-112s96 50.14 96 112c0 61.87-43 112-96 112zm272 32h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z"]
- };
- var faMoneyBillWave = {
- prefix: 'fas',
- iconName: 'money-bill-wave',
- icon: [640, 512, [], "f53a", "M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM48 132.22c20.12 5.04 41.12 7.57 62.72 8.93C104.84 170.54 79 192.69 48 192.69v-60.47zm0 285v-47.78c34.37 0 62.18 27.27 63.71 61.4-22.53-1.81-43.59-6.31-63.71-13.62zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 27.78c-17.52-4.39-35.71-6.85-54.32-8.44 5.87-26.08 27.5-45.88 54.32-49.28v57.72zm0-236.11c-30.89-3.91-54.86-29.7-55.81-61.55 19.54 2.17 38.09 6.23 55.81 12.66v48.89z"]
- };
- var faMoneyBillWaveAlt = {
- prefix: 'fas',
- iconName: 'money-bill-wave-alt',
- icon: [640, 512, [], "f53b", "M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96z"]
- };
- var faMoneyCheck = {
- prefix: 'fas',
- iconName: 'money-check',
- icon: [640, 512, [], "f53c", "M0 448c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128H0v320zm448-208c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-32zm0 120c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H456c-4.42 0-8-3.58-8-8v-16zM64 264c0-4.42 3.58-8 8-8h304c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm0 96c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zM624 32H16C7.16 32 0 39.16 0 48v48h640V48c0-8.84-7.16-16-16-16z"]
- };
- var faMoneyCheckAlt = {
- prefix: 'fas',
- iconName: 'money-check-alt',
- icon: [640, 512, [], "f53d", "M608 32H32C14.33 32 0 46.33 0 64v384c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM176 327.88V344c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V152c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07zM416 312c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm160 0c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h272c4.42 0 8 3.58 8 8v16z"]
- };
- var faMonument = {
- prefix: 'fas',
- iconName: 'monument',
- icon: [384, 512, [], "f5a6", "M368 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h352c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-78.86-347.26a31.97 31.97 0 0 0-9.21-19.44L203.31 4.69c-6.25-6.25-16.38-6.25-22.63 0l-76.6 76.61a31.97 31.97 0 0 0-9.21 19.44L64 416h256l-30.86-315.26zM240 307.2c0 6.4-6.4 12.8-12.8 12.8h-70.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h70.4c6.4 0 12.8 6.4 12.8 12.8v38.4z"]
- };
- var faMoon = {
- prefix: 'fas',
- iconName: 'moon',
- icon: [512, 512, [], "f186", "M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z"]
- };
- var faMortarPestle = {
- prefix: 'fas',
- iconName: 'mortar-pestle',
- icon: [512, 512, [], "f5a7", "M501.54 60.91c17.22-17.22 12.51-46.25-9.27-57.14a35.696 35.696 0 0 0-37.37 3.37L251.09 160h151.37l99.08-99.09zM496 192H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c0 80.98 50.2 150.11 121.13 178.32-12.76 16.87-21.72 36.8-24.95 58.69-1.46 9.92 6.04 18.98 16.07 18.98h223.5c10.03 0 17.53-9.06 16.07-18.98-3.22-21.89-12.18-41.82-24.95-58.69C429.8 406.11 480 336.98 480 256h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"]
- };
- var faMosque = {
- prefix: 'fas',
- iconName: 'mosque',
- icon: [640, 512, [], "f678", "M0 480c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V160H0v320zm579.16-192c17.86-17.39 28.84-37.34 28.84-58.91 0-52.86-41.79-93.79-87.92-122.9-41.94-26.47-80.63-57.77-111.96-96.22L400 0l-8.12 9.97c-31.33 38.45-70.01 69.76-111.96 96.22C233.79 135.3 192 176.23 192 229.09c0 21.57 10.98 41.52 28.84 58.91h358.32zM608 320H192c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h32v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h64v-72c0-48 48-72 48-72s48 24 48 72v72h64v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h32c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM64 0S0 32 0 96v32h128V96c0-64-64-96-64-96z"]
- };
- var faMotorcycle = {
- prefix: 'fas',
- iconName: 'motorcycle',
- icon: [640, 512, [], "f21c", "M512.9 192c-14.9-.1-29.1 2.3-42.4 6.9L437.6 144H520c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24h-45.3c-6.8 0-13.3 2.9-17.8 7.9l-37.5 41.7-22.8-38C392.2 68.4 384.4 64 376 64h-80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h66.4l19.2 32H227.9c-17.7-23.1-44.9-40-99.9-40H72.5C59 104 47.7 115 48 128.5c.2 13 10.9 23.5 24 23.5h56c24.5 0 38.7 10.9 47.8 24.8l-11.3 20.5c-13-3.9-26.9-5.7-41.3-5.2C55.9 194.5 1.6 249.6 0 317c-1.6 72.1 56.3 131 128 131 59.6 0 109.7-40.8 124-96h84.2c13.7 0 24.6-11.4 24-25.1-2.1-47.1 17.5-93.7 56.2-125l12.5 20.8c-27.6 23.7-45.1 58.9-44.8 98.2.5 69.6 57.2 126.5 126.8 127.1 71.6.7 129.8-57.5 129.2-129.1-.7-69.6-57.6-126.4-127.2-126.9zM128 400c-44.1 0-80-35.9-80-80s35.9-80 80-80c4.2 0 8.4.3 12.5 1L99 316.4c-8.8 16 2.8 35.6 21 35.6h81.3c-12.4 28.2-40.6 48-73.3 48zm463.9-75.6c-2.2 40.6-35 73.4-75.5 75.5-46.1 2.5-84.4-34.3-84.4-79.9 0-21.4 8.4-40.8 22.1-55.1l49.4 82.4c4.5 7.6 14.4 10 22 5.5l13.7-8.2c7.6-4.5 10-14.4 5.5-22l-48.6-80.9c5.2-1.1 10.5-1.6 15.9-1.6 45.6-.1 82.3 38.2 79.9 84.3z"]
- };
- var faMountain = {
- prefix: 'fas',
- iconName: 'mountain',
- icon: [640, 512, [], "f6fc", "M634.92 462.7l-288-448C341.03 5.54 330.89 0 320 0s-21.03 5.54-26.92 14.7l-288 448a32.001 32.001 0 0 0-1.17 32.64A32.004 32.004 0 0 0 32 512h576c11.71 0 22.48-6.39 28.09-16.67a31.983 31.983 0 0 0-1.17-32.63zM320 91.18L405.39 224H320l-64 64-38.06-38.06L320 91.18z"]
- };
- var faMouse = {
- prefix: 'fas',
- iconName: 'mouse',
- icon: [384, 512, [], "f8cc", "M0 352a160 160 0 0 0 160 160h64a160 160 0 0 0 160-160V224H0zM176 0h-16A160 160 0 0 0 0 160v32h176zm48 0h-16v192h176v-32A160 160 0 0 0 224 0z"]
- };
- var faMousePointer = {
- prefix: 'fas',
- iconName: 'mouse-pointer',
- icon: [320, 512, [], "f245", "M302.189 329.126H196.105l55.831 135.993c3.889 9.428-.555 19.999-9.444 23.999l-49.165 21.427c-9.165 4-19.443-.571-23.332-9.714l-53.053-129.136-86.664 89.138C18.729 472.71 0 463.554 0 447.977V18.299C0 1.899 19.921-6.096 30.277 5.443l284.412 292.542c11.472 11.179 3.007 31.141-12.5 31.141z"]
- };
- var faMugHot = {
- prefix: 'fas',
- iconName: 'mug-hot',
- icon: [512, 512, [], "f7b6", "M127.1 146.5c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C111.8 5.9 105 0 96.8 0H80.4C70.6 0 63 8.5 64.1 18c3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zm112 0c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C223.8 5.9 217 0 208.8 0h-16.4c-9.8 0-17.5 8.5-16.3 18 3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zM400 192H32c-17.7 0-32 14.3-32 32v192c0 53 43 96 96 96h192c53 0 96-43 96-96h16c61.8 0 112-50.2 112-112s-50.2-112-112-112zm0 160h-16v-96h16c26.5 0 48 21.5 48 48s-21.5 48-48 48z"]
- };
- var faMusic = {
- prefix: 'fas',
- iconName: 'music',
- icon: [512, 512, [], "f001", "M470.38 1.51L150.41 96A32 32 0 0 0 128 126.51v261.41A139 139 0 0 0 96 384c-53 0-96 28.66-96 64s43 64 96 64 96-28.66 96-64V214.32l256-75v184.61a138.4 138.4 0 0 0-32-3.93c-53 0-96 28.66-96 64s43 64 96 64 96-28.65 96-64V32a32 32 0 0 0-41.62-30.49z"]
- };
- var faNetworkWired = {
- prefix: 'fas',
- iconName: 'network-wired',
- icon: [640, 512, [], "f6ff", "M640 264v-16c0-8.84-7.16-16-16-16H344v-40h72c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H224c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h72v40H16c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h104v40H64c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h304v40h-56c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h104c8.84 0 16-7.16 16-16zM256 128V64h128v64H256zm-64 320H96v-64h96v64zm352 0h-96v-64h96v64z"]
- };
- var faNeuter = {
- prefix: 'fas',
- iconName: 'neuter',
- icon: [288, 512, [], "f22c", "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V468c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V316.4c64.1-14.5 112-71.9 112-140.4zm-144 80c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"]
- };
- var faNewspaper = {
- prefix: 'fas',
- iconName: 'newspaper',
- icon: [576, 512, [], "f1ea", "M552 64H88c-13.255 0-24 10.745-24 24v8H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h472c26.51 0 48-21.49 48-48V88c0-13.255-10.745-24-24-24zM56 400a8 8 0 0 1-8-8V144h16v248a8 8 0 0 1-8 8zm236-16H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm-208-96H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm0-96H140c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12z"]
- };
- var faNotEqual = {
- prefix: 'fas',
- iconName: 'not-equal',
- icon: [448, 512, [], "f53e", "M416 208c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32h-23.88l51.87-66.81c5.37-7.02 4.04-17.06-2.97-22.43L415.61 3.3c-7.02-5.38-17.06-4.04-22.44 2.97L311.09 112H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h204.56l-74.53 96H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h55.49l-51.87 66.81c-5.37 7.01-4.04 17.05 2.97 22.43L64 508.7c7.02 5.38 17.06 4.04 22.43-2.97L168.52 400H416c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32H243.05l74.53-96H416z"]
- };
- var faNotesMedical = {
- prefix: 'fas',
- iconName: 'notes-medical',
- icon: [384, 512, [], "f481", "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm96 304c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm0-192c0 4.4-3.6 8-8 8H104c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16z"]
- };
- var faObjectGroup = {
- prefix: 'fas',
- iconName: 'object-group',
- icon: [512, 512, [], "f247", "M480 128V96h20c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v20H64V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v40c0 6.627 5.373 12 12 12h20v320H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-20h384v20c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20V128zM96 276V140c0-6.627 5.373-12 12-12h168c6.627 0 12 5.373 12 12v136c0 6.627-5.373 12-12 12H108c-6.627 0-12-5.373-12-12zm320 96c0 6.627-5.373 12-12 12H236c-6.627 0-12-5.373-12-12v-52h72c13.255 0 24-10.745 24-24v-72h84c6.627 0 12 5.373 12 12v136z"]
- };
- var faObjectUngroup = {
- prefix: 'fas',
- iconName: 'object-ungroup',
- icon: [576, 512, [], "f248", "M64 320v26a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6v-52a6 6 0 0 1 6-6h26V96H6a6 6 0 0 1-6-6V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v26h288V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-26v192h26a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-52a6 6 0 0 1-6-6v-26H64zm480-64v-32h26a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-52a6 6 0 0 0-6 6v26H408v72h8c13.255 0 24 10.745 24 24v64c0 13.255-10.745 24-24 24h-64c-13.255 0-24-10.745-24-24v-8H192v72h-26a6 6 0 0 0-6 6v52a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-26h288v26a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-26V256z"]
- };
- var faOilCan = {
- prefix: 'fas',
- iconName: 'oil-can',
- icon: [640, 512, [], "f613", "M629.8 160.31L416 224l-50.49-25.24a64.07 64.07 0 0 0-28.62-6.76H280v-48h56c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h56v48h-56L37.72 166.86a31.9 31.9 0 0 0-5.79-.53C14.67 166.33 0 180.36 0 198.34v94.95c0 15.46 11.06 28.72 26.28 31.48L96 337.46V384c0 17.67 14.33 32 32 32h274.63c8.55 0 16.75-3.42 22.76-9.51l212.26-214.75c1.5-1.5 2.34-3.54 2.34-5.66V168c.01-5.31-5.08-9.15-10.19-7.69zM96 288.67l-48-8.73v-62.43l48 8.73v62.43zm453.33 84.66c0 23.56 19.1 42.67 42.67 42.67s42.67-19.1 42.67-42.67S592 288 592 288s-42.67 61.77-42.67 85.33z"]
- };
- var faOm = {
- prefix: 'fas',
- iconName: 'om',
- icon: [512, 512, [], "f679", "M360.6 60.94a10.43 10.43 0 0 0 14.76 0l21.57-21.56a10.43 10.43 0 0 0 0-14.76L375.35 3.06c-4.08-4.07-10.68-4.07-14.76 0l-21.57 21.56a10.43 10.43 0 0 0 0 14.76l21.58 21.56zM412.11 192c-26.69 0-51.77 10.39-70.64 29.25l-24.25 24.25c-6.78 6.77-15.78 10.5-25.38 10.5H245c10.54-22.1 14.17-48.11 7.73-75.23-10.1-42.55-46.36-76.11-89.52-83.19-36.15-5.93-70.9 5.04-96.01 28.78-7.36 6.96-6.97 18.85 1.12 24.93l26.15 19.63c5.72 4.3 13.66 4.32 19.2-.21 8.45-6.9 19.02-10.71 30.27-10.71 26.47 0 48.01 21.53 48.01 48s-21.54 48-48.01 48h-31.9c-11.96 0-19.74 12.58-14.39 23.28l16.09 32.17c2.53 5.06 7.6 8.1 13.17 8.55h33.03c35.3 0 64.01 28.7 64.01 64s-28.71 64-64.01 64c-96.02 0-122.35-54.02-145.15-92.03-4.53-7.55-14.77-3.58-14.79 5.22C-.09 416 41.13 512 159.94 512c70.59 0 128.02-57.42 128.02-128 0-23.42-6.78-45.1-17.81-64h21.69c26.69 0 51.77-10.39 70.64-29.25l24.25-24.25c6.78-6.77 15.78-10.5 25.38-10.5 19.78 0 35.88 16.09 35.88 35.88V392c0 13.23-18.77 24-32.01 24-39.4 0-66.67-24.24-81.82-42.89-4.77-5.87-14.2-2.54-14.2 5.02V416s0 64 96.02 64c48.54 0 96.02-39.47 96.02-88V291.88c0-55.08-44.8-99.88-99.89-99.88zm42.18-124.73c-85.55 65.12-169.05 2.75-172.58.05-6.02-4.62-14.44-4.38-20.14.55-5.74 4.92-7.27 13.17-3.66 19.8 1.61 2.95 40.37 72.34 118.8 72.34 79.92 0 98.78-31.36 101.75-37.66 1.02-2.12 1.53-4.47 1.53-6.83V80c0-13.22-15.14-20.69-25.7-12.73z"]
- };
- var faOtter = {
- prefix: 'fas',
- iconName: 'otter',
- icon: [640, 512, [], "f700", "M608 32h-32l-13.25-13.25A63.97 63.97 0 0 0 517.49 0H497c-11.14 0-22.08 2.91-31.75 8.43L312 96h-56C149.96 96 64 181.96 64 288v1.61c0 32.75-16 62.14-39.56 84.89-18.19 17.58-28.1 43.68-23.19 71.8 6.76 38.8 42.9 65.7 82.28 65.7H192c17.67 0 32-14.33 32-32s-14.33-32-32-32H80c-8.83 0-16-7.17-16-16s7.17-16 16-16h224c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-64l149.49-80.5L448 416h80c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-28.22l-55.11-110.21L521.14 192H544c53.02 0 96-42.98 96-96V64c0-17.67-14.33-32-32-32zm-96 16c8.84 0 16 7.16 16 16s-7.16 16-16 16-16-7.16-16-16 7.16-16 16-16zm32 96h-34.96L407.2 198.84l-13.77-27.55L512 112h77.05c-6.62 18.58-24.22 32-45.05 32z"]
- };
- var faOutdent = {
- prefix: 'fas',
- iconName: 'outdent',
- icon: [448, 512, [], "f03b", "M100.69 363.29c10 10 27.31 2.93 27.31-11.31V160c0-14.32-17.33-21.31-27.31-11.31l-96 96a16 16 0 0 0 0 22.62zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"]
- };
- var faPager = {
- prefix: 'fas',
- iconName: 'pager',
- icon: [512, 512, [], "f815", "M448 64H64a64 64 0 0 0-64 64v256a64 64 0 0 0 64 64h384a64 64 0 0 0 64-64V128a64 64 0 0 0-64-64zM160 368H80a16 16 0 0 1-16-16v-16a16 16 0 0 1 16-16h80zm128-16a16 16 0 0 1-16 16h-80v-48h80a16 16 0 0 1 16 16zm160-128a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32v-64a32 32 0 0 1 32-32h320a32 32 0 0 1 32 32z"]
- };
- var faPaintBrush = {
- prefix: 'fas',
- iconName: 'paint-brush',
- icon: [512, 512, [], "f1fc", "M167.02 309.34c-40.12 2.58-76.53 17.86-97.19 72.3-2.35 6.21-8 9.98-14.59 9.98-11.11 0-45.46-27.67-55.25-34.35C0 439.62 37.93 512 128 512c75.86 0 128-43.77 128-120.19 0-3.11-.65-6.08-.97-9.13l-88.01-73.34zM457.89 0c-15.16 0-29.37 6.71-40.21 16.45C213.27 199.05 192 203.34 192 257.09c0 13.7 3.25 26.76 8.73 38.7l63.82 53.18c7.21 1.8 14.64 3.03 22.39 3.03 62.11 0 98.11-45.47 211.16-256.46 7.38-14.35 13.9-29.85 13.9-45.99C512 20.64 486 0 457.89 0z"]
- };
- var faPaintRoller = {
- prefix: 'fas',
- iconName: 'paint-roller',
- icon: [512, 512, [], "f5aa", "M416 128V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32zm32-64v128c0 17.67-14.33 32-32 32H256c-35.35 0-64 28.65-64 64v32c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32v-32h160c53.02 0 96-42.98 96-96v-64c0-35.35-28.65-64-64-64z"]
- };
- var faPalette = {
- prefix: 'fas',
- iconName: 'palette',
- icon: [512, 512, [], "f53f", "M204.3 5C104.9 24.4 24.8 104.3 5.2 203.4c-37 187 131.7 326.4 258.8 306.7 41.2-6.4 61.4-54.6 42.5-91.7-23.1-45.4 9.9-98.4 60.9-98.4h79.7c35.8 0 64.8-29.6 64.9-65.3C511.5 97.1 368.1-26.9 204.3 5zM96 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm32-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128-64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"]
- };
- var faPallet = {
- prefix: 'fas',
- iconName: 'pallet',
- icon: [640, 512, [], "f482", "M144 256h352c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H384v128l-64-32-64 32V0H144c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16zm480 128c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v64H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-48v-64h48zm-336 64H128v-64h160v64zm224 0H352v-64h160v64z"]
- };
- var faPaperPlane = {
- prefix: 'fas',
- iconName: 'paper-plane',
- icon: [512, 512, [], "f1d8", "M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z"]
- };
- var faPaperclip = {
- prefix: 'fas',
- iconName: 'paperclip',
- icon: [448, 512, [], "f0c6", "M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z"]
- };
- var faParachuteBox = {
- prefix: 'fas',
- iconName: 'parachute-box',
- icon: [512, 512, [], "f4cd", "M511.9 175c-9.1-75.6-78.4-132.4-158.3-158.7C390 55.7 416 116.9 416 192h28.1L327.5 321.5c-2.5-.6-4.8-1.5-7.5-1.5h-48V192h112C384 76.8 315.1 0 256 0S128 76.8 128 192h112v128h-48c-2.7 0-5 .9-7.5 1.5L67.9 192H96c0-75.1 26-136.3 62.4-175.7C78.5 42.7 9.2 99.5.1 175c-1.1 9.1 6.8 17 16 17h8.7l136.7 151.9c-.7 2.6-1.6 5.2-1.6 8.1v128c0 17.7 14.3 32 32 32h128c17.7 0 32-14.3 32-32V352c0-2.9-.9-5.4-1.6-8.1L487.1 192h8.7c9.3 0 17.2-7.8 16.1-17z"]
- };
- var faParagraph = {
- prefix: 'fas',
- iconName: 'paragraph',
- icon: [448, 512, [], "f1dd", "M448 48v32a16 16 0 0 1-16 16h-48v368a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V96h-32v368a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V352h-32a160 160 0 0 1 0-320h240a16 16 0 0 1 16 16z"]
- };
- var faParking = {
- prefix: 'fas',
- iconName: 'parking',
- icon: [448, 512, [], "f540", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM240 320h-48v48c0 8.8-7.2 16-16 16h-32c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16h96c52.9 0 96 43.1 96 96s-43.1 96-96 96zm0-128h-48v64h48c17.6 0 32-14.4 32-32s-14.4-32-32-32z"]
- };
- var faPassport = {
- prefix: 'fas',
- iconName: 'passport',
- icon: [448, 512, [], "f5ab", "M129.62 176h39.09c1.49-27.03 6.54-51.35 14.21-70.41-27.71 13.24-48.02 39.19-53.3 70.41zm0 32c5.29 31.22 25.59 57.17 53.3 70.41-7.68-19.06-12.72-43.38-14.21-70.41h-39.09zM224 286.69c7.69-7.45 20.77-34.42 23.43-78.69h-46.87c2.67 44.26 15.75 71.24 23.44 78.69zM200.57 176h46.87c-2.66-44.26-15.74-71.24-23.43-78.69-7.7 7.45-20.78 34.43-23.44 78.69zm64.51 102.41c27.71-13.24 48.02-39.19 53.3-70.41h-39.09c-1.49 27.03-6.53 51.35-14.21 70.41zM416 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h352c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32zm-80 416H112c-8.8 0-16-7.2-16-16s7.2-16 16-16h224c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-112-96c-70.69 0-128-57.31-128-128S153.31 64 224 64s128 57.31 128 128-57.31 128-128 128zm41.08-214.41c7.68 19.06 12.72 43.38 14.21 70.41h39.09c-5.28-31.22-25.59-57.17-53.3-70.41z"]
- };
- var faPastafarianism = {
- prefix: 'fas',
- iconName: 'pastafarianism',
- icon: [640, 512, [], "f67b", "M624.54 347.67c-32.7-12.52-57.36 4.25-75.37 16.45-17.06 11.53-23.25 14.42-31.41 11.36-8.12-3.09-10.83-9.38-15.89-29.38-3.33-13.15-7.44-29.32-17.95-42.65 2.24-2.91 4.43-5.79 6.38-8.57C500.47 304.45 513.71 312 532 312c33.95 0 50.87-25.78 62.06-42.83 10.59-16.14 15-21.17 21.94-21.17 13.25 0 24-10.75 24-24s-10.75-24-24-24c-33.95 0-50.87 25.78-62.06 42.83-10.6 16.14-15 21.17-21.94 21.17-17.31 0-37.48-61.43-97.26-101.91l17.25-34.5C485.43 125.5 512 97.98 512 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 13.02 3.94 25.1 10.62 35.21l-18.15 36.3c-16.98-4.6-35.6-7.51-56.46-7.51s-39.49 2.91-56.46 7.51l-18.15-36.3C252.06 89.1 256 77.02 256 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 33.98 26.56 61.5 60.02 63.6l17.25 34.5C145.68 202.44 125.15 264 108 264c-6.94 0-11.34-5.03-21.94-21.17C74.88 225.78 57.96 200 24 200c-13.25 0-24 10.75-24 24s10.75 24 24 24c6.94 0 11.34 5.03 21.94 21.17C57.13 286.22 74.05 312 108 312c18.29 0 31.53-7.55 41.7-17.11 1.95 2.79 4.14 5.66 6.38 8.57-10.51 13.33-14.62 29.5-17.95 42.65-5.06 20-7.77 26.28-15.89 29.38-8.11 3.06-14.33.17-31.41-11.36-18.03-12.2-42.72-28.92-75.37-16.45-12.39 4.72-18.59 18.58-13.87 30.97 4.72 12.41 18.61 18.61 30.97 13.88 8.16-3.09 14.34-.19 31.39 11.36 13.55 9.16 30.83 20.86 52.42 20.84 7.17 0 14.83-1.28 22.97-4.39 32.66-12.44 39.98-41.33 45.33-62.44 2.21-8.72 3.99-14.49 5.95-18.87 16.62 13.61 36.95 25.88 61.64 34.17-9.96 37-32.18 90.8-60.26 90.8-13.25 0-24 10.75-24 24s10.75 24 24 24c66.74 0 97.05-88.63 107.42-129.14 6.69.6 13.42 1.14 20.58 1.14s13.89-.54 20.58-1.14C350.95 423.37 381.26 512 448 512c13.25 0 24-10.75 24-24s-10.75-24-24-24c-27.94 0-50.21-53.81-60.22-90.81 24.69-8.29 45-20.56 61.62-34.16 1.96 4.38 3.74 10.15 5.95 18.87 5.34 21.11 12.67 50 45.33 62.44 8.14 3.11 15.8 4.39 22.97 4.39 21.59 0 38.87-11.69 52.42-20.84 17.05-11.55 23.28-14.45 31.39-11.36 12.39 4.75 26.27-1.47 30.97-13.88 4.71-12.4-1.49-26.26-13.89-30.98zM448 48c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zm-256 0c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16z"]
- };
- var faPaste = {
- prefix: 'fas',
- iconName: 'paste',
- icon: [448, 512, [], "f0ea", "M128 184c0-30.879 25.122-56 56-56h136V56c0-13.255-10.745-24-24-24h-80.61C204.306 12.89 183.637 0 160 0s-44.306 12.89-55.39 32H24C10.745 32 0 42.745 0 56v336c0 13.255 10.745 24 24 24h104V184zm32-144c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24zm184 248h104v200c0 13.255-10.745 24-24 24H184c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h136v104c0 13.2 10.8 24 24 24zm104-38.059V256h-96v-96h6.059a24 24 0 0 1 16.97 7.029l65.941 65.941a24.002 24.002 0 0 1 7.03 16.971z"]
- };
- var faPause = {
- prefix: 'fas',
- iconName: 'pause',
- icon: [448, 512, [], "f04c", "M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z"]
- };
- var faPauseCircle = {
- prefix: 'fas',
- iconName: 'pause-circle',
- icon: [512, 512, [], "f28b", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-16 328c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160zm112 0c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160z"]
- };
- var faPaw = {
- prefix: 'fas',
- iconName: 'paw',
- icon: [512, 512, [], "f1b0", "M256 224c-79.41 0-192 122.76-192 200.25 0 34.9 26.81 55.75 71.74 55.75 48.84 0 81.09-25.08 120.26-25.08 39.51 0 71.85 25.08 120.26 25.08 44.93 0 71.74-20.85 71.74-55.75C448 346.76 335.41 224 256 224zm-147.28-12.61c-10.4-34.65-42.44-57.09-71.56-50.13-29.12 6.96-44.29 40.69-33.89 75.34 10.4 34.65 42.44 57.09 71.56 50.13 29.12-6.96 44.29-40.69 33.89-75.34zm84.72-20.78c30.94-8.14 46.42-49.94 34.58-93.36s-46.52-72.01-77.46-63.87-46.42 49.94-34.58 93.36c11.84 43.42 46.53 72.02 77.46 63.87zm281.39-29.34c-29.12-6.96-61.15 15.48-71.56 50.13-10.4 34.65 4.77 68.38 33.89 75.34 29.12 6.96 61.15-15.48 71.56-50.13 10.4-34.65-4.77-68.38-33.89-75.34zm-156.27 29.34c30.94 8.14 65.62-20.45 77.46-63.87 11.84-43.42-3.64-85.21-34.58-93.36s-65.62 20.45-77.46 63.87c-11.84 43.42 3.64 85.22 34.58 93.36z"]
- };
- var faPeace = {
- prefix: 'fas',
- iconName: 'peace',
- icon: [496, 512, [], "f67c", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm184 248c0 31.93-8.2 61.97-22.57 88.17L280 240.63V74.97c86.23 15.21 152 90.5 152 181.03zM216 437.03c-33.86-5.97-64.49-21.2-89.29-43.02L216 322.57v114.46zm64-114.46L369.29 394c-24.8 21.82-55.43 37.05-89.29 43.02V322.57zm-64-247.6v165.66L86.57 344.17C72.2 317.97 64 287.93 64 256c0-90.53 65.77-165.82 152-181.03z"]
- };
- var faPen = {
- prefix: 'fas',
- iconName: 'pen',
- icon: [512, 512, [], "f304", "M290.74 93.24l128.02 128.02-277.99 277.99-114.14 12.6C11.35 513.54-1.56 500.62.14 485.34l12.7-114.22 277.9-277.88zm207.2-19.06l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.76 18.75-49.16 0-67.91z"]
- };
- var faPenAlt = {
- prefix: 'fas',
- iconName: 'pen-alt',
- icon: [512, 512, [], "f305", "M497.94 74.17l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91zm-246.8-20.53c-15.62-15.62-40.94-15.62-56.56 0L75.8 172.43c-6.25 6.25-6.25 16.38 0 22.62l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l101.82-101.82 22.63 22.62L93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l196.79-196.79-82.77-82.77-84.85-84.85z"]
- };
- var faPenFancy = {
- prefix: 'fas',
- iconName: 'pen-fancy',
- icon: [512, 512, [], "f5ac", "M79.18 282.94a32.005 32.005 0 0 0-20.24 20.24L0 480l4.69 4.69 92.89-92.89c-.66-2.56-1.57-5.03-1.57-7.8 0-17.67 14.33-32 32-32s32 14.33 32 32-14.33 32-32 32c-2.77 0-5.24-.91-7.8-1.57l-92.89 92.89L32 512l176.82-58.94a31.983 31.983 0 0 0 20.24-20.24l33.07-84.07-98.88-98.88-84.07 33.07zM369.25 28.32L186.14 227.81l97.85 97.85 199.49-183.11C568.4 67.48 443.73-55.94 369.25 28.32z"]
- };
- var faPenNib = {
- prefix: 'fas',
- iconName: 'pen-nib',
- icon: [512, 512, [], "f5ad", "M136.6 138.79a64.003 64.003 0 0 0-43.31 41.35L0 460l14.69 14.69L164.8 324.58c-2.99-6.26-4.8-13.18-4.8-20.58 0-26.51 21.49-48 48-48s48 21.49 48 48-21.49 48-48 48c-7.4 0-14.32-1.81-20.58-4.8L37.31 497.31 52 512l279.86-93.29a64.003 64.003 0 0 0 41.35-43.31L416 224 288 96l-151.4 42.79zm361.34-64.62l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91z"]
- };
- var faPenSquare = {
- prefix: 'fas',
- iconName: 'pen-square',
- icon: [448, 512, [], "f14b", "M400 480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zM238.1 177.9L102.4 313.6l-6.3 57.1c-.8 7.6 5.6 14.1 13.3 13.3l57.1-6.3L302.2 242c2.3-2.3 2.3-6.1 0-8.5L246.7 178c-2.5-2.4-6.3-2.4-8.6-.1zM345 165.1L314.9 135c-9.4-9.4-24.6-9.4-33.9 0l-23.1 23.1c-2.3 2.3-2.3 6.1 0 8.5l55.5 55.5c2.3 2.3 6.1 2.3 8.5 0L345 199c9.3-9.3 9.3-24.5 0-33.9z"]
- };
- var faPencilAlt = {
- prefix: 'fas',
- iconName: 'pencil-alt',
- icon: [512, 512, [], "f303", "M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z"]
- };
- var faPencilRuler = {
- prefix: 'fas',
- iconName: 'pencil-ruler',
- icon: [512, 512, [], "f5ae", "M109.46 244.04l134.58-134.56-44.12-44.12-61.68 61.68a7.919 7.919 0 0 1-11.21 0l-11.21-11.21c-3.1-3.1-3.1-8.12 0-11.21l61.68-61.68-33.64-33.65C131.47-3.1 111.39-3.1 99 9.29L9.29 99c-12.38 12.39-12.39 32.47 0 44.86l100.17 100.18zm388.47-116.8c18.76-18.76 18.75-49.17 0-67.93l-45.25-45.25c-18.76-18.76-49.18-18.76-67.95 0l-46.02 46.01 113.2 113.2 46.02-46.03zM316.08 82.71l-297 296.96L.32 487.11c-2.53 14.49 10.09 27.11 24.59 24.56l107.45-18.84L429.28 195.9 316.08 82.71zm186.63 285.43l-33.64-33.64-61.68 61.68c-3.1 3.1-8.12 3.1-11.21 0l-11.21-11.21c-3.09-3.1-3.09-8.12 0-11.21l61.68-61.68-44.14-44.14L267.93 402.5l100.21 100.2c12.39 12.39 32.47 12.39 44.86 0l89.71-89.7c12.39-12.39 12.39-32.47 0-44.86z"]
- };
- var faPeopleArrows = {
- prefix: 'fas',
- iconName: 'people-arrows',
- icon: [576, 512, [], "e068", "M96,128A64,64,0,1,0,32,64,64,64,0,0,0,96,128Zm0,176.08a44.11,44.11,0,0,1,13.64-32L181.77,204c1.65-1.55,3.77-2.31,5.61-3.57A63.91,63.91,0,0,0,128,160H64A64,64,0,0,0,0,224v96a32,32,0,0,0,32,32V480a32,32,0,0,0,32,32h64a32,32,0,0,0,32-32V383.61l-50.36-47.53A44.08,44.08,0,0,1,96,304.08ZM480,128a64,64,0,1,0-64-64A64,64,0,0,0,480,128Zm32,32H448a63.91,63.91,0,0,0-59.38,40.42c1.84,1.27,4,2,5.62,3.59l72.12,68.06a44.37,44.37,0,0,1,0,64L416,383.62V480a32,32,0,0,0,32,32h64a32,32,0,0,0,32-32V352a32,32,0,0,0,32-32V224A64,64,0,0,0,512,160ZM444.4,295.34l-72.12-68.06A12,12,0,0,0,352,236v36H224V236a12,12,0,0,0-20.28-8.73L131.6,295.34a12.4,12.4,0,0,0,0,17.47l72.12,68.07A12,12,0,0,0,224,372.14V336H352v36.14a12,12,0,0,0,20.28,8.74l72.12-68.07A12.4,12.4,0,0,0,444.4,295.34Z"]
- };
- var faPeopleCarry = {
- prefix: 'fas',
- iconName: 'people-carry',
- icon: [640, 512, [], "f4ce", "M128 96c26.5 0 48-21.5 48-48S154.5 0 128 0 80 21.5 80 48s21.5 48 48 48zm384 0c26.5 0 48-21.5 48-48S538.5 0 512 0s-48 21.5-48 48 21.5 48 48 48zm125.7 372.1l-44-110-41.1 46.4-2 18.2 27.7 69.2c5 12.5 17 20.1 29.7 20.1 4 0 8-.7 11.9-2.3 16.4-6.6 24.4-25.2 17.8-41.6zm-34.2-209.8L585 178.1c-4.6-20-18.6-36.8-37.5-44.9-18.5-8-39-6.7-56.1 3.3-22.7 13.4-39.7 34.5-48.1 59.4L432 229.8 416 240v-96c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16v96l-16.1-10.2-11.3-33.9c-8.3-25-25.4-46-48.1-59.4-17.2-10-37.6-11.3-56.1-3.3-18.9 8.1-32.9 24.9-37.5 44.9l-18.4 80.2c-4.6 20 .7 41.2 14.4 56.7l67.2 75.9 10.1 92.6C130 499.8 143.8 512 160 512c1.2 0 2.3-.1 3.5-.2 17.6-1.9 30.2-17.7 28.3-35.3l-10.1-92.8c-1.5-13-6.9-25.1-15.6-35l-43.3-49 17.6-70.3 6.8 20.4c4.1 12.5 11.9 23.4 24.5 32.6l51.1 32.5c4.6 2.9 12.1 4.6 17.2 5h160c5.1-.4 12.6-2.1 17.2-5l51.1-32.5c12.6-9.2 20.4-20 24.5-32.6l6.8-20.4 17.6 70.3-43.3 49c-8.7 9.9-14.1 22-15.6 35l-10.1 92.8c-1.9 17.6 10.8 33.4 28.3 35.3 1.2.1 2.3.2 3.5.2 16.1 0 30-12.1 31.8-28.5l10.1-92.6 67.2-75.9c13.6-15.5 19-36.7 14.4-56.7zM46.3 358.1l-44 110c-6.6 16.4 1.4 35 17.8 41.6 16.8 6.6 35.1-1.7 41.6-17.8l27.7-69.2-2-18.2-41.1-46.4z"]
- };
- var faPepperHot = {
- prefix: 'fas',
- iconName: 'pepper-hot',
- icon: [512, 512, [], "f816", "M330.67 263.12V173.4l-52.75-24.22C219.44 218.76 197.58 400 56 400a56 56 0 0 0 0 112c212.64 0 370.65-122.87 419.18-210.34l-37.05-38.54zm131.09-128.37C493.92 74.91 477.18 26.48 458.62 3a8 8 0 0 0-11.93-.59l-22.9 23a8.06 8.06 0 0 0-.89 10.23c6.86 10.36 17.05 35.1-1.4 72.32A142.85 142.85 0 0 0 364.34 96c-28 0-54 8.54-76.34 22.59l74.67 34.29v78.24h89.09L506.44 288c3.26-12.62 5.56-25.63 5.56-39.31a154 154 0 0 0-50.24-113.94z"]
- };
- var faPercent = {
- prefix: 'fas',
- iconName: 'percent',
- icon: [448, 512, [], "f295", "M112 224c61.9 0 112-50.1 112-112S173.9 0 112 0 0 50.1 0 112s50.1 112 112 112zm0-160c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48 21.5-48 48-48zm224 224c-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112-50.1-112-112-112zm0 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zM392.3.2l31.6-.1c19.4-.1 30.9 21.8 19.7 37.8L77.4 501.6a23.95 23.95 0 0 1-19.6 10.2l-33.4.1c-19.5 0-30.9-21.9-19.7-37.8l368-463.7C377.2 4 384.5.2 392.3.2z"]
- };
- var faPercentage = {
- prefix: 'fas',
- iconName: 'percentage',
- icon: [384, 512, [], "f541", "M109.25 173.25c24.99-24.99 24.99-65.52 0-90.51-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 25 25 65.52 25 90.51 0zm256 165.49c-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 24.99 24.99 65.52 24.99 90.51 0 25-24.99 25-65.51 0-90.51zm-1.94-231.43l-22.62-22.62c-12.5-12.5-32.76-12.5-45.25 0L20.69 359.44c-12.5 12.5-12.5 32.76 0 45.25l22.62 22.62c12.5 12.5 32.76 12.5 45.25 0l274.75-274.75c12.5-12.49 12.5-32.75 0-45.25z"]
- };
- var faPersonBooth = {
- prefix: 'fas',
- iconName: 'person-booth',
- icon: [576, 512, [], "f756", "M192 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320h-64v176zm32-272h-50.9l-45.2-45.3C115.8 166.6 99.7 160 82.7 160H64c-17.1 0-33.2 6.7-45.3 18.8C6.7 190.9 0 207 0 224.1L.2 320 0 480c0 17.7 14.3 32 31.9 32 17.6 0 32-14.3 32-32l.1-100.7c.9.5 1.6 1.3 2.5 1.7l29.1 43v56c0 17.7 14.3 32 32 32s32-14.3 32-32v-56.5c0-9.9-2.3-19.8-6.7-28.6l-41.2-61.3V253l20.9 20.9c9.1 9.1 21.1 14.1 33.9 14.1H224c17.7 0 32-14.3 32-32s-14.3-32-32-32zM64 128c26.5 0 48-21.5 48-48S90.5 32 64 32 16 53.5 16 80s21.5 48 48 48zm224-96l31.5 223.1-30.9 154.6c-4.3 21.6 13 38.3 31.4 38.3 15.2 0 28-9.1 32.3-30.4.9 16.9 14.6 30.4 31.7 30.4 17.7 0 32-14.3 32-32 0 17.7 14.3 32 32 32s32-14.3 32-32V0H288v32zm-96 0v160h64V0h-32c-17.7 0-32 14.3-32 32zM544 0h-32v496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32c0-17.7-14.3-32-32-32z"]
- };
- var faPhone = {
- prefix: 'fas',
- iconName: 'phone',
- icon: [512, 512, [], "f095", "M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z"]
- };
- var faPhoneAlt = {
- prefix: 'fas',
- iconName: 'phone-alt',
- icon: [512, 512, [], "f879", "M497.39 361.8l-112-48a24 24 0 0 0-28 6.9l-49.6 60.6A370.66 370.66 0 0 1 130.6 204.11l60.6-49.6a23.94 23.94 0 0 0 6.9-28l-48-112A24.16 24.16 0 0 0 122.6.61l-104 24A24 24 0 0 0 0 48c0 256.5 207.9 464 464 464a24 24 0 0 0 23.4-18.6l24-104a24.29 24.29 0 0 0-14.01-27.6z"]
- };
- var faPhoneSlash = {
- prefix: 'fas',
- iconName: 'phone-slash',
- icon: [640, 512, [], "f3dd", "M268.2 381.4l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48c-10.7 4.6-16.5 16.1-13.9 27.5l24 104c2.5 10.8 12.1 18.6 23.4 18.6 100.7 0 193.7-32.4 269.7-86.9l-80-61.8c-10.9 6.5-22.1 12.7-33.6 18.1zm365.6 76.7L475.1 335.5C537.9 256.4 576 156.9 576 48c0-11.2-7.7-20.9-18.6-23.4l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-12.2 26.1-27.9 50.3-46 72.8L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z"]
- };
- var faPhoneSquare = {
- prefix: 'fas',
- iconName: 'phone-square',
- icon: [448, 512, [], "f098", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM94 416c-7.033 0-13.057-4.873-14.616-11.627l-14.998-65a15 15 0 0 1 8.707-17.16l69.998-29.999a15 15 0 0 1 17.518 4.289l30.997 37.885c48.944-22.963 88.297-62.858 110.781-110.78l-37.886-30.997a15.001 15.001 0 0 1-4.289-17.518l30-69.998a15 15 0 0 1 17.16-8.707l65 14.998A14.997 14.997 0 0 1 384 126c0 160.292-129.945 290-290 290z"]
- };
- var faPhoneSquareAlt = {
- prefix: 'fas',
- iconName: 'phone-square-alt',
- icon: [448, 512, [], "f87b", "M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h352a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48zm-16.39 307.37l-15 65A15 15 0 0 1 354 416C194 416 64 286.29 64 126a15.7 15.7 0 0 1 11.63-14.61l65-15A18.23 18.23 0 0 1 144 96a16.27 16.27 0 0 1 13.79 9.09l30 70A17.9 17.9 0 0 1 189 181a17 17 0 0 1-5.5 11.61l-37.89 31a231.91 231.91 0 0 0 110.78 110.78l31-37.89A17 17 0 0 1 299 291a17.85 17.85 0 0 1 5.91 1.21l70 30A16.25 16.25 0 0 1 384 336a17.41 17.41 0 0 1-.39 3.37z"]
- };
- var faPhoneVolume = {
- prefix: 'fas',
- iconName: 'phone-volume',
- icon: [384, 512, [], "f2a0", "M97.333 506.966c-129.874-129.874-129.681-340.252 0-469.933 5.698-5.698 14.527-6.632 21.263-2.422l64.817 40.513a17.187 17.187 0 0 1 6.849 20.958l-32.408 81.021a17.188 17.188 0 0 1-17.669 10.719l-55.81-5.58c-21.051 58.261-20.612 122.471 0 179.515l55.811-5.581a17.188 17.188 0 0 1 17.669 10.719l32.408 81.022a17.188 17.188 0 0 1-6.849 20.958l-64.817 40.513a17.19 17.19 0 0 1-21.264-2.422zM247.126 95.473c11.832 20.047 11.832 45.008 0 65.055-3.95 6.693-13.108 7.959-18.718 2.581l-5.975-5.726c-3.911-3.748-4.793-9.622-2.261-14.41a32.063 32.063 0 0 0 0-29.945c-2.533-4.788-1.65-10.662 2.261-14.41l5.975-5.726c5.61-5.378 14.768-4.112 18.718 2.581zm91.787-91.187c60.14 71.604 60.092 175.882 0 247.428-4.474 5.327-12.53 5.746-17.552.933l-5.798-5.557c-4.56-4.371-4.977-11.529-.93-16.379 49.687-59.538 49.646-145.933 0-205.422-4.047-4.85-3.631-12.008.93-16.379l5.798-5.557c5.022-4.813 13.078-4.394 17.552.933zm-45.972 44.941c36.05 46.322 36.108 111.149 0 157.546-4.39 5.641-12.697 6.251-17.856 1.304l-5.818-5.579c-4.4-4.219-4.998-11.095-1.285-15.931 26.536-34.564 26.534-82.572 0-117.134-3.713-4.836-3.115-11.711 1.285-15.931l5.818-5.579c5.159-4.947 13.466-4.337 17.856 1.304z"]
- };
- var faPhotoVideo = {
- prefix: 'fas',
- iconName: 'photo-video',
- icon: [640, 512, [], "f87c", "M608 0H160a32 32 0 0 0-32 32v96h160V64h192v320h128a32 32 0 0 0 32-32V32a32 32 0 0 0-32-32zM232 103a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm352 208a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm-168 57H32a32 32 0 0 0-32 32v288a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zM96 224a32 32 0 1 1-32 32 32 32 0 0 1 32-32zm288 224H64v-32l64-64 32 32 128-128 96 96z"]
- };
- var faPiggyBank = {
- prefix: 'fas',
- iconName: 'piggy-bank',
- icon: [576, 512, [], "f4d3", "M560 224h-29.5c-8.8-20-21.6-37.7-37.4-52.5L512 96h-32c-29.4 0-55.4 13.5-73 34.3-7.6-1.1-15.1-2.3-23-2.3H256c-77.4 0-141.9 55-156.8 128H56c-14.8 0-26.5-13.5-23.5-28.8C34.7 215.8 45.4 208 57 208h1c3.3 0 6-2.7 6-6v-20c0-3.3-2.7-6-6-6-28.5 0-53.9 20.4-57.5 48.6C-3.9 258.8 22.7 288 56 288h40c0 52.2 25.4 98.1 64 127.3V496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-48h128v48c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80.7c11.8-8.9 22.3-19.4 31.3-31.3H560c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16zm-128 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM256 96h128c5.4 0 10.7.4 15.9.8 0-.3.1-.5.1-.8 0-53-43-96-96-96s-96 43-96 96c0 2.1.5 4.1.6 6.2 15.2-3.9 31-6.2 47.4-6.2z"]
- };
- var faPills = {
- prefix: 'fas',
- iconName: 'pills',
- icon: [576, 512, [], "f484", "M112 32C50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V144c0-61.9-50.1-112-112-112zm48 224H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm139.7-29.7c-3.5-3.5-9.4-3.1-12.3.8-45.3 62.5-40.4 150.1 15.9 206.4 56.3 56.3 143.9 61.2 206.4 15.9 4-2.9 4.3-8.8.8-12.3L299.7 226.3zm229.8-19c-56.3-56.3-143.9-61.2-206.4-15.9-4 2.9-4.3 8.8-.8 12.3l210.8 210.8c3.5 3.5 9.4 3.1 12.3-.8 45.3-62.6 40.5-150.1-15.9-206.4z"]
- };
- var faPizzaSlice = {
- prefix: 'fas',
- iconName: 'pizza-slice',
- icon: [512, 512, [], "f818", "M158.87.15c-16.16-1.52-31.2 8.42-35.33 24.12l-14.81 56.27c187.62 5.49 314.54 130.61 322.48 317l56.94-15.78c15.72-4.36 25.49-19.68 23.62-35.9C490.89 165.08 340.78 17.32 158.87.15zm-58.47 112L.55 491.64a16.21 16.21 0 0 0 20 19.75l379-105.1c-4.27-174.89-123.08-292.14-299.15-294.1zM128 416a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm48-152a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm104 104a32 32 0 1 1 32-32 32 32 0 0 1-32 32z"]
- };
- var faPlaceOfWorship = {
- prefix: 'fas',
- iconName: 'place-of-worship',
- icon: [640, 512, [], "f67f", "M620.61 366.55L512 320v192h112c8.84 0 16-7.16 16-16V395.96a32 32 0 0 0-19.39-29.41zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.55A32 32 0 0 0 0 395.96zm464.46-149.28L416 217.6V102.63c0-8.49-3.37-16.62-9.38-22.63L331.31 4.69c-6.25-6.25-16.38-6.25-22.62 0L233.38 80c-6 6-9.38 14.14-9.38 22.63V217.6l-48.46 29.08A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.66-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44z"]
- };
- var faPlane = {
- prefix: 'fas',
- iconName: 'plane',
- icon: [576, 512, [], "f072", "M480 192H365.71L260.61 8.06A16.014 16.014 0 0 0 246.71 0h-65.5c-10.63 0-18.3 10.17-15.38 20.39L214.86 192H112l-43.2-57.6c-3.02-4.03-7.77-6.4-12.8-6.4H16.01C5.6 128-2.04 137.78.49 147.88L32 256 .49 364.12C-2.04 374.22 5.6 384 16.01 384H56c5.04 0 9.78-2.37 12.8-6.4L112 320h102.86l-49.03 171.6c-2.92 10.22 4.75 20.4 15.38 20.4h65.5c5.74 0 11.04-3.08 13.89-8.06L365.71 320H480c35.35 0 96-28.65 96-64s-60.65-64-96-64z"]
- };
- var faPlaneArrival = {
- prefix: 'fas',
- iconName: 'plane-arrival',
- icon: [640, 512, [], "f5af", "M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM44.81 205.66l88.74 80a62.607 62.607 0 0 0 25.47 13.93l287.6 78.35c26.48 7.21 54.56 8.72 81 1.36 29.67-8.27 43.44-21.21 47.25-35.71 3.83-14.5-1.73-32.71-23.37-54.96-19.28-19.82-44.35-32.79-70.83-40l-97.51-26.56L282.8 30.22c-1.51-5.81-5.95-10.35-11.66-11.91L206.05.58c-10.56-2.88-20.9 5.32-20.71 16.44l47.92 164.21-102.2-27.84-27.59-67.88c-1.93-4.89-6.01-8.57-11.02-9.93L52.72 64.75c-10.34-2.82-20.53 5-20.72 15.88l.23 101.78c.19 8.91 6.03 17.34 12.58 23.25z"]
- };
- var faPlaneDeparture = {
- prefix: 'fas',
- iconName: 'plane-departure',
- icon: [640, 512, [], "f5b0", "M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM80.55 341.27c6.28 6.84 15.1 10.72 24.33 10.71l130.54-.18a65.62 65.62 0 0 0 29.64-7.12l290.96-147.65c26.74-13.57 50.71-32.94 67.02-58.31 18.31-28.48 20.3-49.09 13.07-63.65-7.21-14.57-24.74-25.27-58.25-27.45-29.85-1.94-59.54 5.92-86.28 19.48l-98.51 49.99-218.7-82.06a17.799 17.799 0 0 0-18-1.11L90.62 67.29c-10.67 5.41-13.25 19.65-5.17 28.53l156.22 98.1-103.21 52.38-72.35-36.47a17.804 17.804 0 0 0-16.07.02L9.91 230.22c-10.44 5.3-13.19 19.12-5.57 28.08l76.21 82.97z"]
- };
- var faPlaneSlash = {
- prefix: 'fas',
- iconName: 'plane-slash',
- icon: [640, 512, [], "e069", "M32.48,147.88,64,256,32.48,364.13A16,16,0,0,0,48,384H88a16,16,0,0,0,12.8-6.41L144,320H246.85l-49,171.59A16,16,0,0,0,213.2,512h65.5a16,16,0,0,0,13.89-8.06l66.6-116.54L34.35,136.34A15.47,15.47,0,0,0,32.48,147.88ZM633.82,458.09,455.14,320H512c35.34,0,96-28.66,96-64s-60.66-64-96-64H397.7L292.61,8.06C290.06,3.61,283.84,0,278.71,0H213.2a16,16,0,0,0-15.38,20.39l36.94,129.29L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.45A16,16,0,0,0,6.18,53.91L594.54,508.63A16,16,0,0,0,617,505.81l19.64-25.26A16,16,0,0,0,633.82,458.09Z"]
- };
- var faPlay = {
- prefix: 'fas',
- iconName: 'play',
- icon: [448, 512, [], "f04b", "M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z"]
- };
- var faPlayCircle = {
- prefix: 'fas',
- iconName: 'play-circle',
- icon: [512, 512, [], "f144", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm115.7 272l-176 101c-15.8 8.8-35.7-2.5-35.7-21V152c0-18.4 19.8-29.8 35.7-21l176 107c16.4 9.2 16.4 32.9 0 42z"]
- };
- var faPlug = {
- prefix: 'fas',
- iconName: 'plug',
- icon: [384, 512, [], "f1e6", "M320,32a32,32,0,0,0-64,0v96h64Zm48,128H16A16,16,0,0,0,0,176v32a16,16,0,0,0,16,16H32v32A160.07,160.07,0,0,0,160,412.8V512h64V412.8A160.07,160.07,0,0,0,352,256V224h16a16,16,0,0,0,16-16V176A16,16,0,0,0,368,160ZM128,32a32,32,0,0,0-64,0v96h64Z"]
- };
- var faPlus = {
- prefix: 'fas',
- iconName: 'plus',
- icon: [448, 512, [], "f067", "M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"]
- };
- var faPlusCircle = {
- prefix: 'fas',
- iconName: 'plus-circle',
- icon: [512, 512, [], "f055", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"]
- };
- var faPlusSquare = {
- prefix: 'fas',
- iconName: 'plus-square',
- icon: [448, 512, [], "f0fe", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"]
- };
- var faPodcast = {
- prefix: 'fas',
- iconName: 'podcast',
- icon: [448, 512, [], "f2ce", "M267.429 488.563C262.286 507.573 242.858 512 224 512c-18.857 0-38.286-4.427-43.428-23.437C172.927 460.134 160 388.898 160 355.75c0-35.156 31.142-43.75 64-43.75s64 8.594 64 43.75c0 32.949-12.871 104.179-20.571 132.813zM156.867 288.554c-18.693-18.308-29.958-44.173-28.784-72.599 2.054-49.724 42.395-89.956 92.124-91.881C274.862 121.958 320 165.807 320 220c0 26.827-11.064 51.116-28.866 68.552-2.675 2.62-2.401 6.986.628 9.187 9.312 6.765 16.46 15.343 21.234 25.363 1.741 3.654 6.497 4.66 9.449 1.891 28.826-27.043 46.553-65.783 45.511-108.565-1.855-76.206-63.595-138.208-139.793-140.369C146.869 73.753 80 139.215 80 220c0 41.361 17.532 78.7 45.55 104.989 2.953 2.771 7.711 1.77 9.453-1.887 4.774-10.021 11.923-18.598 21.235-25.363 3.029-2.2 3.304-6.566.629-9.185zM224 0C100.204 0 0 100.185 0 224c0 89.992 52.602 165.647 125.739 201.408 4.333 2.118 9.267-1.544 8.535-6.31-2.382-15.512-4.342-30.946-5.406-44.339-.146-1.836-1.149-3.486-2.678-4.512-47.4-31.806-78.564-86.016-78.187-147.347.592-96.237 79.29-174.648 175.529-174.899C320.793 47.747 400 126.797 400 224c0 61.932-32.158 116.49-80.65 147.867-.999 14.037-3.069 30.588-5.624 47.23-.732 4.767 4.203 8.429 8.535 6.31C395.227 389.727 448 314.187 448 224 448 100.205 347.815 0 224 0zm0 160c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64z"]
- };
- var faPoll = {
- prefix: 'fas',
- iconName: 'poll',
- icon: [448, 512, [], "f681", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM160 368c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V240c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v128zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V144c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v224zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-64c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v64z"]
- };
- var faPollH = {
- prefix: 'fas',
- iconName: 'poll-h',
- icon: [448, 512, [], "f682", "M448 432V80c0-26.5-21.5-48-48-48H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48zM112 192c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h128c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-64z"]
- };
- var faPoo = {
- prefix: 'fas',
- iconName: 'poo',
- icon: [512, 512, [], "f2fe", "M451.4 369.1C468.7 356 480 335.4 480 312c0-39.8-32.2-72-72-72h-14.1c13.4-11.7 22.1-28.8 22.1-48 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C250.3 14.6 256 30.6 256 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 19.2 8.7 36.3 22.1 48H104c-39.8 0-72 32.2-72 72 0 23.4 11.3 44 28.6 57.1C26.3 374.6 0 404.1 0 440c0 39.8 32.2 72 72 72h368c39.8 0 72-32.2 72-72 0-35.9-26.3-65.4-60.6-70.9zM192 256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm159.5 139C341 422.9 293 448 256 448s-85-25.1-95.5-53c-2-5.3 2-11 7.8-11h175.4c5.8 0 9.8 5.7 7.8 11zM320 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"]
- };
- var faPooStorm = {
- prefix: 'fas',
- iconName: 'poo-storm',
- icon: [448, 512, [], "f75a", "M308 336h-57.7l17.3-64.9c2-7.6-3.7-15.1-11.6-15.1h-68c-6 0-11.1 4.5-11.9 10.4l-16 120c-1 7.2 4.6 13.6 11.9 13.6h59.3l-23 97.2c-1.8 7.6 4 14.8 11.7 14.8 4.2 0 8.2-2.2 10.4-6l88-152c4.6-8-1.2-18-10.4-18zm66.4-111.3c5.9-9.6 9.6-20.6 9.6-32.7 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C218.3 14.6 224 30.6 224 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 12.1 3.7 23.1 9.6 32.7C32.6 228 0 262.2 0 304c0 44 36 80 80 80h48.3c.1-.6 0-1.2 0-1.8l16-120c3-21.8 21.7-38.2 43.7-38.2h68c13.8 0 26.5 6.3 34.9 17.2s11.2 24.8 7.6 38.1l-6.6 24.7h16c15.7 0 30.3 8.4 38.1 22 7.8 13.6 7.8 30.5 0 44l-8.1 14h30c44 0 80-36 80-80 .1-41.8-32.5-76-73.5-79.3z"]
- };
- var faPoop = {
- prefix: 'fas',
- iconName: 'poop',
- icon: [512, 512, [], "f619", "M451.36 369.14C468.66 355.99 480 335.41 480 312c0-39.77-32.24-72-72-72h-14.07c13.42-11.73 22.07-28.78 22.07-48 0-35.35-28.65-64-64-64h-5.88c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96-5.17 0-10.15.74-15.11 1.52C250.31 14.64 256 30.62 256 48c0 44.18-35.82 80-80 80h-16c-35.35 0-64 28.65-64 64 0 19.22 8.65 36.27 22.07 48H104c-39.76 0-72 32.23-72 72 0 23.41 11.34 43.99 28.64 57.14C26.31 374.62 0 404.12 0 440c0 39.76 32.24 72 72 72h368c39.76 0 72-32.24 72-72 0-35.88-26.31-65.38-60.64-70.86z"]
- };
- var faPortrait = {
- prefix: 'fas',
- iconName: 'portrait',
- icon: [384, 512, [], "f3e0", "M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM192 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 384 80 375.4 80 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"]
- };
- var faPoundSign = {
- prefix: 'fas',
- iconName: 'pound-sign',
- icon: [320, 512, [], "f154", "M308 352h-45.495c-6.627 0-12 5.373-12 12v50.848H128V288h84c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-84v-63.556c0-32.266 24.562-57.086 61.792-57.086 23.658 0 45.878 11.505 57.652 18.849 5.151 3.213 11.888 2.051 15.688-2.685l28.493-35.513c4.233-5.276 3.279-13.005-2.119-17.081C273.124 54.56 236.576 32 187.931 32 106.026 32 48 84.742 48 157.961V224H20c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h28v128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12V364c0-6.627-5.373-12-12-12z"]
- };
- var faPowerOff = {
- prefix: 'fas',
- iconName: 'power-off',
- icon: [512, 512, [], "f011", "M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z"]
- };
- var faPray = {
- prefix: 'fas',
- iconName: 'pray',
- icon: [384, 512, [], "f683", "M256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-30.63 169.75c14.06 16.72 39 19.09 55.97 5.22l88-72.02c17.09-13.98 19.59-39.19 5.62-56.28-13.97-17.11-39.19-19.59-56.31-5.62l-57.44 47-38.91-46.31c-15.44-18.39-39.22-27.92-64-25.33-24.19 2.48-45.25 16.27-56.37 36.92l-49.37 92.03c-23.4 43.64-8.69 96.37 34.19 123.75L131.56 432H40c-22.09 0-40 17.91-40 40s17.91 40 40 40h208c34.08 0 53.77-42.79 28.28-68.28L166.42 333.86l34.8-64.87 24.15 28.76z"]
- };
- var faPrayingHands = {
- prefix: 'fas',
- iconName: 'praying-hands',
- icon: [640, 512, [], "f684", "M272 191.91c-17.6 0-32 14.4-32 32v80c0 8.84-7.16 16-16 16s-16-7.16-16-16v-76.55c0-17.39 4.72-34.47 13.69-49.39l77.75-129.59c9.09-15.16 4.19-34.81-10.97-43.91-14.45-8.67-32.72-4.3-42.3 9.21-.2.23-.62.21-.79.48l-117.26 175.9C117.56 205.9 112 224.31 112 243.29v80.23l-90.12 30.04A31.974 31.974 0 0 0 0 383.91v96c0 10.82 8.52 32 32 32 2.69 0 5.41-.34 8.06-1.03l179.19-46.62C269.16 449.99 304 403.8 304 351.91v-128c0-17.6-14.4-32-32-32zm346.12 161.73L528 323.6v-80.23c0-18.98-5.56-37.39-16.12-53.23L394.62 14.25c-.18-.27-.59-.24-.79-.48-9.58-13.51-27.85-17.88-42.3-9.21-15.16 9.09-20.06 28.75-10.97 43.91l77.75 129.59c8.97 14.92 13.69 32 13.69 49.39V304c0 8.84-7.16 16-16 16s-16-7.16-16-16v-80c0-17.6-14.4-32-32-32s-32 14.4-32 32v128c0 51.89 34.84 98.08 84.75 112.34l179.19 46.62c2.66.69 5.38 1.03 8.06 1.03 23.48 0 32-21.18 32-32v-96c0-13.77-8.81-25.99-21.88-30.35z"]
- };
- var faPrescription = {
- prefix: 'fas',
- iconName: 'prescription',
- icon: [384, 512, [], "f5b1", "M301.26 352l78.06-78.06c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0L256 306.74l-83.96-83.96C219.31 216.8 256 176.89 256 128c0-53.02-42.98-96-96-96H16C7.16 32 0 39.16 0 48v256c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-80h18.75l128 128-78.06 78.06c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0L256 397.25l78.06 78.06c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63L301.26 352zM64 96h96c17.64 0 32 14.36 32 32s-14.36 32-32 32H64V96z"]
- };
- var faPrescriptionBottle = {
- prefix: 'fas',
- iconName: 'prescription-bottle',
- icon: [384, 512, [], "f485", "M32 192h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v64zM360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24z"]
- };
- var faPrescriptionBottleAlt = {
- prefix: 'fas',
- iconName: 'prescription-bottle-alt',
- icon: [384, 512, [], "f486", "M360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24zM32 480c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v352zm64-184c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48z"]
- };
- var faPrint = {
- prefix: 'fas',
- iconName: 'print',
- icon: [512, 512, [], "f02f", "M448 192V77.25c0-8.49-3.37-16.62-9.37-22.63L393.37 9.37c-6-6-14.14-9.37-22.63-9.37H96C78.33 0 64 14.33 64 32v160c-35.35 0-64 28.65-64 64v112c0 8.84 7.16 16 16 16h48v96c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-96h48c8.84 0 16-7.16 16-16V256c0-35.35-28.65-64-64-64zm-64 256H128v-96h256v96zm0-224H128V64h192v48c0 8.84 7.16 16 16 16h48v96zm48 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"]
- };
- var faProcedures = {
- prefix: 'fas',
- iconName: 'procedures',
- icon: [640, 512, [], "f487", "M528 224H272c-8.8 0-16 7.2-16 16v144H64V144c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v352c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48h512v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V336c0-61.9-50.1-112-112-112zM136 96h126.1l27.6 55.2c5.9 11.8 22.7 11.8 28.6 0L368 51.8 390.1 96H512c8.8 0 16-7.2 16-16s-7.2-16-16-16H409.9L382.3 8.8C376.4-3 359.6-3 353.7 8.8L304 108.2l-19.9-39.8c-1.4-2.7-4.1-4.4-7.2-4.4H136c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm24 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z"]
- };
- var faProjectDiagram = {
- prefix: 'fas',
- iconName: 'project-diagram',
- icon: [640, 512, [], "f542", "M384 320H256c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM192 32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v128c0 17.67 14.33 32 32 32h95.72l73.16 128.04C211.98 300.98 232.4 288 256 288h.28L192 175.51V128h224V64H192V32zM608 0H480c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32z"]
- };
- var faPumpMedical = {
- prefix: 'fas',
- iconName: 'pump-medical',
- icon: [384, 512, [], "e06a", "M235.51,159.82H84.24A64,64,0,0,0,20.51,218L.14,442a64,64,0,0,0,63.74,69.8h192A64,64,0,0,0,319.61,442L299.24,218A64,64,0,0,0,235.51,159.82Zm4.37,173.33a13.35,13.35,0,0,1-13.34,13.34h-40v40a13.33,13.33,0,0,1-13.33,13.33H146.54a13.33,13.33,0,0,1-13.33-13.33v-40h-40a13.34,13.34,0,0,1-13.33-13.34V306.49a13.33,13.33,0,0,1,13.33-13.34h40v-40a13.33,13.33,0,0,1,13.33-13.33h26.67a13.33,13.33,0,0,1,13.33,13.33v40h40a13.34,13.34,0,0,1,13.34,13.34ZM379.19,93.88,335.87,50.56a64,64,0,0,0-45.24-18.74H223.88a32,32,0,0,0-32-32h-64a32,32,0,0,0-32,32v96h128v-32h66.75l43.31,43.31a16,16,0,0,0,22.63,0l22.62-22.62A16,16,0,0,0,379.19,93.88Z"]
- };
- var faPumpSoap = {
- prefix: 'fas',
- iconName: 'pump-soap',
- icon: [384, 512, [], "e06b", "M235.63,160H84.37a64,64,0,0,0-63.74,58.21L.27,442.21A64,64,0,0,0,64,512H256a64,64,0,0,0,63.74-69.79l-20.36-224A64,64,0,0,0,235.63,160ZM160,416c-33.12,0-60-26.33-60-58.75,0-25,35.7-75.47,52-97.27A10,10,0,0,1,168,260c16.33,21.8,52,72.27,52,97.27C220,389.67,193.12,416,160,416ZM379.31,94.06,336,50.74A64,64,0,0,0,290.75,32H224A32,32,0,0,0,192,0H128A32,32,0,0,0,96,32v96H224V96h66.75l43.31,43.31a16,16,0,0,0,22.63,0l22.62-22.62A16,16,0,0,0,379.31,94.06Z"]
- };
- var faPuzzlePiece = {
- prefix: 'fas',
- iconName: 'puzzle-piece',
- icon: [576, 512, [], "f12e", "M519.442 288.651c-41.519 0-59.5 31.593-82.058 31.593C377.409 320.244 432 144 432 144s-196.288 80-196.288-3.297c0-35.827 36.288-46.25 36.288-85.985C272 19.216 243.885 0 210.539 0c-34.654 0-66.366 18.891-66.366 56.346 0 41.364 31.711 59.277 31.711 81.75C175.885 207.719 0 166.758 0 166.758v333.237s178.635 41.047 178.635-28.662c0-22.473-40-40.107-40-81.471 0-37.456 29.25-56.346 63.577-56.346 33.673 0 61.788 19.216 61.788 54.717 0 39.735-36.288 50.158-36.288 85.985 0 60.803 129.675 25.73 181.23 25.73 0 0-34.725-120.101 25.827-120.101 35.962 0 46.423 36.152 86.308 36.152C556.712 416 576 387.99 576 354.443c0-34.199-18.962-65.792-56.558-65.792z"]
- };
- var faQrcode = {
- prefix: 'fas',
- iconName: 'qrcode',
- icon: [448, 512, [], "f029", "M0 224h192V32H0v192zM64 96h64v64H64V96zm192-64v192h192V32H256zm128 128h-64V96h64v64zM0 480h192V288H0v192zm64-128h64v64H64v-64zm352-64h32v128h-96v-32h-32v96h-64V288h96v32h64v-32zm0 160h32v32h-32v-32zm-64 0h32v32h-32v-32z"]
- };
- var faQuestion = {
- prefix: 'fas',
- iconName: 'question',
- icon: [384, 512, [], "f128", "M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z"]
- };
- var faQuestionCircle = {
- prefix: 'fas',
- iconName: 'question-circle',
- icon: [512, 512, [], "f059", "M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z"]
- };
- var faQuidditch = {
- prefix: 'fas',
- iconName: 'quidditch',
- icon: [640, 512, [], "f458", "M256.5 216.8L343.2 326s-16.6 102.4-76.6 150.1C206.7 523.8 0 510.2 0 510.2s3.8-23.1 11-55.4l94.6-112.2c4-4.7-.9-11.6-6.6-9.5l-60.4 22.1c14.4-41.7 32.7-80 54.6-97.5 59.9-47.8 163.3-40.9 163.3-40.9zm238 135c-44 0-79.8 35.8-79.8 79.9 0 44.1 35.7 79.9 79.8 79.9 44.1 0 79.8-35.8 79.8-79.9 0-44.2-35.8-79.9-79.8-79.9zM636.5 31L616.7 6c-5.5-6.9-15.5-8-22.4-2.6L361.8 181.3l-34.1-43c-5.1-6.4-15.1-5.2-18.6 2.2l-25.3 54.6 86.7 109.2 58.8-12.4c8-1.7 11.4-11.2 6.3-17.6l-34.1-42.9L634 53.5c6.9-5.5 8-15.6 2.5-22.5z"]
- };
- var faQuoteLeft = {
- prefix: 'fas',
- iconName: 'quote-left',
- icon: [512, 512, [], "f10d", "M464 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z"]
- };
- var faQuoteRight = {
- prefix: 'fas',
- iconName: 'quote-right',
- icon: [512, 512, [], "f10e", "M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z"]
- };
- var faQuran = {
- prefix: 'fas',
- iconName: 'quran',
- icon: [448, 512, [], "f687", "M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM301.08 145.82c.6-1.21 1.76-1.82 2.92-1.82s2.32.61 2.92 1.82l11.18 22.65 25 3.63c2.67.39 3.74 3.67 1.81 5.56l-18.09 17.63 4.27 24.89c.36 2.11-1.31 3.82-3.21 3.82-.5 0-1.02-.12-1.52-.38L304 211.87l-22.36 11.75c-.5.26-1.02.38-1.52.38-1.9 0-3.57-1.71-3.21-3.82l4.27-24.89-18.09-17.63c-1.94-1.89-.87-5.17 1.81-5.56l24.99-3.63 11.19-22.65zm-57.89-69.01c13.67 0 27.26 2.49 40.38 7.41a6.775 6.775 0 1 1-2.38 13.12c-.67 0-3.09-.21-4.13-.21-52.31 0-94.86 42.55-94.86 94.86 0 52.3 42.55 94.86 94.86 94.86 1.03 0 3.48-.21 4.13-.21 3.93 0 6.8 3.14 6.8 6.78 0 2.98-1.94 5.51-4.62 6.42-13.07 4.87-26.59 7.34-40.19 7.34C179.67 307.19 128 255.51 128 192c0-63.52 51.67-115.19 115.19-115.19zM380.8 448H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z"]
- };
- var faRadiation = {
- prefix: 'fas',
- iconName: 'radiation',
- icon: [496, 512, [], "f7b9", "M328.2 255.8h151.6c9.1 0 16.8-7.7 16.2-16.8-5.1-75.8-44.4-142.2-102.5-184.2-7.4-5.3-17.9-2.9-22.7 4.8L290.4 188c22.6 14.3 37.8 39.2 37.8 67.8zm-37.8 67.7c-12.3 7.7-26.8 12.4-42.4 12.4-15.6 0-30-4.7-42.4-12.4L125.2 452c-4.8 7.7-2.4 18.1 5.6 22.4C165.7 493.2 205.6 504 248 504s82.3-10.8 117.2-29.6c8-4.3 10.4-14.8 5.6-22.4l-80.4-128.5zM248 303.8c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm-231.8-48h151.6c0-28.6 15.2-53.5 37.8-67.7L125.2 59.7c-4.8-7.7-15.3-10.2-22.7-4.8C44.4 96.9 5.1 163.3 0 239.1c-.6 9 7.1 16.7 16.2 16.7z"]
- };
- var faRadiationAlt = {
- prefix: 'fas',
- iconName: 'radiation-alt',
- icon: [496, 512, [], "f7ba", "M312 256h79.1c9.2 0 16.9-7.7 16-16.8-4.6-43.6-27-81.8-59.5-107.8-7.6-6.1-18.8-4.5-24 3.8L281.9 202c18 11.2 30.1 31.2 30.1 54zm-97.8 54.1L172.4 377c-4.9 7.8-2.4 18.4 5.8 22.5 21.1 10.4 44.7 16.5 69.8 16.5s48.7-6.1 69.9-16.5c8.2-4.1 10.6-14.7 5.8-22.5l-41.8-66.9c-9.8 6.2-21.4 9.9-33.8 9.9s-24.1-3.7-33.9-9.9zM104.9 256H184c0-22.8 12.1-42.8 30.2-54.1l-41.7-66.8c-5.2-8.3-16.4-9.9-24-3.8-32.6 26-54.9 64.2-59.5 107.8-1.1 9.2 6.7 16.9 15.9 16.9zM248 504c137 0 248-111 248-248S385 8 248 8 0 119 0 256s111 248 248 248zm0-432c101.5 0 184 82.5 184 184s-82.5 184-184 184S64 357.5 64 256 146.5 72 248 72zm0 216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z"]
- };
- var faRainbow = {
- prefix: 'fas',
- iconName: 'rainbow',
- icon: [576, 512, [], "f75b", "M268.3 32.7C115.4 42.9 0 176.9 0 330.2V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C64 186.8 180.9 80.3 317.5 97.9 430.4 112.4 512 214 512 327.8V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-165.3-140-298.6-307.7-287.3zm-5.6 96.9C166 142 96 229.1 96 326.7V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-74.8 64.5-134.8 140.8-127.4 66.5 6.5 115.2 66.2 115.2 133.1V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-114.2-100.2-205.4-217.3-190.4zm6.2 96.3c-45.6 8.9-76.9 51.5-76.9 97.9V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-17.6 14.3-32 32-32s32 14.4 32 32v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-59.2-53.8-106-115.1-94.1z"]
- };
- var faRandom = {
- prefix: 'fas',
- iconName: 'random',
- icon: [512, 512, [], "f074", "M504.971 359.029c9.373 9.373 9.373 24.569 0 33.941l-80 79.984c-15.01 15.01-40.971 4.49-40.971-16.971V416h-58.785a12.004 12.004 0 0 1-8.773-3.812l-70.556-75.596 53.333-57.143L352 336h32v-39.981c0-21.438 25.943-31.998 40.971-16.971l80 79.981zM12 176h84l52.781 56.551 53.333-57.143-70.556-75.596A11.999 11.999 0 0 0 122.785 96H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12zm372 0v39.984c0 21.46 25.961 31.98 40.971 16.971l80-79.984c9.373-9.373 9.373-24.569 0-33.941l-80-79.981C409.943 24.021 384 34.582 384 56.019V96h-58.785a12.004 12.004 0 0 0-8.773 3.812L96 336H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h110.785c3.326 0 6.503-1.381 8.773-3.812L352 176h32z"]
- };
- var faReceipt = {
- prefix: 'fas',
- iconName: 'receipt',
- icon: [384, 512, [], "f543", "M358.4 3.2L320 48 265.6 3.2a15.9 15.9 0 0 0-19.2 0L192 48 137.6 3.2a15.9 15.9 0 0 0-19.2 0L64 48 25.6 3.2C15-4.7 0 2.8 0 16v480c0 13.2 15 20.7 25.6 12.8L64 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L192 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L320 464l38.4 44.8c10.5 7.9 25.6.4 25.6-12.8V16c0-13.2-15-20.7-25.6-12.8zM320 360c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16z"]
- };
- var faRecordVinyl = {
- prefix: 'fas',
- iconName: 'record-vinyl',
- icon: [512, 512, [], "f8d9", "M256 152a104 104 0 1 0 104 104 104 104 0 0 0-104-104zm0 128a24 24 0 1 1 24-24 24 24 0 0 1-24 24zm0-272C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 376a128 128 0 1 1 128-128 128 128 0 0 1-128 128z"]
- };
- var faRecycle = {
- prefix: 'fas',
- iconName: 'recycle',
- icon: [512, 512, [], "f1b8", "M184.561 261.903c3.232 13.997-12.123 24.635-24.068 17.168l-40.736-25.455-50.867 81.402C55.606 356.273 70.96 384 96.012 384H148c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12H96.115c-75.334 0-121.302-83.048-81.408-146.88l50.822-81.388-40.725-25.448c-12.081-7.547-8.966-25.961 4.879-29.158l110.237-25.45c8.611-1.988 17.201 3.381 19.189 11.99l25.452 110.237zm98.561-182.915l41.289 66.076-40.74 25.457c-12.051 7.528-9 25.953 4.879 29.158l110.237 25.45c8.672 1.999 17.215-3.438 19.189-11.99l25.45-110.237c3.197-13.844-11.99-24.719-24.068-17.168l-40.687 25.424-41.263-66.082c-37.521-60.033-125.209-60.171-162.816 0l-17.963 28.766c-3.51 5.62-1.8 13.021 3.82 16.533l33.919 21.195c5.62 3.512 13.024 1.803 16.536-3.817l17.961-28.743c12.712-20.341 41.973-19.676 54.257-.022zM497.288 301.12l-27.515-44.065c-3.511-5.623-10.916-7.334-16.538-3.821l-33.861 21.159c-5.62 3.512-7.33 10.915-3.818 16.536l27.564 44.112c13.257 21.211-2.057 48.96-27.136 48.96H320V336.02c0-14.213-17.242-21.383-27.313-11.313l-80 79.981c-6.249 6.248-6.249 16.379 0 22.627l80 79.989C302.689 517.308 320 510.3 320 495.989V448h95.88c75.274 0 121.335-82.997 81.408-146.88z"]
- };
- var faRedo = {
- prefix: 'fas',
- iconName: 'redo',
- icon: [512, 512, [], "f01e", "M500.33 0h-47.41a12 12 0 0 0-12 12.57l4 82.76A247.42 247.42 0 0 0 256 8C119.34 8 7.9 119.53 8 256.19 8.1 393.07 119.1 504 256 504a247.1 247.1 0 0 0 166.18-63.91 12 12 0 0 0 .48-17.43l-34-34a12 12 0 0 0-16.38-.55A176 176 0 1 1 402.1 157.8l-101.53-4.87a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12h200.33a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12z"]
- };
- var faRedoAlt = {
- prefix: 'fas',
- iconName: 'redo-alt',
- icon: [512, 512, [], "f2f9", "M256.455 8c66.269.119 126.437 26.233 170.859 68.685l35.715-35.715C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.75c-30.864-28.899-70.801-44.907-113.23-45.273-92.398-.798-170.283 73.977-169.484 169.442C88.764 348.009 162.184 424 256 424c41.127 0 79.997-14.678 110.629-41.556 4.743-4.161 11.906-3.908 16.368.553l39.662 39.662c4.872 4.872 4.631 12.815-.482 17.433C378.202 479.813 319.926 504 256 504 119.034 504 8.001 392.967 8 256.002 7.999 119.193 119.646 7.755 256.455 8z"]
- };
- var faRegistered = {
- prefix: 'fas',
- iconName: 'registered',
- icon: [512, 512, [], "f25d", "M285.363 207.475c0 18.6-9.831 28.431-28.431 28.431h-29.876v-56.14h23.378c28.668 0 34.929 8.773 34.929 27.709zM504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM363.411 360.414c-46.729-84.825-43.299-78.636-44.702-80.98 23.432-15.172 37.945-42.979 37.945-74.486 0-54.244-31.5-89.252-105.498-89.252h-70.667c-13.255 0-24 10.745-24 24V372c0 13.255 10.745 24 24 24h22.567c13.255 0 24-10.745 24-24v-71.663h25.556l44.129 82.937a24.001 24.001 0 0 0 21.188 12.727h24.464c18.261-.001 29.829-19.591 21.018-35.587z"]
- };
- var faRemoveFormat = {
- prefix: 'fas',
- iconName: 'remove-format',
- icon: [640, 512, [], "f87d", "M336 416h-11.17l9.26-27.77L267 336.4 240.49 416H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm297.82 42.1L377 259.59 426.17 112H544v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16H176a16 16 0 0 0-16 16v43.9L45.46 3.38A16 16 0 0 0 23 6.19L3.37 31.46a16 16 0 0 0 2.81 22.45l588.36 454.72a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zM309.91 207.76L224 141.36V112h117.83z"]
- };
- var faReply = {
- prefix: 'fas',
- iconName: 'reply',
- icon: [512, 512, [], "f3e5", "M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z"]
- };
- var faReplyAll = {
- prefix: 'fas',
- iconName: 'reply-all',
- icon: [576, 512, [], "f122", "M136.309 189.836L312.313 37.851C327.72 24.546 352 35.348 352 56.015v82.763c129.182 10.231 224 52.212 224 183.548 0 61.441-39.582 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 38.512-123.162-3.922-169.482-112.59-182.015v84.175c0 20.701-24.3 31.453-39.687 18.164L136.309 226.164c-11.071-9.561-11.086-26.753 0-36.328zm-128 36.328L184.313 378.15C199.7 391.439 224 380.687 224 359.986v-15.818l-108.606-93.785A55.96 55.96 0 0 1 96 207.998a55.953 55.953 0 0 1 19.393-42.38L224 71.832V56.015c0-20.667-24.28-31.469-39.687-18.164L8.309 189.836c-11.086 9.575-11.071 26.767 0 36.328z"]
- };
- var faRepublican = {
- prefix: 'fas',
- iconName: 'republican',
- icon: [640, 512, [], "f75e", "M544 192c0-88.4-71.6-160-160-160H160C71.6 32 0 103.6 0 192v64h544v-64zm-367.7-21.6l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L128 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L272 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L416 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zM624 320h-32c-8.8 0-16 7.2-16 16v64c0 8.8-7.2 16-16 16s-16-7.2-16-16V288H0v176c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16v-80h192v80c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16V352h32v43.3c0 41.8 30 80.1 71.6 84.3 47.8 4.9 88.4-32.7 88.4-79.6v-64c0-8.8-7.2-16-16-16z"]
- };
- var faRestroom = {
- prefix: 'fas',
- iconName: 'restroom',
- icon: [640, 512, [], "f7bd", "M128 128c35.3 0 64-28.7 64-64S163.3 0 128 0 64 28.7 64 64s28.7 64 64 64zm384 0c35.3 0 64-28.7 64-64S547.3 0 512 0s-64 28.7-64 64 28.7 64 64 64zm127.3 226.5l-45.6-185.8c-3.3-13.5-15.5-23-29.8-24.2-15 9.7-32.8 15.5-52 15.5-19.2 0-37-5.8-52-15.5-14.3 1.2-26.5 10.7-29.8 24.2l-45.6 185.8C381 369.6 393 384 409.2 384H464v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V384h54.8c16.2 0 28.2-14.4 24.5-29.5zM336 0h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zM180.1 144.4c-15 9.8-32.9 15.6-52.1 15.6-19.2 0-37.1-5.8-52.1-15.6C51.3 146.5 32 166.9 32 192v136c0 13.3 10.7 24 24 24h8v136c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V352h8c13.3 0 24-10.7 24-24V192c0-25.1-19.3-45.5-43.9-47.6z"]
- };
- var faRetweet = {
- prefix: 'fas',
- iconName: 'retweet',
- icon: [640, 512, [], "f079", "M629.657 343.598L528.971 444.284c-9.373 9.372-24.568 9.372-33.941 0L394.343 343.598c-9.373-9.373-9.373-24.569 0-33.941l10.823-10.823c9.562-9.562 25.133-9.34 34.419.492L480 342.118V160H292.451a24.005 24.005 0 0 1-16.971-7.029l-16-16C244.361 121.851 255.069 96 276.451 96H520c13.255 0 24 10.745 24 24v222.118l40.416-42.792c9.285-9.831 24.856-10.054 34.419-.492l10.823 10.823c9.372 9.372 9.372 24.569-.001 33.941zm-265.138 15.431A23.999 23.999 0 0 0 347.548 352H160V169.881l40.416 42.792c9.286 9.831 24.856 10.054 34.419.491l10.822-10.822c9.373-9.373 9.373-24.569 0-33.941L144.971 67.716c-9.373-9.373-24.569-9.373-33.941 0L10.343 168.402c-9.373 9.373-9.373 24.569 0 33.941l10.822 10.822c9.562 9.562 25.133 9.34 34.419-.491L96 169.881V392c0 13.255 10.745 24 24 24h243.549c21.382 0 32.09-25.851 16.971-40.971l-16.001-16z"]
- };
- var faRibbon = {
- prefix: 'fas',
- iconName: 'ribbon',
- icon: [448, 512, [], "f4d6", "M6.1 444.3c-9.6 10.8-7.5 27.6 4.5 35.7l68.8 27.9c9.9 6.7 23.3 5 31.3-3.8l91.8-101.9-79.2-87.9-117.2 130zm435.8 0s-292-324.6-295.4-330.1c15.4-8.4 40.2-17.9 77.5-17.9s62.1 9.5 77.5 17.9c-3.3 5.6-56 64.6-56 64.6l79.1 87.7 34.2-38c28.7-31.9 33.3-78.6 11.4-115.5l-43.7-73.5c-4.3-7.2-9.9-13.3-16.8-18-40.7-27.6-127.4-29.7-171.4 0-6.9 4.7-12.5 10.8-16.8 18l-43.6 73.2c-1.5 2.5-37.1 62.2 11.5 116L337.5 504c8 8.9 21.4 10.5 31.3 3.8l68.8-27.9c11.9-8 14-24.8 4.3-35.6z"]
- };
- var faRing = {
- prefix: 'fas',
- iconName: 'ring',
- icon: [512, 512, [], "f70b", "M256 64C110.06 64 0 125.91 0 208v98.13C0 384.48 114.62 448 256 448s256-63.52 256-141.87V208c0-82.09-110.06-144-256-144zm0 64c106.04 0 192 35.82 192 80 0 9.26-3.97 18.12-10.91 26.39C392.15 208.21 328.23 192 256 192s-136.15 16.21-181.09 42.39C67.97 226.12 64 217.26 64 208c0-44.18 85.96-80 192-80zM120.43 264.64C155.04 249.93 201.64 240 256 240s100.96 9.93 135.57 24.64C356.84 279.07 308.93 288 256 288s-100.84-8.93-135.57-23.36z"]
- };
- var faRoad = {
- prefix: 'fas',
- iconName: 'road',
- icon: [576, 512, [], "f018", "M573.19 402.67l-139.79-320C428.43 71.29 417.6 64 405.68 64h-97.59l2.45 23.16c.5 4.72-3.21 8.84-7.96 8.84h-29.16c-4.75 0-8.46-4.12-7.96-8.84L267.91 64h-97.59c-11.93 0-22.76 7.29-27.73 18.67L2.8 402.67C-6.45 423.86 8.31 448 30.54 448h196.84l10.31-97.68c.86-8.14 7.72-14.32 15.91-14.32h68.8c8.19 0 15.05 6.18 15.91 14.32L348.62 448h196.84c22.23 0 36.99-24.14 27.73-45.33zM260.4 135.16a8 8 0 0 1 7.96-7.16h39.29c4.09 0 7.53 3.09 7.96 7.16l4.6 43.58c.75 7.09-4.81 13.26-11.93 13.26h-40.54c-7.13 0-12.68-6.17-11.93-13.26l4.59-43.58zM315.64 304h-55.29c-9.5 0-16.91-8.23-15.91-17.68l5.07-48c.86-8.14 7.72-14.32 15.91-14.32h45.15c8.19 0 15.05 6.18 15.91 14.32l5.07 48c1 9.45-6.41 17.68-15.91 17.68z"]
- };
- var faRobot = {
- prefix: 'fas',
- iconName: 'robot',
- icon: [640, 512, [], "f544", "M32,224H64V416H32A31.96166,31.96166,0,0,1,0,384V256A31.96166,31.96166,0,0,1,32,224Zm512-48V448a64.06328,64.06328,0,0,1-64,64H160a64.06328,64.06328,0,0,1-64-64V176a79.974,79.974,0,0,1,80-80H288V32a32,32,0,0,1,64,0V96H464A79.974,79.974,0,0,1,544,176ZM264,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,264,256Zm-8,128H192v32h64Zm96,0H288v32h64ZM456,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,456,256Zm-8,128H384v32h64ZM640,256V384a31.96166,31.96166,0,0,1-32,32H576V224h32A31.96166,31.96166,0,0,1,640,256Z"]
- };
- var faRocket = {
- prefix: 'fas',
- iconName: 'rocket',
- icon: [512, 512, [], "f135", "M505.12019,19.09375c-1.18945-5.53125-6.65819-11-12.207-12.1875C460.716,0,435.507,0,410.40747,0,307.17523,0,245.26909,55.20312,199.05238,128H94.83772c-16.34763.01562-35.55658,11.875-42.88664,26.48438L2.51562,253.29688A28.4,28.4,0,0,0,0,264a24.00867,24.00867,0,0,0,24.00582,24H127.81618l-22.47457,22.46875c-11.36521,11.36133-12.99607,32.25781,0,45.25L156.24582,406.625c11.15623,11.1875,32.15619,13.15625,45.27726,0l22.47457-22.46875V488a24.00867,24.00867,0,0,0,24.00581,24,28.55934,28.55934,0,0,0,10.707-2.51562l98.72834-49.39063c14.62888-7.29687,26.50776-26.5,26.50776-42.85937V312.79688c72.59753-46.3125,128.03493-108.40626,128.03493-211.09376C512.07526,76.5,512.07526,51.29688,505.12019,19.09375ZM384.04033,168A40,40,0,1,1,424.05,128,40.02322,40.02322,0,0,1,384.04033,168Z"]
- };
- var faRoute = {
- prefix: 'fas',
- iconName: 'route',
- icon: [512, 512, [], "f4d7", "M416 320h-96c-17.6 0-32-14.4-32-32s14.4-32 32-32h96s96-107 96-160-43-96-96-96-96 43-96 96c0 25.5 22.2 63.4 45.3 96H320c-52.9 0-96 43.1-96 96s43.1 96 96 96h96c17.6 0 32 14.4 32 32s-14.4 32-32 32H185.5c-16 24.8-33.8 47.7-47.3 64H416c52.9 0 96-43.1 96-96s-43.1-96-96-96zm0-256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM96 256c-53 0-96 43-96 96s96 160 96 160 96-107 96-160-43-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"]
- };
- var faRss = {
- prefix: 'fas',
- iconName: 'rss',
- icon: [448, 512, [], "f09e", "M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041 64.04 28.673 64.04 64.041zm175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.765 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018 111.832 7.284 201.473 96.702 208.772 208.772.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79zm144.249.288C439.596 229.677 251.465 40.445 16.503 32.01 7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999 191.179 7.839 344.627 161.316 352.465 352.465.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504z"]
- };
- var faRssSquare = {
- prefix: 'fas',
- iconName: 'rss-square',
- icon: [448, 512, [], "f143", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM112 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm157.533 0h-34.335c-6.011 0-11.051-4.636-11.442-10.634-5.214-80.05-69.243-143.92-149.123-149.123-5.997-.39-10.633-5.431-10.633-11.441v-34.335c0-6.535 5.468-11.777 11.994-11.425 110.546 5.974 198.997 94.536 204.964 204.964.352 6.526-4.89 11.994-11.425 11.994zm103.027 0h-34.334c-6.161 0-11.175-4.882-11.427-11.038-5.598-136.535-115.204-246.161-251.76-251.76C68.882 152.949 64 147.935 64 141.774V107.44c0-6.454 5.338-11.664 11.787-11.432 167.83 6.025 302.21 141.191 308.205 308.205.232 6.449-4.978 11.787-11.432 11.787z"]
- };
- var faRubleSign = {
- prefix: 'fas',
- iconName: 'ruble-sign',
- icon: [384, 512, [], "f158", "M239.36 320C324.48 320 384 260.542 384 175.071S324.48 32 239.36 32H76c-6.627 0-12 5.373-12 12v206.632H12c-6.627 0-12 5.373-12 12V308c0 6.627 5.373 12 12 12h52v32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v52c0 6.627 5.373 12 12 12h58.56c6.627 0 12-5.373 12-12v-52H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H146.56v-32h92.8zm-92.8-219.252h78.72c46.72 0 74.88 29.11 74.88 74.323 0 45.832-28.16 75.561-76.16 75.561h-77.44V100.748z"]
- };
- var faRuler = {
- prefix: 'fas',
- iconName: 'ruler',
- icon: [640, 512, [], "f545", "M635.7 167.2L556.1 31.7c-8.8-15-28.3-20.1-43.5-11.5l-69 39.1L503.3 161c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L416 75l-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L333.2 122 278 153.3 337.8 255c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-59.7-101.7-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-27.9-47.5-55.2 31.3 59.7 101.7c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L84.9 262.9l-69 39.1C.7 310.7-4.6 329.8 4.2 344.8l79.6 135.6c8.8 15 28.3 20.1 43.5 11.5L624.1 210c15.2-8.6 20.4-27.8 11.6-42.8z"]
- };
- var faRulerCombined = {
- prefix: 'fas',
- iconName: 'ruler-combined',
- icon: [512, 512, [], "f546", "M160 288h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56v-64h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56V96h-56c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8h56V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 2.77.91 5.24 1.57 7.8L160 329.38V288zm320 64h-32v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-41.37L24.2 510.43c2.56.66 5.04 1.57 7.8 1.57h448c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"]
- };
- var faRulerHorizontal = {
- prefix: 'fas',
- iconName: 'ruler-horizontal',
- icon: [576, 512, [], "f547", "M544 128h-48v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8H88c-4.42 0-8-3.58-8-8v-88H32c-17.67 0-32 14.33-32 32v192c0 17.67 14.33 32 32 32h512c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32z"]
- };
- var faRulerVertical = {
- prefix: 'fas',
- iconName: 'ruler-vertical',
- icon: [256, 512, [], "f548", "M168 416c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32v-64h-88z"]
- };
- var faRunning = {
- prefix: 'fas',
- iconName: 'running',
- icon: [416, 512, [], "f70c", "M272 96c26.51 0 48-21.49 48-48S298.51 0 272 0s-48 21.49-48 48 21.49 48 48 48zM113.69 317.47l-14.8 34.52H32c-17.67 0-32 14.33-32 32s14.33 32 32 32h77.45c19.25 0 36.58-11.44 44.11-29.09l8.79-20.52-10.67-6.3c-17.32-10.23-30.06-25.37-37.99-42.61zM384 223.99h-44.03l-26.06-53.25c-12.5-25.55-35.45-44.23-61.78-50.94l-71.08-21.14c-28.3-6.8-57.77-.55-80.84 17.14l-39.67 30.41c-14.03 10.75-16.69 30.83-5.92 44.86s30.84 16.66 44.86 5.92l39.69-30.41c7.67-5.89 17.44-8 25.27-6.14l14.7 4.37-37.46 87.39c-12.62 29.48-1.31 64.01 26.3 80.31l84.98 50.17-27.47 87.73c-5.28 16.86 4.11 34.81 20.97 40.09 3.19 1 6.41 1.48 9.58 1.48 13.61 0 26.23-8.77 30.52-22.45l31.64-101.06c5.91-20.77-2.89-43.08-21.64-54.39l-61.24-36.14 31.31-78.28 20.27 41.43c8 16.34 24.92 26.89 43.11 26.89H384c17.67 0 32-14.33 32-32s-14.33-31.99-32-31.99z"]
- };
- var faRupeeSign = {
- prefix: 'fas',
- iconName: 'rupee-sign',
- icon: [320, 512, [], "f156", "M308 96c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v44.748c0 6.627 5.373 12 12 12h85.28c27.308 0 48.261 9.958 60.97 27.252H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h158.757c-6.217 36.086-32.961 58.632-74.757 58.632H12c-6.627 0-12 5.373-12 12v53.012c0 3.349 1.4 6.546 3.861 8.818l165.052 152.356a12.001 12.001 0 0 0 8.139 3.182h82.562c10.924 0 16.166-13.408 8.139-20.818L116.871 319.906c76.499-2.34 131.144-53.395 138.318-127.906H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-58.69c-3.486-11.541-8.28-22.246-14.252-32H308z"]
- };
- var faSadCry = {
- prefix: 'fas',
- iconName: 'sad-cry',
- icon: [496, 512, [], "f5b3", "M248 8C111 8 0 119 0 256c0 90.1 48.2 168.7 120 212.1V288c0-8.8 7.2-16 16-16s16 7.2 16 16v196.7c29.5 12.4 62 19.3 96 19.3s66.5-6.9 96-19.3V288c0-8.8 7.2-16 16-16s16 7.2 16 16v180.1C447.8 424.7 496 346 496 256 496 119 385 8 248 8zm-65.5 216.5c-14.8-13.2-46.2-13.2-61 0L112 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c.8 5-1.7 10-6.1 12.4-5.8 3.1-11.2.7-13.7-1.6l-9.7-8.5zM248 416c-26.5 0-48-28.7-48-64s21.5-64 48-64 48 28.7 48 64-21.5 64-48 64zm149.8-181.5c-5.8 3.1-11.2.7-13.7-1.6l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S400 197 404 222.2c.6 4.9-1.8 9.9-6.2 12.3z"]
- };
- var faSadTear = {
- prefix: 'fas',
- iconName: 'sad-tear',
- icon: [496, 512, [], "f5b4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM152 416c-26.5 0-48-21-48-47 0-20 28.5-60.4 41.6-77.8 3.2-4.3 9.6-4.3 12.8 0C171.5 308.6 200 349 200 369c0 26-21.5 47-48 47zm16-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm170.2 154.2C315.8 367.4 282.9 352 248 352c-21.2 0-21.2-32 0-32 44.4 0 86.3 19.6 114.7 53.8 13.8 16.4-11.2 36.5-24.5 20.4z"]
- };
- var faSatellite = {
- prefix: 'fas',
- iconName: 'satellite',
- icon: [512, 512, [], "f7bf", "M502.60969,310.04206l-96.70393,96.71625a31.88151,31.88151,0,0,1-45.00765,0L280.572,326.34115l-9.89231,9.90759a190.56343,190.56343,0,0,1-5.40716,168.52287c-4.50077,8.50115-16.39342,9.59505-23.20707,2.79725L134.54715,400.05428l-17.7999,17.79929c.70324,2.60972,1.60965,5.00067,1.60965,7.79793a32.00544,32.00544,0,1,1-32.00544-32.00434c2.79735,0,5.18838.90637,7.7982,1.60959l17.7999-17.79929L4.43129,269.94287c-6.798-6.81342-5.70409-18.6119,2.79735-23.20627a190.58161,190.58161,0,0,1,168.52864-5.407l9.79854-9.79821-80.31053-80.41716a32.002,32.002,0,0,1,0-45.09987L201.96474,9.29814A31.62639,31.62639,0,0,1,224.46868,0a31.99951,31.99951,0,0,1,22.59759,9.29814l80.32615,80.30777,47.805-47.89713a33.6075,33.6075,0,0,1,47.50808,0l47.50807,47.50645a33.63308,33.63308,0,0,1,0,47.50644l-47.805,47.89713L502.71908,265.036A31.78938,31.78938,0,0,1,502.60969,310.04206ZM219.56159,197.433l73.82505-73.82252-68.918-68.9-73.80942,73.80689Zm237.74352,90.106-68.90233-68.9156-73.825,73.82252,68.918,68.9Z"]
- };
- var faSatelliteDish = {
- prefix: 'fas',
- iconName: 'satellite-dish',
- icon: [512, 512, [], "f7c0", "M305.44954,462.59c7.39157,7.29792,6.18829,20.09661-3.00038,25.00356-77.713,41.80281-176.72559,29.9105-242.34331-35.7082C-5.49624,386.28227-17.404,287.362,24.41381,209.554c4.89125-9.095,17.68975-10.29834,25.00318-3.00043L166.22872,323.36708l27.39411-27.39452c-.68759-2.60974-1.594-5.00071-1.594-7.81361a32.00407,32.00407,0,1,1,32.00407,32.00455c-2.79723,0-5.20378-.89075-7.79786-1.594l-27.40974,27.41015ZM511.9758,303.06732a16.10336,16.10336,0,0,1-16.002,17.00242H463.86031a15.96956,15.96956,0,0,1-15.89265-15.00213C440.46671,175.5492,336.45348,70.53427,207.03078,63.53328a15.84486,15.84486,0,0,1-15.00191-15.90852V16.02652A16.09389,16.09389,0,0,1,209.031.02425C372.25491,8.61922,503.47472,139.841,511.9758,303.06732Zm-96.01221-.29692a16.21093,16.21093,0,0,1-16.11142,17.29934H367.645a16.06862,16.06862,0,0,1-15.89265-14.70522c-6.90712-77.01094-68.118-138.91037-144.92467-145.22376a15.94,15.94,0,0,1-14.79876-15.89289V112.13393a16.134,16.134,0,0,1,17.29908-16.096C319.45132,104.5391,407.55627,192.64538,415.96359,302.7704Z"]
- };
- var faSave = {
- prefix: 'fas',
- iconName: 'save',
- icon: [448, 512, [], "f0c7", "M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z"]
- };
- var faSchool = {
- prefix: 'fas',
- iconName: 'school',
- icon: [640, 512, [], "f549", "M0 224v272c0 8.84 7.16 16 16 16h80V192H32c-17.67 0-32 14.33-32 32zm360-48h-24v-40c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v64c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zm137.75-63.96l-160-106.67a32.02 32.02 0 0 0-35.5 0l-160 106.67A32.002 32.002 0 0 0 128 138.66V512h128V368c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v144h128V138.67c0-10.7-5.35-20.7-14.25-26.63zM320 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm288-64h-64v320h80c8.84 0 16-7.16 16-16V224c0-17.67-14.33-32-32-32z"]
- };
- var faScrewdriver = {
- prefix: 'fas',
- iconName: 'screwdriver',
- icon: [512, 512, [], "f54a", "M448 0L320 96v62.06l-83.03 83.03c6.79 4.25 13.27 9.06 19.07 14.87 5.8 5.8 10.62 12.28 14.87 19.07L353.94 192H416l96-128-64-64zM128 278.59L10.92 395.67c-14.55 14.55-14.55 38.15 0 52.71l52.7 52.7c14.56 14.56 38.15 14.56 52.71 0L233.41 384c29.11-29.11 29.11-76.3 0-105.41s-76.3-29.11-105.41 0z"]
- };
- var faScroll = {
- prefix: 'fas',
- iconName: 'scroll',
- icon: [640, 512, [], "f70e", "M48 0C21.53 0 0 21.53 0 48v64c0 8.84 7.16 16 16 16h80V48C96 21.53 74.47 0 48 0zm208 412.57V352h288V96c0-52.94-43.06-96-96-96H111.59C121.74 13.41 128 29.92 128 48v368c0 38.87 34.65 69.65 74.75 63.12C234.22 474 256 444.46 256 412.57zM288 384v32c0 52.93-43.06 96-96 96h336c61.86 0 112-50.14 112-112 0-8.84-7.16-16-16-16H288z"]
- };
- var faSdCard = {
- prefix: 'fas',
- iconName: 'sd-card',
- icon: [384, 512, [], "f7c2", "M320 0H128L0 128v320c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zM160 160h-48V64h48v96zm80 0h-48V64h48v96zm80 0h-48V64h48v96z"]
- };
- var faSearch = {
- prefix: 'fas',
- iconName: 'search',
- icon: [512, 512, [], "f002", "M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"]
- };
- var faSearchDollar = {
- prefix: 'fas',
- iconName: 'search-dollar',
- icon: [512, 512, [], "f688", "M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm27.11-152.54l-45.01-13.5c-5.16-1.55-8.77-6.78-8.77-12.73 0-7.27 5.3-13.19 11.8-13.19h28.11c4.56 0 8.96 1.29 12.82 3.72 3.24 2.03 7.36 1.91 10.13-.73l11.75-11.21c3.53-3.37 3.33-9.21-.57-12.14-9.1-6.83-20.08-10.77-31.37-11.35V112c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v16.12c-23.63.63-42.68 20.55-42.68 45.07 0 19.97 12.99 37.81 31.58 43.39l45.01 13.5c5.16 1.55 8.77 6.78 8.77 12.73 0 7.27-5.3 13.19-11.8 13.19h-28.1c-4.56 0-8.96-1.29-12.82-3.72-3.24-2.03-7.36-1.91-10.13.73l-11.75 11.21c-3.53 3.37-3.33 9.21.57 12.14 9.1 6.83 20.08 10.77 31.37 11.35V304c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-16.12c23.63-.63 42.68-20.54 42.68-45.07 0-19.97-12.99-37.81-31.59-43.39z"]
- };
- var faSearchLocation = {
- prefix: 'fas',
- iconName: 'search-location',
- icon: [512, 512, [], "f689", "M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm.02-239.96c-40.78 0-73.84 33.05-73.84 73.83 0 32.96 48.26 93.05 66.75 114.86a9.24 9.24 0 0 0 14.18 0c18.49-21.81 66.75-81.89 66.75-114.86 0-40.78-33.06-73.83-73.84-73.83zm0 96c-13.26 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"]
- };
- var faSearchMinus = {
- prefix: 'fas',
- iconName: 'search-minus',
- icon: [512, 512, [], "f010", "M304 192v32c0 6.6-5.4 12-12 12H124c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z"]
- };
- var faSearchPlus = {
- prefix: 'fas',
- iconName: 'search-plus',
- icon: [512, 512, [], "f00e", "M304 192v32c0 6.6-5.4 12-12 12h-56v56c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-56h-56c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h56v-56c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v56h56c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z"]
- };
- var faSeedling = {
- prefix: 'fas',
- iconName: 'seedling',
- icon: [512, 512, [], "f4d8", "M64 96H0c0 123.7 100.3 224 224 224v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C288 196.3 187.7 96 64 96zm384-64c-84.2 0-157.4 46.5-195.7 115.2 27.7 30.2 48.2 66.9 59 107.6C424 243.1 512 147.9 512 32h-64z"]
- };
- var faServer = {
- prefix: 'fas',
- iconName: 'server',
- icon: [512, 512, [], "f233", "M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z"]
- };
- var faShapes = {
- prefix: 'fas',
- iconName: 'shapes',
- icon: [512, 512, [], "f61f", "M128,256A128,128,0,1,0,256,384,128,128,0,0,0,128,256Zm379-54.86L400.07,18.29a37.26,37.26,0,0,0-64.14,0L229,201.14C214.76,225.52,232.58,256,261.09,256H474.91C503.42,256,521.24,225.52,507,201.14ZM480,288H320a32,32,0,0,0-32,32V480a32,32,0,0,0,32,32H480a32,32,0,0,0,32-32V320A32,32,0,0,0,480,288Z"]
- };
- var faShare = {
- prefix: 'fas',
- iconName: 'share',
- icon: [512, 512, [], "f064", "M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z"]
- };
- var faShareAlt = {
- prefix: 'fas',
- iconName: 'share-alt',
- icon: [448, 512, [], "f1e0", "M352 320c-22.608 0-43.387 7.819-59.79 20.895l-102.486-64.054a96.551 96.551 0 0 0 0-41.683l102.486-64.054C308.613 184.181 329.392 192 352 192c53.019 0 96-42.981 96-96S405.019 0 352 0s-96 42.981-96 96c0 7.158.79 14.13 2.276 20.841L155.79 180.895C139.387 167.819 118.608 160 96 160c-53.019 0-96 42.981-96 96s42.981 96 96 96c22.608 0 43.387-7.819 59.79-20.895l102.486 64.054A96.301 96.301 0 0 0 256 416c0 53.019 42.981 96 96 96s96-42.981 96-96-42.981-96-96-96z"]
- };
- var faShareAltSquare = {
- prefix: 'fas',
- iconName: 'share-alt-square',
- icon: [448, 512, [], "f1e1", "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zM304 296c-14.562 0-27.823 5.561-37.783 14.671l-67.958-40.775a56.339 56.339 0 0 0 0-27.793l67.958-40.775C276.177 210.439 289.438 216 304 216c30.928 0 56-25.072 56-56s-25.072-56-56-56-56 25.072-56 56c0 4.797.605 9.453 1.74 13.897l-67.958 40.775C171.823 205.561 158.562 200 144 200c-30.928 0-56 25.072-56 56s25.072 56 56 56c14.562 0 27.823-5.561 37.783-14.671l67.958 40.775a56.088 56.088 0 0 0-1.74 13.897c0 30.928 25.072 56 56 56s56-25.072 56-56C360 321.072 334.928 296 304 296z"]
- };
- var faShareSquare = {
- prefix: 'fas',
- iconName: 'share-square',
- icon: [576, 512, [], "f14d", "M568.482 177.448L424.479 313.433C409.3 327.768 384 317.14 384 295.985v-71.963c-144.575.97-205.566 35.113-164.775 171.353 4.483 14.973-12.846 26.567-25.006 17.33C155.252 383.105 120 326.488 120 269.339c0-143.937 117.599-172.5 264-173.312V24.012c0-21.174 25.317-31.768 40.479-17.448l144.003 135.988c10.02 9.463 10.028 25.425 0 34.896zM384 379.128V448H64V128h50.916a11.99 11.99 0 0 0 8.648-3.693c14.953-15.568 32.237-27.89 51.014-37.676C185.708 80.83 181.584 64 169.033 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48v-88.806c0-8.288-8.197-14.066-16.011-11.302a71.83 71.83 0 0 1-34.189 3.377c-7.27-1.046-13.8 4.514-13.8 11.859z"]
- };
- var faShekelSign = {
- prefix: 'fas',
- iconName: 'shekel-sign',
- icon: [448, 512, [], "f20b", "M248 168v168c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V168c0-75.11-60.89-136-136-136H24C10.75 32 0 42.74 0 56v408c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112h112c30.93 0 56 25.07 56 56zM432 32h-48c-8.84 0-16 7.16-16 16v296c0 30.93-25.07 56-56 56H200V176c0-8.84-7.16-16-16-16h-48c-8.84 0-16 7.16-16 16v280c0 13.25 10.75 24 24 24h168c75.11 0 136-60.89 136-136V48c0-8.84-7.16-16-16-16z"]
- };
- var faShieldAlt = {
- prefix: 'fas',
- iconName: 'shield-alt',
- icon: [512, 512, [], "f3ed", "M466.5 83.7l-192-80a48.15 48.15 0 0 0-36.9 0l-192 80C27.7 91.1 16 108.6 16 128c0 198.5 114.5 335.7 221.5 380.3 11.8 4.9 25.1 4.9 36.9 0C360.1 472.6 496 349.3 496 128c0-19.4-11.7-36.9-29.5-44.3zM256.1 446.3l-.1-381 175.9 73.3c-3.3 151.4-82.1 261.1-175.8 307.7z"]
- };
- var faShieldVirus = {
- prefix: 'fas',
- iconName: 'shield-virus',
- icon: [512, 512, [], "e06c", "M224,192a16,16,0,1,0,16,16A16,16,0,0,0,224,192ZM466.5,83.68l-192-80A57.4,57.4,0,0,0,256.05,0a57.4,57.4,0,0,0-18.46,3.67l-192,80A47.93,47.93,0,0,0,16,128C16,326.5,130.5,463.72,237.5,508.32a48.09,48.09,0,0,0,36.91,0C360.09,472.61,496,349.3,496,128A48,48,0,0,0,466.5,83.68ZM384,256H371.88c-28.51,0-42.79,34.47-22.63,54.63l8.58,8.57a16,16,0,1,1-22.63,22.63l-8.57-8.58C306.47,313.09,272,327.37,272,355.88V368a16,16,0,0,1-32,0V355.88c0-28.51-34.47-42.79-54.63-22.63l-8.57,8.58a16,16,0,0,1-22.63-22.63l8.58-8.57c20.16-20.16,5.88-54.63-22.63-54.63H128a16,16,0,0,1,0-32h12.12c28.51,0,42.79-34.47,22.63-54.63l-8.58-8.57a16,16,0,0,1,22.63-22.63l8.57,8.58c20.16,20.16,54.63,5.88,54.63-22.63V112a16,16,0,0,1,32,0v12.12c0,28.51,34.47,42.79,54.63,22.63l8.57-8.58a16,16,0,0,1,22.63,22.63l-8.58,8.57C329.09,189.53,343.37,224,371.88,224H384a16,16,0,0,1,0,32Zm-96,0a16,16,0,1,0,16,16A16,16,0,0,0,288,256Z"]
- };
- var faShip = {
- prefix: 'fas',
- iconName: 'ship',
- icon: [640, 512, [], "f21a", "M496.616 372.639l70.012-70.012c16.899-16.9 9.942-45.771-12.836-53.092L512 236.102V96c0-17.673-14.327-32-32-32h-64V24c0-13.255-10.745-24-24-24H248c-13.255 0-24 10.745-24 24v40h-64c-17.673 0-32 14.327-32 32v140.102l-41.792 13.433c-22.753 7.313-29.754 36.173-12.836 53.092l70.012 70.012C125.828 416.287 85.587 448 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24 61.023 0 107.499-20.61 143.258-59.396C181.677 487.432 216.021 512 256 512h128c39.979 0 74.323-24.568 88.742-59.396C508.495 491.384 554.968 512 616 512c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24-60.817 0-101.542-31.001-119.384-75.361zM192 128h256v87.531l-118.208-37.995a31.995 31.995 0 0 0-19.584 0L192 215.531V128z"]
- };
- var faShippingFast = {
- prefix: 'fas',
- iconName: 'shipping-fast',
- icon: [640, 512, [], "f48b", "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H112C85.5 0 64 21.5 64 48v48H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h272c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H40c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H64v128c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"]
- };
- var faShoePrints = {
- prefix: 'fas',
- iconName: 'shoe-prints',
- icon: [640, 512, [], "f54b", "M192 160h32V32h-32c-35.35 0-64 28.65-64 64s28.65 64 64 64zM0 416c0 35.35 28.65 64 64 64h32V352H64c-35.35 0-64 28.65-64 64zm337.46-128c-34.91 0-76.16 13.12-104.73 32-24.79 16.38-44.52 32-104.73 32v128l57.53 15.97c26.21 7.28 53.01 13.12 80.31 15.05 32.69 2.31 65.6.67 97.58-6.2C472.9 481.3 512 429.22 512 384c0-64-84.18-96-174.54-96zM491.42 7.19C459.44.32 426.53-1.33 393.84.99c-27.3 1.93-54.1 7.77-80.31 15.04L256 32v128c60.2 0 79.94 15.62 104.73 32 28.57 18.88 69.82 32 104.73 32C555.82 224 640 192 640 128c0-45.22-39.1-97.3-148.58-120.81z"]
- };
- var faShoppingBag = {
- prefix: 'fas',
- iconName: 'shopping-bag',
- icon: [448, 512, [], "f290", "M352 160v-32C352 57.42 294.579 0 224 0 153.42 0 96 57.42 96 128v32H0v272c0 44.183 35.817 80 80 80h288c44.183 0 80-35.817 80-80V160h-96zm-192-32c0-35.29 28.71-64 64-64s64 28.71 64 64v32H160v-32zm160 120c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm-192 0c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24z"]
- };
- var faShoppingBasket = {
- prefix: 'fas',
- iconName: 'shopping-basket',
- icon: [576, 512, [], "f291", "M576 216v16c0 13.255-10.745 24-24 24h-8l-26.113 182.788C514.509 462.435 494.257 480 470.37 480H105.63c-23.887 0-44.139-17.565-47.518-41.212L32 256h-8c-13.255 0-24-10.745-24-24v-16c0-13.255 10.745-24 24-24h67.341l106.78-146.821c10.395-14.292 30.407-17.453 44.701-7.058 14.293 10.395 17.453 30.408 7.058 44.701L170.477 192h235.046L326.12 82.821c-10.395-14.292-7.234-34.306 7.059-44.701 14.291-10.395 34.306-7.235 44.701 7.058L484.659 192H552c13.255 0 24 10.745 24 24zM312 392V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm112 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm-224 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24z"]
- };
- var faShoppingCart = {
- prefix: 'fas',
- iconName: 'shopping-cart',
- icon: [576, 512, [], "f07a", "M528.12 301.319l47.273-208C578.806 78.301 567.391 64 551.99 64H159.208l-9.166-44.81C147.758 8.021 137.93 0 126.529 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24h69.883l70.248 343.435C147.325 417.1 136 435.222 136 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-15.674-6.447-29.835-16.824-40h209.647C430.447 426.165 424 440.326 424 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-22.172-12.888-41.332-31.579-50.405l5.517-24.276c3.413-15.018-8.002-29.319-23.403-29.319H218.117l-6.545-32h293.145c11.206 0 20.92-7.754 23.403-18.681z"]
- };
- var faShower = {
- prefix: 'fas',
- iconName: 'shower',
- icon: [512, 512, [], "f2cc", "M304,320a16,16,0,1,0,16,16A16,16,0,0,0,304,320Zm32-96a16,16,0,1,0,16,16A16,16,0,0,0,336,224Zm32,64a16,16,0,1,0-16-16A16,16,0,0,0,368,288Zm-32,32a16,16,0,1,0-16-16A16,16,0,0,0,336,320Zm-32-64a16,16,0,1,0,16,16A16,16,0,0,0,304,256Zm128-32a16,16,0,1,0-16-16A16,16,0,0,0,432,224Zm-48,16a16,16,0,1,0,16-16A16,16,0,0,0,384,240Zm-16-48a16,16,0,1,0,16,16A16,16,0,0,0,368,192Zm96,32a16,16,0,1,0,16,16A16,16,0,0,0,464,224Zm32-32a16,16,0,1,0,16,16A16,16,0,0,0,496,192Zm-64,64a16,16,0,1,0,16,16A16,16,0,0,0,432,256Zm-32,32a16,16,0,1,0,16,16A16,16,0,0,0,400,288Zm-64,64a16,16,0,1,0,16,16A16,16,0,0,0,336,352Zm-32,32a16,16,0,1,0,16,16A16,16,0,0,0,304,384Zm64-64a16,16,0,1,0,16,16A16,16,0,0,0,368,320Zm21.65-218.35-11.3-11.31a16,16,0,0,0-22.63,0L350.05,96A111.19,111.19,0,0,0,272,64c-19.24,0-37.08,5.3-52.9,13.85l-10-10A121.72,121.72,0,0,0,123.44,32C55.49,31.5,0,92.91,0,160.85V464a16,16,0,0,0,16,16H48a16,16,0,0,0,16-16V158.4c0-30.15,21-58.2,51-61.93a58.38,58.38,0,0,1,48.93,16.67l10,10C165.3,138.92,160,156.76,160,176a111.23,111.23,0,0,0,32,78.05l-5.66,5.67a16,16,0,0,0,0,22.62l11.3,11.31a16,16,0,0,0,22.63,0L389.65,124.28A16,16,0,0,0,389.65,101.65Z"]
- };
- var faShuttleVan = {
- prefix: 'fas',
- iconName: 'shuttle-van',
- icon: [640, 512, [], "f5b6", "M628.88 210.65L494.39 49.27A48.01 48.01 0 0 0 457.52 32H32C14.33 32 0 46.33 0 64v288c0 17.67 14.33 32 32 32h32c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h32c17.67 0 32-14.33 32-32V241.38c0-11.23-3.94-22.1-11.12-30.73zM64 192V96h96v96H64zm96 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm160-240h-96V96h96v96zm160 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-96-240V96h66.02l80 96H384z"]
- };
- var faSign = {
- prefix: 'fas',
- iconName: 'sign',
- icon: [512, 512, [], "f4d9", "M496 64H128V16c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16v48H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V128h368c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16zM160 384h320V160H160v224z"]
- };
- var faSignInAlt = {
- prefix: 'fas',
- iconName: 'sign-in-alt',
- icon: [512, 512, [], "f2f6", "M416 448h-84c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h84c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32h-84c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h84c53 0 96 43 96 96v192c0 53-43 96-96 96zm-47-201L201 79c-15-15-41-4.5-41 17v96H24c-13.3 0-24 10.7-24 24v96c0 13.3 10.7 24 24 24h136v96c0 21.5 26 32 41 17l168-168c9.3-9.4 9.3-24.6 0-34z"]
- };
- var faSignLanguage = {
- prefix: 'fas',
- iconName: 'sign-language',
- icon: [448, 512, [], "f2a7", "M91.434 483.987c-.307-16.018 13.109-29.129 29.13-29.129h62.293v-5.714H56.993c-16.021 0-29.437-13.111-29.13-29.129C28.16 404.491 40.835 392 56.428 392h126.429v-5.714H29.136c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h154.286v-5.714H57.707c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h168.566l-31.085-22.606c-12.762-9.281-15.583-27.149-6.302-39.912 9.281-12.761 27.15-15.582 39.912-6.302l123.361 89.715a34.287 34.287 0 0 1 14.12 27.728v141.136c0 15.91-10.946 29.73-26.433 33.374l-80.471 18.934a137.16 137.16 0 0 1-31.411 3.646H120c-15.593-.001-28.269-12.492-28.566-28.014zm73.249-225.701h36.423l-11.187-8.136c-18.579-13.511-20.313-40.887-3.17-56.536l-13.004-16.7c-9.843-12.641-28.43-15.171-40.88-5.088-12.065 9.771-14.133 27.447-4.553 39.75l36.371 46.71zm283.298-2.103l-5.003-152.452c-.518-15.771-13.722-28.136-29.493-27.619-15.773.518-28.137 13.722-27.619 29.493l1.262 38.415L283.565 11.019c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l76.889 98.745-4.509 3.511-94.79-121.734c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l94.443 121.288-4.509 3.511-77.675-99.754c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l52.053 66.849c12.497-8.257 29.055-8.285 41.69.904l123.36 89.714c10.904 7.93 17.415 20.715 17.415 34.198v16.999l61.064-47.549a34.285 34.285 0 0 0 13.202-28.177z"]
- };
- var faSignOutAlt = {
- prefix: 'fas',
- iconName: 'sign-out-alt',
- icon: [512, 512, [], "f2f5", "M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z"]
- };
- var faSignal = {
- prefix: 'fas',
- iconName: 'signal',
- icon: [640, 512, [], "f012", "M216 288h-48c-8.84 0-16 7.16-16 16v192c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V304c0-8.84-7.16-16-16-16zM88 384H40c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16zm256-192h-48c-8.84 0-16 7.16-16 16v288c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V208c0-8.84-7.16-16-16-16zm128-96h-48c-8.84 0-16 7.16-16 16v384c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112c0-8.84-7.16-16-16-16zM600 0h-48c-8.84 0-16 7.16-16 16v480c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z"]
- };
- var faSignature = {
- prefix: 'fas',
- iconName: 'signature',
- icon: [640, 512, [], "f5b7", "M623.2 192c-51.8 3.5-125.7 54.7-163.1 71.5-29.1 13.1-54.2 24.4-76.1 24.4-22.6 0-26-16.2-21.3-51.9 1.1-8 11.7-79.2-42.7-76.1-25.1 1.5-64.3 24.8-169.5 126L192 182.2c30.4-75.9-53.2-151.5-129.7-102.8L7.4 116.3C0 121-2.2 130.9 2.5 138.4l17.2 27c4.7 7.5 14.6 9.7 22.1 4.9l58-38.9c18.4-11.7 40.7 7.2 32.7 27.1L34.3 404.1C27.5 421 37 448 64 448c8.3 0 16.5-3.2 22.6-9.4 42.2-42.2 154.7-150.7 211.2-195.8-2.2 28.5-2.1 58.9 20.6 83.8 15.3 16.8 37.3 25.3 65.5 25.3 35.6 0 68-14.6 102.3-30 33-14.8 99-62.6 138.4-65.8 8.5-.7 15.2-7.3 15.2-15.8v-32.1c.2-9.1-7.5-16.8-16.6-16.2z"]
- };
- var faSimCard = {
- prefix: 'fas',
- iconName: 'sim-card',
- icon: [384, 512, [], "f7c4", "M0 64v384c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V128L256 0H64C28.7 0 0 28.7 0 64zm224 192h-64v-64h64v64zm96 0h-64v-64h32c17.7 0 32 14.3 32 32v32zm-64 128h64v32c0 17.7-14.3 32-32 32h-32v-64zm-96 0h64v64h-64v-64zm-96 0h64v64H96c-17.7 0-32-14.3-32-32v-32zm0-96h256v64H64v-64zm0-64c0-17.7 14.3-32 32-32h32v64H64v-32z"]
- };
- var faSink = {
- prefix: 'fas',
- iconName: 'sink',
- icon: [512, 512, [], "e06d", "M32,416a96,96,0,0,0,96,96H384a96,96,0,0,0,96-96V384H32ZM496,288H400V256h64a16,16,0,0,0,16-16V224a16,16,0,0,0-16-16H384a32,32,0,0,0-32,32v48H288V96a32,32,0,0,1,64,0v16a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V96A96.16,96.16,0,0,0,300.87,1.86C255.29,10.71,224,53.36,224,99.79V288H160V240a32,32,0,0,0-32-32H48a16,16,0,0,0-16,16v16a16,16,0,0,0,16,16h64v32H16A16,16,0,0,0,0,304v32a16,16,0,0,0,16,16H496a16,16,0,0,0,16-16V304A16,16,0,0,0,496,288Z"]
- };
- var faSitemap = {
- prefix: 'fas',
- iconName: 'sitemap',
- icon: [640, 512, [], "f0e8", "M128 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm-24-80h192v48h48v-48h192v48h48v-57.59c0-21.17-17.23-38.41-38.41-38.41H344v-64h40c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H256c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h40v64H94.41C73.23 224 56 241.23 56 262.41V320h48v-48zm264 80h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm240 0h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"]
- };
- var faSkating = {
- prefix: 'fas',
- iconName: 'skating',
- icon: [448, 512, [], "f7c5", "M400 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm0 448c-8.8 0-16 7.2-16 16s-7.2 16-16 16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16h96c26.5 0 48-21.5 48-48 0-8.8-7.2-16-16-16zm-282.2 8.6c-6.2 6.2-16.4 6.3-22.6 0l-67.9-67.9c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l67.9 67.9c9.4 9.4 21.7 14 34 14s24.6-4.7 33.9-14c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.3-22.7 0zm56.1-179.8l-93.7 93.7c-12.5 12.5-12.5 32.8 0 45.2 6.2 6.2 14.4 9.4 22.6 9.4s16.4-3.1 22.6-9.4l91.9-91.9-30.2-30.2c-5-5-9.4-10.7-13.2-16.8zM128 160h105.5l-20.1 17.2c-13.5 11.5-21.6 28.4-22.3 46.1-.7 17.8 6.1 35.2 18.7 47.7l78.2 78.2V432c0 17.7 14.3 32 32 32s32-14.3 32-32v-89.4c0-12.6-5.1-25-14.1-33.9l-61-61c.5-.4 1.2-.6 1.7-1.1l82.3-82.3c11.5-11.5 14.9-28.6 8.7-43.6-6.2-15-20.7-24.7-37-24.7H128c-17.7 0-32 14.3-32 32s14.3 32 32 32z"]
- };
- var faSkiing = {
- prefix: 'fas',
- iconName: 'skiing',
- icon: [512, 512, [], "f7c9", "M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm73 356.1c-9.4-9.4-24.6-9.4-33.9 0-12.1 12.1-30.5 15.4-45.1 8.7l-135.8-70.2 49.2-73.8c12.7-19 10.2-44.5-6-60.6L293 215.7l-107-53.1c-2.9 19.9 3.4 40 17.7 54.4l75.1 75.2-45.9 68.8L35 258.7c-11.7-6-26.2-1.5-32.3 10.3-6.1 11.8-1.5 26.3 10.3 32.3l391.9 202.5c11.9 5.5 24.5 8.1 37.1 8.1 23.2 0 46-9 63-26 9.3-9.3 9.3-24.5 0-33.8zM120 91.6l-11.5 22.5c14.4 7.3 31.2 4.9 42.8-4.8l47.2 23.4c-.1.1-.1.2-.2.3l114.5 56.8 32.4-13 6.4 19.1c4 12.1 12.6 22 24 27.7l58.1 29c15.9 7.9 35 1.5 42.9-14.3 7.9-15.8 1.5-35-14.3-42.9l-52.1-26.1-17.1-51.2c-8.1-24.2-40.9-56.6-84.5-39.2l-81.2 32.5-62.5-31c.3-14.5-7.2-28.6-20.9-35.6l-11.1 21.7h-.2l-34.4-7c-1.8-.4-3.7.2-5 1.7-1.9 2.2-1.7 5.5.5 7.4l26.2 23z"]
- };
- var faSkiingNordic = {
- prefix: 'fas',
- iconName: 'skiing-nordic',
- icon: [576, 512, [], "f7ca", "M336 96c26.5 0 48-21.5 48-48S362.5 0 336 0s-48 21.5-48 48 21.5 48 48 48zm216 320c-13.2 0-24 10.7-24 24 0 13.2-10.8 24-24 24h-69.5L460 285.6c11.7-4.7 20.1-16.2 20.1-29.6 0-17.7-14.3-32-32-32h-44L378 170.8c-12.5-25.5-35.5-44.2-61.8-50.9L245 98.7c-28.3-6.8-57.8-.5-80.8 17.1l-39.7 30.4c-14 10.7-16.7 30.8-5.9 44.9.7.9 1.7 1.3 2.4 2.1L66.9 464H24c-13.2 0-24 10.7-24 24s10.8 24 24 24h480c39.7 0 72-32.3 72-72 0-13.2-10.8-24-24-24zm-260.5 48h-96.9l43.1-91-22-13c-12.1-7.2-21.9-16.9-29.5-27.8L123.7 464H99.5l52.3-261.4c4.1-1 8.1-2.9 11.7-5.6l39.7-30.4c7.7-5.9 17.4-8 25.3-6.1l14.7 4.4-37.5 87.4c-12.6 29.5-1.3 64 26.3 80.3l85 50.2-25.5 81.2zm110.6 0h-43.6l23.6-75.5c5.9-20.8-2.9-43.1-21.6-54.4L299.3 298l31.3-78.3 20.3 41.4c8 16.3 24.9 26.9 43.1 26.9h33.3l-25.2 176z"]
- };
- var faSkull = {
- prefix: 'fas',
- iconName: 'skull',
- icon: [512, 512, [], "f54c", "M256 0C114.6 0 0 100.3 0 224c0 70.1 36.9 132.6 94.5 173.7 9.6 6.9 15.2 18.1 13.5 29.9l-9.4 66.2c-1.4 9.6 6 18.2 15.7 18.2H192v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h64v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h77.7c9.7 0 17.1-8.6 15.7-18.2l-9.4-66.2c-1.7-11.7 3.8-23 13.5-29.9C475.1 356.6 512 294.1 512 224 512 100.3 397.4 0 256 0zm-96 320c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm192 0c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z"]
- };
- var faSkullCrossbones = {
- prefix: 'fas',
- iconName: 'skull-crossbones',
- icon: [448, 512, [], "f714", "M439.15 453.06L297.17 384l141.99-69.06c7.9-3.95 11.11-13.56 7.15-21.46L432 264.85c-3.95-7.9-13.56-11.11-21.47-7.16L224 348.41 37.47 257.69c-7.9-3.95-17.51-.75-21.47 7.16L1.69 293.48c-3.95 7.9-.75 17.51 7.15 21.46L150.83 384 8.85 453.06c-7.9 3.95-11.11 13.56-7.15 21.47l14.31 28.63c3.95 7.9 13.56 11.11 21.47 7.15L224 419.59l186.53 90.72c7.9 3.95 17.51.75 21.47-7.15l14.31-28.63c3.95-7.91.74-17.52-7.16-21.47zM150 237.28l-5.48 25.87c-2.67 12.62 5.42 24.85 16.45 24.85h126.08c11.03 0 19.12-12.23 16.45-24.85l-5.5-25.87c41.78-22.41 70-62.75 70-109.28C368 57.31 303.53 0 224 0S80 57.31 80 128c0 46.53 28.22 86.87 70 109.28zM280 112c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32zm-112 0c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32z"]
- };
- var faSlash = {
- prefix: 'fas',
- iconName: 'slash',
- icon: [640, 512, [], "f715", "M594.53 508.63L6.18 53.9c-6.97-5.42-8.23-15.47-2.81-22.45L23.01 6.18C28.43-.8 38.49-2.06 45.47 3.37L633.82 458.1c6.97 5.42 8.23 15.47 2.81 22.45l-19.64 25.27c-5.42 6.98-15.48 8.23-22.46 2.81z"]
- };
- var faSleigh = {
- prefix: 'fas',
- iconName: 'sleigh',
- icon: [640, 512, [], "f7cc", "M612.7 350.7l-9.3-7.4c-6.9-5.5-17-4.4-22.5 2.5l-10 12.5c-5.5 6.9-4.4 17 2.5 22.5l9.3 7.4c5.9 4.7 9.2 11.7 9.2 19.2 0 13.6-11 24.6-24.6 24.6H48c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h516c39 0 73.7-29.3 75.9-68.3 1.4-23.8-8.7-46.3-27.2-61zM32 224c0 59.6 40.9 109.2 96 123.5V400h64v-48h192v48h64v-48c53 0 96-43 96-96v-96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-96v64c0 35.3-28.7 64-64 64h-20.7c-65.8 0-125.9-37.2-155.3-96-29.4-58.8-89.6-96-155.3-96H32C14.3 32 0 46.3 0 64s14.3 32 32 32v128z"]
- };
- var faSlidersH = {
- prefix: 'fas',
- iconName: 'sliders-h',
- icon: [512, 512, [], "f1de", "M496 384H160v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h80v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h336c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160h-80v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h336v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h80c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160H288V48c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h208v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16z"]
- };
- var faSmile = {
- prefix: 'fas',
- iconName: 'smile',
- icon: [496, 512, [], "f118", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z"]
- };
- var faSmileBeam = {
- prefix: 'fas',
- iconName: 'smile-beam',
- icon: [496, 512, [], "f5b8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM112 223.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zm250.8 122.8C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.3 24.6 20.5zm6.2-118.3l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.6 8.6-11 11.9-15.1 4.5z"]
- };
- var faSmileWink = {
- prefix: 'fas',
- iconName: 'smile-wink',
- icon: [496, 512, [], "f4da", "M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm158.5 16.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.7 11.1-11.4 18.3-19.8 10.8l-9.7-8.5zM157.8 325.8C180.2 352.7 213 368 248 368s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.2 24.6 20.5C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11.2-36.7 24.6-20.4z"]
- };
- var faSmog = {
- prefix: 'fas',
- iconName: 'smog',
- icon: [640, 512, [], "f75f", "M624 368H80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm-480 96H16c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h128c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm416 0H224c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h336c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zM144 288h156.1c22.5 19.7 51.6 32 83.9 32s61.3-12.3 83.9-32H528c61.9 0 112-50.1 112-112S589.9 64 528 64c-18 0-34.7 4.6-49.7 12.1C454 31 406.8 0 352 0c-41 0-77.8 17.3-104 44.8C221.8 17.3 185 0 144 0 64.5 0 0 64.5 0 144s64.5 144 144 144z"]
- };
- var faSmoking = {
- prefix: 'fas',
- iconName: 'smoking',
- icon: [640, 512, [], "f48d", "M632 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zM553.3 87.1c-5.7-3.8-9.3-10-9.3-16.8V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v62.3c0 22 10.2 43.4 28.6 55.4 42.2 27.3 67.4 73.8 67.4 124V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-65.5-32.4-126.2-86.7-162.6zM432 352H48c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h384c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zm-32 112H224v-64h176v64zm87.7-322.4C463.8 125 448 99.3 448 70.3V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v66.4c0 43.7 24.6 81.6 60.3 106.7 22.4 15.7 35.7 41.2 35.7 68.6V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-43.3-21-83.4-56.3-108.1zM536 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z"]
- };
- var faSmokingBan = {
- prefix: 'fas',
- iconName: 'smoking-ban',
- icon: [512, 512, [], "f54d", "M96 304c0 8.8 7.2 16 16 16h117.5l-96-96H112c-8.8 0-16 7.2-16 16v64zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm0 448c-105.9 0-192-86.1-192-192 0-41.4 13.3-79.7 35.7-111.1l267.4 267.4C335.7 434.7 297.4 448 256 448zm45.2-192H384v32h-50.8l-32-32zm111.1 111.1L365.2 320H400c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16H269.2L144.9 99.7C176.3 77.3 214.6 64 256 64c105.9 0 192 86.1 192 192 0 41.4-13.3 79.7-35.7 111.1zM320.6 128c-15.6 0-28.6-11.2-31.4-25.9-.7-3.6-4-6.1-7.7-6.1h-16.2c-5 0-8.7 4.5-8 9.4 4.6 30.9 31.2 54.6 63.3 54.6 15.6 0 28.6 11.2 31.4 25.9.7 3.6 4 6.1 7.7 6.1h16.2c5 0 8.7-4.5 8-9.4-4.6-30.9-31.2-54.6-63.3-54.6z"]
- };
- var faSms = {
- prefix: 'fas',
- iconName: 'sms',
- icon: [512, 512, [], "f7cd", "M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7 1.3 3 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128.2 304H116c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H156c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-19 38.6-42.4 38.6zm191.8-8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-68.2l-24.8 55.8c-2.9 5.9-11.4 5.9-14.3 0L224 227.8V296c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V192c0-8.8 7.2-16 16-16h16c6.1 0 11.6 3.4 14.3 8.8l17.7 35.4 17.7-35.4c2.7-5.4 8.3-8.8 14.3-8.8h16c8.8 0 16 7.2 16 16v104zm48.3 8H356c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H396c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-18.9 38.6-42.3 38.6z"]
- };
- var faSnowboarding = {
- prefix: 'fas',
- iconName: 'snowboarding',
- icon: [512, 512, [], "f7ce", "M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm28.8 153.6c5.8 4.3 12.5 6.4 19.2 6.4 9.7 0 19.3-4.4 25.6-12.8 10.6-14.1 7.8-34.2-6.4-44.8l-111.4-83.5c-13.8-10.3-29.1-18.4-45.4-23.8l-63.7-21.2-26.1-52.1C244.7 2 225.5-4.4 209.7 3.5c-15.8 7.9-22.2 27.1-14.3 42.9l29.1 58.1c5.7 11.4 15.6 19.9 27.7 24l16.4 5.5-41.2 20.6c-21.8 10.9-35.4 32.8-35.4 57.2v53.1l-74.1 24.7c-16.8 5.6-25.8 23.7-20.2 40.5 1.7 5.2 4.9 9.4 8.7 12.9l-38.7-14.1c-9.7-3.5-17.4-10.6-21.8-20-5.6-12-19.9-17.2-31.9-11.6s-17.2 19.9-11.6 31.9c9.8 21 27.1 36.9 48.9 44.8l364.8 132.7c9.7 3.5 19.7 5.3 29.7 5.3 12.5 0 24.9-2.7 36.5-8.2 12-5.6 17.2-19.9 11.6-31.9S474 454.7 462 460.3c-9.3 4.4-19.8 4.8-29.5 1.3l-90.8-33.1c8.7-4.1 15.6-11.8 17.8-21.9l21.9-102c3.9-18.2-3.2-37.2-18.1-48.4l-52-39 66-30.5 83.5 62.9zm-144.4 51.7l-19.7 92c-1.5 7.1-.1 13.9 2.8 20l-169.4-61.6c2.7-.2 5.4-.4 8-1.3l85-28.4c19.6-6.5 32.8-24.8 32.8-45.5V256l60.5 45.3z"]
- };
- var faSnowflake = {
- prefix: 'fas',
- iconName: 'snowflake',
- icon: [448, 512, [], "f2dc", "M440.3 345.2l-33.8-19.5 26-7c8.2-2.2 13.1-10.7 10.9-18.9l-4-14.9c-2.2-8.2-10.7-13.1-18.9-10.9l-70.8 19-63.9-37 63.8-36.9 70.8 19c8.2 2.2 16.7-2.7 18.9-10.9l4-14.9c2.2-8.2-2.7-16.7-10.9-18.9l-26-7 33.8-19.5c7.4-4.3 9.9-13.7 5.7-21.1L430.4 119c-4.3-7.4-13.7-9.9-21.1-5.7l-33.8 19.5 7-26c2.2-8.2-2.7-16.7-10.9-18.9l-14.9-4c-8.2-2.2-16.7 2.7-18.9 10.9l-19 70.8-62.8 36.2v-77.5l53.7-53.7c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0L256 56.4V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v40.4l-19.7-19.7c-6.2-6.2-16.4-6.2-22.6 0L138.3 48c-6.3 6.2-6.3 16.4 0 22.6l53.7 53.7v77.5l-62.8-36.2-19-70.8c-2.2-8.2-10.7-13.1-18.9-10.9l-14.9 4c-8.2 2.2-13.1 10.7-10.9 18.9l7 26-33.8-19.5c-7.4-4.3-16.8-1.7-21.1 5.7L2.1 145.7c-4.3 7.4-1.7 16.8 5.7 21.1l33.8 19.5-26 7c-8.3 2.2-13.2 10.7-11 19l4 14.9c2.2 8.2 10.7 13.1 18.9 10.9l70.8-19 63.8 36.9-63.8 36.9-70.8-19c-8.2-2.2-16.7 2.7-18.9 10.9l-4 14.9c-2.2 8.2 2.7 16.7 10.9 18.9l26 7-33.8 19.6c-7.4 4.3-9.9 13.7-5.7 21.1l15.5 26.8c4.3 7.4 13.7 9.9 21.1 5.7l33.8-19.5-7 26c-2.2 8.2 2.7 16.7 10.9 18.9l14.9 4c8.2 2.2 16.7-2.7 18.9-10.9l19-70.8 62.8-36.2v77.5l-53.7 53.7c-6.3 6.2-6.3 16.4 0 22.6l11.3 11.3c6.2 6.2 16.4 6.2 22.6 0l19.7-19.7V496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-40.4l19.7 19.7c6.2 6.2 16.4 6.2 22.6 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6L256 387.7v-77.5l62.8 36.2 19 70.8c2.2 8.2 10.7 13.1 18.9 10.9l14.9-4c8.2-2.2 13.1-10.7 10.9-18.9l-7-26 33.8 19.5c7.4 4.3 16.8 1.7 21.1-5.7l15.5-26.8c4.3-7.3 1.8-16.8-5.6-21z"]
- };
- var faSnowman = {
- prefix: 'fas',
- iconName: 'snowman',
- icon: [512, 512, [], "f7d0", "M510.9 152.3l-5.9-14.5c-3.3-8-12.6-11.9-20.8-8.7L456 140.6v-29c0-8.6-7.2-15.6-16-15.6h-16c-8.8 0-16 7-16 15.6v46.9c0 .5.3 1 .3 1.5l-56.4 23c-5.9-10-13.3-18.9-22-26.6 13.6-16.6 22-37.4 22-60.5 0-53-43-96-96-96s-96 43-96 96c0 23.1 8.5 43.9 22 60.5-8.7 7.7-16 16.6-22 26.6l-56.4-23c.1-.5.3-1 .3-1.5v-46.9C104 103 96.8 96 88 96H72c-8.8 0-16 7-16 15.6v29l-28.1-11.5c-8.2-3.2-17.5.7-20.8 8.7l-5.9 14.5c-3.3 8 .7 17.1 8.9 20.3l135.2 55.2c-.4 4-1.2 8-1.2 12.2 0 10.1 1.7 19.6 4.2 28.9C120.9 296.4 104 334.2 104 376c0 54 28.4 100.9 70.8 127.8 9.3 5.9 20.3 8.2 31.3 8.2h99.2c13.3 0 26.3-4.1 37.2-11.7 46.5-32.3 74.4-89.4 62.9-152.6-5.5-30.2-20.5-57.6-41.6-79 2.5-9.2 4.2-18.7 4.2-28.7 0-4.2-.8-8.1-1.2-12.2L502 172.6c8.1-3.1 12.1-12.2 8.9-20.3zM224 96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 272c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-88s-16-23.2-16-32 7.2-16 16-16 16 7.2 16 16-16 32-16 32zm32-56c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"]
- };
- var faSnowplow = {
- prefix: 'fas',
- iconName: 'snowplow',
- icon: [640, 512, [], "f7d2", "M120 376c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm238.6 49.4c-14.5-14.5-22.6-34.1-22.6-54.6V269.2c0-20.5 8.1-40.1 22.6-54.6l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6l-22.6-22.6c-6.2-6.2-16.4-6.2-22.6 0l-36.7 36.7c-26.5 26.5-41.4 62.4-41.4 99.9V288h-64v-50.9c0-8.7-1.8-17.2-5.2-25.2L364.5 29.1C356.9 11.4 339.6 0 320.3 0H176c-26.5 0-48 21.5-48 48v112h-16c-26.5 0-48 21.5-48 48v91.2C26.3 317.2 0 355.4 0 400c0 61.9 50.1 112 112 112h256c61.9 0 112-50.1 112-112 0-17.3-4.2-33.4-11.2-48H512v18.7c0 37.5 14.9 73.4 41.4 99.9l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0l22.6-22.6c6.2-6.2 6.2-16.4 0-22.6l-36.7-36.7zM192 64h117.8l68.6 160H256l-64-64V64zm176 384H112c-26.5 0-48-21.5-48-48s21.5-48 48-48h256c26.5 0 48 21.5 48 48s-21.5 48-48 48z"]
- };
- var faSoap = {
- prefix: 'fas',
- iconName: 'soap',
- icon: [512, 512, [], "e06e", "M416,192a95.42,95.42,0,0,1-30.94,70.21A95.8,95.8,0,0,1,352,448H160a96,96,0,0,1,0-192h88.91A95.3,95.3,0,0,1,224,192H96A96,96,0,0,0,0,288V416a96,96,0,0,0,96,96H416a96,96,0,0,0,96-96V288A96,96,0,0,0,416,192Zm-96,64a64,64,0,1,0-64-64A64,64,0,0,0,320,256ZM208,96a48,48,0,1,0-48-48A48,48,0,0,0,208,96ZM384,64a32,32,0,1,0-32-32A32,32,0,0,0,384,64ZM160,288a64,64,0,0,0,0,128H352a64,64,0,0,0,0-128Z"]
- };
- var faSocks = {
- prefix: 'fas',
- iconName: 'socks',
- icon: [512, 512, [], "f696", "M214.66 311.01L288 256V96H128v176l-86.65 64.61c-39.4 29.56-53.86 84.42-29.21 127.06C30.39 495.25 63.27 512 96.08 512c20.03 0 40.25-6.25 57.52-19.2l21.86-16.39c-29.85-55.38-13.54-125.84 39.2-165.4zM288 32c0-11.05 3.07-21.3 8.02-30.38C293.4.92 290.85 0 288 0H160c-17.67 0-32 14.33-32 32v32h160V32zM480 0H352c-17.67 0-32 14.33-32 32v32h192V32c0-17.67-14.33-32-32-32zM320 272l-86.13 64.61c-39.4 29.56-53.86 84.42-29.21 127.06 18.25 31.58 50.61 48.33 83.42 48.33 20.03 0 40.25-6.25 57.52-19.2l115.2-86.4A127.997 127.997 0 0 0 512 304V96H320v176z"]
- };
- var faSolarPanel = {
- prefix: 'fas',
- iconName: 'solar-panel',
- icon: [640, 512, [], "f5ba", "M431.98 448.01l-47.97.05V416h-128v32.21l-47.98.05c-8.82.01-15.97 7.16-15.98 15.99l-.05 31.73c-.01 8.85 7.17 16.03 16.02 16.02l223.96-.26c8.82-.01 15.97-7.16 15.98-15.98l.04-31.73c.01-8.85-7.17-16.03-16.02-16.02zM585.2 26.74C582.58 11.31 568.99 0 553.06 0H86.93C71 0 57.41 11.31 54.79 26.74-3.32 369.16.04 348.08.03 352c-.03 17.32 14.29 32 32.6 32h574.74c18.23 0 32.51-14.56 32.59-31.79.02-4.08 3.35 16.95-54.76-325.47zM259.83 64h120.33l9.77 96H250.06l9.77-96zm-75.17 256H71.09L90.1 208h105.97l-11.41 112zm16.29-160H98.24l16.29-96h96.19l-9.77 96zm32.82 160l11.4-112h149.65l11.4 112H233.77zm195.5-256h96.19l16.29 96H439.04l-9.77-96zm26.06 256l-11.4-112H549.9l19.01 112H455.33z"]
- };
- var faSort = {
- prefix: 'fas',
- iconName: 'sort',
- icon: [320, 512, [], "f0dc", "M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41zm255-105L177 64c-9.4-9.4-24.6-9.4-33.9 0L24 183c-15.1 15.1-4.4 41 17 41h238c21.4 0 32.1-25.9 17-41z"]
- };
- var faSortAlphaDown = {
- prefix: 'fas',
- iconName: 'sort-alpha-down',
- icon: [448, 512, [], "f15d", "M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm240-64H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z"]
- };
- var faSortAlphaDownAlt = {
- prefix: 'fas',
- iconName: 'sort-alpha-down-alt',
- icon: [448, 512, [], "f881", "M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm112-128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z"]
- };
- var faSortAlphaUp = {
- prefix: 'fas',
- iconName: 'sort-alpha-up',
- icon: [448, 512, [], "f15e", "M16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160zm400 128H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z"]
- };
- var faSortAlphaUpAlt = {
- prefix: 'fas',
- iconName: 'sort-alpha-up-alt',
- icon: [448, 512, [], "f882", "M16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160zm272 64h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z"]
- };
- var faSortAmountDown = {
- prefix: 'fas',
- iconName: 'sort-amount-down',
- icon: [512, 512, [], "f160", "M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-128-64h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm256-192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"]
- };
- var faSortAmountDownAlt = {
- prefix: 'fas',
- iconName: 'sort-amount-down-alt',
- icon: [512, 512, [], "f884", "M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm-64 0h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352z"]
- };
- var faSortAmountUp = {
- prefix: 'fas',
- iconName: 'sort-amount-up',
- icon: [512, 512, [], "f161", "M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.77 160 16 160zm416 0H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"]
- };
- var faSortAmountUpAlt = {
- prefix: 'fas',
- iconName: 'sort-amount-up-alt',
- icon: [512, 512, [], "f885", "M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.39-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160z"]
- };
- var faSortDown = {
- prefix: 'fas',
- iconName: 'sort-down',
- icon: [320, 512, [], "f0dd", "M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41z"]
- };
- var faSortNumericDown = {
- prefix: 'fas',
- iconName: 'sort-numeric-down',
- icon: [448, 512, [], "f162", "M304 96h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-16V48a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 96zm26.15 162.91a79 79 0 0 0-55 54.17c-14.25 51.05 21.21 97.77 68.85 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.76 86.25-61.61 86.25-132V336c-.02-51.21-48.4-91.34-101.85-77.09zM352 356a20 20 0 1 1 20-20 20 20 0 0 1-20 20zm-176-4h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352z"]
- };
- var faSortNumericDownAlt = {
- prefix: 'fas',
- iconName: 'sort-numeric-down-alt',
- icon: [448, 512, [], "f886", "M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm224 64h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 352h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM330.17 34.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.77 86.25-61.61 86.25-132V112c-.02-51.21-48.4-91.34-101.85-77.09zM352 132a20 20 0 1 1 20-20 20 20 0 0 1-20 20z"]
- };
- var faSortNumericUp = {
- prefix: 'fas',
- iconName: 'sort-numeric-up',
- icon: [448, 512, [], "f163", "M330.17 258.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.76 86.25-61.61 86.25-132V336c-.02-51.21-48.4-91.34-101.85-77.09zM352 356a20 20 0 1 1 20-20 20 20 0 0 1-20 20zM304 96h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-16V48a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 96zM107.31 36.69a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31z"]
- };
- var faSortNumericUpAlt = {
- prefix: 'fas',
- iconName: 'sort-numeric-up-alt',
- icon: [448, 512, [], "f887", "M107.31 36.69a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31zM400 416h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 352h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM330.17 34.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.77 86.25-61.61 86.25-132V112c-.02-51.21-48.4-91.34-101.85-77.09zM352 132a20 20 0 1 1 20-20 20 20 0 0 1-20 20z"]
- };
- var faSortUp = {
- prefix: 'fas',
- iconName: 'sort-up',
- icon: [320, 512, [], "f0de", "M279 224H41c-21.4 0-32.1-25.9-17-41L143 64c9.4-9.4 24.6-9.4 33.9 0l119 119c15.2 15.1 4.5 41-16.9 41z"]
- };
- var faSpa = {
- prefix: 'fas',
- iconName: 'spa',
- icon: [576, 512, [], "f5bb", "M568.25 192c-29.04.13-135.01 6.16-213.84 83-33.12 29.63-53.36 63.3-66.41 94.86-13.05-31.56-33.29-65.23-66.41-94.86-78.83-76.84-184.8-82.87-213.84-83-4.41-.02-7.79 3.4-7.75 7.82.23 27.92 7.14 126.14 88.77 199.3C172.79 480.94 256 480 288 480s115.19.95 199.23-80.88c81.64-73.17 88.54-171.38 88.77-199.3.04-4.42-3.34-7.84-7.75-7.82zM287.98 302.6c12.82-18.85 27.6-35.78 44.09-50.52 19.09-18.61 39.58-33.3 60.26-45.18-16.44-70.5-51.72-133.05-96.73-172.22-4.11-3.58-11.02-3.58-15.14 0-44.99 39.14-80.27 101.63-96.74 172.07 20.37 11.7 40.5 26.14 59.22 44.39a282.768 282.768 0 0 1 45.04 51.46z"]
- };
- var faSpaceShuttle = {
- prefix: 'fas',
- iconName: 'space-shuttle',
- icon: [640, 512, [], "f197", "M592.604 208.244C559.735 192.836 515.777 184 472 184H186.327c-4.952-6.555-10.585-11.978-16.72-16H376C229.157 137.747 219.403 32 96.003 32H96v128H80V32c-26.51 0-48 28.654-48 64v64c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v16c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v64c0 35.346 21.49 64 48 64V352h16v128h.003c123.4 0 133.154-105.747 279.997-136H169.606c6.135-4.022 11.768-9.445 16.72-16H472c43.777 0 87.735-8.836 120.604-24.244C622.282 289.845 640 271.992 640 256s-17.718-33.845-47.396-47.756zM488 296a8 8 0 0 1-8-8v-64a8 8 0 0 1 8-8c31.909 0 31.942 80 0 80z"]
- };
- var faSpellCheck = {
- prefix: 'fas',
- iconName: 'spell-check',
- icon: [576, 512, [], "f891", "M272 256h91.36c43.2 0 82-32.2 84.51-75.34a79.82 79.82 0 0 0-25.26-63.07 79.81 79.81 0 0 0 9.06-44.91C427.9 30.57 389.3 0 347 0h-75a16 16 0 0 0-16 16v224a16 16 0 0 0 16 16zm40-200h40a24 24 0 0 1 0 48h-40zm0 96h56a24 24 0 0 1 0 48h-56zM155.12 22.25A32 32 0 0 0 124.64 0H99.36a32 32 0 0 0-30.48 22.25L.59 235.73A16 16 0 0 0 16 256h24.93a16 16 0 0 0 15.42-11.73L68.29 208h87.42l11.94 36.27A16 16 0 0 0 183.07 256H208a16 16 0 0 0 15.42-20.27zM89.37 144L112 75.3l22.63 68.7zm482 132.48l-45.21-45.3a15.88 15.88 0 0 0-22.59 0l-151.5 151.5-55.41-55.5a15.88 15.88 0 0 0-22.59 0l-45.3 45.3a16 16 0 0 0 0 22.59l112 112.21a15.89 15.89 0 0 0 22.6 0l208-208.21a16 16 0 0 0-.02-22.59z"]
- };
- var faSpider = {
- prefix: 'fas',
- iconName: 'spider',
- icon: [576, 512, [], "f717", "M151.17 167.35L177.1 176h4.67l5.22-26.12c.72-3.58 1.8-7.58 3.21-11.79l-20.29-40.58 23.8-71.39c2.79-8.38-1.73-17.44-10.12-20.24L168.42.82c-8.38-2.8-17.45 1.73-20.24 10.12l-25.89 77.68a32.04 32.04 0 0 0 1.73 24.43l27.15 54.3zm422.14 182.03l-52.75-79.12a32.002 32.002 0 0 0-26.62-14.25H416l68.99-24.36a32.03 32.03 0 0 0 16.51-12.61l53.6-80.41c4.9-7.35 2.91-17.29-4.44-22.19l-13.31-8.88c-7.35-4.9-17.29-2.91-22.19 4.44l-50.56 75.83L404.1 208H368l-10.37-51.85C355.44 145.18 340.26 96 288 96c-52.26 0-67.44 49.18-69.63 60.15L208 208h-36.1l-60.49-20.17L60.84 112c-4.9-7.35-14.83-9.34-22.19-4.44l-13.31 8.88c-7.35 4.9-9.34 14.83-4.44 22.19l53.6 80.41a32.03 32.03 0 0 0 16.51 12.61L160 256H82.06a32.02 32.02 0 0 0-26.63 14.25L2.69 349.38c-4.9 7.35-2.92 17.29 4.44 22.19l13.31 8.88c7.35 4.9 17.29 2.91 22.19-4.44l48-72h47.06l-60.83 97.33A31.988 31.988 0 0 0 72 418.3V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-73.11l74.08-118.53c-1.01 14.05-2.08 28.11-2.08 42.21C192 399.64 232.76 448 288 448s96-48.36 96-101.43c0-14.1-1.08-28.16-2.08-42.21L456 422.89V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-77.71c0-6-1.69-11.88-4.86-16.96L438.31 304h47.06l48 72c4.9 7.35 14.84 9.34 22.19 4.44l13.31-8.88c7.36-4.9 9.34-14.83 4.44-22.18zM406.09 97.51l-20.29 40.58c1.41 4.21 2.49 8.21 3.21 11.79l5.22 26.12h4.67l25.93-8.65 27.15-54.3a31.995 31.995 0 0 0 1.73-24.43l-25.89-77.68C425.03 2.56 415.96-1.98 407.58.82l-15.17 5.06c-8.38 2.8-12.91 11.86-10.12 20.24l23.8 71.39z"]
- };
- var faSpinner = {
- prefix: 'fas',
- iconName: 'spinner',
- icon: [512, 512, [], "f110", "M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z"]
- };
- var faSplotch = {
- prefix: 'fas',
- iconName: 'splotch',
- icon: [512, 512, [], "f5bc", "M472.29 195.89l-67.06-22.95c-19.28-6.6-33.54-20.92-38.14-38.3L351.1 74.19c-11.58-43.77-76.57-57.13-109.98-22.62l-46.14 47.67c-13.26 13.71-33.54 20.93-54.2 19.31l-71.88-5.62c-52.05-4.07-86.93 44.88-59.03 82.83l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24L24.62 355.4c-20.59 41.25 22.84 84.87 73.49 73.81l69.96-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101.04 7.57 104.45-37.22l4.7-61.86c1.35-17.79 12.8-33.86 30.63-42.99l62-31.74c44.88-22.96 39.59-80.17-8.95-96.79z"]
- };
- var faSprayCan = {
- prefix: 'fas',
- iconName: 'spray-can',
- icon: [512, 512, [], "f5bd", "M224 32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96h128V32zm256 96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-256 32H96c-53.02 0-96 42.98-96 96v224c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V256c0-53.02-42.98-96-96-96zm-64 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zM480 96c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm-96 32c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-96-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 0c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 192c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z"]
- };
- var faSquare = {
- prefix: 'fas',
- iconName: 'square',
- icon: [448, 512, [], "f0c8", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"]
- };
- var faSquareFull = {
- prefix: 'fas',
- iconName: 'square-full',
- icon: [512, 512, [], "f45c", "M512 512H0V0h512v512z"]
- };
- var faSquareRootAlt = {
- prefix: 'fas',
- iconName: 'square-root-alt',
- icon: [576, 512, [], "f698", "M571.31 251.31l-22.62-22.62c-6.25-6.25-16.38-6.25-22.63 0L480 274.75l-46.06-46.06c-6.25-6.25-16.38-6.25-22.63 0l-22.62 22.62c-6.25 6.25-6.25 16.38 0 22.63L434.75 320l-46.06 46.06c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L480 365.25l46.06 46.06c6.25 6.25 16.38 6.25 22.63 0l22.62-22.62c6.25-6.25 6.25-16.38 0-22.63L525.25 320l46.06-46.06c6.25-6.25 6.25-16.38 0-22.63zM552 0H307.65c-14.54 0-27.26 9.8-30.95 23.87l-84.79 322.8-58.41-106.1A32.008 32.008 0 0 0 105.47 224H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h43.62l88.88 163.73C168.99 503.5 186.3 512 204.94 512c17.27 0 44.44-9 54.28-41.48L357.03 96H552c13.25 0 24-10.75 24-24V24c0-13.26-10.75-24-24-24z"]
- };
- var faStamp = {
- prefix: 'fas',
- iconName: 'stamp',
- icon: [512, 512, [], "f5bf", "M32 512h448v-64H32v64zm384-256h-66.56c-16.26 0-29.44-13.18-29.44-29.44v-9.46c0-27.37 8.88-53.41 21.46-77.72 9.11-17.61 12.9-38.39 9.05-60.42-6.77-38.78-38.47-70.7-77.26-77.45C212.62-9.04 160 37.33 160 96c0 14.16 3.12 27.54 8.69 39.58C182.02 164.43 192 194.7 192 226.49v.07c0 16.26-13.18 29.44-29.44 29.44H96c-53.02 0-96 42.98-96 96v32c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-32c0-53.02-42.98-96-96-96z"]
- };
- var faStar = {
- prefix: 'fas',
- iconName: 'star',
- icon: [576, 512, [], "f005", "M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z"]
- };
- var faStarAndCrescent = {
- prefix: 'fas',
- iconName: 'star-and-crescent',
- icon: [512, 512, [], "f699", "M340.47 466.36c-1.45 0-6.89.46-9.18.46-116.25 0-210.82-94.57-210.82-210.82S215.04 45.18 331.29 45.18c2.32 0 7.7.46 9.18.46 7.13 0 13.33-5.03 14.75-12.07 1.46-7.25-2.55-14.49-9.47-17.09C316.58 5.54 286.39 0 256 0 114.84 0 0 114.84 0 256s114.84 256 256 256c30.23 0 60.28-5.49 89.32-16.32 5.96-2.02 10.28-7.64 10.28-14.26 0-8.09-6.39-15.06-15.13-15.06zm162.99-252.5l-76.38-11.1-34.16-69.21c-1.83-3.7-5.38-5.55-8.93-5.55s-7.1 1.85-8.93 5.55l-34.16 69.21-76.38 11.1c-8.17 1.18-11.43 11.22-5.52 16.99l55.27 53.87-13.05 76.07c-1.11 6.44 4.01 11.66 9.81 11.66 1.53 0 3.11-.36 4.64-1.17L384 335.37l68.31 35.91c1.53.8 3.11 1.17 4.64 1.17 5.8 0 10.92-5.23 9.81-11.66l-13.05-76.07 55.27-53.87c5.91-5.77 2.65-15.81-5.52-16.99z"]
- };
- var faStarHalf = {
- prefix: 'fas',
- iconName: 'star-half',
- icon: [576, 512, [], "f089", "M288 0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6V0z"]
- };
- var faStarHalfAlt = {
- prefix: 'fas',
- iconName: 'star-half-alt',
- icon: [536, 512, [], "f5c0", "M508.55 171.51L362.18 150.2 296.77 17.81C290.89 5.98 279.42 0 267.95 0c-11.4 0-22.79 5.9-28.69 17.81l-65.43 132.38-146.38 21.29c-26.25 3.8-36.77 36.09-17.74 54.59l105.89 103-25.06 145.48C86.98 495.33 103.57 512 122.15 512c4.93 0 10-1.17 14.87-3.75l130.95-68.68 130.94 68.7c4.86 2.55 9.92 3.71 14.83 3.71 18.6 0 35.22-16.61 31.66-37.4l-25.03-145.49 105.91-102.98c19.04-18.5 8.52-50.8-17.73-54.6zm-121.74 123.2l-18.12 17.62 4.28 24.88 19.52 113.45-102.13-53.59-22.38-11.74.03-317.19 51.03 103.29 11.18 22.63 25.01 3.64 114.23 16.63-82.65 80.38z"]
- };
- var faStarOfDavid = {
- prefix: 'fas',
- iconName: 'star-of-david',
- icon: [464, 512, [], "f69a", "M405.68 256l53.21-89.39C473.3 142.4 455.48 112 426.88 112H319.96l-55.95-93.98C256.86 6.01 244.43 0 232 0s-24.86 6.01-32.01 18.02L144.04 112H37.11c-28.6 0-46.42 30.4-32.01 54.61L58.32 256 5.1 345.39C-9.31 369.6 8.51 400 37.11 400h106.93l55.95 93.98C207.14 505.99 219.57 512 232 512s24.86-6.01 32.01-18.02L319.96 400h106.93c28.6 0 46.42-30.4 32.01-54.61L405.68 256zm-12.78-88l-19.8 33.26L353.3 168h39.6zm-52.39 88l-52.39 88H175.88l-52.39-88 52.38-88h112.25l52.39 88zM232 73.72L254.79 112h-45.57L232 73.72zM71.1 168h39.6l-19.8 33.26L71.1 168zm0 176l19.8-33.26L110.7 344H71.1zM232 438.28L209.21 400h45.57L232 438.28zM353.29 344l19.8-33.26L392.9 344h-39.61z"]
- };
- var faStarOfLife = {
- prefix: 'fas',
- iconName: 'star-of-life',
- icon: [480, 512, [], "f621", "M471.99 334.43L336.06 256l135.93-78.43c7.66-4.42 10.28-14.2 5.86-21.86l-32.02-55.43c-4.42-7.65-14.21-10.28-21.87-5.86l-135.93 78.43V16c0-8.84-7.17-16-16.01-16h-64.04c-8.84 0-16.01 7.16-16.01 16v156.86L56.04 94.43c-7.66-4.42-17.45-1.79-21.87 5.86L2.15 155.71c-4.42 7.65-1.8 17.44 5.86 21.86L143.94 256 8.01 334.43c-7.66 4.42-10.28 14.21-5.86 21.86l32.02 55.43c4.42 7.65 14.21 10.27 21.87 5.86l135.93-78.43V496c0 8.84 7.17 16 16.01 16h64.04c8.84 0 16.01-7.16 16.01-16V339.14l135.93 78.43c7.66 4.42 17.45 1.8 21.87-5.86l32.02-55.43c4.42-7.65 1.8-17.43-5.86-21.85z"]
- };
- var faStepBackward = {
- prefix: 'fas',
- iconName: 'step-backward',
- icon: [448, 512, [], "f048", "M64 468V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v176.4l195.5-181C352.1 22.3 384 36.6 384 64v384c0 27.4-31.9 41.7-52.5 24.6L136 292.7V468c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12z"]
- };
- var faStepForward = {
- prefix: 'fas',
- iconName: 'step-forward',
- icon: [448, 512, [], "f051", "M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z"]
- };
- var faStethoscope = {
- prefix: 'fas',
- iconName: 'stethoscope',
- icon: [512, 512, [], "f0f1", "M447.1 112c-34.2.5-62.3 28.4-63 62.6-.5 24.3 12.5 45.6 32 56.8V344c0 57.3-50.2 104-112 104-60 0-109.2-44.1-111.9-99.2C265 333.8 320 269.2 320 192V36.6c0-11.4-8.1-21.3-19.3-23.5L237.8.5c-13-2.6-25.6 5.8-28.2 18.8L206.4 35c-2.6 13 5.8 25.6 18.8 28.2l30.7 6.1v121.4c0 52.9-42.2 96.7-95.1 97.2-53.4.5-96.9-42.7-96.9-96V69.4l30.7-6.1c13-2.6 21.4-15.2 18.8-28.2l-3.1-15.7C107.7 6.4 95.1-2 82.1.6L19.3 13C8.1 15.3 0 25.1 0 36.6V192c0 77.3 55.1 142 128.1 156.8C130.7 439.2 208.6 512 304 512c97 0 176-75.4 176-168V231.4c19.1-11.1 32-31.7 32-55.4 0-35.7-29.2-64.5-64.9-64zm.9 80c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"]
- };
- var faStickyNote = {
- prefix: 'fas',
- iconName: 'sticky-note',
- icon: [448, 512, [], "f249", "M312 320h136V56c0-13.3-10.7-24-24-24H24C10.7 32 0 42.7 0 56v400c0 13.3 10.7 24 24 24h264V344c0-13.2 10.8-24 24-24zm129 55l-98 98c-4.5 4.5-10.6 7-17 7h-6V352h128v6.1c0 6.3-2.5 12.4-7 16.9z"]
- };
- var faStop = {
- prefix: 'fas',
- iconName: 'stop',
- icon: [448, 512, [], "f04d", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"]
- };
- var faStopCircle = {
- prefix: 'fas',
- iconName: 'stop-circle',
- icon: [512, 512, [], "f28d", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm96 328c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16v160z"]
- };
- var faStopwatch = {
- prefix: 'fas',
- iconName: 'stopwatch',
- icon: [448, 512, [], "f2f2", "M432 304c0 114.9-93.1 208-208 208S16 418.9 16 304c0-104 76.3-190.2 176-205.5V64h-28c-6.6 0-12-5.4-12-12V12c0-6.6 5.4-12 12-12h120c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-28v34.5c37.5 5.8 71.7 21.6 99.7 44.6l27.5-27.5c4.7-4.7 12.3-4.7 17 0l28.3 28.3c4.7 4.7 4.7 12.3 0 17l-29.4 29.4-.6.6C419.7 223.3 432 262.2 432 304zm-176 36V188.5c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12V340c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z"]
- };
- var faStopwatch20 = {
- prefix: 'fas',
- iconName: 'stopwatch-20',
- icon: [448, 512, [], "e06f", "M398.5,190.91l.59-.61,26.59-26.58a16,16,0,0,0,0-22.63L403,118.41a16,16,0,0,0-22.63,0l-24.68,24.68A206.68,206.68,0,0,0,256,98.5V64h32a16,16,0,0,0,16-16V16A16,16,0,0,0,288,0H160a16.05,16.05,0,0,0-16,16V48a16.05,16.05,0,0,0,16,16h32V98.5A207.92,207.92,0,0,0,16.09,297.57C12.64,411.5,106.76,510.22,220.72,512,337.13,513.77,432,420,432,304A206,206,0,0,0,398.5,190.91ZM204.37,377.55a8.2,8.2,0,0,1,8.32,8.07v22.31a8.2,8.2,0,0,1-8.32,8.07H121.52a16.46,16.46,0,0,1-16.61-17.62c2.78-35.22,14.67-57.41,38.45-91.37,20.42-29.19,27.1-37.32,27.1-62.34,0-16.92-1.79-24.27-12.21-24.27-9.39,0-12.69,7.4-12.69,22.68v5.23a8.2,8.2,0,0,1-8.33,8.07h-24.9a8.2,8.2,0,0,1-8.33-8.07v-4.07c0-27.3,8.48-60.24,56.43-60.24,43,0,55.57,25.85,55.57,61,0,35.58-12.44,51.21-34.35,81.31-11.56,15-24.61,35.57-26.41,51.2ZM344,352.32c0,35.16-12.3,63.68-57.23,63.68C243.19,416,232,386.48,232,352.55V247.22c0-40.73,19.58-63.22,56.2-63.22C325,184,344,206.64,344,245.3ZM287.87,221.73c-9.41,0-13.23,7.5-13.23,20V357.68c0,13.11,3.59,20.59,13.23,20.59s13-8,13-21.27V241.06C300.89,229.79,297.88,221.73,287.87,221.73Z"]
- };
- var faStore = {
- prefix: 'fas',
- iconName: 'store',
- icon: [616, 512, [], "f54e", "M602 118.6L537.1 15C531.3 5.7 521 0 510 0H106C95 0 84.7 5.7 78.9 15L14 118.6c-33.5 53.5-3.8 127.9 58.8 136.4 4.5.6 9.1.9 13.7.9 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18.1 20.1 44.3 33.1 73.8 33.1 4.7 0 9.2-.3 13.7-.9 62.8-8.4 92.6-82.8 59-136.4zM529.5 288c-10 0-19.9-1.5-29.5-3.8V384H116v-99.8c-9.6 2.2-19.5 3.8-29.5 3.8-6 0-12.1-.4-18-1.2-5.6-.8-11.1-2.1-16.4-3.6V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32V283.2c-5.4 1.6-10.8 2.9-16.4 3.6-6.1.8-12.1 1.2-18.2 1.2z"]
- };
- var faStoreAlt = {
- prefix: 'fas',
- iconName: 'store-alt',
- icon: [640, 512, [], "f54f", "M320 384H128V224H64v256c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V224h-64v160zm314.6-241.8l-85.3-128c-6-8.9-16-14.2-26.7-14.2H117.4c-10.7 0-20.7 5.3-26.6 14.2l-85.3 128c-14.2 21.3 1 49.8 26.6 49.8H608c25.5 0 40.7-28.5 26.6-49.8zM512 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V224h-64v272z"]
- };
- var faStoreAltSlash = {
- prefix: 'fas',
- iconName: 'store-alt-slash',
- icon: [640, 512, [], "e070", "M17.89,123.62,5.51,142.2c-14.2,21.3,1,49.8,26.59,49.8h74.26ZM576,413.42V224H512V364L384,265V224H330.92l-41.4-32H608c25.5,0,40.7-28.5,26.59-49.8l-85.29-128A32.18,32.18,0,0,0,522.6,0H117.42A31.87,31.87,0,0,0,90.81,14.2l-10.66,16L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.81l19.64-25.26a16,16,0,0,0-2.81-22.45ZM320,384H128V224H64V480a32,32,0,0,0,32,32H352a32,32,0,0,0,32-32V406.59l-64-49.47Z"]
- };
- var faStoreSlash = {
- prefix: 'fas',
- iconName: 'store-slash',
- icon: [640, 512, [], "e071", "M121.51,384V284.2a119.43,119.43,0,0,1-28,3.8,123.46,123.46,0,0,1-17.1-1.2,114.88,114.88,0,0,1-15.58-3.6V480c0,17.7,13.59,32,30.4,32H505.75L348.42,384Zm-28-128.09c25.1,0,47.29-10.72,64-27.24L24,120.05c-30.52,53.39-2.45,126.53,56.49,135A95.68,95.68,0,0,0,93.48,255.91ZM602.13,458.09,547.2,413.41V283.2a93.5,93.5,0,0,1-15.57,3.6,127.31,127.31,0,0,1-17.29,1.2,114.89,114.89,0,0,1-28-3.8v79.68L348.52,251.77a88.06,88.06,0,0,0,25.41,4.14c28.11,0,53-13,70.11-33.11,17.19,20.11,42.08,33.11,70.11,33.11a94.31,94.31,0,0,0,13-.91c59.66-8.41,88-82.8,56.06-136.4L521.55,15A30.1,30.1,0,0,0,495.81,0H112A30.11,30.11,0,0,0,86.27,15L76.88,30.78,43.19,3.38A14.68,14.68,0,0,0,21.86,6.19L3.2,31.45A16.58,16.58,0,0,0,5.87,53.91L564.81,508.63a14.69,14.69,0,0,0,21.33-2.82l18.66-25.26A16.58,16.58,0,0,0,602.13,458.09Z"]
- };
- var faStream = {
- prefix: 'fas',
- iconName: 'stream',
- icon: [512, 512, [], "f550", "M16 128h416c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H16C7.16 32 0 39.16 0 48v64c0 8.84 7.16 16 16 16zm480 80H80c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm-64 176H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16z"]
- };
- var faStreetView = {
- prefix: 'fas',
- iconName: 'street-view',
- icon: [512, 512, [], "f21d", "M367.9 329.76c-4.62 5.3-9.78 10.1-15.9 13.65v22.94c66.52 9.34 112 28.05 112 49.65 0 30.93-93.12 56-208 56S48 446.93 48 416c0-21.6 45.48-40.3 112-49.65v-22.94c-6.12-3.55-11.28-8.35-15.9-13.65C58.87 345.34 0 378.05 0 416c0 53.02 114.62 96 256 96s256-42.98 256-96c0-37.95-58.87-70.66-144.1-86.24zM256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-64 192v96c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-96c17.67 0 32-14.33 32-32v-96c0-26.51-21.49-48-48-48h-11.8c-11.07 5.03-23.26 8-36.2 8s-25.13-2.97-36.2-8H208c-26.51 0-48 21.49-48 48v96c0 17.67 14.33 32 32 32z"]
- };
- var faStrikethrough = {
- prefix: 'fas',
- iconName: 'strikethrough',
- icon: [512, 512, [], "f0cc", "M496 224H293.9l-87.17-26.83A43.55 43.55 0 0 1 219.55 112h66.79A49.89 49.89 0 0 1 331 139.58a16 16 0 0 0 21.46 7.15l42.94-21.47a16 16 0 0 0 7.16-21.46l-.53-1A128 128 0 0 0 287.51 32h-68a123.68 123.68 0 0 0-123 135.64c2 20.89 10.1 39.83 21.78 56.36H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-180.24 96A43 43 0 0 1 336 356.45 43.59 43.59 0 0 1 292.45 400h-66.79A49.89 49.89 0 0 1 181 372.42a16 16 0 0 0-21.46-7.15l-42.94 21.47a16 16 0 0 0-7.16 21.46l.53 1A128 128 0 0 0 224.49 480h68a123.68 123.68 0 0 0 123-135.64 114.25 114.25 0 0 0-5.34-24.36z"]
- };
- var faStroopwafel = {
- prefix: 'fas',
- iconName: 'stroopwafel',
- icon: [512, 512, [], "f551", "M188.12 210.74L142.86 256l45.25 45.25L233.37 256l-45.25-45.26zm113.13-22.62L256 142.86l-45.25 45.25L256 233.37l45.25-45.25zm-90.5 135.76L256 369.14l45.26-45.26L256 278.63l-45.25 45.25zM256 0C114.62 0 0 114.62 0 256s114.62 256 256 256 256-114.62 256-256S397.38 0 256 0zm186.68 295.6l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-28.29-28.29-45.25 45.25 33.94 33.94 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-33.94-33.94-45.26 45.26 28.29 28.29c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0L256 414.39l-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l28.29-28.29-45.25-45.26-33.94 33.94 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 33.94-33.94-45.25-45.25-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0L69.32 295.6c-3.12-3.12-3.12-8.19 0-11.31L97.61 256l-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l28.29 28.29 45.25-45.26-33.94-33.94-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 33.94 33.94 45.26-45.25-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0L256 97.61l28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-28.29 28.29 45.26 45.25 33.94-33.94-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-33.94 33.94 45.25 45.26 28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31L414.39 256l28.29 28.28a8.015 8.015 0 0 1 0 11.32zM278.63 256l45.26 45.25L369.14 256l-45.25-45.26L278.63 256z"]
- };
- var faSubscript = {
- prefix: 'fas',
- iconName: 'subscript',
- icon: [512, 512, [], "f12c", "M496 448h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 352h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z"]
- };
- var faSubway = {
- prefix: 'fas',
- iconName: 'subway',
- icon: [448, 512, [], "f239", "M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zM200 232V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm200 0V120c0-13.255-10.745-24-24-24H272c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm-48 56c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm-256 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z"]
- };
- var faSuitcase = {
- prefix: 'fas',
- iconName: 'suitcase',
- icon: [512, 512, [], "f0f2", "M128 480h256V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v400zm64-384h128v32H192V96zm320 80v256c0 26.5-21.5 48-48 48h-48V128h48c26.5 0 48 21.5 48 48zM96 480H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h48v352z"]
- };
- var faSuitcaseRolling = {
- prefix: 'fas',
- iconName: 'suitcase-rolling',
- icon: [384, 512, [], "f5c1", "M336 160H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h16v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h128v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h16c26.51 0 48-21.49 48-48V208c0-26.51-21.49-48-48-48zm-16 216c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zM144 48h96v80h48V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v80h48V48z"]
- };
- var faSun = {
- prefix: 'fas',
- iconName: 'sun',
- icon: [512, 512, [], "f185", "M256 160c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm246.4 80.5l-94.7-47.3 33.5-100.4c4.5-13.6-8.4-26.5-21.9-21.9l-100.4 33.5-47.4-94.8c-6.4-12.8-24.6-12.8-31 0l-47.3 94.7L92.7 70.8c-13.6-4.5-26.5 8.4-21.9 21.9l33.5 100.4-94.7 47.4c-12.8 6.4-12.8 24.6 0 31l94.7 47.3-33.5 100.5c-4.5 13.6 8.4 26.5 21.9 21.9l100.4-33.5 47.3 94.7c6.4 12.8 24.6 12.8 31 0l47.3-94.7 100.4 33.5c13.6 4.5 26.5-8.4 21.9-21.9l-33.5-100.4 94.7-47.3c13-6.5 13-24.7.2-31.1zm-155.9 106c-49.9 49.9-131.1 49.9-181 0-49.9-49.9-49.9-131.1 0-181 49.9-49.9 131.1-49.9 181 0 49.9 49.9 49.9 131.1 0 181z"]
- };
- var faSuperscript = {
- prefix: 'fas',
- iconName: 'superscript',
- icon: [512, 512, [], "f12b", "M496 160h-16V16a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 64h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z"]
- };
- var faSurprise = {
- prefix: 'fas',
- iconName: 'surprise',
- icon: [496, 512, [], "f5c2", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm112 208c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm80-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"]
- };
- var faSwatchbook = {
- prefix: 'fas',
- iconName: 'swatchbook',
- icon: [512, 512, [], "f5c3", "M434.66,167.71h0L344.5,77.36a31.83,31.83,0,0,0-45-.07h0l-.07.07L224,152.88V424L434.66,212.9A32,32,0,0,0,434.66,167.71ZM480,320H373.09L186.68,506.51c-2.06,2.07-4.5,3.58-6.68,5.49H480a32,32,0,0,0,32-32V352A32,32,0,0,0,480,320ZM192,32A32,32,0,0,0,160,0H32A32,32,0,0,0,0,32V416a96,96,0,0,0,192,0ZM96,440a24,24,0,1,1,24-24A24,24,0,0,1,96,440Zm32-184H64V192h64Zm0-128H64V64h64Z"]
- };
- var faSwimmer = {
- prefix: 'fas',
- iconName: 'swimmer',
- icon: [640, 512, [], "f5c4", "M189.61 310.58c3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c16.02-14.77 34.5-22.58 53.46-22.58h16.3c18.96 0 37.45 7.81 53.46 22.58 3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c14.86-13.71 31.88-21.12 49.39-22.16l-112.84-80.6 18-12.86c3.64-2.58 8.28-3.52 12.62-2.61l100.35 21.53c25.91 5.53 51.44-10.97 57-36.88 5.55-25.92-10.95-51.44-36.88-57L437.68 98.47c-30.73-6.58-63.02.12-88.56 18.38l-80.02 57.17c-10.38 7.39-19.36 16.44-26.72 26.94L173.75 299c5.47 3.23 10.82 6.93 15.86 11.58zM624 352h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 343.58 442.04 352 416 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 343.58 250.04 352 224 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 343.58 58.04 352 32 352H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-512-96c44.18 0 80-35.82 80-80s-35.82-80-80-80-80 35.82-80 80 35.82 80 80 80z"]
- };
- var faSwimmingPool = {
- prefix: 'fas',
- iconName: 'swimming-pool',
- icon: [640, 512, [], "f5c5", "M624 416h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 407.58 442.04 416 416 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 407.58 250.04 416 224 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 407.58 58.04 416 32 416H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-400-32v-96h192v96c19.12 0 30.86-6.16 34.39-9.42 9.17-8.46 19.2-14.34 29.61-18.07V128c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v96H224v-96c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v228.5c10.41 3.73 20.44 9.62 29.61 18.07 3.53 3.27 15.27 9.43 34.39 9.43z"]
- };
- var faSynagogue = {
- prefix: 'fas',
- iconName: 'synagogue',
- icon: [640, 512, [], "f69b", "M70 196.51L6.67 268.29A26.643 26.643 0 0 0 0 285.93V512h128V239.58l-38-43.07c-5.31-6.01-14.69-6.01-20 0zm563.33 71.78L570 196.51c-5.31-6.02-14.69-6.02-20 0l-38 43.07V512h128V285.93c0-6.5-2.37-12.77-6.67-17.64zM339.99 7.01c-11.69-9.35-28.29-9.35-39.98 0l-128 102.4A32.005 32.005 0 0 0 160 134.4V512h96v-92.57c0-31.88 21.78-61.43 53.25-66.55C349.34 346.35 384 377.13 384 416v96h96V134.4c0-9.72-4.42-18.92-12.01-24.99l-128-102.4zm52.07 215.55c1.98 3.15-.29 7.24-4 7.24h-38.94L324 269.79c-1.85 2.95-6.15 2.95-8 0l-25.12-39.98h-38.94c-3.72 0-5.98-4.09-4-7.24l19.2-30.56-19.2-30.56c-1.98-3.15.29-7.24 4-7.24h38.94l25.12-40c1.85-2.95 6.15-2.95 8 0l25.12 39.98h38.95c3.71 0 5.98 4.09 4 7.24L372.87 192l19.19 30.56z"]
- };
- var faSync = {
- prefix: 'fas',
- iconName: 'sync',
- icon: [512, 512, [], "f021", "M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z"]
- };
- var faSyncAlt = {
- prefix: 'fas',
- iconName: 'sync-alt',
- icon: [512, 512, [], "f2f1", "M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z"]
- };
- var faSyringe = {
- prefix: 'fas',
- iconName: 'syringe',
- icon: [512, 512, [], "f48e", "M201.5 174.8l55.7 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-55.7-55.8-45.3 45.3 55.8 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L111 265.2l-26.4 26.4c-17.3 17.3-25.6 41.1-23 65.4l7.1 63.6L2.3 487c-3.1 3.1-3.1 8.2 0 11.3l11.3 11.3c3.1 3.1 8.2 3.1 11.3 0l66.3-66.3 63.6 7.1c23.9 2.6 47.9-5.4 65.4-23l181.9-181.9-135.7-135.7-64.9 65zm308.2-93.3L430.5 2.3c-3.1-3.1-8.2-3.1-11.3 0l-11.3 11.3c-3.1 3.1-3.1 8.2 0 11.3l28.3 28.3-45.3 45.3-56.6-56.6-17-17c-3.1-3.1-8.2-3.1-11.3 0l-33.9 33.9c-3.1 3.1-3.1 8.2 0 11.3l17 17L424.8 223l17 17c3.1 3.1 8.2 3.1 11.3 0l33.9-34c3.1-3.1 3.1-8.2 0-11.3l-73.5-73.5 45.3-45.3 28.3 28.3c3.1 3.1 8.2 3.1 11.3 0l11.3-11.3c3.1-3.2 3.1-8.2 0-11.4z"]
- };
- var faTable = {
- prefix: 'fas',
- iconName: 'table',
- icon: [512, 512, [], "f0ce", "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64v-96h160v96zm0-160H64v-96h160v96zm224 160H288v-96h160v96zm0-160H288v-96h160v96z"]
- };
- var faTableTennis = {
- prefix: 'fas',
- iconName: 'table-tennis',
- icon: [512, 512, [], "f45d", "M496.2 296.5C527.7 218.7 512 126.2 449 63.1 365.1-21 229-21 145.1 63.1l-56 56.1 211.5 211.5c46.1-62.1 131.5-77.4 195.6-34.2zm-217.9 79.7L57.9 155.9c-27.3 45.3-21.7 105 17.3 144.1l34.5 34.6L6.7 424c-8.6 7.5-9.1 20.7-1 28.8l53.4 53.5c8 8.1 21.2 7.6 28.7-1L177.1 402l35.7 35.7c19.7 19.7 44.6 30.5 70.3 33.3-7.1-17-11-35.6-11-55.1-.1-13.8 2.5-27 6.2-39.7zM416 320c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96z"]
- };
- var faTablet = {
- prefix: 'fas',
- iconName: 'tablet',
- icon: [448, 512, [], "f10a", "M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"]
- };
- var faTabletAlt = {
- prefix: 'fas',
- iconName: 'tablet-alt',
- icon: [448, 512, [], "f3fa", "M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm176-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h328c6.6 0 12 5.4 12 12v312z"]
- };
- var faTablets = {
- prefix: 'fas',
- iconName: 'tablets',
- icon: [640, 512, [], "f490", "M160 192C78.9 192 12.5 250.5.1 326.7c-.8 4.8 3.3 9.3 8.3 9.3h303.3c5 0 9.1-4.5 8.3-9.3C307.5 250.5 241.1 192 160 192zm151.6 176H8.4c-5 0-9.1 4.5-8.3 9.3C12.5 453.5 78.9 512 160 512s147.5-58.5 159.9-134.7c.8-4.8-3.3-9.3-8.3-9.3zM593.4 46.6c-56.5-56.5-144.2-61.4-206.9-16-4 2.9-4.3 8.9-.8 12.3L597 254.3c3.5 3.5 9.5 3.2 12.3-.8 45.5-62.7 40.6-150.4-15.9-206.9zM363 65.7c-3.5-3.5-9.5-3.2-12.3.8-45.4 62.7-40.5 150.4 15.9 206.9 56.5 56.5 144.2 61.4 206.9 15.9 4-2.9 4.3-8.9.8-12.3L363 65.7z"]
- };
- var faTachometerAlt = {
- prefix: 'fas',
- iconName: 'tachometer-alt',
- icon: [576, 512, [], "f3fd", "M288 32C128.94 32 0 160.94 0 320c0 52.8 14.25 102.26 39.06 144.8 5.61 9.62 16.3 15.2 27.44 15.2h443c11.14 0 21.83-5.58 27.44-15.2C561.75 422.26 576 372.8 576 320c0-159.06-128.94-288-288-288zm0 64c14.71 0 26.58 10.13 30.32 23.65-1.11 2.26-2.64 4.23-3.45 6.67l-9.22 27.67c-5.13 3.49-10.97 6.01-17.64 6.01-17.67 0-32-14.33-32-32S270.33 96 288 96zM96 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm48-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm246.77-72.41l-61.33 184C343.13 347.33 352 364.54 352 384c0 11.72-3.38 22.55-8.88 32H232.88c-5.5-9.45-8.88-20.28-8.88-32 0-33.94 26.5-61.43 59.9-63.59l61.34-184.01c4.17-12.56 17.73-19.45 30.36-15.17 12.57 4.19 19.35 17.79 15.17 30.36zm14.66 57.2l15.52-46.55c3.47-1.29 7.13-2.23 11.05-2.23 17.67 0 32 14.33 32 32s-14.33 32-32 32c-11.38-.01-20.89-6.28-26.57-15.22zM480 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"]
- };
- var faTag = {
- prefix: 'fas',
- iconName: 'tag',
- icon: [512, 512, [], "f02b", "M0 252.118V48C0 21.49 21.49 0 48 0h204.118a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882L293.823 497.941c-18.745 18.745-49.137 18.745-67.882 0L14.059 286.059A48 48 0 0 1 0 252.118zM112 64c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z"]
- };
- var faTags = {
- prefix: 'fas',
- iconName: 'tags',
- icon: [640, 512, [], "f02c", "M497.941 225.941L286.059 14.059A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v204.118a48 48 0 0 0 14.059 33.941l211.882 211.882c18.744 18.745 49.136 18.746 67.882 0l204.118-204.118c18.745-18.745 18.745-49.137 0-67.882zM112 160c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm513.941 133.823L421.823 497.941c-18.745 18.745-49.137 18.745-67.882 0l-.36-.36L527.64 323.522c16.999-16.999 26.36-39.6 26.36-63.64s-9.362-46.641-26.36-63.64L331.397 0h48.721a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882z"]
- };
- var faTape = {
- prefix: 'fas',
- iconName: 'tape',
- icon: [640, 512, [], "f4db", "M224 192c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm400 224H380.6c41.5-40.7 67.4-97.3 67.4-160 0-123.7-100.3-224-224-224S0 132.3 0 256s100.3 224 224 224h400c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400-64c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96z"]
- };
- var faTasks = {
- prefix: 'fas',
- iconName: 'tasks',
- icon: [512, 512, [], "f0ae", "M139.61 35.5a12 12 0 0 0-17 0L58.93 98.81l-22.7-22.12a12 12 0 0 0-17 0L3.53 92.41a12 12 0 0 0 0 17l47.59 47.4a12.78 12.78 0 0 0 17.61 0l15.59-15.62L156.52 69a12.09 12.09 0 0 0 .09-17zm0 159.19a12 12 0 0 0-17 0l-63.68 63.72-22.7-22.1a12 12 0 0 0-17 0L3.53 252a12 12 0 0 0 0 17L51 316.5a12.77 12.77 0 0 0 17.6 0l15.7-15.69 72.2-72.22a12 12 0 0 0 .09-16.9zM64 368c-26.49 0-48.59 21.5-48.59 48S37.53 464 64 464a48 48 0 0 0 0-96zm432 16H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"]
- };
- var faTaxi = {
- prefix: 'fas',
- iconName: 'taxi',
- icon: [512, 512, [], "f1ba", "M462 241.64l-22-84.84c-9.6-35.2-41.6-60.8-76.8-60.8H352V64c0-17.67-14.33-32-32-32H192c-17.67 0-32 14.33-32 32v32h-11.2c-35.2 0-67.2 25.6-76.8 60.8l-22 84.84C21.41 248.04 0 273.47 0 304v48c0 23.63 12.95 44.04 32 55.12V448c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-40.88c19.05-11.09 32-31.5 32-55.12v-48c0-30.53-21.41-55.96-50-62.36zM96 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm20.55-112l17.2-66.36c2.23-8.16 9.59-13.64 15.06-13.64h214.4c5.47 0 12.83 5.48 14.85 12.86L395.45 240h-278.9zM416 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"]
- };
- var faTeeth = {
- prefix: 'fas',
- iconName: 'teeth',
- icon: [640, 512, [], "f62e", "M544 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96zM160 368c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm128 128c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64z"]
- };
- var faTeethOpen = {
- prefix: 'fas',
- iconName: 'teeth-open',
- icon: [640, 512, [], "f62f", "M544 0H96C42.98 0 0 42.98 0 96v64c0 35.35 28.66 64 64 64h512c35.34 0 64-28.65 64-64V96c0-53.02-42.98-96-96-96zM160 176c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm128 0c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm0 144H64c-35.34 0-64 28.65-64 64v32c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96v-32c0-35.35-28.66-64-64-64zm-416 80c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32zm144-8c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm144 0c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm128 8c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32z"]
- };
- var faTemperatureHigh = {
- prefix: 'fas',
- iconName: 'temperature-high',
- icon: [512, 512, [], "f769", "M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V112c0-8.8-7.2-16-16-16s-16 7.2-16 16v210.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z"]
- };
- var faTemperatureLow = {
- prefix: 'fas',
- iconName: 'temperature-low',
- icon: [512, 512, [], "f76b", "M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V304c0-8.8-7.2-16-16-16s-16 7.2-16 16v18.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z"]
- };
- var faTenge = {
- prefix: 'fas',
- iconName: 'tenge',
- icon: [384, 512, [], "f7d7", "M372 160H12c-6.6 0-12 5.4-12 12v56c0 6.6 5.4 12 12 12h140v228c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V240h140c6.6 0 12-5.4 12-12v-56c0-6.6-5.4-12-12-12zm0-128H12C5.4 32 0 37.4 0 44v56c0 6.6 5.4 12 12 12h360c6.6 0 12-5.4 12-12V44c0-6.6-5.4-12-12-12z"]
- };
- var faTerminal = {
- prefix: 'fas',
- iconName: 'terminal',
- icon: [640, 512, [], "f120", "M257.981 272.971L63.638 467.314c-9.373 9.373-24.569 9.373-33.941 0L7.029 444.647c-9.357-9.357-9.375-24.522-.04-33.901L161.011 256 6.99 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L257.981 239.03c9.373 9.372 9.373 24.568 0 33.941zM640 456v-32c0-13.255-10.745-24-24-24H312c-13.255 0-24 10.745-24 24v32c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24z"]
- };
- var faTextHeight = {
- prefix: 'fas',
- iconName: 'text-height',
- icon: [576, 512, [], "f034", "M304 32H16A16 16 0 0 0 0 48v96a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32h56v304H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h160a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-40V112h56v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm256 336h-48V144h48c14.31 0 21.33-17.31 11.31-27.31l-80-80a16 16 0 0 0-22.62 0l-80 80C379.36 126 384.36 144 400 144h48v224h-48c-14.31 0-21.32 17.31-11.31 27.31l80 80a16 16 0 0 0 22.62 0l80-80C580.64 386 575.64 368 560 368z"]
- };
- var faTextWidth = {
- prefix: 'fas',
- iconName: 'text-width',
- icon: [448, 512, [], "f035", "M432 32H16A16 16 0 0 0 0 48v80a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-16h120v112h-24a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-24V112h120v16a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm-68.69 260.69C354 283.36 336 288.36 336 304v48H112v-48c0-14.31-17.31-21.32-27.31-11.31l-80 80a16 16 0 0 0 0 22.62l80 80C94 484.64 112 479.64 112 464v-48h224v48c0 14.31 17.31 21.33 27.31 11.31l80-80a16 16 0 0 0 0-22.62z"]
- };
- var faTh = {
- prefix: 'fas',
- iconName: 'th',
- icon: [512, 512, [], "f00a", "M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z"]
- };
- var faThLarge = {
- prefix: 'fas',
- iconName: 'th-large',
- icon: [512, 512, [], "f009", "M296 32h192c13.255 0 24 10.745 24 24v160c0 13.255-10.745 24-24 24H296c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24zm-80 0H24C10.745 32 0 42.745 0 56v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zM0 296v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm296 184h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H296c-13.255 0-24 10.745-24 24v160c0 13.255 10.745 24 24 24z"]
- };
- var faThList = {
- prefix: 'fas',
- iconName: 'th-list',
- icon: [512, 512, [], "f00b", "M149.333 216v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-80c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zM125.333 32H24C10.745 32 0 42.745 0 56v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zm80 448H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm-24-424v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24zm24 264H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24z"]
- };
- var faTheaterMasks = {
- prefix: 'fas',
- iconName: 'theater-masks',
- icon: [640, 512, [], "f630", "M206.86 245.15c-35.88 10.45-59.95 41.2-57.53 74.1 11.4-12.72 28.81-23.7 49.9-30.92l7.63-43.18zM95.81 295L64.08 115.49c-.29-1.62.28-2.62.24-2.65 57.76-32.06 123.12-49.01 189.01-49.01 1.61 0 3.23.17 4.85.19 13.95-13.47 31.73-22.83 51.59-26 18.89-3.02 38.05-4.55 57.18-5.32-9.99-13.95-24.48-24.23-41.77-27C301.27 1.89 277.24 0 253.32 0 176.66 0 101.02 19.42 33.2 57.06 9.03 70.48-3.92 98.48 1.05 126.58l31.73 179.51c14.23 80.52 136.33 142.08 204.45 142.08 3.59 0 6.75-.46 10.01-.8-13.52-17.08-28.94-40.48-39.5-67.58-47.61-12.98-106.06-51.62-111.93-84.79zm97.55-137.46c-.73-4.12-2.23-7.87-4.07-11.4-8.25 8.91-20.67 15.75-35.32 18.32-14.65 2.58-28.67.4-39.48-5.17-.52 3.94-.64 7.98.09 12.1 3.84 21.7 24.58 36.19 46.34 32.37 21.75-3.82 36.28-24.52 32.44-46.22zM606.8 120.9c-88.98-49.38-191.43-67.41-291.98-51.35-27.31 4.36-49.08 26.26-54.04 54.36l-31.73 179.51c-15.39 87.05 95.28 196.27 158.31 207.35 63.03 11.09 204.47-53.79 219.86-140.84l31.73-179.51c4.97-28.11-7.98-56.11-32.15-69.52zm-273.24 96.8c3.84-21.7 24.58-36.19 46.34-32.36 21.76 3.83 36.28 24.52 32.45 46.22-.73 4.12-2.23 7.87-4.07 11.4-8.25-8.91-20.67-15.75-35.32-18.32-14.65-2.58-28.67-.4-39.48 5.17-.53-3.95-.65-7.99.08-12.11zm70.47 198.76c-55.68-9.79-93.52-59.27-89.04-112.9 20.6 25.54 56.21 46.17 99.49 53.78 43.28 7.61 83.82.37 111.93-16.6-14.18 51.94-66.71 85.51-122.38 75.72zm130.3-151.34c-8.25-8.91-20.68-15.75-35.33-18.32-14.65-2.58-28.67-.4-39.48 5.17-.52-3.94-.64-7.98.09-12.1 3.84-21.7 24.58-36.19 46.34-32.37 21.75 3.83 36.28 24.52 32.45 46.22-.73 4.13-2.23 7.88-4.07 11.4z"]
- };
- var faThermometer = {
- prefix: 'fas',
- iconName: 'thermometer',
- icon: [512, 512, [], "f491", "M476.8 20.4c-37.5-30.7-95.5-26.3-131.9 10.2l-45.7 46 50.5 50.5c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.4-50.5-45.1 45.4 50.3 50.4c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L209 167.4l-45.1 45.4L214 263c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.1-50.2L96 281.1V382L7 471c-9.4 9.4-9.4 24.6 0 33.9 9.4 9.4 24.6 9.4 33.9 0l89-89h99.9L484 162.6c34.9-34.9 42.2-101.5-7.2-142.2z"]
- };
- var faThermometerEmpty = {
- prefix: 'fas',
- iconName: 'thermometer-empty',
- icon: [256, 512, [], "f2cb", "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"]
- };
- var faThermometerFull = {
- prefix: 'fas',
- iconName: 'thermometer-full',
- icon: [256, 512, [], "f2c7", "M224 96c0-53.019-42.981-96-96-96S32 42.981 32 96v203.347C12.225 321.756.166 351.136.002 383.333c-.359 70.303 56.787 128.176 127.089 128.664.299.002.61.003.909.003 70.698 0 128-57.304 128-128 0-32.459-12.088-62.09-32-84.653V96zm-96 368l-.576-.002c-43.86-.304-79.647-36.544-79.423-80.42.173-33.98 19.266-51.652 31.999-66.08V96c0-26.467 21.533-48 48-48s48 21.533 48 48v221.498c12.63 14.312 32 32.164 32 66.502 0 44.112-35.888 80-80 80zm64-80c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V96c0-17.673 14.327-32 32-32s32 14.327 32 32v232.583c19.124 11.068 32 31.732 32 55.417z"]
- };
- var faThermometerHalf = {
- prefix: 'fas',
- iconName: 'thermometer-half',
- icon: [256, 512, [], "f2c9", "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V224c0-17.673 14.327-32 32-32s32 14.327 32 32v104.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"]
- };
- var faThermometerQuarter = {
- prefix: 'fas',
- iconName: 'thermometer-quarter',
- icon: [256, 512, [], "f2ca", "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V288c0-17.673 14.327-32 32-32s32 14.327 32 32v40.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"]
- };
- var faThermometerThreeQuarters = {
- prefix: 'fas',
- iconName: 'thermometer-three-quarters',
- icon: [256, 512, [], "f2c8", "M192 384c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-23.685 12.876-44.349 32-55.417V160c0-17.673 14.327-32 32-32s32 14.327 32 32v168.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"]
- };
- var faThumbsDown = {
- prefix: 'fas',
- iconName: 'thumbs-down',
- icon: [512, 512, [], "f165", "M0 56v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56zm40 200c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24zm272 256c-20.183 0-29.485-39.293-33.931-57.795-5.206-21.666-10.589-44.07-25.393-58.902-32.469-32.524-49.503-73.967-89.117-113.111a11.98 11.98 0 0 1-3.558-8.521V59.901c0-6.541 5.243-11.878 11.783-11.998 15.831-.29 36.694-9.079 52.651-16.178C256.189 17.598 295.709.017 343.995 0h2.844c42.777 0 93.363.413 113.774 29.737 8.392 12.057 10.446 27.034 6.148 44.632 16.312 17.053 25.063 48.863 16.382 74.757 17.544 23.432 19.143 56.132 9.308 79.469l.11.11c11.893 11.949 19.523 31.259 19.439 49.197-.156 30.352-26.157 58.098-59.553 58.098H350.723C358.03 364.34 384 388.132 384 430.548 384 504 336 512 312 512z"]
- };
- var faThumbsUp = {
- prefix: 'fas',
- iconName: 'thumbs-up',
- icon: [512, 512, [], "f164", "M104 224H24c-13.255 0-24 10.745-24 24v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V248c0-13.255-10.745-24-24-24zM64 472c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zM384 81.452c0 42.416-25.97 66.208-33.277 94.548h101.723c33.397 0 59.397 27.746 59.553 58.098.084 17.938-7.546 37.249-19.439 49.197l-.11.11c9.836 23.337 8.237 56.037-9.308 79.469 8.681 25.895-.069 57.704-16.382 74.757 4.298 17.598 2.244 32.575-6.148 44.632C440.202 511.587 389.616 512 346.839 512l-2.845-.001c-48.287-.017-87.806-17.598-119.56-31.725-15.957-7.099-36.821-15.887-52.651-16.178-6.54-.12-11.783-5.457-11.783-11.998v-213.77c0-3.2 1.282-6.271 3.558-8.521 39.614-39.144 56.648-80.587 89.117-113.111 14.804-14.832 20.188-37.236 25.393-58.902C282.515 39.293 291.817 0 312 0c24 0 72 8 72 81.452z"]
- };
- var faThumbtack = {
- prefix: 'fas',
- iconName: 'thumbtack',
- icon: [384, 512, [], "f08d", "M298.028 214.267L285.793 96H328c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v48c0 13.255 10.745 24 24 24h42.207L85.972 214.267C37.465 236.82 0 277.261 0 328c0 13.255 10.745 24 24 24h136v104.007c0 1.242.289 2.467.845 3.578l24 48c2.941 5.882 11.364 5.893 14.311 0l24-48a8.008 8.008 0 0 0 .845-3.578V352h136c13.255 0 24-10.745 24-24-.001-51.183-37.983-91.42-85.973-113.733z"]
- };
- var faTicketAlt = {
- prefix: 'fas',
- iconName: 'ticket-alt',
- icon: [576, 512, [], "f3ff", "M128 160h320v192H128V160zm400 96c0 26.51 21.49 48 48 48v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c26.51 0 48-21.49 48-48s-21.49-48-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v96c-26.51 0-48 21.49-48 48zm-48-104c0-13.255-10.745-24-24-24H120c-13.255 0-24 10.745-24 24v208c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V152z"]
- };
- var faTimes = {
- prefix: 'fas',
- iconName: 'times',
- icon: [352, 512, [], "f00d", "M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"]
- };
- var faTimesCircle = {
- prefix: 'fas',
- iconName: 'times-circle',
- icon: [512, 512, [], "f057", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z"]
- };
- var faTint = {
- prefix: 'fas',
- iconName: 'tint',
- icon: [352, 512, [], "f043", "M205.22 22.09c-7.94-28.78-49.44-30.12-58.44 0C100.01 179.85 0 222.72 0 333.91 0 432.35 78.72 512 176 512s176-79.65 176-178.09c0-111.75-99.79-153.34-146.78-311.82zM176 448c-61.75 0-112-50.25-112-112 0-8.84 7.16-16 16-16s16 7.16 16 16c0 44.11 35.89 80 80 80 8.84 0 16 7.16 16 16s-7.16 16-16 16z"]
- };
- var faTintSlash = {
- prefix: 'fas',
- iconName: 'tint-slash',
- icon: [640, 512, [], "f5c7", "M633.82 458.1L494.97 350.78c.52-5.57 1.03-11.16 1.03-16.87 0-111.76-99.79-153.34-146.78-311.82-7.94-28.78-49.44-30.12-58.44 0-15.52 52.34-36.87 91.96-58.49 125.68L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM144 333.91C144 432.35 222.72 512 320 512c44.71 0 85.37-16.96 116.4-44.7L162.72 255.78c-11.41 23.5-18.72 48.35-18.72 78.13z"]
- };
- var faTired = {
- prefix: 'fas',
- iconName: 'tired',
- icon: [496, 512, [], "f5c8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 288c51.9 0 115.3 43.8 123.2 106.7 1.7 13.6-8 24.6-17.7 20.4-25.9-11.1-64.4-17.4-105.5-17.4s-79.6 6.3-105.5 17.4c-9.8 4.2-19.4-7-17.7-20.4C132.7 331.8 196.1 288 248 288z"]
- };
- var faToggleOff = {
- prefix: 'fas',
- iconName: 'toggle-off',
- icon: [576, 512, [], "f204", "M384 64H192C85.961 64 0 149.961 0 256s85.961 192 192 192h192c106.039 0 192-85.961 192-192S490.039 64 384 64zM64 256c0-70.741 57.249-128 128-128 70.741 0 128 57.249 128 128 0 70.741-57.249 128-128 128-70.741 0-128-57.249-128-128zm320 128h-48.905c65.217-72.858 65.236-183.12 0-256H384c70.741 0 128 57.249 128 128 0 70.74-57.249 128-128 128z"]
- };
- var faToggleOn = {
- prefix: 'fas',
- iconName: 'toggle-on',
- icon: [576, 512, [], "f205", "M384 64H192C86 64 0 150 0 256s86 192 192 192h192c106 0 192-86 192-192S490 64 384 64zm0 320c-70.8 0-128-57.3-128-128 0-70.8 57.3-128 128-128 70.8 0 128 57.3 128 128 0 70.8-57.3 128-128 128z"]
- };
- var faToilet = {
- prefix: 'fas',
- iconName: 'toilet',
- icon: [384, 512, [], "f7d8", "M368 48c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v16c0 8.8 7.2 16 16 16h16v156.7C11.8 214.8 0 226.9 0 240c0 67.2 34.6 126.2 86.8 160.5l-21.4 70.2C59.1 491.2 74.5 512 96 512h192c21.5 0 36.9-20.8 30.6-41.3l-21.4-70.2C349.4 366.2 384 307.2 384 240c0-13.1-11.8-25.2-32-35.3V48h16zM80 72c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H88c-4.4 0-8-3.6-8-8V72zm112 200c-77.1 0-139.6-14.3-139.6-32s62.5-32 139.6-32 139.6 14.3 139.6 32-62.5 32-139.6 32z"]
- };
- var faToiletPaper = {
- prefix: 'fas',
- iconName: 'toilet-paper',
- icon: [576, 512, [], "f71e", "M128 0C74.98 0 32 85.96 32 192v172.07c0 41.12-9.8 62.77-31.17 126.87C-2.62 501.3 5.09 512 16.01 512h280.92c13.77 0 26-8.81 30.36-21.88 12.83-38.48 24.71-72.4 24.71-126.05V192c0-83.6 23.67-153.52 60.44-192H128zM96 224c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zM480 0c-53.02 0-96 85.96-96 192s42.98 192 96 192 96-85.96 96-192S533.02 0 480 0zm0 256c-17.67 0-32-28.65-32-64s14.33-64 32-64 32 28.65 32 64-14.33 64-32 64z"]
- };
- var faToiletPaperSlash = {
- prefix: 'fas',
- iconName: 'toilet-paper-slash',
- icon: [640, 512, [], "e072", "M64,192V364.13c0,41.12-9.75,62.75-31.12,126.87A16,16,0,0,0,48,512H328.86a31.87,31.87,0,0,0,30.38-21.87c9.31-27.83,18-53.35,22.18-85.55l-316-244.25C64.53,170.66,64,181.19,64,192ZM633.82,458.09l-102-78.81C575.28,360.91,608,284.32,608,192,608,86,565,0,512,0s-96,86-96,192c0,42,7,80.4,18.43,112L384,265V192c0-83.62,23.63-153.5,60.5-192H160c-23.33,0-44.63,16.83-61.26,44.53L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.45A16,16,0,0,0,6.18,53.91L594.54,508.63A16,16,0,0,0,617,505.81l19.64-25.26A16,16,0,0,0,633.82,458.09ZM512,256c-17.63,0-32-28.62-32-64s14.37-64,32-64,32,28.63,32,64S529.62,256,512,256Z"]
- };
- var faToolbox = {
- prefix: 'fas',
- iconName: 'toolbox',
- icon: [512, 512, [], "f552", "M502.63 214.63l-45.25-45.25c-6-6-14.14-9.37-22.63-9.37H384V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v80H77.25c-8.49 0-16.62 3.37-22.63 9.37L9.37 214.63c-6 6-9.37 14.14-9.37 22.63V320h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-82.75c0-8.48-3.37-16.62-9.37-22.62zM320 160H192V96h128v64zm64 208c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H192v16c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H0v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96H384v16z"]
- };
- var faTools = {
- prefix: 'fas',
- iconName: 'tools',
- icon: [512, 512, [], "f7d9", "M501.1 395.7L384 278.6c-23.1-23.1-57.6-27.6-85.4-13.9L192 158.1V96L64 0 0 64l96 128h62.1l106.6 106.6c-13.6 27.8-9.2 62.3 13.9 85.4l117.1 117.1c14.6 14.6 38.2 14.6 52.7 0l52.7-52.7c14.5-14.6 14.5-38.2 0-52.7zM331.7 225c28.3 0 54.9 11 74.9 31l19.4 19.4c15.8-6.9 30.8-16.5 43.8-29.5 37.1-37.1 49.7-89.3 37.9-136.7-2.2-9-13.5-12.1-20.1-5.5l-74.4 74.4-67.9-11.3L334 98.9l74.4-74.4c6.6-6.6 3.4-17.9-5.7-20.2-47.4-11.7-99.6.9-136.6 37.9-28.5 28.5-41.9 66.1-41.2 103.6l82.1 82.1c8.1-1.9 16.5-2.9 24.7-2.9zm-103.9 82l-56.7-56.7L18.7 402.8c-25 25-25 65.5 0 90.5s65.5 25 90.5 0l123.6-123.6c-7.6-19.9-9.9-41.6-5-62.7zM64 472c-13.2 0-24-10.8-24-24 0-13.3 10.7-24 24-24s24 10.7 24 24c0 13.2-10.7 24-24 24z"]
- };
- var faTooth = {
- prefix: 'fas',
- iconName: 'tooth',
- icon: [448, 512, [], "f5c9", "M443.98 96.25c-11.01-45.22-47.11-82.06-92.01-93.72-32.19-8.36-63 5.1-89.14 24.33-3.25 2.39-6.96 3.73-10.5 5.48l28.32 18.21c7.42 4.77 9.58 14.67 4.8 22.11-4.46 6.95-14.27 9.86-22.11 4.8L162.83 12.84c-20.7-10.85-43.38-16.4-66.81-10.31-44.9 11.67-81 48.5-92.01 93.72-10.13 41.62-.42 80.81 21.5 110.43 23.36 31.57 32.68 68.66 36.29 107.35 4.4 47.16 10.33 94.16 20.94 140.32l7.8 33.95c3.19 13.87 15.49 23.7 29.67 23.7 13.97 0 26.15-9.55 29.54-23.16l34.47-138.42c4.56-18.32 20.96-31.16 39.76-31.16s35.2 12.85 39.76 31.16l34.47 138.42c3.39 13.61 15.57 23.16 29.54 23.16 14.18 0 26.48-9.83 29.67-23.7l7.8-33.95c10.61-46.15 16.53-93.16 20.94-140.32 3.61-38.7 12.93-75.78 36.29-107.35 21.95-29.61 31.66-68.8 21.53-110.43z"]
- };
- var faTorah = {
- prefix: 'fas',
- iconName: 'torah',
- icon: [640, 512, [], "f6a0", "M320.05 366.48l17.72-29.64h-35.46zm99.21-166H382.4l18.46 30.82zM48 0C21.49 0 0 14.33 0 32v448c0 17.67 21.49 32 48 32s48-14.33 48-32V32C96 14.33 74.51 0 48 0zm172.74 311.5h36.85l-18.46-30.82zm161.71 0h36.86l-18.45-30.8zM128 464h384V48H128zm66.77-278.13a21.22 21.22 0 0 1 18.48-10.71h59.45l29.13-48.71a21.13 21.13 0 0 1 18.22-10.37A20.76 20.76 0 0 1 338 126.29l29.25 48.86h59.52a21.12 21.12 0 0 1 18.1 32L415.63 256 445 305a20.69 20.69 0 0 1 .24 21.12 21.25 21.25 0 0 1-18.48 10.72h-59.47l-29.13 48.7a21.13 21.13 0 0 1-18.16 10.4 20.79 20.79 0 0 1-18-10.22l-29.25-48.88h-59.5a21.11 21.11 0 0 1-18.1-32L224.36 256 195 207a20.7 20.7 0 0 1-.23-21.13zM592 0c-26.51 0-48 14.33-48 32v448c0 17.67 21.49 32 48 32s48-14.33 48-32V32c0-17.67-21.49-32-48-32zM320 145.53l-17.78 29.62h35.46zm-62.45 55h-36.81l18.44 30.8zm29.58 111h65.79L386.09 256l-33.23-55.52h-65.79L253.9 256z"]
- };
- var faToriiGate = {
- prefix: 'fas',
- iconName: 'torii-gate',
- icon: [512, 512, [], "f6a1", "M376.45 32h-240.9A303.17 303.17 0 0 1 0 0v96c0 17.67 14.33 32 32 32h32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h256v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h48c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-48v-64h32c17.67 0 32-14.33 32-32V0a303.17 303.17 0 0 1-135.55 32zM128 128h96v64h-96v-64zm256 64h-96v-64h96v64z"]
- };
- var faTractor = {
- prefix: 'fas',
- iconName: 'tractor',
- icon: [640, 512, [], "f722", "M528 336c-48.6 0-88 39.4-88 88s39.4 88 88 88 88-39.4 88-88-39.4-88-88-88zm0 112c-13.23 0-24-10.77-24-24s10.77-24 24-24 24 10.77 24 24-10.77 24-24 24zm80-288h-64v-40.2c0-14.12 4.7-27.76 13.15-38.84 4.42-5.8 3.55-14.06-1.32-19.49L534.2 37.3c-6.66-7.45-18.32-6.92-24.7.78C490.58 60.9 480 89.81 480 119.8V160H377.67L321.58 29.14A47.914 47.914 0 0 0 277.45 0H144c-26.47 0-48 21.53-48 48v146.52c-8.63-6.73-20.96-6.46-28.89 1.47L36 227.1c-8.59 8.59-8.59 22.52 0 31.11l5.06 5.06c-4.99 9.26-8.96 18.82-11.91 28.72H22c-12.15 0-22 9.85-22 22v44c0 12.15 9.85 22 22 22h7.14c2.96 9.91 6.92 19.46 11.91 28.73l-5.06 5.06c-8.59 8.59-8.59 22.52 0 31.11L67.1 476c8.59 8.59 22.52 8.59 31.11 0l5.06-5.06c9.26 4.99 18.82 8.96 28.72 11.91V490c0 12.15 9.85 22 22 22h44c12.15 0 22-9.85 22-22v-7.14c9.9-2.95 19.46-6.92 28.72-11.91l5.06 5.06c8.59 8.59 22.52 8.59 31.11 0l31.11-31.11c8.59-8.59 8.59-22.52 0-31.11l-5.06-5.06c4.99-9.26 8.96-18.82 11.91-28.72H330c12.15 0 22-9.85 22-22v-6h80.54c21.91-28.99 56.32-48 95.46-48 18.64 0 36.07 4.61 51.8 12.2l50.82-50.82c6-6 9.37-14.14 9.37-22.63V192c.01-17.67-14.32-32-31.99-32zM176 416c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm22-256h-38V64h106.89l41.15 96H198z"]
- };
- var faTrademark = {
- prefix: 'fas',
- iconName: 'trademark',
- icon: [640, 512, [], "f25c", "M260.6 96H12c-6.6 0-12 5.4-12 12v43.1c0 6.6 5.4 12 12 12h85.1V404c0 6.6 5.4 12 12 12h54.3c6.6 0 12-5.4 12-12V163.1h85.1c6.6 0 12-5.4 12-12V108c.1-6.6-5.3-12-11.9-12zM640 403l-24-296c-.5-6.2-5.7-11-12-11h-65.4c-5.1 0-9.7 3.3-11.3 8.1l-43.8 127.1c-7.2 20.6-16.1 52.8-16.1 52.8h-.9s-8.9-32.2-16.1-52.8l-43.8-127.1c-1.7-4.8-6.2-8.1-11.3-8.1h-65.4c-6.2 0-11.4 4.8-12 11l-24.4 296c-.6 7 4.9 13 12 13H360c6.3 0 11.5-4.9 12-11.2l9.1-132.9c1.8-24.2 0-53.7 0-53.7h.9s10.7 33.6 17.9 53.7l30.7 84.7c1.7 4.7 6.2 7.9 11.3 7.9h50.3c5.1 0 9.6-3.2 11.3-7.9l30.7-84.7c7.2-20.1 17.9-53.7 17.9-53.7h.9s-1.8 29.5 0 53.7l9.1 132.9c.4 6.3 5.7 11.2 12 11.2H628c7 0 12.5-6 12-13z"]
- };
- var faTrafficLight = {
- prefix: 'fas',
- iconName: 'traffic-light',
- icon: [384, 512, [], "f637", "M384 192h-64v-37.88c37.2-13.22 64-48.38 64-90.12h-64V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v32H0c0 41.74 26.8 76.9 64 90.12V192H0c0 41.74 26.8 76.9 64 90.12V320H0c0 42.84 28.25 78.69 66.99 91.05C79.42 468.72 130.6 512 192 512s112.58-43.28 125.01-100.95C355.75 398.69 384 362.84 384 320h-64v-37.88c37.2-13.22 64-48.38 64-90.12zM192 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z"]
- };
- var faTrailer = {
- prefix: 'fas',
- iconName: 'trailer',
- icon: [640, 512, [], "e041", "M624,320H544V80a16,16,0,0,0-16-16H16A16,16,0,0,0,0,80V368a16,16,0,0,0,16,16H65.61c7.83-54.21,54-96,110.39-96s102.56,41.79,110.39,96H624a16,16,0,0,0,16-16V336A16,16,0,0,0,624,320ZM96,243.68a176.29,176.29,0,0,0-32,20.71V136a8,8,0,0,1,8-8H88a8,8,0,0,1,8,8Zm96-18.54c-5.31-.49-10.57-1.14-16-1.14s-10.69.65-16,1.14V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm96,39.25a176.29,176.29,0,0,0-32-20.71V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8ZM384,320H352V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm96,0H448V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm-304,0a80,80,0,1,0,80,80A80,80,0,0,0,176,320Zm0,112a32,32,0,1,1,32-32A32,32,0,0,1,176,432Z"]
- };
- var faTrain = {
- prefix: 'fas',
- iconName: 'train',
- icon: [448, 512, [], "f238", "M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zm-48 136V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24zm-176 64c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56z"]
- };
- var faTram = {
- prefix: 'fas',
- iconName: 'tram',
- icon: [512, 512, [], "f7da", "M288 64c17.7 0 32-14.3 32-32S305.7 0 288 0s-32 14.3-32 32 14.3 32 32 32zm223.5-12.1c-2.3-8.6-11-13.6-19.6-11.3l-480 128c-8.5 2.3-13.6 11-11.3 19.6C2.5 195.3 8.9 200 16 200c1.4 0 2.8-.2 4.1-.5L240 140.8V224H64c-17.7 0-32 14.3-32 32v224c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32H272v-91.7l228.1-60.8c8.6-2.3 13.6-11.1 11.4-19.6zM176 384H80v-96h96v96zm160-96h96v96h-96v-96zm-32 0v96h-96v-96h96zM192 96c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z"]
- };
- var faTransgender = {
- prefix: 'fas',
- iconName: 'transgender',
- icon: [384, 512, [], "f224", "M372 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C198.5 104.1 172.2 96 144 96 64.5 96 0 160.5 0 240c0 68.5 47.9 125.9 112 140.4V408H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM144 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"]
- };
- var faTransgenderAlt = {
- prefix: 'fas',
- iconName: 'transgender-alt',
- icon: [480, 512, [], "f225", "M468 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C294.5 104.1 268.2 96 240 96c-28.2 0-54.5 8.1-76.7 22.1l-16.5-16.5 19.8-19.8c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0l-19.8 19.8-19-19 16.9-16.9C107.1 12.9 101.7 0 91 0H12C5.4 0 0 5.4 0 12v79c0 10.7 12.9 16 20.5 8.5l16.9-16.9 19 19-19.8 19.8c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l19.8-19.8 16.5 16.5C104.1 185.5 96 211.8 96 240c0 68.5 47.9 125.9 112 140.4V408h-36c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM240 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"]
- };
- var faTrash = {
- prefix: 'fas',
- iconName: 'trash',
- icon: [448, 512, [], "f1f8", "M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z"]
- };
- var faTrashAlt = {
- prefix: 'fas',
- iconName: 'trash-alt',
- icon: [448, 512, [], "f2ed", "M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm272-256a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"]
- };
- var faTrashRestore = {
- prefix: 'fas',
- iconName: 'trash-restore',
- icon: [448, 512, [], "f829", "M53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32zm70.11-175.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"]
- };
- var faTrashRestoreAlt = {
- prefix: 'fas',
- iconName: 'trash-restore-alt',
- icon: [448, 512, [], "f82a", "M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm91.31-172.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"]
- };
- var faTree = {
- prefix: 'fas',
- iconName: 'tree',
- icon: [384, 512, [], "f1bb", "M378.31 378.49L298.42 288h30.63c9.01 0 16.98-5 20.78-13.06 3.8-8.04 2.55-17.26-3.28-24.05L268.42 160h28.89c9.1 0 17.3-5.35 20.86-13.61 3.52-8.13 1.86-17.59-4.24-24.08L203.66 4.83c-6.03-6.45-17.28-6.45-23.32 0L70.06 122.31c-6.1 6.49-7.75 15.95-4.24 24.08C69.38 154.65 77.59 160 86.69 160h28.89l-78.14 90.91c-5.81 6.78-7.06 15.99-3.27 24.04C37.97 283 45.93 288 54.95 288h30.63L5.69 378.49c-6 6.79-7.36 16.09-3.56 24.26 3.75 8.05 12 13.25 21.01 13.25H160v24.45l-30.29 48.4c-5.32 10.64 2.42 23.16 14.31 23.16h95.96c11.89 0 19.63-12.52 14.31-23.16L224 440.45V416h136.86c9.01 0 17.26-5.2 21.01-13.25 3.8-8.17 2.44-17.47-3.56-24.26z"]
- };
- var faTrophy = {
- prefix: 'fas',
- iconName: 'trophy',
- icon: [576, 512, [], "f091", "M552 64H448V24c0-13.3-10.7-24-24-24H152c-13.3 0-24 10.7-24 24v40H24C10.7 64 0 74.7 0 88v56c0 35.7 22.5 72.4 61.9 100.7 31.5 22.7 69.8 37.1 110 41.7C203.3 338.5 240 360 240 360v72h-48c-35.3 0-64 20.7-64 56v12c0 6.6 5.4 12 12 12h296c6.6 0 12-5.4 12-12v-12c0-35.3-28.7-56-64-56h-48v-72s36.7-21.5 68.1-73.6c40.3-4.6 78.6-19 110-41.7 39.3-28.3 61.9-65 61.9-100.7V88c0-13.3-10.7-24-24-24zM99.3 192.8C74.9 175.2 64 155.6 64 144v-16h64.2c1 32.6 5.8 61.2 12.8 86.2-15.1-5.2-29.2-12.4-41.7-21.4zM512 144c0 16.1-17.7 36.1-35.3 48.8-12.5 9-26.7 16.2-41.8 21.4 7-25 11.8-53.6 12.8-86.2H512v16z"]
- };
- var faTruck = {
- prefix: 'fas',
- iconName: 'truck',
- icon: [640, 512, [], "f0d1", "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"]
- };
- var faTruckLoading = {
- prefix: 'fas',
- iconName: 'truck-loading',
- icon: [640, 512, [], "f4de", "M50.2 375.6c2.3 8.5 11.1 13.6 19.6 11.3l216.4-58c8.5-2.3 13.6-11.1 11.3-19.6l-49.7-185.5c-2.3-8.5-11.1-13.6-19.6-11.3L151 133.3l24.8 92.7-61.8 16.5-24.8-92.7-77.3 20.7C3.4 172.8-1.7 181.6.6 190.1l49.6 185.5zM384 0c-17.7 0-32 14.3-32 32v323.6L5.9 450c-4.3 1.2-6.8 5.6-5.6 9.8l12.6 46.3c1.2 4.3 5.6 6.8 9.8 5.6l393.7-107.4C418.8 464.1 467.6 512 528 512c61.9 0 112-50.1 112-112V0H384zm144 448c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"]
- };
- var faTruckMonster = {
- prefix: 'fas',
- iconName: 'truck-monster',
- icon: [640, 512, [], "f63b", "M624 224h-16v-64c0-17.67-14.33-32-32-32h-73.6L419.22 24.02A64.025 64.025 0 0 0 369.24 0H256c-17.67 0-32 14.33-32 32v96H48c-8.84 0-16 7.16-16 16v80H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16.72c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64h65.45c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-336-96V64h81.24l51.2 64H288zm304 224h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 512 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67A110.85 110.85 0 0 0 373.2 352H368c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32c-.02-8.84-7.18-16-16.02-16zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-208-80h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 192 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0L58.18 304.8c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67a110.85 110.85 0 0 0-8.65 20.89H48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32C288 359.16 280.84 352 272 352zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z"]
- };
- var faTruckMoving = {
- prefix: 'fas',
- iconName: 'truck-moving',
- icon: [640, 512, [], "f4df", "M621.3 237.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7H480V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v336c0 44.2 35.8 80 80 80 26.3 0 49.4-12.9 64-32.4 14.6 19.6 37.7 32.4 64 32.4 44.2 0 80-35.8 80-80 0-5.5-.6-10.8-1.6-16h163.2c-1.1 5.2-1.6 10.5-1.6 16 0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16H624c8.8 0 16-7.2 16-16v-85.5c0-17-6.7-33.2-18.7-45.2zM80 432c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm128 0c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm272-224h37.5c4.3 0 8.3 1.7 11.3 4.7l43.3 43.3H480v-48zm48 224c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32z"]
- };
- var faTruckPickup = {
- prefix: 'fas',
- iconName: 'truck-pickup',
- icon: [640, 512, [], "f63c", "M624 288h-16v-64c0-17.67-14.33-32-32-32h-48L419.22 56.02A64.025 64.025 0 0 0 369.24 32H256c-17.67 0-32 14.33-32 32v128H64c-17.67 0-32 14.33-32 32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h49.61c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16h67.23c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM288 96h81.24l76.8 96H288V96zM176 416c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm288 0c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z"]
- };
- var faTshirt = {
- prefix: 'fas',
- iconName: 'tshirt',
- icon: [640, 512, [], "f553", "M631.2 96.5L436.5 0C416.4 27.8 371.9 47.2 320 47.2S223.6 27.8 203.5 0L8.8 96.5c-7.9 4-11.1 13.6-7.2 21.5l57.2 114.5c4 7.9 13.6 11.1 21.5 7.2l56.6-27.7c10.6-5.2 23 2.5 23 14.4V480c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V226.3c0-11.8 12.4-19.6 23-14.4l56.6 27.7c7.9 4 17.5.8 21.5-7.2L638.3 118c4-7.9.8-17.6-7.1-21.5z"]
- };
- var faTty = {
- prefix: 'fas',
- iconName: 'tty',
- icon: [512, 512, [], "f1e4", "M5.37 103.822c138.532-138.532 362.936-138.326 501.262 0 6.078 6.078 7.074 15.496 2.583 22.681l-43.214 69.138a18.332 18.332 0 0 1-22.356 7.305l-86.422-34.569a18.335 18.335 0 0 1-11.434-18.846L351.741 90c-62.145-22.454-130.636-21.986-191.483 0l5.953 59.532a18.331 18.331 0 0 1-11.434 18.846l-86.423 34.568a18.334 18.334 0 0 1-22.356-7.305L2.787 126.502a18.333 18.333 0 0 1 2.583-22.68zM96 308v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H92c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zM96 500v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H140c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z"]
- };
- var faTv = {
- prefix: 'fas',
- iconName: 'tv',
- icon: [640, 512, [], "f26c", "M592 0H48A48 48 0 0 0 0 48v320a48 48 0 0 0 48 48h240v32H112a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H352v-32h240a48 48 0 0 0 48-48V48a48 48 0 0 0-48-48zm-16 352H64V64h512z"]
- };
- var faUmbrella = {
- prefix: 'fas',
- iconName: 'umbrella',
- icon: [576, 512, [], "f0e9", "M575.7 280.8C547.1 144.5 437.3 62.6 320 49.9V32c0-17.7-14.3-32-32-32s-32 14.3-32 32v17.9C138.3 62.6 29.5 144.5.3 280.8c-2.2 10.1 8.5 21.3 18.7 11.4 52-55 107.7-52.4 158.6 37 5.3 9.5 14.9 8.6 19.7 0 20.2-35.4 44.9-73.2 90.7-73.2 58.5 0 88.2 68.8 90.7 73.2 4.8 8.6 14.4 9.5 19.7 0 51-89.5 107.1-91.4 158.6-37 10.3 10 20.9-1.3 18.7-11.4zM256 301.7V432c0 8.8-7.2 16-16 16-7.8 0-13.2-5.3-15.1-10.7-5.9-16.7-24.1-25.4-40.8-19.5-16.7 5.9-25.4 24.2-19.5 40.8 11.2 31.9 41.6 53.3 75.4 53.3 44.1 0 80-35.9 80-80V301.6c-9.1-7.9-19.8-13.6-32-13.6-12.3.1-22.4 4.8-32 13.7z"]
- };
- var faUmbrellaBeach = {
- prefix: 'fas',
- iconName: 'umbrella-beach',
- icon: [640, 512, [], "f5ca", "M115.38 136.9l102.11 37.18c35.19-81.54 86.21-144.29 139-173.7-95.88-4.89-188.78 36.96-248.53 111.8-6.69 8.4-2.66 21.05 7.42 24.72zm132.25 48.16l238.48 86.83c35.76-121.38 18.7-231.66-42.63-253.98-7.4-2.7-15.13-4-23.09-4-58.02.01-128.27 69.17-172.76 171.15zM521.48 60.5c6.22 16.3 10.83 34.6 13.2 55.19 5.74 49.89-1.42 108.23-18.95 166.98l102.62 37.36c10.09 3.67 21.31-3.43 21.57-14.17 2.32-95.69-41.91-187.44-118.44-245.36zM560 447.98H321.06L386 269.5l-60.14-21.9-72.9 200.37H16c-8.84 0-16 7.16-16 16.01v32.01C0 504.83 7.16 512 16 512h544c8.84 0 16-7.17 16-16.01v-32.01c0-8.84-7.16-16-16-16z"]
- };
- var faUnderline = {
- prefix: 'fas',
- iconName: 'underline',
- icon: [448, 512, [], "f0cd", "M32 64h32v160c0 88.22 71.78 160 160 160s160-71.78 160-160V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H272a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32v160a80 80 0 0 1-160 0V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm400 384H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"]
- };
- var faUndo = {
- prefix: 'fas',
- iconName: 'undo',
- icon: [512, 512, [], "f0e2", "M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z"]
- };
- var faUndoAlt = {
- prefix: 'fas',
- iconName: 'undo-alt',
- icon: [512, 512, [], "f2ea", "M255.545 8c-66.269.119-126.438 26.233-170.86 68.685L48.971 40.971C33.851 25.851 8 36.559 8 57.941V192c0 13.255 10.745 24 24 24h134.059c21.382 0 32.09-25.851 16.971-40.971l-41.75-41.75c30.864-28.899 70.801-44.907 113.23-45.273 92.398-.798 170.283 73.977 169.484 169.442C423.236 348.009 349.816 424 256 424c-41.127 0-79.997-14.678-110.63-41.556-4.743-4.161-11.906-3.908-16.368.553L89.34 422.659c-4.872 4.872-4.631 12.815.482 17.433C133.798 479.813 192.074 504 256 504c136.966 0 247.999-111.033 248-247.998C504.001 119.193 392.354 7.755 255.545 8z"]
- };
- var faUniversalAccess = {
- prefix: 'fas',
- iconName: 'universal-access',
- icon: [512, 512, [], "f29a", "M256 48c114.953 0 208 93.029 208 208 0 114.953-93.029 208-208 208-114.953 0-208-93.029-208-208 0-114.953 93.029-208 208-208m0-40C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 56C149.961 64 64 149.961 64 256s85.961 192 192 192 192-85.961 192-192S362.039 64 256 64zm0 44c19.882 0 36 16.118 36 36s-16.118 36-36 36-36-16.118-36-36 16.118-36 36-36zm117.741 98.023c-28.712 6.779-55.511 12.748-82.14 15.807.851 101.023 12.306 123.052 25.037 155.621 3.617 9.26-.957 19.698-10.217 23.315-9.261 3.617-19.699-.957-23.316-10.217-8.705-22.308-17.086-40.636-22.261-78.549h-9.686c-5.167 37.851-13.534 56.208-22.262 78.549-3.615 9.255-14.05 13.836-23.315 10.217-9.26-3.617-13.834-14.056-10.217-23.315 12.713-32.541 24.185-54.541 25.037-155.621-26.629-3.058-53.428-9.027-82.141-15.807-8.6-2.031-13.926-10.648-11.895-19.249s10.647-13.926 19.249-11.895c96.686 22.829 124.283 22.783 220.775 0 8.599-2.03 17.218 3.294 19.249 11.895 2.029 8.601-3.297 17.219-11.897 19.249z"]
- };
- var faUniversity = {
- prefix: 'fas',
- iconName: 'university',
- icon: [512, 512, [], "f19c", "M496 128v16a8 8 0 0 1-8 8h-24v12c0 6.627-5.373 12-12 12H60c-6.627 0-12-5.373-12-12v-12H24a8 8 0 0 1-8-8v-16a8 8 0 0 1 4.941-7.392l232-88a7.996 7.996 0 0 1 6.118 0l232 88A8 8 0 0 1 496 128zm-24 304H40c-13.255 0-24 10.745-24 24v16a8 8 0 0 0 8 8h464a8 8 0 0 0 8-8v-16c0-13.255-10.745-24-24-24zM96 192v192H60c-6.627 0-12 5.373-12 12v20h416v-20c0-6.627-5.373-12-12-12h-36V192h-64v192h-64V192h-64v192h-64V192H96z"]
- };
- var faUnlink = {
- prefix: 'fas',
- iconName: 'unlink',
- icon: [512, 512, [], "f127", "M304.083 405.907c4.686 4.686 4.686 12.284 0 16.971l-44.674 44.674c-59.263 59.262-155.693 59.266-214.961 0-59.264-59.265-59.264-155.696 0-214.96l44.675-44.675c4.686-4.686 12.284-4.686 16.971 0l39.598 39.598c4.686 4.686 4.686 12.284 0 16.971l-44.675 44.674c-28.072 28.073-28.072 73.75 0 101.823 28.072 28.072 73.75 28.073 101.824 0l44.674-44.674c4.686-4.686 12.284-4.686 16.971 0l39.597 39.598zm-56.568-260.216c4.686 4.686 12.284 4.686 16.971 0l44.674-44.674c28.072-28.075 73.75-28.073 101.824 0 28.072 28.073 28.072 73.75 0 101.823l-44.675 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.598 39.598c4.686 4.686 12.284 4.686 16.971 0l44.675-44.675c59.265-59.265 59.265-155.695 0-214.96-59.266-59.264-155.695-59.264-214.961 0l-44.674 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.597 39.598zm234.828 359.28l22.627-22.627c9.373-9.373 9.373-24.569 0-33.941L63.598 7.029c-9.373-9.373-24.569-9.373-33.941 0L7.029 29.657c-9.373 9.373-9.373 24.569 0 33.941l441.373 441.373c9.373 9.372 24.569 9.372 33.941 0z"]
- };
- var faUnlock = {
- prefix: 'fas',
- iconName: 'unlock',
- icon: [448, 512, [], "f09c", "M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z"]
- };
- var faUnlockAlt = {
- prefix: 'fas',
- iconName: 'unlock-alt',
- icon: [448, 512, [], "f13e", "M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zM264 408c0 22.1-17.9 40-40 40s-40-17.9-40-40v-48c0-22.1 17.9-40 40-40s40 17.9 40 40v48z"]
- };
- var faUpload = {
- prefix: 'fas',
- iconName: 'upload',
- icon: [512, 512, [], "f093", "M296 384h-80c-13.3 0-24-10.7-24-24V192h-87.7c-17.8 0-26.7-21.5-14.1-34.1L242.3 5.7c7.5-7.5 19.8-7.5 27.3 0l152.2 152.2c12.6 12.6 3.7 34.1-14.1 34.1H320v168c0 13.3-10.7 24-24 24zm216-8v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h136v8c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56v-8h136c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z"]
- };
- var faUser = {
- prefix: 'fas',
- iconName: 'user',
- icon: [448, 512, [], "f007", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"]
- };
- var faUserAlt = {
- prefix: 'fas',
- iconName: 'user-alt',
- icon: [512, 512, [], "f406", "M256 288c79.5 0 144-64.5 144-144S335.5 0 256 0 112 64.5 112 144s64.5 144 144 144zm128 32h-55.1c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16H128C57.3 320 0 377.3 0 448v16c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-16c0-70.7-57.3-128-128-128z"]
- };
- var faUserAltSlash = {
- prefix: 'fas',
- iconName: 'user-alt-slash',
- icon: [640, 512, [], "f4fa", "M633.8 458.1L389.6 269.3C433.8 244.7 464 198.1 464 144 464 64.5 399.5 0 320 0c-67.1 0-123 46.1-139 108.2L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM198.4 320C124.2 320 64 380.2 64 454.4v9.6c0 26.5 21.5 48 48 48h382.2L245.8 320h-47.4z"]
- };
- var faUserAstronaut = {
- prefix: 'fas',
- iconName: 'user-astronaut',
- icon: [448, 512, [], "f4fb", "M64 224h13.5c24.7 56.5 80.9 96 146.5 96s121.8-39.5 146.5-96H384c8.8 0 16-7.2 16-16v-96c0-8.8-7.2-16-16-16h-13.5C345.8 39.5 289.6 0 224 0S102.2 39.5 77.5 96H64c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16zm40-88c0-22.1 21.5-40 48-40h144c26.5 0 48 17.9 48 40v24c0 53-43 96-96 96h-48c-53 0-96-43-96-96v-24zm72 72l12-36 36-12-36-12-12-36-12 36-36 12 36 12 12 36zm151.6 113.4C297.7 340.7 262.2 352 224 352s-73.7-11.3-103.6-30.6C52.9 328.5 0 385 0 454.4v9.6c0 26.5 21.5 48 48 48h80v-64c0-17.7 14.3-32 32-32h128c17.7 0 32 14.3 32 32v64h80c26.5 0 48-21.5 48-48v-9.6c0-69.4-52.9-125.9-120.4-133zM272 448c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-96 0c-8.8 0-16 7.2-16 16v48h32v-48c0-8.8-7.2-16-16-16z"]
- };
- var faUserCheck = {
- prefix: 'fas',
- iconName: 'user-check',
- icon: [640, 512, [], "f4fc", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zm323-128.4l-27.8-28.1c-4.6-4.7-12.1-4.7-16.8-.1l-104.8 104-45.5-45.8c-4.6-4.7-12.1-4.7-16.8-.1l-28.1 27.9c-4.7 4.6-4.7 12.1-.1 16.8l81.7 82.3c4.6 4.7 12.1 4.7 16.8.1l141.3-140.2c4.6-4.7 4.7-12.2.1-16.8z"]
- };
- var faUserCircle = {
- prefix: 'fas',
- iconName: 'user-circle',
- icon: [496, 512, [], "f2bd", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 96c48.6 0 88 39.4 88 88s-39.4 88-88 88-88-39.4-88-88 39.4-88 88-88zm0 344c-58.7 0-111.3-26.6-146.5-68.2 18.8-35.4 55.6-59.8 98.5-59.8 2.4 0 4.8.4 7.1 1.1 13 4.2 26.6 6.9 40.9 6.9 14.3 0 28-2.7 40.9-6.9 2.3-.7 4.7-1.1 7.1-1.1 42.9 0 79.7 24.4 98.5 59.8C359.3 421.4 306.7 448 248 448z"]
- };
- var faUserClock = {
- prefix: 'fas',
- iconName: 'user-clock',
- icon: [640, 512, [], "f4fd", "M496 224c-79.6 0-144 64.4-144 144s64.4 144 144 144 144-64.4 144-144-64.4-144-144-144zm64 150.3c0 5.3-4.4 9.7-9.7 9.7h-60.6c-5.3 0-9.7-4.4-9.7-9.7v-76.6c0-5.3 4.4-9.7 9.7-9.7h12.6c5.3 0 9.7 4.4 9.7 9.7V352h38.3c5.3 0 9.7 4.4 9.7 9.7v12.6zM320 368c0-27.8 6.7-54.1 18.2-77.5-8-1.5-16.2-2.5-24.6-2.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h347.1c-45.3-31.9-75.1-84.5-75.1-144zm-96-112c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128z"]
- };
- var faUserCog = {
- prefix: 'fas',
- iconName: 'user-cog',
- icon: [640, 512, [], "f4fe", "M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z"]
- };
- var faUserEdit = {
- prefix: 'fas',
- iconName: 'user-edit',
- icon: [640, 512, [], "f4ff", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h274.9c-2.4-6.8-3.4-14-2.6-21.3l6.8-60.9 1.2-11.1 7.9-7.9 77.3-77.3c-24.5-27.7-60-45.5-99.9-45.5zm45.3 145.3l-6.8 61c-1.1 10.2 7.5 18.8 17.6 17.6l60.9-6.8 137.9-137.9-71.7-71.7-137.9 137.8zM633 268.9L595.1 231c-9.3-9.3-24.5-9.3-33.8 0l-37.8 37.8-4.1 4.1 71.8 71.7 41.8-41.8c9.3-9.4 9.3-24.5 0-33.9z"]
- };
- var faUserFriends = {
- prefix: 'fas',
- iconName: 'user-friends',
- icon: [640, 512, [], "f500", "M192 256c61.9 0 112-50.1 112-112S253.9 32 192 32 80 82.1 80 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C51.6 288 0 339.6 0 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zM480 256c53 0 96-43 96-96s-43-96-96-96-96 43-96 96 43 96 96 96zm48 32h-3.8c-13.9 4.8-28.6 8-44.2 8s-30.3-3.2-44.2-8H432c-20.4 0-39.2 5.9-55.7 15.4 24.4 26.3 39.7 61.2 39.7 99.8v38.4c0 2.2-.5 4.3-.6 6.4H592c26.5 0 48-21.5 48-48 0-61.9-50.1-112-112-112z"]
- };
- var faUserGraduate = {
- prefix: 'fas',
- iconName: 'user-graduate',
- icon: [448, 512, [], "f501", "M319.4 320.6L224 416l-95.4-95.4C57.1 323.7 0 382.2 0 454.4v9.6c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-9.6c0-72.2-57.1-130.7-128.6-133.8zM13.6 79.8l6.4 1.5v58.4c-7 4.2-12 11.5-12 20.3 0 8.4 4.6 15.4 11.1 19.7L3.5 242c-1.7 6.9 2.1 14 7.6 14h41.8c5.5 0 9.3-7.1 7.6-14l-15.6-62.3C51.4 175.4 56 168.4 56 160c0-8.8-5-16.1-12-20.3V87.1l66 15.9c-8.6 17.2-14 36.4-14 57 0 70.7 57.3 128 128 128s128-57.3 128-128c0-20.6-5.3-39.8-14-57l96.3-23.2c18.2-4.4 18.2-27.1 0-31.5l-190.4-46c-13-3.1-26.7-3.1-39.7 0L13.6 48.2c-18.1 4.4-18.1 27.2 0 31.6z"]
- };
- var faUserInjured = {
- prefix: 'fas',
- iconName: 'user-injured',
- icon: [448, 512, [], "f728", "M277.37 11.98C261.08 4.47 243.11 0 224 0c-53.69 0-99.5 33.13-118.51 80h81.19l90.69-68.02zM342.51 80c-7.9-19.47-20.67-36.2-36.49-49.52L239.99 80h102.52zM224 256c70.69 0 128-57.31 128-128 0-5.48-.95-10.7-1.61-16H97.61c-.67 5.3-1.61 10.52-1.61 16 0 70.69 57.31 128 128 128zM80 299.7V512h128.26l-98.45-221.52A132.835 132.835 0 0 0 80 299.7zM0 464c0 26.51 21.49 48 48 48V320.24C18.88 344.89 0 381.26 0 422.4V464zm256-48h-55.38l42.67 96H256c26.47 0 48-21.53 48-48s-21.53-48-48-48zm57.6-128h-16.71c-22.24 10.18-46.88 16-72.89 16s-50.65-5.82-72.89-16h-7.37l42.67 96H256c44.11 0 80 35.89 80 80 0 18.08-6.26 34.59-16.41 48H400c26.51 0 48-21.49 48-48v-41.6c0-74.23-60.17-134.4-134.4-134.4z"]
- };
- var faUserLock = {
- prefix: 'fas',
- iconName: 'user-lock',
- icon: [640, 512, [], "f502", "M224 256A128 128 0 1 0 96 128a128 128 0 0 0 128 128zm96 64a63.08 63.08 0 0 1 8.1-30.5c-4.8-.5-9.5-1.5-14.5-1.5h-16.7a174.08 174.08 0 0 1-145.8 0h-16.7A134.43 134.43 0 0 0 0 422.4V464a48 48 0 0 0 48 48h280.9a63.54 63.54 0 0 1-8.9-32zm288-32h-32v-80a80 80 0 0 0-160 0v80h-32a32 32 0 0 0-32 32v160a32 32 0 0 0 32 32h224a32 32 0 0 0 32-32V320a32 32 0 0 0-32-32zM496 432a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm32-144h-64v-80a32 32 0 0 1 64 0z"]
- };
- var faUserMd = {
- prefix: 'fas',
- iconName: 'user-md',
- icon: [448, 512, [], "f0f0", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zM104 424c0 13.3 10.7 24 24 24s24-10.7 24-24-10.7-24-24-24-24 10.7-24 24zm216-135.4v49c36.5 7.4 64 39.8 64 78.4v41.7c0 7.6-5.4 14.2-12.9 15.7l-32.2 6.4c-4.3.9-8.5-1.9-9.4-6.3l-3.1-15.7c-.9-4.3 1.9-8.6 6.3-9.4l19.3-3.9V416c0-62.8-96-65.1-96 1.9v26.7l19.3 3.9c4.3.9 7.1 5.1 6.3 9.4l-3.1 15.7c-.9 4.3-5.1 7.1-9.4 6.3l-31.2-4.2c-7.9-1.1-13.8-7.8-13.8-15.9V416c0-38.6 27.5-70.9 64-78.4v-45.2c-2.2.7-4.4 1.1-6.6 1.9-18 6.3-37.3 9.8-57.4 9.8s-39.4-3.5-57.4-9.8c-7.4-2.6-14.9-4.2-22.6-5.2v81.6c23.1 6.9 40 28.1 40 53.4 0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.3 16.9-46.5 40-53.4v-80.4C48.5 301 0 355.8 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-72-56.8-130.3-128-133.8z"]
- };
- var faUserMinus = {
- prefix: 'fas',
- iconName: 'user-minus',
- icon: [640, 512, [], "f503", "M624 208H432c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h192c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"]
- };
- var faUserNinja = {
- prefix: 'fas',
- iconName: 'user-ninja',
- icon: [448, 512, [], "f504", "M325.4 289.2L224 390.6 122.6 289.2C54 295.3 0 352.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-70.2-54-127.1-122.6-133.2zM32 192c27.3 0 51.8-11.5 69.2-29.7 15.1 53.9 64 93.7 122.8 93.7 70.7 0 128-57.3 128-128S294.7 0 224 0c-50.4 0-93.6 29.4-114.5 71.8C92.1 47.8 64 32 32 32c0 33.4 17.1 62.8 43.1 80-26 17.2-43.1 46.6-43.1 80zm144-96h96c17.7 0 32 14.3 32 32H144c0-17.7 14.3-32 32-32z"]
- };
- var faUserNurse = {
- prefix: 'fas',
- iconName: 'user-nurse',
- icon: [448, 512, [], "f82f", "M319.41,320,224,415.39,128.59,320C57.1,323.1,0,381.6,0,453.79A58.21,58.21,0,0,0,58.21,512H389.79A58.21,58.21,0,0,0,448,453.79C448,381.6,390.9,323.1,319.41,320ZM224,304A128,128,0,0,0,352,176V65.82a32,32,0,0,0-20.76-30L246.47,4.07a64,64,0,0,0-44.94,0L116.76,35.86A32,32,0,0,0,96,65.82V176A128,128,0,0,0,224,304ZM184,71.67a5,5,0,0,1,5-5h21.67V45a5,5,0,0,1,5-5h16.66a5,5,0,0,1,5,5V66.67H259a5,5,0,0,1,5,5V88.33a5,5,0,0,1-5,5H237.33V115a5,5,0,0,1-5,5H215.67a5,5,0,0,1-5-5V93.33H189a5,5,0,0,1-5-5ZM144,160H304v16a80,80,0,0,1-160,0Z"]
- };
- var faUserPlus = {
- prefix: 'fas',
- iconName: 'user-plus',
- icon: [640, 512, [], "f234", "M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"]
- };
- var faUserSecret = {
- prefix: 'fas',
- iconName: 'user-secret',
- icon: [448, 512, [], "f21b", "M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z"]
- };
- var faUserShield = {
- prefix: 'fas',
- iconName: 'user-shield',
- icon: [640, 512, [], "f505", "M622.3 271.1l-115.2-45c-4.1-1.6-12.6-3.7-22.2 0l-115.2 45c-10.7 4.2-17.7 14-17.7 24.9 0 111.6 68.7 188.8 132.9 213.9 9.6 3.7 18 1.6 22.2 0C558.4 489.9 640 420.5 640 296c0-10.9-7-20.7-17.7-24.9zM496 462.4V273.3l95.5 37.3c-5.6 87.1-60.9 135.4-95.5 151.8zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm96 40c0-2.5.8-4.8 1.1-7.2-2.5-.1-4.9-.8-7.5-.8h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c6.8 0 13.3-1.5 19.2-4-54-42.9-99.2-116.7-99.2-212z"]
- };
- var faUserSlash = {
- prefix: 'fas',
- iconName: 'user-slash',
- icon: [640, 512, [], "f506", "M633.8 458.1L362.3 248.3C412.1 230.7 448 183.8 448 128 448 57.3 390.7 0 320 0c-67.1 0-121.5 51.8-126.9 117.4L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM96 422.4V464c0 26.5 21.5 48 48 48h350.2L207.4 290.3C144.2 301.3 96 356 96 422.4z"]
- };
- var faUserTag = {
- prefix: 'fas',
- iconName: 'user-tag',
- icon: [640, 512, [], "f507", "M630.6 364.9l-90.3-90.2c-12-12-28.3-18.7-45.3-18.7h-79.3c-17.7 0-32 14.3-32 32v79.2c0 17 6.7 33.2 18.7 45.2l90.3 90.2c12.5 12.5 32.8 12.5 45.3 0l92.5-92.5c12.6-12.5 12.6-32.7.1-45.2zm-182.8-21c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24c0 13.2-10.7 24-24 24zm-223.8-88c70.7 0 128-57.3 128-128C352 57.3 294.7 0 224 0S96 57.3 96 128c0 70.6 57.3 127.9 128 127.9zm127.8 111.2V294c-12.2-3.6-24.9-6.2-38.2-6.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 287.9 0 348.1 0 422.3v41.6c0 26.5 21.5 48 48 48h352c15.5 0 29.1-7.5 37.9-18.9l-58-58c-18.1-18.1-28.1-42.2-28.1-67.9z"]
- };
- var faUserTie = {
- prefix: 'fas',
- iconName: 'user-tie',
- icon: [448, 512, [], "f508", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm95.8 32.6L272 480l-32-136 32-56h-96l32 56-32 136-47.8-191.4C56.9 292 0 350.3 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-72.1-56.9-130.4-128.2-133.8z"]
- };
- var faUserTimes = {
- prefix: 'fas',
- iconName: 'user-times',
- icon: [640, 512, [], "f235", "M589.6 240l45.6-45.6c6.3-6.3 6.3-16.5 0-22.8l-22.8-22.8c-6.3-6.3-16.5-6.3-22.8 0L544 194.4l-45.6-45.6c-6.3-6.3-16.5-6.3-22.8 0l-22.8 22.8c-6.3 6.3-6.3 16.5 0 22.8l45.6 45.6-45.6 45.6c-6.3 6.3-6.3 16.5 0 22.8l22.8 22.8c6.3 6.3 16.5 6.3 22.8 0l45.6-45.6 45.6 45.6c6.3 6.3 16.5 6.3 22.8 0l22.8-22.8c6.3-6.3 6.3-16.5 0-22.8L589.6 240zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"]
- };
- var faUsers = {
- prefix: 'fas',
- iconName: 'users',
- icon: [640, 512, [], "f0c0", "M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z"]
- };
- var faUsersCog = {
- prefix: 'fas',
- iconName: 'users-cog',
- icon: [640, 512, [], "f509", "M610.5 341.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 368.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm224 32c1.9 0 3.7-.5 5.6-.6 8.3-21.7 20.5-42.1 36.3-59.2 7.4-8 17.9-12.6 28.9-12.6 6.9 0 13.7 1.8 19.6 5.3l7.9 4.6c.8-.5 1.6-.9 2.4-1.4 7-14.6 11.2-30.8 11.2-48 0-61.9-50.1-112-112-112S208 82.1 208 144c0 61.9 50.1 112 112 112zm105.2 194.5c-2.3-1.2-4.6-2.6-6.8-3.9-8.2 4.8-15.3 9.8-27.5 9.8-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-10.7-34.5 24.9-49.7 25.8-50.3-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-3.8-2.2-7-5-9.8-8.1-3.3.2-6.5.6-9.8.6-24.6 0-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h255.4c-3.7-6-6.2-12.8-6.2-20.3v-9.2zM173.1 274.6C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z"]
- };
- var faUsersSlash = {
- prefix: 'fas',
- iconName: 'users-slash',
- icon: [640, 512, [], "e073", "M132.65,212.32,36.21,137.78A63.4,63.4,0,0,0,32,160a63.84,63.84,0,0,0,100.65,52.32Zm40.44,62.28A63.79,63.79,0,0,0,128,256H64A64.06,64.06,0,0,0,0,320v32a32,32,0,0,0,32,32H97.91A146.62,146.62,0,0,1,173.09,274.6ZM544,224a64,64,0,1,0-64-64A64.06,64.06,0,0,0,544,224ZM500.56,355.11a114.24,114.24,0,0,0-84.47-65.28L361,247.23c41.46-16.3,71-55.92,71-103.23A111.93,111.93,0,0,0,320,32c-57.14,0-103.69,42.83-110.6,98.08L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45ZM128,403.21V432a48,48,0,0,0,48,48H464a47.45,47.45,0,0,0,12.57-1.87L232,289.13C173.74,294.83,128,343.42,128,403.21ZM576,256H512a63.79,63.79,0,0,0-45.09,18.6A146.29,146.29,0,0,1,542,384h66a32,32,0,0,0,32-32V320A64.06,64.06,0,0,0,576,256Z"]
- };
- var faUtensilSpoon = {
- prefix: 'fas',
- iconName: 'utensil-spoon',
- icon: [512, 512, [], "f2e5", "M480.1 31.9c-55-55.1-164.9-34.5-227.8 28.5-49.3 49.3-55.1 110-28.8 160.4L9 413.2c-11.6 10.5-12.1 28.5-1 39.5L59.3 504c11 11 29.1 10.5 39.5-1.1l192.4-214.4c50.4 26.3 111.1 20.5 160.4-28.8 63-62.9 83.6-172.8 28.5-227.8z"]
- };
- var faUtensils = {
- prefix: 'fas',
- iconName: 'utensils',
- icon: [416, 512, [], "f2e7", "M207.9 15.2c.8 4.7 16.1 94.5 16.1 128.8 0 52.3-27.8 89.6-68.9 104.6L168 486.7c.7 13.7-10.2 25.3-24 25.3H80c-13.7 0-24.7-11.5-24-25.3l12.9-238.1C27.7 233.6 0 196.2 0 144 0 109.6 15.3 19.9 16.1 15.2 19.3-5.1 61.4-5.4 64 16.3v141.2c1.3 3.4 15.1 3.2 16 0 1.4-25.3 7.9-139.2 8-141.8 3.3-20.8 44.7-20.8 47.9 0 .2 2.7 6.6 116.5 8 141.8.9 3.2 14.8 3.4 16 0V16.3c2.6-21.6 44.8-21.4 48-1.1zm119.2 285.7l-15 185.1c-1.2 14 9.9 26 23.9 26h56c13.3 0 24-10.7 24-24V24c0-13.2-10.7-24-24-24-82.5 0-221.4 178.5-64.9 300.9z"]
- };
- var faVectorSquare = {
- prefix: 'fas',
- iconName: 'vector-square',
- icon: [512, 512, [], "f5cb", "M512 128V32c0-17.67-14.33-32-32-32h-96c-17.67 0-32 14.33-32 32H160c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32v192c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32h192c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32V160c17.67 0 32-14.33 32-32zm-96-64h32v32h-32V64zM64 64h32v32H64V64zm32 384H64v-32h32v32zm352 0h-32v-32h32v32zm-32-96h-32c-17.67 0-32 14.33-32 32v32H160v-32c0-17.67-14.33-32-32-32H96V160h32c17.67 0 32-14.33 32-32V96h192v32c0 17.67 14.33 32 32 32h32v192z"]
- };
- var faVenus = {
- prefix: 'fas',
- iconName: 'venus',
- icon: [288, 512, [], "f221", "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z"]
- };
- var faVenusDouble = {
- prefix: 'fas',
- iconName: 'venus-double',
- icon: [512, 512, [], "f226", "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80zm336 140.4V368h36c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-36v36c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-36h-36c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h36v-51.6c-21.2-4.8-40.6-14.3-57.2-27.3 14-16.7 25-36 32.1-57.1 14.5 14.8 34.7 24 57.1 24 44.1 0 80-35.9 80-80s-35.9-80-80-80c-22.3 0-42.6 9.2-57.1 24-7.1-21.1-18-40.4-32.1-57.1C303.4 43.6 334.3 32 368 32c79.5 0 144 64.5 144 144 0 68.5-47.9 125.9-112 140.4z"]
- };
- var faVenusMars = {
- prefix: 'fas',
- iconName: 'venus-mars',
- icon: [576, 512, [], "f228", "M564 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C422.5 72.1 396.2 64 368 64c-33.7 0-64.6 11.6-89.2 30.9 14 16.7 25 36 32.1 57.1 14.5-14.8 34.7-24 57.1-24 44.1 0 80 35.9 80 80s-35.9 80-80 80c-22.3 0-42.6-9.2-57.1-24-7.1 21.1-18 40.4-32.1 57.1 24.5 19.4 55.5 30.9 89.2 30.9 79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 64C64.5 64 0 128.5 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.6 112-71.9 112-140.4 0-79.5-64.5-144-144-144zm0 224c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"]
- };
- var faVest = {
- prefix: 'fas',
- iconName: 'vest',
- icon: [448, 512, [], "e085", "M437.252,239.877,384,160V32A32,32,0,0,0,352,0H320a24.021,24.021,0,0,0-13.312,4.031l-25,16.672a103.794,103.794,0,0,1-115.376,0l-25-16.672A24.021,24.021,0,0,0,128,0H96A32,32,0,0,0,64,32V160L10.748,239.877A64,64,0,0,0,0,275.377V480a32,32,0,0,0,32,32H192V288a31.987,31.987,0,0,1,1.643-10.119L207.135,237.4,150.188,66.564A151.518,151.518,0,0,0,224,86.234a151.55,151.55,0,0,0,73.812-19.672L224,288V512H416a32,32,0,0,0,32-32V275.377A64,64,0,0,0,437.252,239.877ZM131.312,371.312l-48,48a16,16,0,0,1-22.624-22.624l48-48a16,16,0,0,1,22.624,22.624Zm256,48a15.992,15.992,0,0,1-22.624,0l-48-48a16,16,0,0,1,22.624-22.624l48,48A15.993,15.993,0,0,1,387.312,419.312Z"]
- };
- var faVestPatches = {
- prefix: 'fas',
- iconName: 'vest-patches',
- icon: [448, 512, [], "e086", "M437.252,239.877,384,160V32A32,32,0,0,0,352,0H320a23.982,23.982,0,0,0-13.312,4.031l-25,16.672a103.794,103.794,0,0,1-115.376,0l-25-16.672A23.982,23.982,0,0,0,128,0H96A32,32,0,0,0,64,32V160L10.748,239.877A64,64,0,0,0,0,275.377V480a32,32,0,0,0,32,32H192V288a31.987,31.987,0,0,1,1.643-10.119L207.135,237.4,150.188,66.561A151.579,151.579,0,0,0,224,86.234a151.565,151.565,0,0,0,73.811-19.668L224,288V512H416a32,32,0,0,0,32-32V275.377A64,64,0,0,0,437.252,239.877ZM63.5,272.484a12.01,12.01,0,0,1,17-16.968l15.5,15.5,15.5-15.5a12.01,12.01,0,0,1,17,16.968L112.984,288,128.5,303.516a12.01,12.01,0,0,1-17,16.968L96,304.984l-15.5,15.5a12.01,12.01,0,0,1-17-16.968L79.016,288ZM96,456a40,40,0,1,1,40-40A40,40,0,0,1,96,456ZM359.227,335.785,310.7,336a6.671,6.671,0,0,1-6.7-6.7l.215-48.574A24.987,24.987,0,0,1,331.43,256.1c12.789,1.162,22.129,12.619,22.056,25.419l-.037,5.057,5.051-.037c12.826-.035,24.236,9.275,25.4,22.076A24.948,24.948,0,0,1,359.227,335.785Z"]
- };
- var faVial = {
- prefix: 'fas',
- iconName: 'vial',
- icon: [480, 512, [], "f492", "M477.7 186.1L309.5 18.3c-3.1-3.1-8.2-3.1-11.3 0l-34 33.9c-3.1 3.1-3.1 8.2 0 11.3l11.2 11.1L33 316.5c-38.8 38.7-45.1 102-9.4 143.5 20.6 24 49.5 36 78.4 35.9 26.4 0 52.8-10 72.9-30.1l246.3-245.7 11.2 11.1c3.1 3.1 8.2 3.1 11.3 0l34-33.9c3.1-3 3.1-8.1 0-11.2zM318 256H161l148-147.7 78.5 78.3L318 256z"]
- };
- var faVials = {
- prefix: 'fas',
- iconName: 'vials',
- icon: [640, 512, [], "f493", "M72 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H72c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64zm480 384H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM360 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64z"]
- };
- var faVideo = {
- prefix: 'fas',
- iconName: 'video',
- icon: [576, 512, [], "f03d", "M336.2 64H47.8C21.4 64 0 85.4 0 111.8v288.4C0 426.6 21.4 448 47.8 448h288.4c26.4 0 47.8-21.4 47.8-47.8V111.8c0-26.4-21.4-47.8-47.8-47.8zm189.4 37.7L416 177.3v157.4l109.6 75.5c21.2 14.6 50.4-.3 50.4-25.8V127.5c0-25.4-29.1-40.4-50.4-25.8z"]
- };
- var faVideoSlash = {
- prefix: 'fas',
- iconName: 'video-slash',
- icon: [640, 512, [], "f4e2", "M633.8 458.1l-55-42.5c15.4-1.4 29.2-13.7 29.2-31.1v-257c0-25.5-29.1-40.4-50.4-25.8L448 177.3v137.2l-32-24.7v-178c0-26.4-21.4-47.8-47.8-47.8H123.9L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4L42.7 82 416 370.6l178.5 138c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.5-6.9 4.2-17-2.8-22.4zM32 400.2c0 26.4 21.4 47.8 47.8 47.8h288.4c11.2 0 21.4-4 29.6-10.5L32 154.7v245.5z"]
- };
- var faVihara = {
- prefix: 'fas',
- iconName: 'vihara',
- icon: [640, 512, [], "f6a7", "M632.88 400.71L544 352v-64l55.16-17.69c11.79-5.9 11.79-22.72 0-28.62L480 192v-64l27.31-16.3c7.72-7.72 5.61-20.74-4.16-25.62L320 0 136.85 86.07c-9.77 4.88-11.88 17.9-4.16 25.62L160 128v64L40.84 241.69c-11.79 5.9-11.79 22.72 0 28.62L96 288v64L7.12 400.71c-5.42 3.62-7.7 9.63-7 15.29.62 5.01 3.57 9.75 8.72 12.33L64 448v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48l55.15-19.67c5.16-2.58 8.1-7.32 8.72-12.33.71-5.67-1.57-11.68-6.99-15.29zM224 128h192v64H224v-64zm-64 224v-64h320v64H160z"]
- };
- var faVirus = {
- prefix: 'fas',
- iconName: 'virus',
- icon: [512, 512, [], "e074", "M483.55,227.55H462c-50.68,0-76.07-61.27-40.23-97.11L437,115.19A28.44,28.44,0,0,0,396.8,75L381.56,90.22c-35.84,35.83-97.11,10.45-97.11-40.23V28.44a28.45,28.45,0,0,0-56.9,0V50c0,50.68-61.27,76.06-97.11,40.23L115.2,75A28.44,28.44,0,0,0,75,115.19l15.25,15.25c35.84,35.84,10.45,97.11-40.23,97.11H28.45a28.45,28.45,0,1,0,0,56.89H50c50.68,0,76.07,61.28,40.23,97.12L75,396.8A28.45,28.45,0,0,0,115.2,437l15.24-15.25c35.84-35.84,97.11-10.45,97.11,40.23v21.54a28.45,28.45,0,0,0,56.9,0V462c0-50.68,61.27-76.07,97.11-40.23L396.8,437A28.45,28.45,0,0,0,437,396.8l-15.25-15.24c-35.84-35.84-10.45-97.12,40.23-97.12h21.54a28.45,28.45,0,1,0,0-56.89ZM224,272a48,48,0,1,1,48-48A48,48,0,0,1,224,272Zm80,56a24,24,0,1,1,24-24A24,24,0,0,1,304,328Z"]
- };
- var faVirusSlash = {
- prefix: 'fas',
- iconName: 'virus-slash',
- icon: [640, 512, [], "e075", "M114,227.6H92.4C76.7,227.6,64,240.3,64,256s12.7,28.4,28.4,28.4H114c50.7,0,76.1,61.3,40.2,97.1L139,396.8 c-11.5,10.7-12.2,28.7-1.6,40.2s28.7,12.2,40.2,1.6c0.5-0.5,1.1-1,1.6-1.6l15.2-15.2c35.8-35.8,97.1-10.5,97.1,40.2v21.5 c0,15.7,12.8,28.4,28.5,28.4c15.7,0,28.4-12.7,28.4-28.4V462c0-26.6,17-45.9,38.2-53.4l-244.5-189 C133.7,224.7,123.9,227.5,114,227.6z M617,505.8l19.6-25.3c5.4-7,4.2-17-2.8-22.5L470.6,332c4.2-25.4,24.9-47.5,55.4-47.5h21.5 c15.7,0,28.4-12.7,28.4-28.4s-12.7-28.4-28.4-28.4H526c-50.7,0-76.1-61.3-40.2-97.1l15.2-15.3c10.7-11.5,10-29.5-1.6-40.2 c-10.9-10.1-27.7-10.1-38.6,0l-15.2,15.2c-35.8,35.8-97.1,10.5-97.1-40.2V28.5C348.4,12.7,335.7,0,320,0 c-15.7,0-28.4,12.7-28.4,28.4V50c0,50.7-61.3,76.1-97.1,40.2L179.2,75c-11.1-11.1-29.4-10.6-40.5,0.5L45.5,3.4 c-7-5.4-17-4.2-22.5,2.8L3.4,31.5c-5.4,7-4.2,17,2.8,22.5l588.4,454.7C601.5,514.1,611.6,512.8,617,505.8z M335.4,227.5l-62.9-48.6 c4.9-1.8,10.2-2.8,15.4-2.9c26.5,0,48,21.5,48,48C336,225.2,335.5,226.3,335.4,227.5z"]
- };
- var faViruses = {
- prefix: 'fas',
- iconName: 'viruses',
- icon: [640, 512, [], "e076", "M624,352H611.88c-28.51,0-42.79-34.47-22.63-54.63l8.58-8.57a16,16,0,1,0-22.63-22.63l-8.57,8.58C546.47,294.91,512,280.63,512,252.12V240a16,16,0,0,0-32,0v12.12c0,28.51-34.47,42.79-54.63,22.63l-8.57-8.58a16,16,0,0,0-22.63,22.63l8.58,8.57c20.16,20.16,5.88,54.63-22.63,54.63H368a16,16,0,0,0,0,32h12.12c28.51,0,42.79,34.47,22.63,54.63l-8.58,8.57a16,16,0,1,0,22.63,22.63l8.57-8.58c20.16-20.16,54.63-5.88,54.63,22.63V496a16,16,0,0,0,32,0V483.88c0-28.51,34.47-42.79,54.63-22.63l8.57,8.58a16,16,0,1,0,22.63-22.63l-8.58-8.57C569.09,418.47,583.37,384,611.88,384H624a16,16,0,0,0,0-32ZM480,384a32,32,0,1,1,32-32A32,32,0,0,1,480,384ZM346.51,213.33h16.16a21.33,21.33,0,0,0,0-42.66H346.51c-38,0-57.05-46-30.17-72.84l11.43-11.44A21.33,21.33,0,0,0,297.6,56.23L286.17,67.66c-26.88,26.88-72.84,7.85-72.84-30.17V21.33a21.33,21.33,0,0,0-42.66,0V37.49c0,38-46,57.05-72.84,30.17L86.4,56.23A21.33,21.33,0,0,0,56.23,86.39L67.66,97.83c26.88,26.88,7.85,72.84-30.17,72.84H21.33a21.33,21.33,0,0,0,0,42.66H37.49c38,0,57.05,46,30.17,72.84L56.23,297.6A21.33,21.33,0,1,0,86.4,327.77l11.43-11.43c26.88-26.88,72.84-7.85,72.84,30.17v16.16a21.33,21.33,0,0,0,42.66,0V346.51c0-38,46-57.05,72.84-30.17l11.43,11.43a21.33,21.33,0,0,0,30.17-30.17l-11.43-11.43C289.46,259.29,308.49,213.33,346.51,213.33ZM160,192a32,32,0,1,1,32-32A32,32,0,0,1,160,192Zm80,32a16,16,0,1,1,16-16A16,16,0,0,1,240,224Z"]
- };
- var faVoicemail = {
- prefix: 'fas',
- iconName: 'voicemail',
- icon: [640, 512, [], "f897", "M496 128a144 144 0 0 0-119.74 224H263.74A144 144 0 1 0 144 416h352a144 144 0 0 0 0-288zM64 272a80 80 0 1 1 80 80 80 80 0 0 1-80-80zm432 80a80 80 0 1 1 80-80 80 80 0 0 1-80 80z"]
- };
- var faVolleyballBall = {
- prefix: 'fas',
- iconName: 'volleyball-ball',
- icon: [512, 512, [], "f45f", "M231.39 243.48a285.56 285.56 0 0 0-22.7-105.7c-90.8 42.4-157.5 122.4-180.3 216.8a249 249 0 0 0 56.9 81.1 333.87 333.87 0 0 1 146.1-192.2zm-36.9-134.4a284.23 284.23 0 0 0-57.4-70.7c-91 49.8-144.8 152.9-125 262.2 33.4-83.1 98.4-152 182.4-191.5zm187.6 165.1c8.6-99.8-27.3-197.5-97.5-264.4-14.7-1.7-51.6-5.5-98.9 8.5A333.87 333.87 0 0 1 279.19 241a285 285 0 0 0 102.9 33.18zm-124.7 9.5a286.33 286.33 0 0 0-80.2 72.6c82 57.3 184.5 75.1 277.5 47.8a247.15 247.15 0 0 0 42.2-89.9 336.1 336.1 0 0 1-80.9 10.4c-54.6-.1-108.9-14.1-158.6-40.9zm-98.3 99.7c-15.2 26-25.7 54.4-32.1 84.2a247.07 247.07 0 0 0 289-22.1c-112.9 16.1-203.3-24.8-256.9-62.1zm180.3-360.6c55.3 70.4 82.5 161.2 74.6 253.6a286.59 286.59 0 0 0 89.7-14.2c0-2 .3-4 .3-6 0-107.8-68.7-199.1-164.6-233.4z"]
- };
- var faVolumeDown = {
- prefix: 'fas',
- iconName: 'volume-down',
- icon: [384, 512, [], "f027", "M215.03 72.04L126.06 161H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V89.02c0-21.47-25.96-31.98-40.97-16.98zm123.2 108.08c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 229.28 336 242.62 336 257c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.87z"]
- };
- var faVolumeMute = {
- prefix: 'fas',
- iconName: 'volume-mute',
- icon: [512, 512, [], "f6a9", "M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zM461.64 256l45.64-45.64c6.3-6.3 6.3-16.52 0-22.82l-22.82-22.82c-6.3-6.3-16.52-6.3-22.82 0L416 210.36l-45.64-45.64c-6.3-6.3-16.52-6.3-22.82 0l-22.82 22.82c-6.3 6.3-6.3 16.52 0 22.82L370.36 256l-45.63 45.63c-6.3 6.3-6.3 16.52 0 22.82l22.82 22.82c6.3 6.3 16.52 6.3 22.82 0L416 301.64l45.64 45.64c6.3 6.3 16.52 6.3 22.82 0l22.82-22.82c6.3-6.3 6.3-16.52 0-22.82L461.64 256z"]
- };
- var faVolumeOff = {
- prefix: 'fas',
- iconName: 'volume-off',
- icon: [256, 512, [], "f026", "M215 71l-89 89H24a24 24 0 0 0-24 24v144a24 24 0 0 0 24 24h102.06L215 441c15 15 41 4.47 41-17V88c0-21.47-26-32-41-17z"]
- };
- var faVolumeUp = {
- prefix: 'fas',
- iconName: 'volume-up',
- icon: [576, 512, [], "f028", "M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zm233.32-51.08c-11.17-7.33-26.18-4.24-33.51 6.95-7.34 11.17-4.22 26.18 6.95 33.51 66.27 43.49 105.82 116.6 105.82 195.58 0 78.98-39.55 152.09-105.82 195.58-11.17 7.32-14.29 22.34-6.95 33.5 7.04 10.71 21.93 14.56 33.51 6.95C528.27 439.58 576 351.33 576 256S528.27 72.43 448.35 19.97zM480 256c0-63.53-32.06-121.94-85.77-156.24-11.19-7.14-26.03-3.82-33.12 7.46s-3.78 26.21 7.41 33.36C408.27 165.97 432 209.11 432 256s-23.73 90.03-63.48 115.42c-11.19 7.14-14.5 22.07-7.41 33.36 6.51 10.36 21.12 15.14 33.12 7.46C447.94 377.94 480 319.54 480 256zm-141.77-76.87c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 228.28 336 241.63 336 256c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.86z"]
- };
- var faVoteYea = {
- prefix: 'fas',
- iconName: 'vote-yea',
- icon: [640, 512, [], "f772", "M608 320h-64v64h22.4c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8H96v-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h576c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32zm-96 64V64.3c0-17.9-14.5-32.3-32.3-32.3H160.4C142.5 32 128 46.5 128 64.3V384h384zM211.2 202l25.5-25.3c4.2-4.2 11-4.2 15.2.1l41.3 41.6 95.2-94.4c4.2-4.2 11-4.2 15.2.1l25.3 25.5c4.2 4.2 4.2 11-.1 15.2L300.5 292c-4.2 4.2-11 4.2-15.2-.1l-74.1-74.7c-4.3-4.2-4.2-11 0-15.2z"]
- };
- var faVrCardboard = {
- prefix: 'fas',
- iconName: 'vr-cardboard',
- icon: [640, 512, [], "f729", "M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h160.22c25.19 0 48.03-14.77 58.36-37.74l27.74-61.64C286.21 331.08 302.35 320 320 320s33.79 11.08 41.68 28.62l27.74 61.64C399.75 433.23 422.6 448 447.78 448H608c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM160 304c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64zm320 0c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64z"]
- };
- var faWalking = {
- prefix: 'fas',
- iconName: 'walking',
- icon: [320, 512, [], "f554", "M208 96c26.5 0 48-21.5 48-48S234.5 0 208 0s-48 21.5-48 48 21.5 48 48 48zm94.5 149.1l-23.3-11.8-9.7-29.4c-14.7-44.6-55.7-75.8-102.2-75.9-36-.1-55.9 10.1-93.3 25.2-21.6 8.7-39.3 25.2-49.7 46.2L17.6 213c-7.8 15.8-1.5 35 14.2 42.9 15.6 7.9 34.6 1.5 42.5-14.3L81 228c3.5-7 9.3-12.5 16.5-15.4l26.8-10.8-15.2 60.7c-5.2 20.8.4 42.9 14.9 58.8l59.9 65.4c7.2 7.9 12.3 17.4 14.9 27.7l18.3 73.3c4.3 17.1 21.7 27.6 38.8 23.3 17.1-4.3 27.6-21.7 23.3-38.8l-22.2-89c-2.6-10.3-7.7-19.9-14.9-27.7l-45.5-49.7 17.2-68.7 5.5 16.5c5.3 16.1 16.7 29.4 31.7 37l23.3 11.8c15.6 7.9 34.6 1.5 42.5-14.3 7.7-15.7 1.4-35.1-14.3-43zM73.6 385.8c-3.2 8.1-8 15.4-14.2 21.5l-50 50.1c-12.5 12.5-12.5 32.8 0 45.3s32.7 12.5 45.2 0l59.4-59.4c6.1-6.1 10.9-13.4 14.2-21.5l13.5-33.8c-55.3-60.3-38.7-41.8-47.4-53.7l-20.7 51.5z"]
- };
- var faWallet = {
- prefix: 'fas',
- iconName: 'wallet',
- icon: [512, 512, [], "f555", "M461.2 128H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h384c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h397.2c28.02 0 50.8-21.53 50.8-48V176c0-26.47-22.78-48-50.8-48zM416 336c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"]
- };
- var faWarehouse = {
- prefix: 'fas',
- iconName: 'warehouse',
- icon: [640, 512, [], "f494", "M504 352H136.4c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0 96H136.1c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0-192H136.6c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm106.5-139L338.4 3.7a48.15 48.15 0 0 0-36.9 0L29.5 117C11.7 124.5 0 141.9 0 161.3V504c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V256c0-17.6 14.6-32 32.6-32h382.8c18 0 32.6 14.4 32.6 32v248c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V161.3c0-19.4-11.7-36.8-29.5-44.3z"]
- };
- var faWater = {
- prefix: 'fas',
- iconName: 'water',
- icon: [576, 512, [], "f773", "M562.1 383.9c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144C540.6 93.4 520 85.4 504.2 73 490.1 61.9 470 61.7 456 73c-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3z"]
- };
- var faWaveSquare = {
- prefix: 'fas',
- iconName: 'wave-square',
- icon: [640, 512, [], "f83e", "M476 480H324a36 36 0 0 1-36-36V96h-96v156a36 36 0 0 1-36 36H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h112V68a36 36 0 0 1 36-36h152a36 36 0 0 1 36 36v348h96V260a36 36 0 0 1 36-36h140a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H512v156a36 36 0 0 1-36 36z"]
- };
- var faWeight = {
- prefix: 'fas',
- iconName: 'weight',
- icon: [512, 512, [], "f496", "M448 64h-25.98C438.44 92.28 448 125.01 448 160c0 105.87-86.13 192-192 192S64 265.87 64 160c0-34.99 9.56-67.72 25.98-96H64C28.71 64 0 92.71 0 128v320c0 35.29 28.71 64 64 64h384c35.29 0 64-28.71 64-64V128c0-35.29-28.71-64-64-64zM256 320c88.37 0 160-71.63 160-160S344.37 0 256 0 96 71.63 96 160s71.63 160 160 160zm-.3-151.94l33.58-78.36c3.5-8.17 12.94-11.92 21.03-8.41 8.12 3.48 11.88 12.89 8.41 21l-33.67 78.55C291.73 188 296 197.45 296 208c0 22.09-17.91 40-40 40s-40-17.91-40-40c0-21.98 17.76-39.77 39.7-39.94z"]
- };
- var faWeightHanging = {
- prefix: 'fas',
- iconName: 'weight-hanging',
- icon: [512, 512, [], "f5cd", "M510.28 445.86l-73.03-292.13c-3.8-15.19-16.44-25.72-30.87-25.72h-60.25c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96s-96 42.98-96 96c0 11.28 2.3 21.95 5.88 32h-60.25c-14.43 0-27.08 10.54-30.87 25.72L1.72 445.86C-6.61 479.17 16.38 512 48.03 512h415.95c31.64 0 54.63-32.83 46.3-66.14zM256 128c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z"]
- };
- var faWheelchair = {
- prefix: 'fas',
- iconName: 'wheelchair',
- icon: [512, 512, [], "f193", "M496.101 385.669l14.227 28.663c3.929 7.915.697 17.516-7.218 21.445l-65.465 32.886c-16.049 7.967-35.556 1.194-43.189-15.055L331.679 320H192c-15.925 0-29.426-11.71-31.679-27.475C126.433 55.308 128.38 70.044 128 64c0-36.358 30.318-65.635 67.052-63.929 33.271 1.545 60.048 28.905 60.925 62.201.868 32.933-23.152 60.423-54.608 65.039l4.67 32.69H336c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H215.182l4.572 32H352a32 32 0 0 1 28.962 18.392L438.477 396.8l36.178-18.349c7.915-3.929 17.517-.697 21.446 7.218zM311.358 352h-24.506c-7.788 54.204-54.528 96-110.852 96-61.757 0-112-50.243-112-112 0-41.505 22.694-77.809 56.324-97.156-3.712-25.965-6.844-47.86-9.488-66.333C45.956 198.464 0 261.963 0 336c0 97.047 78.953 176 176 176 71.87 0 133.806-43.308 161.11-105.192L311.358 352z"]
- };
- var faWifi = {
- prefix: 'fas',
- iconName: 'wifi',
- icon: [640, 512, [], "f1eb", "M634.91 154.88C457.74-8.99 182.19-8.93 5.09 154.88c-6.66 6.16-6.79 16.59-.35 22.98l34.24 33.97c6.14 6.1 16.02 6.23 22.4.38 145.92-133.68 371.3-133.71 517.25 0 6.38 5.85 16.26 5.71 22.4-.38l34.24-33.97c6.43-6.39 6.3-16.82-.36-22.98zM320 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm202.67-83.59c-115.26-101.93-290.21-101.82-405.34 0-6.9 6.1-7.12 16.69-.57 23.15l34.44 33.99c6 5.92 15.66 6.32 22.05.8 83.95-72.57 209.74-72.41 293.49 0 6.39 5.52 16.05 5.13 22.05-.8l34.44-33.99c6.56-6.46 6.33-17.06-.56-23.15z"]
- };
- var faWind = {
- prefix: 'fas',
- iconName: 'wind',
- icon: [512, 512, [], "f72e", "M156.7 256H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h142.2c15.9 0 30.8 10.9 33.4 26.6 3.3 20-12.1 37.4-31.6 37.4-14.1 0-26.1-9.2-30.4-21.9-2.1-6.3-8.6-10.1-15.2-10.1H81.6c-9.8 0-17.7 8.8-15.9 18.4 8.6 44.1 47.6 77.6 94.2 77.6 57.1 0 102.7-50.1 95.2-108.6C249 291 205.4 256 156.7 256zM16 224h336c59.7 0 106.8-54.8 93.8-116.7-7.6-36.2-36.9-65.5-73.1-73.1-55.4-11.6-105.1 24.9-114.9 75.5-1.9 9.6 6.1 18.3 15.8 18.3h32.8c6.7 0 13.1-3.8 15.2-10.1C325.9 105.2 337.9 96 352 96c19.4 0 34.9 17.4 31.6 37.4-2.6 15.7-17.4 26.6-33.4 26.6H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16zm384 32H243.7c19.3 16.6 33.2 38.8 39.8 64H400c26.5 0 48 21.5 48 48s-21.5 48-48 48c-17.9 0-33.3-9.9-41.6-24.4-2.9-5-8.7-7.6-14.5-7.6h-33.8c-10.9 0-19 10.8-15.3 21.1 17.8 50.6 70.5 84.8 129.4 72.3 41.2-8.7 75.1-41.6 84.7-82.7C526 321.5 470.5 256 400 256z"]
- };
- var faWindowClose = {
- prefix: 'fas',
- iconName: 'window-close',
- icon: [512, 512, [], "f410", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-83.6 290.5c4.8 4.8 4.8 12.6 0 17.4l-40.5 40.5c-4.8 4.8-12.6 4.8-17.4 0L256 313.3l-66.5 67.1c-4.8 4.8-12.6 4.8-17.4 0l-40.5-40.5c-4.8-4.8-4.8-12.6 0-17.4l67.1-66.5-67.1-66.5c-4.8-4.8-4.8-12.6 0-17.4l40.5-40.5c4.8-4.8 12.6-4.8 17.4 0l66.5 67.1 66.5-67.1c4.8-4.8 12.6-4.8 17.4 0l40.5 40.5c4.8 4.8 4.8 12.6 0 17.4L313.3 256l67.1 66.5z"]
- };
- var faWindowMaximize = {
- prefix: 'fas',
- iconName: 'window-maximize',
- icon: [512, 512, [], "f2d0", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16 160H64v-84c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12v84z"]
- };
- var faWindowMinimize = {
- prefix: 'fas',
- iconName: 'window-minimize',
- icon: [512, 512, [], "f2d1", "M464 352H48c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48z"]
- };
- var faWindowRestore = {
- prefix: 'fas',
- iconName: 'window-restore',
- icon: [512, 512, [], "f2d2", "M512 48v288c0 26.5-21.5 48-48 48h-48V176c0-44.1-35.9-80-80-80H128V48c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zM384 176v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zm-68 28c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v52h252v-52z"]
- };
- var faWineBottle = {
- prefix: 'fas',
- iconName: 'wine-bottle',
- icon: [512, 512, [], "f72f", "M507.31 72.57L439.43 4.69c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l-76.67 76.67c-46.58-19.7-102.4-10.73-140.37 27.23L18.75 312.23c-24.99 24.99-24.99 65.52 0 90.51l90.51 90.51c24.99 24.99 65.52 24.99 90.51 0l158.39-158.39c37.96-37.96 46.93-93.79 27.23-140.37l76.67-76.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.24-6.24 6.24-16.37-.01-22.62zM179.22 423.29l-90.51-90.51 122.04-122.04 90.51 90.51-122.04 122.04z"]
- };
- var faWineGlass = {
- prefix: 'fas',
- iconName: 'wine-glass',
- icon: [288, 512, [], "f4e3", "M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40z"]
- };
- var faWineGlassAlt = {
- prefix: 'fas',
- iconName: 'wine-glass-alt',
- icon: [288, 512, [], "f5ce", "M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM61.75 48h164.5l7.17 80H54.58l7.17-80z"]
- };
- var faWonSign = {
- prefix: 'fas',
- iconName: 'won-sign',
- icon: [576, 512, [], "f159", "M564 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-48l18.6-80.6c1.7-7.5-4-14.7-11.7-14.7h-46.1c-5.7 0-10.6 4-11.7 9.5L450.7 128H340.8l-19.7-86c-1.3-5.5-6.1-9.3-11.7-9.3h-44c-5.6 0-10.4 3.8-11.7 9.3l-20 86H125l-17.5-85.7c-1.1-5.6-6.1-9.6-11.8-9.6H53.6c-7.7 0-13.4 7.1-11.7 14.6L60 128H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h62.3l7.2 32H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h83.9l40.9 182.6c1.2 5.5 6.1 9.4 11.7 9.4h56.8c5.6 0 10.4-3.9 11.7-9.3L259.3 288h55.1l42.4 182.7c1.3 5.4 6.1 9.3 11.7 9.3h56.8c5.6 0 10.4-3.9 11.7-9.3L479.1 288H564c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-70.1l7.4-32zM183.8 342c-6.2 25.8-6.8 47.2-7.3 47.2h-1.1s-1.7-22-6.8-47.2l-11-54h38.8zm27.5-118h-66.8l-6.5-32h80.8zm62.9 0l2-8.6c1.9-8 3.5-16 4.8-23.4h11.8c1.3 7.4 2.9 15.4 4.8 23.4l2 8.6zm130.9 118c-5.1 25.2-6.8 47.2-6.8 47.2h-1.1c-.6 0-1.1-21.4-7.3-47.2l-12.4-54h39.1zm25.2-118h-67.4l-7.3-32h81.6z"]
- };
- var faWrench = {
- prefix: 'fas',
- iconName: 'wrench',
- icon: [512, 512, [], "f0ad", "M507.73 109.1c-2.24-9.03-13.54-12.09-20.12-5.51l-74.36 74.36-67.88-11.31-11.31-67.88 74.36-74.36c6.62-6.62 3.43-17.9-5.66-20.16-47.38-11.74-99.55.91-136.58 37.93-39.64 39.64-50.55 97.1-34.05 147.2L18.74 402.76c-24.99 24.99-24.99 65.51 0 90.5 24.99 24.99 65.51 24.99 90.5 0l213.21-213.21c50.12 16.71 107.47 5.68 147.37-34.22 37.07-37.07 49.7-89.32 37.91-136.73zM64 472c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"]
- };
- var faXRay = {
- prefix: 'fas',
- iconName: 'x-ray',
- icon: [640, 512, [], "f497", "M240 384c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm160 32c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zM624 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zm0 448h-48V96H64v352H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM480 248c0 4.4-3.6 8-8 8H336v32h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h64c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48v-16h-64v16c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48h64v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-32H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h136v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-24c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v24h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h136c4.4 0 8 3.6 8 8v16z"]
- };
- var faYenSign = {
- prefix: 'fas',
- iconName: 'yen-sign',
- icon: [384, 512, [], "f157", "M351.2 32h-65.3c-4.6 0-8.8 2.6-10.8 6.7l-55.4 113.2c-14.5 34.7-27.1 71.9-27.1 71.9h-1.3s-12.6-37.2-27.1-71.9L108.8 38.7c-2-4.1-6.2-6.7-10.8-6.7H32.8c-9.1 0-14.8 9.7-10.6 17.6L102.3 200H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h88.2l19.8 37.2V320H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h108v92c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12v-92h108c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12H232v-26.8l19.8-37.2H340c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12h-58.3l80.1-150.4c4.3-7.9-1.5-17.6-10.6-17.6z"]
- };
- var faYinYang = {
- prefix: 'fas',
- iconName: 'yin-yang',
- icon: [496, 512, [], "f6ad", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 376c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-128c-53.02 0-96 42.98-96 96s42.98 96 96 96c-106.04 0-192-85.96-192-192S141.96 64 248 64c53.02 0 96 42.98 96 96s-42.98 96-96 96zm0-128c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z"]
- };
- var _iconsCache = {
- faAd: faAd,
- faAddressBook: faAddressBook,
- faAddressCard: faAddressCard,
- faAdjust: faAdjust,
- faAirFreshener: faAirFreshener,
- faAlignCenter: faAlignCenter,
- faAlignJustify: faAlignJustify,
- faAlignLeft: faAlignLeft,
- faAlignRight: faAlignRight,
- faAllergies: faAllergies,
- faAmbulance: faAmbulance,
- faAmericanSignLanguageInterpreting: faAmericanSignLanguageInterpreting,
- faAnchor: faAnchor,
- faAngleDoubleDown: faAngleDoubleDown,
- faAngleDoubleLeft: faAngleDoubleLeft,
- faAngleDoubleRight: faAngleDoubleRight,
- faAngleDoubleUp: faAngleDoubleUp,
- faAngleDown: faAngleDown,
- faAngleLeft: faAngleLeft,
- faAngleRight: faAngleRight,
- faAngleUp: faAngleUp,
- faAngry: faAngry,
- faAnkh: faAnkh,
- faAppleAlt: faAppleAlt,
- faArchive: faArchive,
- faArchway: faArchway,
- faArrowAltCircleDown: faArrowAltCircleDown,
- faArrowAltCircleLeft: faArrowAltCircleLeft,
- faArrowAltCircleRight: faArrowAltCircleRight,
- faArrowAltCircleUp: faArrowAltCircleUp,
- faArrowCircleDown: faArrowCircleDown,
- faArrowCircleLeft: faArrowCircleLeft,
- faArrowCircleRight: faArrowCircleRight,
- faArrowCircleUp: faArrowCircleUp,
- faArrowDown: faArrowDown,
- faArrowLeft: faArrowLeft,
- faArrowRight: faArrowRight,
- faArrowUp: faArrowUp,
- faArrowsAlt: faArrowsAlt,
- faArrowsAltH: faArrowsAltH,
- faArrowsAltV: faArrowsAltV,
- faAssistiveListeningSystems: faAssistiveListeningSystems,
- faAsterisk: faAsterisk,
- faAt: faAt,
- faAtlas: faAtlas,
- faAtom: faAtom,
- faAudioDescription: faAudioDescription,
- faAward: faAward,
- faBaby: faBaby,
- faBabyCarriage: faBabyCarriage,
- faBackspace: faBackspace,
- faBackward: faBackward,
- faBacon: faBacon,
- faBacteria: faBacteria,
- faBacterium: faBacterium,
- faBahai: faBahai,
- faBalanceScale: faBalanceScale,
- faBalanceScaleLeft: faBalanceScaleLeft,
- faBalanceScaleRight: faBalanceScaleRight,
- faBan: faBan,
- faBandAid: faBandAid,
- faBarcode: faBarcode,
- faBars: faBars,
- faBaseballBall: faBaseballBall,
- faBasketballBall: faBasketballBall,
- faBath: faBath,
- faBatteryEmpty: faBatteryEmpty,
- faBatteryFull: faBatteryFull,
- faBatteryHalf: faBatteryHalf,
- faBatteryQuarter: faBatteryQuarter,
- faBatteryThreeQuarters: faBatteryThreeQuarters,
- faBed: faBed,
- faBeer: faBeer,
- faBell: faBell,
- faBellSlash: faBellSlash,
- faBezierCurve: faBezierCurve,
- faBible: faBible,
- faBicycle: faBicycle,
- faBiking: faBiking,
- faBinoculars: faBinoculars,
- faBiohazard: faBiohazard,
- faBirthdayCake: faBirthdayCake,
- faBlender: faBlender,
- faBlenderPhone: faBlenderPhone,
- faBlind: faBlind,
- faBlog: faBlog,
- faBold: faBold,
- faBolt: faBolt,
- faBomb: faBomb,
- faBone: faBone,
- faBong: faBong,
- faBook: faBook,
- faBookDead: faBookDead,
- faBookMedical: faBookMedical,
- faBookOpen: faBookOpen,
- faBookReader: faBookReader,
- faBookmark: faBookmark,
- faBorderAll: faBorderAll,
- faBorderNone: faBorderNone,
- faBorderStyle: faBorderStyle,
- faBowlingBall: faBowlingBall,
- faBox: faBox,
- faBoxOpen: faBoxOpen,
- faBoxTissue: faBoxTissue,
- faBoxes: faBoxes,
- faBraille: faBraille,
- faBrain: faBrain,
- faBreadSlice: faBreadSlice,
- faBriefcase: faBriefcase,
- faBriefcaseMedical: faBriefcaseMedical,
- faBroadcastTower: faBroadcastTower,
- faBroom: faBroom,
- faBrush: faBrush,
- faBug: faBug,
- faBuilding: faBuilding,
- faBullhorn: faBullhorn,
- faBullseye: faBullseye,
- faBurn: faBurn,
- faBus: faBus,
- faBusAlt: faBusAlt,
- faBusinessTime: faBusinessTime,
- faCalculator: faCalculator,
- faCalendar: faCalendar,
- faCalendarAlt: faCalendarAlt,
- faCalendarCheck: faCalendarCheck,
- faCalendarDay: faCalendarDay,
- faCalendarMinus: faCalendarMinus,
- faCalendarPlus: faCalendarPlus,
- faCalendarTimes: faCalendarTimes,
- faCalendarWeek: faCalendarWeek,
- faCamera: faCamera,
- faCameraRetro: faCameraRetro,
- faCampground: faCampground,
- faCandyCane: faCandyCane,
- faCannabis: faCannabis,
- faCapsules: faCapsules,
- faCar: faCar,
- faCarAlt: faCarAlt,
- faCarBattery: faCarBattery,
- faCarCrash: faCarCrash,
- faCarSide: faCarSide,
- faCaravan: faCaravan,
- faCaretDown: faCaretDown,
- faCaretLeft: faCaretLeft,
- faCaretRight: faCaretRight,
- faCaretSquareDown: faCaretSquareDown,
- faCaretSquareLeft: faCaretSquareLeft,
- faCaretSquareRight: faCaretSquareRight,
- faCaretSquareUp: faCaretSquareUp,
- faCaretUp: faCaretUp,
- faCarrot: faCarrot,
- faCartArrowDown: faCartArrowDown,
- faCartPlus: faCartPlus,
- faCashRegister: faCashRegister,
- faCat: faCat,
- faCertificate: faCertificate,
- faChair: faChair,
- faChalkboard: faChalkboard,
- faChalkboardTeacher: faChalkboardTeacher,
- faChargingStation: faChargingStation,
- faChartArea: faChartArea,
- faChartBar: faChartBar,
- faChartLine: faChartLine,
- faChartPie: faChartPie,
- faCheck: faCheck,
- faCheckCircle: faCheckCircle,
- faCheckDouble: faCheckDouble,
- faCheckSquare: faCheckSquare,
- faCheese: faCheese,
- faChess: faChess,
- faChessBishop: faChessBishop,
- faChessBoard: faChessBoard,
- faChessKing: faChessKing,
- faChessKnight: faChessKnight,
- faChessPawn: faChessPawn,
- faChessQueen: faChessQueen,
- faChessRook: faChessRook,
- faChevronCircleDown: faChevronCircleDown,
- faChevronCircleLeft: faChevronCircleLeft,
- faChevronCircleRight: faChevronCircleRight,
- faChevronCircleUp: faChevronCircleUp,
- faChevronDown: faChevronDown,
- faChevronLeft: faChevronLeft,
- faChevronRight: faChevronRight,
- faChevronUp: faChevronUp,
- faChild: faChild,
- faChurch: faChurch,
- faCircle: faCircle,
- faCircleNotch: faCircleNotch,
- faCity: faCity,
- faClinicMedical: faClinicMedical,
- faClipboard: faClipboard,
- faClipboardCheck: faClipboardCheck,
- faClipboardList: faClipboardList,
- faClock: faClock,
- faClone: faClone,
- faClosedCaptioning: faClosedCaptioning,
- faCloud: faCloud,
- faCloudDownloadAlt: faCloudDownloadAlt,
- faCloudMeatball: faCloudMeatball,
- faCloudMoon: faCloudMoon,
- faCloudMoonRain: faCloudMoonRain,
- faCloudRain: faCloudRain,
- faCloudShowersHeavy: faCloudShowersHeavy,
- faCloudSun: faCloudSun,
- faCloudSunRain: faCloudSunRain,
- faCloudUploadAlt: faCloudUploadAlt,
- faCocktail: faCocktail,
- faCode: faCode,
- faCodeBranch: faCodeBranch,
- faCoffee: faCoffee,
- faCog: faCog,
- faCogs: faCogs,
- faCoins: faCoins,
- faColumns: faColumns,
- faComment: faComment,
- faCommentAlt: faCommentAlt,
- faCommentDollar: faCommentDollar,
- faCommentDots: faCommentDots,
- faCommentMedical: faCommentMedical,
- faCommentSlash: faCommentSlash,
- faComments: faComments,
- faCommentsDollar: faCommentsDollar,
- faCompactDisc: faCompactDisc,
- faCompass: faCompass,
- faCompress: faCompress,
- faCompressAlt: faCompressAlt,
- faCompressArrowsAlt: faCompressArrowsAlt,
- faConciergeBell: faConciergeBell,
- faCookie: faCookie,
- faCookieBite: faCookieBite,
- faCopy: faCopy,
- faCopyright: faCopyright,
- faCouch: faCouch,
- faCreditCard: faCreditCard,
- faCrop: faCrop,
- faCropAlt: faCropAlt,
- faCross: faCross,
- faCrosshairs: faCrosshairs,
- faCrow: faCrow,
- faCrown: faCrown,
- faCrutch: faCrutch,
- faCube: faCube,
- faCubes: faCubes,
- faCut: faCut,
- faDatabase: faDatabase,
- faDeaf: faDeaf,
- faDemocrat: faDemocrat,
- faDesktop: faDesktop,
- faDharmachakra: faDharmachakra,
- faDiagnoses: faDiagnoses,
- faDice: faDice,
- faDiceD20: faDiceD20,
- faDiceD6: faDiceD6,
- faDiceFive: faDiceFive,
- faDiceFour: faDiceFour,
- faDiceOne: faDiceOne,
- faDiceSix: faDiceSix,
- faDiceThree: faDiceThree,
- faDiceTwo: faDiceTwo,
- faDigitalTachograph: faDigitalTachograph,
- faDirections: faDirections,
- faDisease: faDisease,
- faDivide: faDivide,
- faDizzy: faDizzy,
- faDna: faDna,
- faDog: faDog,
- faDollarSign: faDollarSign,
- faDolly: faDolly,
- faDollyFlatbed: faDollyFlatbed,
- faDonate: faDonate,
- faDoorClosed: faDoorClosed,
- faDoorOpen: faDoorOpen,
- faDotCircle: faDotCircle,
- faDove: faDove,
- faDownload: faDownload,
- faDraftingCompass: faDraftingCompass,
- faDragon: faDragon,
- faDrawPolygon: faDrawPolygon,
- faDrum: faDrum,
- faDrumSteelpan: faDrumSteelpan,
- faDrumstickBite: faDrumstickBite,
- faDumbbell: faDumbbell,
- faDumpster: faDumpster,
- faDumpsterFire: faDumpsterFire,
- faDungeon: faDungeon,
- faEdit: faEdit,
- faEgg: faEgg,
- faEject: faEject,
- faEllipsisH: faEllipsisH,
- faEllipsisV: faEllipsisV,
- faEnvelope: faEnvelope,
- faEnvelopeOpen: faEnvelopeOpen,
- faEnvelopeOpenText: faEnvelopeOpenText,
- faEnvelopeSquare: faEnvelopeSquare,
- faEquals: faEquals,
- faEraser: faEraser,
- faEthernet: faEthernet,
- faEuroSign: faEuroSign,
- faExchangeAlt: faExchangeAlt,
- faExclamation: faExclamation,
- faExclamationCircle: faExclamationCircle,
- faExclamationTriangle: faExclamationTriangle,
- faExpand: faExpand,
- faExpandAlt: faExpandAlt,
- faExpandArrowsAlt: faExpandArrowsAlt,
- faExternalLinkAlt: faExternalLinkAlt,
- faExternalLinkSquareAlt: faExternalLinkSquareAlt,
- faEye: faEye,
- faEyeDropper: faEyeDropper,
- faEyeSlash: faEyeSlash,
- faFan: faFan,
- faFastBackward: faFastBackward,
- faFastForward: faFastForward,
- faFaucet: faFaucet,
- faFax: faFax,
- faFeather: faFeather,
- faFeatherAlt: faFeatherAlt,
- faFemale: faFemale,
- faFighterJet: faFighterJet,
- faFile: faFile,
- faFileAlt: faFileAlt,
- faFileArchive: faFileArchive,
- faFileAudio: faFileAudio,
- faFileCode: faFileCode,
- faFileContract: faFileContract,
- faFileCsv: faFileCsv,
- faFileDownload: faFileDownload,
- faFileExcel: faFileExcel,
- faFileExport: faFileExport,
- faFileImage: faFileImage,
- faFileImport: faFileImport,
- faFileInvoice: faFileInvoice,
- faFileInvoiceDollar: faFileInvoiceDollar,
- faFileMedical: faFileMedical,
- faFileMedicalAlt: faFileMedicalAlt,
- faFilePdf: faFilePdf,
- faFilePowerpoint: faFilePowerpoint,
- faFilePrescription: faFilePrescription,
- faFileSignature: faFileSignature,
- faFileUpload: faFileUpload,
- faFileVideo: faFileVideo,
- faFileWord: faFileWord,
- faFill: faFill,
- faFillDrip: faFillDrip,
- faFilm: faFilm,
- faFilter: faFilter,
- faFingerprint: faFingerprint,
- faFire: faFire,
- faFireAlt: faFireAlt,
- faFireExtinguisher: faFireExtinguisher,
- faFirstAid: faFirstAid,
- faFish: faFish,
- faFistRaised: faFistRaised,
- faFlag: faFlag,
- faFlagCheckered: faFlagCheckered,
- faFlagUsa: faFlagUsa,
- faFlask: faFlask,
- faFlushed: faFlushed,
- faFolder: faFolder,
- faFolderMinus: faFolderMinus,
- faFolderOpen: faFolderOpen,
- faFolderPlus: faFolderPlus,
- faFont: faFont,
- faFontAwesomeLogoFull: faFontAwesomeLogoFull,
- faFootballBall: faFootballBall,
- faForward: faForward,
- faFrog: faFrog,
- faFrown: faFrown,
- faFrownOpen: faFrownOpen,
- faFunnelDollar: faFunnelDollar,
- faFutbol: faFutbol,
- faGamepad: faGamepad,
- faGasPump: faGasPump,
- faGavel: faGavel,
- faGem: faGem,
- faGenderless: faGenderless,
- faGhost: faGhost,
- faGift: faGift,
- faGifts: faGifts,
- faGlassCheers: faGlassCheers,
- faGlassMartini: faGlassMartini,
- faGlassMartiniAlt: faGlassMartiniAlt,
- faGlassWhiskey: faGlassWhiskey,
- faGlasses: faGlasses,
- faGlobe: faGlobe,
- faGlobeAfrica: faGlobeAfrica,
- faGlobeAmericas: faGlobeAmericas,
- faGlobeAsia: faGlobeAsia,
- faGlobeEurope: faGlobeEurope,
- faGolfBall: faGolfBall,
- faGopuram: faGopuram,
- faGraduationCap: faGraduationCap,
- faGreaterThan: faGreaterThan,
- faGreaterThanEqual: faGreaterThanEqual,
- faGrimace: faGrimace,
- faGrin: faGrin,
- faGrinAlt: faGrinAlt,
- faGrinBeam: faGrinBeam,
- faGrinBeamSweat: faGrinBeamSweat,
- faGrinHearts: faGrinHearts,
- faGrinSquint: faGrinSquint,
- faGrinSquintTears: faGrinSquintTears,
- faGrinStars: faGrinStars,
- faGrinTears: faGrinTears,
- faGrinTongue: faGrinTongue,
- faGrinTongueSquint: faGrinTongueSquint,
- faGrinTongueWink: faGrinTongueWink,
- faGrinWink: faGrinWink,
- faGripHorizontal: faGripHorizontal,
- faGripLines: faGripLines,
- faGripLinesVertical: faGripLinesVertical,
- faGripVertical: faGripVertical,
- faGuitar: faGuitar,
- faHSquare: faHSquare,
- faHamburger: faHamburger,
- faHammer: faHammer,
- faHamsa: faHamsa,
- faHandHolding: faHandHolding,
- faHandHoldingHeart: faHandHoldingHeart,
- faHandHoldingMedical: faHandHoldingMedical,
- faHandHoldingUsd: faHandHoldingUsd,
- faHandHoldingWater: faHandHoldingWater,
- faHandLizard: faHandLizard,
- faHandMiddleFinger: faHandMiddleFinger,
- faHandPaper: faHandPaper,
- faHandPeace: faHandPeace,
- faHandPointDown: faHandPointDown,
- faHandPointLeft: faHandPointLeft,
- faHandPointRight: faHandPointRight,
- faHandPointUp: faHandPointUp,
- faHandPointer: faHandPointer,
- faHandRock: faHandRock,
- faHandScissors: faHandScissors,
- faHandSparkles: faHandSparkles,
- faHandSpock: faHandSpock,
- faHands: faHands,
- faHandsHelping: faHandsHelping,
- faHandsWash: faHandsWash,
- faHandshake: faHandshake,
- faHandshakeAltSlash: faHandshakeAltSlash,
- faHandshakeSlash: faHandshakeSlash,
- faHanukiah: faHanukiah,
- faHardHat: faHardHat,
- faHashtag: faHashtag,
- faHatCowboy: faHatCowboy,
- faHatCowboySide: faHatCowboySide,
- faHatWizard: faHatWizard,
- faHdd: faHdd,
- faHeadSideCough: faHeadSideCough,
- faHeadSideCoughSlash: faHeadSideCoughSlash,
- faHeadSideMask: faHeadSideMask,
- faHeadSideVirus: faHeadSideVirus,
- faHeading: faHeading,
- faHeadphones: faHeadphones,
- faHeadphonesAlt: faHeadphonesAlt,
- faHeadset: faHeadset,
- faHeart: faHeart,
- faHeartBroken: faHeartBroken,
- faHeartbeat: faHeartbeat,
- faHelicopter: faHelicopter,
- faHighlighter: faHighlighter,
- faHiking: faHiking,
- faHippo: faHippo,
- faHistory: faHistory,
- faHockeyPuck: faHockeyPuck,
- faHollyBerry: faHollyBerry,
- faHome: faHome,
- faHorse: faHorse,
- faHorseHead: faHorseHead,
- faHospital: faHospital,
- faHospitalAlt: faHospitalAlt,
- faHospitalSymbol: faHospitalSymbol,
- faHospitalUser: faHospitalUser,
- faHotTub: faHotTub,
- faHotdog: faHotdog,
- faHotel: faHotel,
- faHourglass: faHourglass,
- faHourglassEnd: faHourglassEnd,
- faHourglassHalf: faHourglassHalf,
- faHourglassStart: faHourglassStart,
- faHouseDamage: faHouseDamage,
- faHouseUser: faHouseUser,
- faHryvnia: faHryvnia,
- faICursor: faICursor,
- faIceCream: faIceCream,
- faIcicles: faIcicles,
- faIcons: faIcons,
- faIdBadge: faIdBadge,
- faIdCard: faIdCard,
- faIdCardAlt: faIdCardAlt,
- faIgloo: faIgloo,
- faImage: faImage,
- faImages: faImages,
- faInbox: faInbox,
- faIndent: faIndent,
- faIndustry: faIndustry,
- faInfinity: faInfinity,
- faInfo: faInfo,
- faInfoCircle: faInfoCircle,
- faItalic: faItalic,
- faJedi: faJedi,
- faJoint: faJoint,
- faJournalWhills: faJournalWhills,
- faKaaba: faKaaba,
- faKey: faKey,
- faKeyboard: faKeyboard,
- faKhanda: faKhanda,
- faKiss: faKiss,
- faKissBeam: faKissBeam,
- faKissWinkHeart: faKissWinkHeart,
- faKiwiBird: faKiwiBird,
- faLandmark: faLandmark,
- faLanguage: faLanguage,
- faLaptop: faLaptop,
- faLaptopCode: faLaptopCode,
- faLaptopHouse: faLaptopHouse,
- faLaptopMedical: faLaptopMedical,
- faLaugh: faLaugh,
- faLaughBeam: faLaughBeam,
- faLaughSquint: faLaughSquint,
- faLaughWink: faLaughWink,
- faLayerGroup: faLayerGroup,
- faLeaf: faLeaf,
- faLemon: faLemon,
- faLessThan: faLessThan,
- faLessThanEqual: faLessThanEqual,
- faLevelDownAlt: faLevelDownAlt,
- faLevelUpAlt: faLevelUpAlt,
- faLifeRing: faLifeRing,
- faLightbulb: faLightbulb,
- faLink: faLink,
- faLiraSign: faLiraSign,
- faList: faList,
- faListAlt: faListAlt,
- faListOl: faListOl,
- faListUl: faListUl,
- faLocationArrow: faLocationArrow,
- faLock: faLock,
- faLockOpen: faLockOpen,
- faLongArrowAltDown: faLongArrowAltDown,
- faLongArrowAltLeft: faLongArrowAltLeft,
- faLongArrowAltRight: faLongArrowAltRight,
- faLongArrowAltUp: faLongArrowAltUp,
- faLowVision: faLowVision,
- faLuggageCart: faLuggageCart,
- faLungs: faLungs,
- faLungsVirus: faLungsVirus,
- faMagic: faMagic,
- faMagnet: faMagnet,
- faMailBulk: faMailBulk,
- faMale: faMale,
- faMap: faMap,
- faMapMarked: faMapMarked,
- faMapMarkedAlt: faMapMarkedAlt,
- faMapMarker: faMapMarker,
- faMapMarkerAlt: faMapMarkerAlt,
- faMapPin: faMapPin,
- faMapSigns: faMapSigns,
- faMarker: faMarker,
- faMars: faMars,
- faMarsDouble: faMarsDouble,
- faMarsStroke: faMarsStroke,
- faMarsStrokeH: faMarsStrokeH,
- faMarsStrokeV: faMarsStrokeV,
- faMask: faMask,
- faMedal: faMedal,
- faMedkit: faMedkit,
- faMeh: faMeh,
- faMehBlank: faMehBlank,
- faMehRollingEyes: faMehRollingEyes,
- faMemory: faMemory,
- faMenorah: faMenorah,
- faMercury: faMercury,
- faMeteor: faMeteor,
- faMicrochip: faMicrochip,
- faMicrophone: faMicrophone,
- faMicrophoneAlt: faMicrophoneAlt,
- faMicrophoneAltSlash: faMicrophoneAltSlash,
- faMicrophoneSlash: faMicrophoneSlash,
- faMicroscope: faMicroscope,
- faMinus: faMinus,
- faMinusCircle: faMinusCircle,
- faMinusSquare: faMinusSquare,
- faMitten: faMitten,
- faMobile: faMobile,
- faMobileAlt: faMobileAlt,
- faMoneyBill: faMoneyBill,
- faMoneyBillAlt: faMoneyBillAlt,
- faMoneyBillWave: faMoneyBillWave,
- faMoneyBillWaveAlt: faMoneyBillWaveAlt,
- faMoneyCheck: faMoneyCheck,
- faMoneyCheckAlt: faMoneyCheckAlt,
- faMonument: faMonument,
- faMoon: faMoon,
- faMortarPestle: faMortarPestle,
- faMosque: faMosque,
- faMotorcycle: faMotorcycle,
- faMountain: faMountain,
- faMouse: faMouse,
- faMousePointer: faMousePointer,
- faMugHot: faMugHot,
- faMusic: faMusic,
- faNetworkWired: faNetworkWired,
- faNeuter: faNeuter,
- faNewspaper: faNewspaper,
- faNotEqual: faNotEqual,
- faNotesMedical: faNotesMedical,
- faObjectGroup: faObjectGroup,
- faObjectUngroup: faObjectUngroup,
- faOilCan: faOilCan,
- faOm: faOm,
- faOtter: faOtter,
- faOutdent: faOutdent,
- faPager: faPager,
- faPaintBrush: faPaintBrush,
- faPaintRoller: faPaintRoller,
- faPalette: faPalette,
- faPallet: faPallet,
- faPaperPlane: faPaperPlane,
- faPaperclip: faPaperclip,
- faParachuteBox: faParachuteBox,
- faParagraph: faParagraph,
- faParking: faParking,
- faPassport: faPassport,
- faPastafarianism: faPastafarianism,
- faPaste: faPaste,
- faPause: faPause,
- faPauseCircle: faPauseCircle,
- faPaw: faPaw,
- faPeace: faPeace,
- faPen: faPen,
- faPenAlt: faPenAlt,
- faPenFancy: faPenFancy,
- faPenNib: faPenNib,
- faPenSquare: faPenSquare,
- faPencilAlt: faPencilAlt,
- faPencilRuler: faPencilRuler,
- faPeopleArrows: faPeopleArrows,
- faPeopleCarry: faPeopleCarry,
- faPepperHot: faPepperHot,
- faPercent: faPercent,
- faPercentage: faPercentage,
- faPersonBooth: faPersonBooth,
- faPhone: faPhone,
- faPhoneAlt: faPhoneAlt,
- faPhoneSlash: faPhoneSlash,
- faPhoneSquare: faPhoneSquare,
- faPhoneSquareAlt: faPhoneSquareAlt,
- faPhoneVolume: faPhoneVolume,
- faPhotoVideo: faPhotoVideo,
- faPiggyBank: faPiggyBank,
- faPills: faPills,
- faPizzaSlice: faPizzaSlice,
- faPlaceOfWorship: faPlaceOfWorship,
- faPlane: faPlane,
- faPlaneArrival: faPlaneArrival,
- faPlaneDeparture: faPlaneDeparture,
- faPlaneSlash: faPlaneSlash,
- faPlay: faPlay,
- faPlayCircle: faPlayCircle,
- faPlug: faPlug,
- faPlus: faPlus,
- faPlusCircle: faPlusCircle,
- faPlusSquare: faPlusSquare,
- faPodcast: faPodcast,
- faPoll: faPoll,
- faPollH: faPollH,
- faPoo: faPoo,
- faPooStorm: faPooStorm,
- faPoop: faPoop,
- faPortrait: faPortrait,
- faPoundSign: faPoundSign,
- faPowerOff: faPowerOff,
- faPray: faPray,
- faPrayingHands: faPrayingHands,
- faPrescription: faPrescription,
- faPrescriptionBottle: faPrescriptionBottle,
- faPrescriptionBottleAlt: faPrescriptionBottleAlt,
- faPrint: faPrint,
- faProcedures: faProcedures,
- faProjectDiagram: faProjectDiagram,
- faPumpMedical: faPumpMedical,
- faPumpSoap: faPumpSoap,
- faPuzzlePiece: faPuzzlePiece,
- faQrcode: faQrcode,
- faQuestion: faQuestion,
- faQuestionCircle: faQuestionCircle,
- faQuidditch: faQuidditch,
- faQuoteLeft: faQuoteLeft,
- faQuoteRight: faQuoteRight,
- faQuran: faQuran,
- faRadiation: faRadiation,
- faRadiationAlt: faRadiationAlt,
- faRainbow: faRainbow,
- faRandom: faRandom,
- faReceipt: faReceipt,
- faRecordVinyl: faRecordVinyl,
- faRecycle: faRecycle,
- faRedo: faRedo,
- faRedoAlt: faRedoAlt,
- faRegistered: faRegistered,
- faRemoveFormat: faRemoveFormat,
- faReply: faReply,
- faReplyAll: faReplyAll,
- faRepublican: faRepublican,
- faRestroom: faRestroom,
- faRetweet: faRetweet,
- faRibbon: faRibbon,
- faRing: faRing,
- faRoad: faRoad,
- faRobot: faRobot,
- faRocket: faRocket,
- faRoute: faRoute,
- faRss: faRss,
- faRssSquare: faRssSquare,
- faRubleSign: faRubleSign,
- faRuler: faRuler,
- faRulerCombined: faRulerCombined,
- faRulerHorizontal: faRulerHorizontal,
- faRulerVertical: faRulerVertical,
- faRunning: faRunning,
- faRupeeSign: faRupeeSign,
- faSadCry: faSadCry,
- faSadTear: faSadTear,
- faSatellite: faSatellite,
- faSatelliteDish: faSatelliteDish,
- faSave: faSave,
- faSchool: faSchool,
- faScrewdriver: faScrewdriver,
- faScroll: faScroll,
- faSdCard: faSdCard,
- faSearch: faSearch,
- faSearchDollar: faSearchDollar,
- faSearchLocation: faSearchLocation,
- faSearchMinus: faSearchMinus,
- faSearchPlus: faSearchPlus,
- faSeedling: faSeedling,
- faServer: faServer,
- faShapes: faShapes,
- faShare: faShare,
- faShareAlt: faShareAlt,
- faShareAltSquare: faShareAltSquare,
- faShareSquare: faShareSquare,
- faShekelSign: faShekelSign,
- faShieldAlt: faShieldAlt,
- faShieldVirus: faShieldVirus,
- faShip: faShip,
- faShippingFast: faShippingFast,
- faShoePrints: faShoePrints,
- faShoppingBag: faShoppingBag,
- faShoppingBasket: faShoppingBasket,
- faShoppingCart: faShoppingCart,
- faShower: faShower,
- faShuttleVan: faShuttleVan,
- faSign: faSign,
- faSignInAlt: faSignInAlt,
- faSignLanguage: faSignLanguage,
- faSignOutAlt: faSignOutAlt,
- faSignal: faSignal,
- faSignature: faSignature,
- faSimCard: faSimCard,
- faSink: faSink,
- faSitemap: faSitemap,
- faSkating: faSkating,
- faSkiing: faSkiing,
- faSkiingNordic: faSkiingNordic,
- faSkull: faSkull,
- faSkullCrossbones: faSkullCrossbones,
- faSlash: faSlash,
- faSleigh: faSleigh,
- faSlidersH: faSlidersH,
- faSmile: faSmile,
- faSmileBeam: faSmileBeam,
- faSmileWink: faSmileWink,
- faSmog: faSmog,
- faSmoking: faSmoking,
- faSmokingBan: faSmokingBan,
- faSms: faSms,
- faSnowboarding: faSnowboarding,
- faSnowflake: faSnowflake,
- faSnowman: faSnowman,
- faSnowplow: faSnowplow,
- faSoap: faSoap,
- faSocks: faSocks,
- faSolarPanel: faSolarPanel,
- faSort: faSort,
- faSortAlphaDown: faSortAlphaDown,
- faSortAlphaDownAlt: faSortAlphaDownAlt,
- faSortAlphaUp: faSortAlphaUp,
- faSortAlphaUpAlt: faSortAlphaUpAlt,
- faSortAmountDown: faSortAmountDown,
- faSortAmountDownAlt: faSortAmountDownAlt,
- faSortAmountUp: faSortAmountUp,
- faSortAmountUpAlt: faSortAmountUpAlt,
- faSortDown: faSortDown,
- faSortNumericDown: faSortNumericDown,
- faSortNumericDownAlt: faSortNumericDownAlt,
- faSortNumericUp: faSortNumericUp,
- faSortNumericUpAlt: faSortNumericUpAlt,
- faSortUp: faSortUp,
- faSpa: faSpa,
- faSpaceShuttle: faSpaceShuttle,
- faSpellCheck: faSpellCheck,
- faSpider: faSpider,
- faSpinner: faSpinner,
- faSplotch: faSplotch,
- faSprayCan: faSprayCan,
- faSquare: faSquare,
- faSquareFull: faSquareFull,
- faSquareRootAlt: faSquareRootAlt,
- faStamp: faStamp,
- faStar: faStar,
- faStarAndCrescent: faStarAndCrescent,
- faStarHalf: faStarHalf,
- faStarHalfAlt: faStarHalfAlt,
- faStarOfDavid: faStarOfDavid,
- faStarOfLife: faStarOfLife,
- faStepBackward: faStepBackward,
- faStepForward: faStepForward,
- faStethoscope: faStethoscope,
- faStickyNote: faStickyNote,
- faStop: faStop,
- faStopCircle: faStopCircle,
- faStopwatch: faStopwatch,
- faStopwatch20: faStopwatch20,
- faStore: faStore,
- faStoreAlt: faStoreAlt,
- faStoreAltSlash: faStoreAltSlash,
- faStoreSlash: faStoreSlash,
- faStream: faStream,
- faStreetView: faStreetView,
- faStrikethrough: faStrikethrough,
- faStroopwafel: faStroopwafel,
- faSubscript: faSubscript,
- faSubway: faSubway,
- faSuitcase: faSuitcase,
- faSuitcaseRolling: faSuitcaseRolling,
- faSun: faSun,
- faSuperscript: faSuperscript,
- faSurprise: faSurprise,
- faSwatchbook: faSwatchbook,
- faSwimmer: faSwimmer,
- faSwimmingPool: faSwimmingPool,
- faSynagogue: faSynagogue,
- faSync: faSync,
- faSyncAlt: faSyncAlt,
- faSyringe: faSyringe,
- faTable: faTable,
- faTableTennis: faTableTennis,
- faTablet: faTablet,
- faTabletAlt: faTabletAlt,
- faTablets: faTablets,
- faTachometerAlt: faTachometerAlt,
- faTag: faTag,
- faTags: faTags,
- faTape: faTape,
- faTasks: faTasks,
- faTaxi: faTaxi,
- faTeeth: faTeeth,
- faTeethOpen: faTeethOpen,
- faTemperatureHigh: faTemperatureHigh,
- faTemperatureLow: faTemperatureLow,
- faTenge: faTenge,
- faTerminal: faTerminal,
- faTextHeight: faTextHeight,
- faTextWidth: faTextWidth,
- faTh: faTh,
- faThLarge: faThLarge,
- faThList: faThList,
- faTheaterMasks: faTheaterMasks,
- faThermometer: faThermometer,
- faThermometerEmpty: faThermometerEmpty,
- faThermometerFull: faThermometerFull,
- faThermometerHalf: faThermometerHalf,
- faThermometerQuarter: faThermometerQuarter,
- faThermometerThreeQuarters: faThermometerThreeQuarters,
- faThumbsDown: faThumbsDown,
- faThumbsUp: faThumbsUp,
- faThumbtack: faThumbtack,
- faTicketAlt: faTicketAlt,
- faTimes: faTimes,
- faTimesCircle: faTimesCircle,
- faTint: faTint,
- faTintSlash: faTintSlash,
- faTired: faTired,
- faToggleOff: faToggleOff,
- faToggleOn: faToggleOn,
- faToilet: faToilet,
- faToiletPaper: faToiletPaper,
- faToiletPaperSlash: faToiletPaperSlash,
- faToolbox: faToolbox,
- faTools: faTools,
- faTooth: faTooth,
- faTorah: faTorah,
- faToriiGate: faToriiGate,
- faTractor: faTractor,
- faTrademark: faTrademark,
- faTrafficLight: faTrafficLight,
- faTrailer: faTrailer,
- faTrain: faTrain,
- faTram: faTram,
- faTransgender: faTransgender,
- faTransgenderAlt: faTransgenderAlt,
- faTrash: faTrash,
- faTrashAlt: faTrashAlt,
- faTrashRestore: faTrashRestore,
- faTrashRestoreAlt: faTrashRestoreAlt,
- faTree: faTree,
- faTrophy: faTrophy,
- faTruck: faTruck,
- faTruckLoading: faTruckLoading,
- faTruckMonster: faTruckMonster,
- faTruckMoving: faTruckMoving,
- faTruckPickup: faTruckPickup,
- faTshirt: faTshirt,
- faTty: faTty,
- faTv: faTv,
- faUmbrella: faUmbrella,
- faUmbrellaBeach: faUmbrellaBeach,
- faUnderline: faUnderline,
- faUndo: faUndo,
- faUndoAlt: faUndoAlt,
- faUniversalAccess: faUniversalAccess,
- faUniversity: faUniversity,
- faUnlink: faUnlink,
- faUnlock: faUnlock,
- faUnlockAlt: faUnlockAlt,
- faUpload: faUpload,
- faUser: faUser,
- faUserAlt: faUserAlt,
- faUserAltSlash: faUserAltSlash,
- faUserAstronaut: faUserAstronaut,
- faUserCheck: faUserCheck,
- faUserCircle: faUserCircle,
- faUserClock: faUserClock,
- faUserCog: faUserCog,
- faUserEdit: faUserEdit,
- faUserFriends: faUserFriends,
- faUserGraduate: faUserGraduate,
- faUserInjured: faUserInjured,
- faUserLock: faUserLock,
- faUserMd: faUserMd,
- faUserMinus: faUserMinus,
- faUserNinja: faUserNinja,
- faUserNurse: faUserNurse,
- faUserPlus: faUserPlus,
- faUserSecret: faUserSecret,
- faUserShield: faUserShield,
- faUserSlash: faUserSlash,
- faUserTag: faUserTag,
- faUserTie: faUserTie,
- faUserTimes: faUserTimes,
- faUsers: faUsers,
- faUsersCog: faUsersCog,
- faUsersSlash: faUsersSlash,
- faUtensilSpoon: faUtensilSpoon,
- faUtensils: faUtensils,
- faVectorSquare: faVectorSquare,
- faVenus: faVenus,
- faVenusDouble: faVenusDouble,
- faVenusMars: faVenusMars,
- faVest: faVest,
- faVestPatches: faVestPatches,
- faVial: faVial,
- faVials: faVials,
- faVideo: faVideo,
- faVideoSlash: faVideoSlash,
- faVihara: faVihara,
- faVirus: faVirus,
- faVirusSlash: faVirusSlash,
- faViruses: faViruses,
- faVoicemail: faVoicemail,
- faVolleyballBall: faVolleyballBall,
- faVolumeDown: faVolumeDown,
- faVolumeMute: faVolumeMute,
- faVolumeOff: faVolumeOff,
- faVolumeUp: faVolumeUp,
- faVoteYea: faVoteYea,
- faVrCardboard: faVrCardboard,
- faWalking: faWalking,
- faWallet: faWallet,
- faWarehouse: faWarehouse,
- faWater: faWater,
- faWaveSquare: faWaveSquare,
- faWeight: faWeight,
- faWeightHanging: faWeightHanging,
- faWheelchair: faWheelchair,
- faWifi: faWifi,
- faWind: faWind,
- faWindowClose: faWindowClose,
- faWindowMaximize: faWindowMaximize,
- faWindowMinimize: faWindowMinimize,
- faWindowRestore: faWindowRestore,
- faWineBottle: faWineBottle,
- faWineGlass: faWineGlass,
- faWineGlassAlt: faWineGlassAlt,
- faWonSign: faWonSign,
- faWrench: faWrench,
- faXRay: faXRay,
- faYenSign: faYenSign,
- faYinYang: faYinYang
- };
- /***/ }),
- /***/ "wO+i":
- /*!****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/pluck.js ***!
- \****************************************************************/
- /*! exports provided: pluck */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pluck", function() { return pluck; });
- /* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./map */ "lJxs");
- function pluck(...properties) {
- const length = properties.length;
- if (length === 0) {
- throw new Error('list of properties cannot be empty.');
- }
- return (source) => Object(_map__WEBPACK_IMPORTED_MODULE_0__["map"])(plucker(properties, length))(source);
- }
- function plucker(props, length) {
- const mapper = (x) => {
- let currentProp = x;
- for (let i = 0; i < length; i++) {
- const p = currentProp[props[i]];
- if (typeof p !== 'undefined') {
- currentProp = p;
- }
- else {
- return undefined;
- }
- }
- return currentProp;
- };
- return mapper;
- }
- //# sourceMappingURL=pluck.js.map
- /***/ }),
- /***/ "x+ZX":
- /*!*******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/refCount.js ***!
- \*******************************************************************/
- /*! exports provided: refCount */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "refCount", function() { return refCount; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function refCount() {
- return function refCountOperatorFunction(source) {
- return source.lift(new RefCountOperator(source));
- };
- }
- class RefCountOperator {
- constructor(connectable) {
- this.connectable = connectable;
- }
- call(subscriber, source) {
- const { connectable } = this;
- connectable._refCount++;
- const refCounter = new RefCountSubscriber(subscriber, connectable);
- const subscription = source.subscribe(refCounter);
- if (!refCounter.closed) {
- refCounter.connection = connectable.connect();
- }
- return subscription;
- }
- }
- class RefCountSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, connectable) {
- super(destination);
- this.connectable = connectable;
- }
- _unsubscribe() {
- const { connectable } = this;
- if (!connectable) {
- this.connection = null;
- return;
- }
- this.connectable = null;
- const refCount = connectable._refCount;
- if (refCount <= 0) {
- this.connection = null;
- return;
- }
- connectable._refCount = refCount - 1;
- if (refCount > 1) {
- this.connection = null;
- return;
- }
- const { connection } = this;
- const sharedConnection = connectable._connection;
- this.connection = null;
- if (sharedConnection && (!connection || sharedConnection === connection)) {
- sharedConnection.unsubscribe();
- }
- }
- }
- //# sourceMappingURL=refCount.js.map
- /***/ }),
- /***/ "xbPD":
- /*!*************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/defaultIfEmpty.js ***!
- \*************************************************************************/
- /*! exports provided: defaultIfEmpty */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultIfEmpty", function() { return defaultIfEmpty; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function defaultIfEmpty(defaultValue = null) {
- return (source) => source.lift(new DefaultIfEmptyOperator(defaultValue));
- }
- class DefaultIfEmptyOperator {
- constructor(defaultValue) {
- this.defaultValue = defaultValue;
- }
- call(subscriber, source) {
- return source.subscribe(new DefaultIfEmptySubscriber(subscriber, this.defaultValue));
- }
- }
- class DefaultIfEmptySubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, defaultValue) {
- super(destination);
- this.defaultValue = defaultValue;
- this.isEmpty = true;
- }
- _next(value) {
- this.isEmpty = false;
- this.destination.next(value);
- }
- _complete() {
- if (this.isEmpty) {
- this.destination.next(this.defaultValue);
- }
- this.destination.complete();
- }
- }
- //# sourceMappingURL=defaultIfEmpty.js.map
- /***/ }),
- /***/ "xgIS":
- /*!*********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/fromEvent.js ***!
- \*********************************************************************/
- /*! exports provided: fromEvent */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromEvent", function() { return fromEvent; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/isArray */ "DH7j");
- /* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/isFunction */ "n6bG");
- /* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../operators/map */ "lJxs");
- const toString = (() => Object.prototype.toString)();
- function fromEvent(target, eventName, options, resultSelector) {
- if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(options)) {
- resultSelector = options;
- options = undefined;
- }
- if (resultSelector) {
- return fromEvent(target, eventName, options).pipe(Object(_operators_map__WEBPACK_IMPORTED_MODULE_3__["map"])(args => Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(args) ? resultSelector(...args) : resultSelector(args)));
- }
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => {
- function handler(e) {
- if (arguments.length > 1) {
- subscriber.next(Array.prototype.slice.call(arguments));
- }
- else {
- subscriber.next(e);
- }
- }
- setupSubscription(target, eventName, handler, subscriber, options);
- });
- }
- function setupSubscription(sourceObj, eventName, handler, subscriber, options) {
- let unsubscribe;
- if (isEventTarget(sourceObj)) {
- const source = sourceObj;
- sourceObj.addEventListener(eventName, handler, options);
- unsubscribe = () => source.removeEventListener(eventName, handler, options);
- }
- else if (isJQueryStyleEventEmitter(sourceObj)) {
- const source = sourceObj;
- sourceObj.on(eventName, handler);
- unsubscribe = () => source.off(eventName, handler);
- }
- else if (isNodeStyleEventEmitter(sourceObj)) {
- const source = sourceObj;
- sourceObj.addListener(eventName, handler);
- unsubscribe = () => source.removeListener(eventName, handler);
- }
- else if (sourceObj && sourceObj.length) {
- for (let i = 0, len = sourceObj.length; i < len; i++) {
- setupSubscription(sourceObj[i], eventName, handler, subscriber, options);
- }
- }
- else {
- throw new TypeError('Invalid event target');
- }
- subscriber.add(unsubscribe);
- }
- function isNodeStyleEventEmitter(sourceObj) {
- return sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function';
- }
- function isJQueryStyleEventEmitter(sourceObj) {
- return sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function';
- }
- function isEventTarget(sourceObj) {
- return sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function';
- }
- //# sourceMappingURL=fromEvent.js.map
- /***/ }),
- /***/ "yCtX":
- /*!*********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/fromArray.js ***!
- \*********************************************************************/
- /*! exports provided: fromArray */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromArray", function() { return fromArray; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- /* harmony import */ var _util_subscribeToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/subscribeToArray */ "ngJS");
- /* harmony import */ var _scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../scheduled/scheduleArray */ "jZKg");
- function fromArray(input, scheduler) {
- if (!scheduler) {
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](Object(_util_subscribeToArray__WEBPACK_IMPORTED_MODULE_1__["subscribeToArray"])(input));
- }
- else {
- return Object(_scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__["scheduleArray"])(input, scheduler);
- }
- }
- //# sourceMappingURL=fromArray.js.map
- /***/ }),
- /***/ "yI9Y":
- /*!**************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/max.js ***!
- \**************************************************************/
- /*! exports provided: max */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "max", function() { return max; });
- /* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./reduce */ "128B");
- function max(comparer) {
- const max = (typeof comparer === 'function')
- ? (x, y) => comparer(x, y) > 0 ? x : y
- : (x, y) => x > y ? x : y;
- return Object(_reduce__WEBPACK_IMPORTED_MODULE_0__["reduce"])(max);
- }
- //# sourceMappingURL=max.js.map
- /***/ }),
- /***/ "yuhW":
- /*!*******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/throttle.js ***!
- \*******************************************************************/
- /*! exports provided: defaultThrottleConfig, throttle */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultThrottleConfig", function() { return defaultThrottleConfig; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "throttle", function() { return throttle; });
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- const defaultThrottleConfig = {
- leading: true,
- trailing: false
- };
- function throttle(durationSelector, config = defaultThrottleConfig) {
- return (source) => source.lift(new ThrottleOperator(durationSelector, config.leading, config.trailing));
- }
- class ThrottleOperator {
- constructor(durationSelector, leading, trailing) {
- this.durationSelector = durationSelector;
- this.leading = leading;
- this.trailing = trailing;
- }
- call(subscriber, source) {
- return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));
- }
- }
- class ThrottleSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__["OuterSubscriber"] {
- constructor(destination, durationSelector, _leading, _trailing) {
- super(destination);
- this.destination = destination;
- this.durationSelector = durationSelector;
- this._leading = _leading;
- this._trailing = _trailing;
- this._hasValue = false;
- }
- _next(value) {
- this._hasValue = true;
- this._sendValue = value;
- if (!this._throttled) {
- if (this._leading) {
- this.send();
- }
- else {
- this.throttle(value);
- }
- }
- }
- send() {
- const { _hasValue, _sendValue } = this;
- if (_hasValue) {
- this.destination.next(_sendValue);
- this.throttle(_sendValue);
- }
- this._hasValue = false;
- this._sendValue = null;
- }
- throttle(value) {
- const duration = this.tryDurationSelector(value);
- if (!!duration) {
- this.add(this._throttled = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(this, duration));
- }
- }
- tryDurationSelector(value) {
- try {
- return this.durationSelector(value);
- }
- catch (err) {
- this.destination.error(err);
- return null;
- }
- }
- throttlingDone() {
- const { _throttled, _trailing } = this;
- if (_throttled) {
- _throttled.unsubscribe();
- }
- this._throttled = null;
- if (_trailing) {
- this.send();
- }
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.throttlingDone();
- }
- notifyComplete() {
- this.throttlingDone();
- }
- }
- //# sourceMappingURL=throttle.js.map
- /***/ }),
- /***/ "z+Ro":
- /*!*****************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/util/isScheduler.js ***!
- \*****************************************************************/
- /*! exports provided: isScheduler */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isScheduler", function() { return isScheduler; });
- function isScheduler(value) {
- return value && typeof value.schedule === 'function';
- }
- //# sourceMappingURL=isScheduler.js.map
- /***/ }),
- /***/ "z6cu":
- /*!**********************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/observable/throwError.js ***!
- \**********************************************************************/
- /*! exports provided: throwError */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "throwError", function() { return throwError; });
- /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "HDdC");
- function throwError(error, scheduler) {
- if (!scheduler) {
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => subscriber.error(error));
- }
- else {
- return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](subscriber => scheduler.schedule(dispatch, 0, { error, subscriber }));
- }
- }
- function dispatch({ error, subscriber }) {
- subscriber.error(error);
- }
- //# sourceMappingURL=throwError.js.map
- /***/ }),
- /***/ "zP0r":
- /*!***************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/skip.js ***!
- \***************************************************************/
- /*! exports provided: skip */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skip", function() { return skip; });
- /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscriber */ "7o/Q");
- function skip(count) {
- return (source) => source.lift(new SkipOperator(count));
- }
- class SkipOperator {
- constructor(total) {
- this.total = total;
- }
- call(subscriber, source) {
- return source.subscribe(new SkipSubscriber(subscriber, this.total));
- }
- }
- class SkipSubscriber extends _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"] {
- constructor(destination, total) {
- super(destination);
- this.total = total;
- this.count = 0;
- }
- _next(x) {
- if (++this.count > this.total) {
- this.destination.next(x);
- }
- }
- }
- //# sourceMappingURL=skip.js.map
- /***/ }),
- /***/ "znLP":
- /*!**********************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/scheduler/AnimationFrameScheduler.js ***!
- \**********************************************************************************/
- /*! exports provided: AnimationFrameScheduler */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationFrameScheduler", function() { return AnimationFrameScheduler; });
- /* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsyncScheduler */ "IjjT");
- class AnimationFrameScheduler extends _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__["AsyncScheduler"] {
- flush(action) {
- this.active = true;
- this.scheduled = undefined;
- const { actions } = this;
- let error;
- let index = -1;
- let count = actions.length;
- action = action || actions.shift();
- do {
- if (error = action.execute(action.state, action.delay)) {
- break;
- }
- } while (++index < count && (action = actions.shift()));
- this.active = false;
- if (error) {
- while (++index < count && (action = actions.shift())) {
- action.unsubscribe();
- }
- throw error;
- }
- }
- }
- //# sourceMappingURL=AnimationFrameScheduler.js.map
- /***/ }),
- /***/ "zp1y":
- /*!*************************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/withLatestFrom.js ***!
- \*************************************************************************/
- /*! exports provided: withLatestFrom */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "withLatestFrom", function() { return withLatestFrom; });
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function withLatestFrom(...args) {
- return (source) => {
- let project;
- if (typeof args[args.length - 1] === 'function') {
- project = args.pop();
- }
- const observables = args;
- return source.lift(new WithLatestFromOperator(observables, project));
- };
- }
- class WithLatestFromOperator {
- constructor(observables, project) {
- this.observables = observables;
- this.project = project;
- }
- call(subscriber, source) {
- return source.subscribe(new WithLatestFromSubscriber(subscriber, this.observables, this.project));
- }
- }
- class WithLatestFromSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__["OuterSubscriber"] {
- constructor(destination, observables, project) {
- super(destination);
- this.observables = observables;
- this.project = project;
- this.toRespond = [];
- const len = observables.length;
- this.values = new Array(len);
- for (let i = 0; i < len; i++) {
- this.toRespond.push(i);
- }
- for (let i = 0; i < len; i++) {
- let observable = observables[i];
- this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(this, observable, observable, i));
- }
- }
- notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
- this.values[outerIndex] = innerValue;
- const toRespond = this.toRespond;
- if (toRespond.length > 0) {
- const found = toRespond.indexOf(outerIndex);
- if (found !== -1) {
- toRespond.splice(found, 1);
- }
- }
- }
- notifyComplete() {
- }
- _next(value) {
- if (this.toRespond.length === 0) {
- const args = [value, ...this.values];
- if (this.project) {
- this._tryProject(args);
- }
- else {
- this.destination.next(args);
- }
- }
- }
- _tryProject(args) {
- let result;
- try {
- result = this.project.apply(this, args);
- }
- catch (err) {
- this.destination.error(err);
- return;
- }
- this.destination.next(result);
- }
- }
- //# sourceMappingURL=withLatestFrom.js.map
- /***/ }),
- /***/ "zt7V":
- /*!******************************************************************!*\
- !*** ./node_modules/rxjs/_esm2015/internal/operators/exhaust.js ***!
- \******************************************************************/
- /*! exports provided: exhaust */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "exhaust", function() { return exhaust; });
- /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../OuterSubscriber */ "l7GE");
- /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/subscribeToResult */ "ZUHj");
- function exhaust() {
- return (source) => source.lift(new SwitchFirstOperator());
- }
- class SwitchFirstOperator {
- call(subscriber, source) {
- return source.subscribe(new SwitchFirstSubscriber(subscriber));
- }
- }
- class SwitchFirstSubscriber extends _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__["OuterSubscriber"] {
- constructor(destination) {
- super(destination);
- this.hasCompleted = false;
- this.hasSubscription = false;
- }
- _next(value) {
- if (!this.hasSubscription) {
- this.hasSubscription = true;
- this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(this, value));
- }
- }
- _complete() {
- this.hasCompleted = true;
- if (!this.hasSubscription) {
- this.destination.complete();
- }
- }
- notifyComplete(innerSub) {
- this.remove(innerSub);
- this.hasSubscription = false;
- if (this.hasCompleted) {
- this.destination.complete();
- }
- }
- }
- //# sourceMappingURL=exhaust.js.map
- /***/ })
- }]);
- //# sourceMappingURL=vendor-es2015.js.map
|