{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/browsernizr/lib/domPrefixes.js","webpack:///./node_modules/browsernizr/lib/getBody.js","webpack:///./node_modules/browsernizr/index.js","webpack:///./node_modules/browsernizr/lib/createElement.js","webpack:///./node_modules/browsernizr/test/es5/array.js","webpack:///./node_modules/browsernizr/test/url/data-uri.js","webpack:///./node_modules/browsernizr/lib/hasOwnProp.js","webpack:///./node_modules/browsernizr/lib/testAllProps.js","webpack:///./node_modules/browsernizr/lib/mStyle.js","webpack:///./node_modules/browsernizr/lib/modElem.js","webpack:///./node_modules/browsernizr/test/css/transforms.js","webpack:///./node_modules/browsernizr/lib/omPrefixes.js","webpack:///./app/js/detection/modernizr.js","webpack:///./node_modules/browsernizr/test/inputtypes.js","webpack:///./node_modules/browsernizr/test/css/generatedcontent.js","webpack:///./node_modules/browsernizr/test/css/animations.js","webpack:///./node_modules/browsernizr/test/css/backgroundsize.js","webpack:///./node_modules/browsernizr/lib/setClasses.js","webpack:///./node_modules/browsernizr/test/event/deviceorientation-motion.js","webpack:///./node_modules/browsernizr/lib/cssomPrefixes.js","webpack:///./node_modules/browsernizr/test/input.js","webpack:///./app/js/detection/console-log-fix.js","webpack:///./node_modules/browsernizr/test/touchevents.js","webpack:///./node_modules/browsernizr/test/video.js","webpack:///./node_modules/browsernizr/lib/docElement.js","webpack:///./node_modules/browsernizr/test/audio/webaudio.js","webpack:///./node_modules/browsernizr/test/webanimations.js","webpack:///./node_modules/browsernizr/lib/prefixes.js","webpack:///./node_modules/browsernizr/test/es5/string.js","webpack:///./node_modules/browsernizr/lib/domToCSS.js","webpack:///./node_modules/browsernizr/lib/classes.js","webpack:///./node_modules/browsernizr/lib/contains.js","webpack:///./node_modules/browsernizr/lib/injectElementWithStyles.js","webpack:///./app/js/detection.js","webpack:///./node_modules/browsernizr/test/es5/object.js","webpack:///./node_modules/browsernizr/test/css/rgba.js","webpack:///./node_modules/browsernizr/test/css/transitions.js","webpack:///./node_modules/browsernizr/lib/ModernizrProto.js","webpack:///./node_modules/browsernizr/lib/computedStyle.js","webpack:///./node_modules/browsernizr/lib/testRunner.js","webpack:///./node_modules/browsernizr/test/svg/asimg.js","webpack:///./node_modules/browsernizr/test/css/opacity.js","webpack:///./node_modules/browsernizr/lib/fnBind.js","webpack:///./node_modules/browsernizr/lib/mq.js","webpack:///./node_modules/browsernizr/lib/testPropsAll.js","webpack:///./node_modules/browsernizr/lib/cssToDOM.js","webpack:///./node_modules/browsernizr/test/es5/function.js","webpack:///./node_modules/browsernizr/test/css/mediaqueries.js","webpack:///./node_modules/browsernizr/test/history.js","webpack:///./node_modules/browsernizr/lib/tests.js","webpack:///./node_modules/browsernizr/test/json.js","webpack:///./node_modules/browsernizr/lib/testProps.js","webpack:///./node_modules/browsernizr/lib/Modernizr.js","webpack:///./node_modules/browsernizr/lib/testDOMProps.js","webpack:///./node_modules/browsernizr/test/css/transforms3d.js","webpack:///./node_modules/browsernizr/lib/nativeTestProps.js","webpack:///./node_modules/browsernizr/lib/testStyles.js","webpack:///./node_modules/browsernizr/lib/addTest.js","webpack:///./node_modules/browsernizr/test/css/gradients.js","webpack:///./node_modules/browsernizr/test/es5/date.js","webpack:///./node_modules/browsernizr/lib/inputElem.js","webpack:///./node_modules/browsernizr/test/svg.js","webpack:///./node_modules/browsernizr/test/css/fontface.js","webpack:///./node_modules/browsernizr/lib/is.js","webpack:///./node_modules/browsernizr/test/audio.js","webpack:///./node_modules/browsernizr/lib/isSVG.js","webpack:///./node_modules/browsernizr/test/css/backgroundposition-xy.js","webpack:///./node_modules/browsernizr/test/forms/placeholder.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","ModernizrProto","omPrefixes","domPrefixes","_config","usePrefixes","toLowerCase","split","_domPrefixes","createElement","isSVG","body","document","fake","Modernizr","classes","testRunner","setClasses","addTest","addAsyncTest","_q","length","arguments","createElementNS","apply","Array","every","filter","forEach","indexOf","lastIndexOf","map","some","reduce","reduceRight","isArray","navigator","userAgent","setTimeout","datauri","Image","onerror","onload","width","height","datauriBig","Boolean","over32kb","base64str","src","testOver32kb","hasOwnProp","_hasOwnProperty","is","constructor","testPropsAll","testAllProps","prop","skipValueTest","undefined","mStyle","style","elem","unshift","modElem","push","require","window","inputElem","docElement","inputtypes","inputs","props","inputElemType","defaultView","bool","len","setAttribute","type","cssText","test","WebkitAppearance","appendChild","getComputedStyle","offsetHeight","removeChild","checkValidity","testStyles","node","className","classPrefix","baseVal","enableJSClass","reJS","RegExp","replace","enableClasses","join","cssomPrefixes","_cssomPrefixes","inputattrs","attrs","input","list","HTMLDataListElement","console","prefixes","mq","DocumentTouch","query","canPlayType","ogg","h264","webm","vp9","hls","e","documentElement","prefixed","unprefixed","_prefixes","String","trim","str","m1","substr","getBody","rule","callback","nodes","testnames","ret","docOverflow","mod","div","parseInt","id","styleSheet","createTextNode","background","overflow","parentNode","keys","getPrototypeOf","getOwnPropertyNames","isSealed","isFrozen","isExtensible","getOwnPropertyDescriptor","defineProperties","seal","freeze","preventExtensions","backgroundColor","tests","_version","on","cb","self","this","fn","options","pseudo","result","getPropertyValue","error","currentStyle","featureNames","feature","aliasIdx","nameIdx","featureNameSplit","featureIdx","aliases","implementation","hasFeature","opacity","that","matchMedia","injectElementWithStyles","msMatchMedia","mql","matches","position","testProps","testDOMProps","ucProp","charAt","toUpperCase","slice","m2","Function","ua","location","protocol","history","JSON","contains","nativeTestProps","cssToDOM","afterInit","propsLength","before","elems","shift","cleanElems","fnBind","obj","item","domToCSS","computedStyle","CSS","supports","conditionText","last","_trigger","_l","res","cbs","angle","str1","css","backgroundImage","canParseISODate","Date","parse","now","toISOString","toJSON","createSVGRect","webos","wppre8","match","parseFloat","$1","getElementById","sheet","cssRules","mp3","opus","wav","m4a","nodeName"],"mappings":"aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,IAIjBlC,EAAoBA,EAAoBmC,EAAI,G,yBClFrD,IAAIC,EAAiB,EAAQ,QACzBC,EAAa,EAAQ,QAkBnBC,EAAeF,EAAeG,QAAQC,YAAcH,EAAWI,cAAcC,MAAM,KAAO,GAC9FN,EAAeO,aAAeL,EAC9BnC,EAAOD,QAAUoC,G,uBCrBnB,IAAIM,EAAgB,EAAQ,QACxBC,EAAQ,EAAQ,QAuBlB1C,EAAOD,QAbP,WAEE,IAAI4C,EAAOC,SAASD,KAQpB,OANKA,KAEHA,EAAOF,EAAcC,EAAQ,MAAQ,SAChCG,MAAO,GAGPF,I,uBCrBX,IAAIG,EAAY,EAAQ,QACpBb,EAAiB,EAAQ,QACzBc,EAAU,EAAQ,QAClBC,EAAa,EAAQ,QACrBC,EAAa,EAAQ,QAGzBD,IAGAC,EAAWF,UAEJd,EAAeiB,eACfjB,EAAekB,aAGtB,IAAK,IAAIlD,EAAI,EAAGA,EAAI6C,EAAUM,GAAGC,OAAQpD,IACvC6C,EAAUM,GAAGnD,KAGfD,EAAOD,QAAU+C,G,8DCpBjB,IAAIJ,EAAQ,EAAQ,QAuBlB1C,EAAOD,QAZP,WACE,MAAsC,mBAA3B6C,SAASH,cAGXG,SAASH,cAAca,UAAU,IAC/BZ,EACFE,SAASW,gBAAgBnD,KAAKwC,SAAU,6BAA8BU,UAAU,IAEhFV,SAASH,cAAce,MAAMZ,SAAUU,a,uBCHpC,EAAQ,QACZJ,QAAQ,YAAY,WAC5B,SAAUO,MAAM5B,WACd4B,MAAM5B,UAAU6B,OAChBD,MAAM5B,UAAU8B,QAChBF,MAAM5B,UAAU+B,SAChBH,MAAM5B,UAAUgC,SAChBJ,MAAM5B,UAAUiC,aAChBL,MAAM5B,UAAUkC,KAChBN,MAAM5B,UAAUmC,MAChBP,MAAM5B,UAAUoC,QAChBR,MAAM5B,UAAUqC,aAChBT,MAAMU,a,uBCLZ,IAAIrB,EAAY,EAAQ,QACpBI,EAAU,EAAQ,QAEpBJ,EAAUK,cAAa,YAK2B,IAA5CiB,UAAUC,UAAUR,QAAQ,YAE9BS,YAAW,WACTpB,EAAQ,WAAW,KAClB,IAGL,IAAIqB,EAAU,IAAIC,MAElBD,EAAQE,QAAU,WAChBvB,EAAQ,WAAW,IAErBqB,EAAQG,OAAS,WACO,IAAlBH,EAAQI,OAAkC,IAAnBJ,EAAQK,OAYrC,WAEE,IAAIC,EAAa,IAAIL,MAErBK,EAAWJ,QAAU,WACnBvB,EAAQ,WAAW,GACnBJ,EAAUyB,QAAU,IAAIO,SAAQ,GAChChC,EAAUyB,QAAQQ,UAAW,GAE/BF,EAAWH,OAAS,WAClBxB,EAAQ,WAAW,GACnBJ,EAAUyB,QAAU,IAAIO,SAAQ,GAChChC,EAAUyB,QAAQQ,SAAiC,IAArBF,EAAWF,OAAqC,IAAtBE,EAAWD,QAGrE,IAAII,EAAY,mDAChB,KAAOA,EAAU3B,OAAS,MACxB2B,EAAY,OAASA,EAEvBH,EAAWI,IAAM,yBAA2BD,EA9B1CE,GAGAhC,EAAQ,WAAW,IAIvBqB,EAAQU,IAAM,6E,uBCpDlB,IAaME,EAGEC,EAhBJC,EAAK,EAAQ,QA0BXF,EANGE,EAJDD,EAAkB,GAAKtD,eAIF,cAAiBuD,EAAGD,EAAgBhF,KAAM,aAMpD,SAASuB,EAAQC,GAC5B,OAASA,KAAYD,GAAW0D,EAAG1D,EAAO2D,YAAYzD,UAAUD,GAAW,cANhE,SAASD,EAAQC,GAC5B,OAAOwD,EAAgBhF,KAAKuB,EAAQC,IAU1C5B,EAAOD,QAAUoF,G,uBChCnB,IAAIlD,EAAiB,EAAQ,QACzBsD,EAAe,EAAQ,QAsCzB,SAASC,EAAaC,EAAMvE,EAAOwE,GACjC,OAAOH,EAAaE,OAAME,OAAWA,EAAWzE,EAAOwE,GAGzDzD,EAAeuD,aAAeA,EAE9BxF,EAAOD,QAAUyF,G,uBC7CnB,IAAI1C,EAAY,EAAQ,QAElB8C,EAAS,CACXC,MAFU,EAAQ,QAEHC,KAAKD,OAKtB/C,EAAUM,GAAG2C,SAAQ,kBACZH,EAAOC,SAGhB7F,EAAOD,QAAU6F,G,uBCZnB,IAAI9C,EAAY,EAAQ,QAOlBkD,EAAU,CACZF,KAPgB,EAAQ,OAOlBrD,CAAc,cAItBK,EAAUM,GAAG6C,MAAK,kBACTD,EAAQF,QAGjB9F,EAAOD,QAAUiG,G,uBCRnB,IAAIlD,EAAY,EAAQ,QACpB0C,EAAe,EAAQ,QACzB1C,EAAUI,QAAQ,iBAAiB,WAGjC,OAAsD,IAA/CkB,UAAUC,UAAUR,QAAQ,eAC5B2B,EAAa,YAAa,YAAY,O,qBCG/CxF,EAAOD,QADU,mB,uBCVnBmG,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QAERA,EAAQ,QACRA,EAAQ,QAERA,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QAERA,EAAQ,QAERA,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QAERA,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QAERA,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QACRA,EAAQ,QAERC,OAAOrD,UAAYoD,EAAQ,QAC3BlG,EAAOD,QAAUoG,OAAOrD,W,uBCHxB,IAAIA,EAAY,EAAQ,QACpBsD,EAAY,EAAQ,QACpBC,EAAa,EAAQ,QAOnBC,EAAa,uFAAuF/D,MAAM,KAC1GgE,EAAS,GAEbzD,EAAUwD,WAAa,SAAUE,GAO/B,IANA,IAEIC,EACAC,EACAC,EAJAC,EAAMJ,EAAMnD,OAMPpD,EAAI,EAAGA,EAAI2G,EAAK3G,IAEvBmG,EAAUS,aAAa,OAAQJ,EAAgBD,EAAMvG,KACrD0G,EAA0B,SAAnBP,EAAUU,MAAmB,UAAWV,KAO7CA,EAAUlF,MAfF,KAgBRkF,EAAUP,MAAMkB,QAAU,uCAEtB,UAAUC,KAAKP,SAAuDd,IAArCS,EAAUP,MAAMoB,kBAEnDZ,EAAWa,YAAYd,GAIvBO,GAHAD,EAAc9D,SAAS8D,aAGHS,kBACiD,cAAnET,EAAYS,iBAAiBf,EAAW,MAAMa,kBAGlB,IAA3Bb,EAAUgB,aAEbf,EAAWgB,YAAYjB,IAEd,iBAAiBY,KAAKP,KAS/BE,EAFS,gBAAgBK,KAAKP,GAEvBL,EAAUkB,gBAA+C,IAA9BlB,EAAUkB,gBAzCtC,OA6CClB,EAAUlF,QAIrBqF,EAAQC,EAAMvG,MAAS0G,EAEzB,OAAOJ,EArDc,CAsDpBD,I,qBC1FL,IAAIxD,EAAY,EAAQ,QACP,EAAQ,OACvByE,CAAW,uFAAuF,SAASC,GAEzG1E,EAAUI,QAAQ,mBAAoBsE,EAAKJ,cAAgB,O,uBCL/D,IAAItE,EAAY,EAAQ,QACpB0C,EAAe,EAAQ,QACzB1C,EAAUI,QAAQ,gBAAiBsC,EAAa,gBAAiB,KAAK,K,qBCPxE,IAAI1C,EAAY,EAAQ,QACpB0C,EAAe,EAAQ,QACzB1C,EAAUI,QAAQ,iBAAkBsC,EAAa,iBAAkB,QAAQ,K,qBCd7E,IAAI1C,EAAY,EAAQ,QACpBuD,EAAa,EAAQ,QACrB3D,EAAQ,EAAQ,QAsClB1C,EAAOD,QA5BP,SAAoBgD,GAClB,IAAI0E,EAAYpB,EAAWoB,UACvBC,EAAc5E,EAAUV,QAAQsF,aAAe,GAQnD,GANIhF,IACF+E,EAAYA,EAAUE,SAKpB7E,EAAUV,QAAQwF,cAAe,CACnC,IAAIC,EAAO,IAAIC,OAAO,UAAYJ,EAAc,gBAChDD,EAAYA,EAAUM,QAAQF,EAAM,KAAOH,EAAc,QAGvD5E,EAAUV,QAAQ4F,gBAEhBjF,EAAQM,OAAS,IACnBoE,GAAa,IAAMC,EAAc3E,EAAQkF,KAAK,IAAMP,IAElDhF,EACF2D,EAAWoB,UAAUE,QAAUF,EAE/BpB,EAAWoB,UAAYA,K,qBCX/B,IAAI3E,EAAY,EAAQ,QACtBA,EAAUI,QAAQ,eAAgB,sBAAuBiD,QACzDrD,EAAUI,QAAQ,oBAAqB,2BAA4BiD,S,qBC1BrE,IAAIlE,EAAiB,EAAQ,QACzBC,EAAa,EAAQ,QACnBgG,EAAiBjG,EAAeG,QAAQC,YAAcH,EAAWK,MAAM,KAAO,GAClFN,EAAekG,eAAiBD,EAChClI,EAAOD,QAAUmI,G,qBCyBnB,IAAIpF,EAAY,EAAQ,QACpBL,EAAgB,EAAQ,QACxB2D,EAAY,EAAQ,QAUlBgC,EAAa,iFAAiF7F,MAAM,KACpG8F,EAAQ,GAEZvF,EAAUwF,MAAQ,SAAU9B,GAC1B,IAAK,IAAIvG,EAAI,EAAG2G,EAAMJ,EAAMnD,OAAQpD,EAAI2G,EAAK3G,IAC3CoI,EAAO7B,EAAMvG,OAAUuG,EAAMvG,KAAMmG,GAOrC,OALIiC,EAAME,OAGRF,EAAME,QAAU9F,EAAc,cAAe0D,OAAOqC,sBAE/CH,EATS,CAUfD,I,oBC/CJ,WACG,aAEA,IAAI/H,EAAGJ,EAEP,IAAKkG,OAAOsC,QASR,IARAtC,OAAOsC,QAAU,GAEjBpI,EAAI,CACA,MAAO,OAAQ,OAAQ,QAAS,QAAS,QAAS,MAAO,QACzD,iBAAkB,WAAY,OAAQ,UAAW,UAAW,aAC5D,SAAU,SAAU,QAAS,eAAgB,YAAa,SAGzDJ,EAAI,EAAGA,EAAII,EAAEgD,OAAQpD,GAAK,EACtBkG,OAAOsC,QAAQpI,EAAEJ,MAClBkG,OAAOsC,QAAQpI,EAAEJ,IAAM,cAhBtC,I,qBC4BD,IAAI6C,EAAY,EAAQ,QACpB4F,EAAW,EAAQ,QACnBC,EAAK,EAAQ,QAEf7F,EAAUI,QAAQ,eAAe,WAC/B,GAAK,iBAAkBiD,QAAWA,OAAOyC,eAAiBhG,oBAAoBgG,cAC5E,OAAO,EAKT,IAAIC,EAAQ,CAAC,IAAKH,EAAST,KAAK,oBAAqB,SAAU,KAAKA,KAAK,IACzE,OAAOU,EAAGE,O,qBCpBd,IAAI/F,EAAY,EAAQ,QACpBL,EAAgB,EAAQ,QAQ1BK,EAAUI,QAAQ,SAAS,WACzB,IAAI4C,EAAOrD,EAAc,SACrBkE,GAAO,EAGX,KACEA,IAASb,EAAKgD,gBAEZnC,EAAO,IAAI7B,QAAQ6B,IACdoC,IAAMjD,EAAKgD,YAAY,8BAA8Bf,QAAQ,OAAQ,IAG1EpB,EAAKqC,KAAOlD,EAAKgD,YAAY,mCAAmCf,QAAQ,OAAQ,IAEhFpB,EAAKsC,KAAOnD,EAAKgD,YAAY,oCAAoCf,QAAQ,OAAQ,IAEjFpB,EAAKuC,IAAMpD,EAAKgD,YAAY,4BAA4Bf,QAAQ,OAAQ,IAExEpB,EAAKwC,IAAMrD,EAAKgD,YAAY,+CAA+Cf,QAAQ,OAAQ,KAE7F,MAAOqB,IAET,OAAOzC,M,mBCnDT,IAAIN,EAAazD,SAASyG,gBAC1BrJ,EAAOD,QAAUsG,G,qBCUnB,IAAIvD,EAAY,EAAQ,QACtBA,EAAUI,QAAQ,YAAY,WAC5B,IAAIoG,EAAW,uBAAwBnD,OACnCoD,EAAa,iBAAkBpD,OAEnC,OAAIrD,EAAUV,QAAQC,aACbiH,GAEFC,M,qBCVX,IAAIzG,EAAY,EAAQ,QACpBL,EAAgB,EAAQ,QAC1BK,EAAUI,QAAQ,gBAAiB,YAAaT,EAAc,S,qBClBhE,IAAIR,EAAiB,EAAQ,QAkCvByG,EAAYzG,EAAeG,QAAQC,YAAc,4BAA4BE,MAAM,KAAO,CAAC,GAAG,IAGlGN,EAAeuH,UAAYd,EAE3B1I,EAAOD,QAAU2I,G,qBCvBH,EAAQ,QACZxF,QAAQ,aAAa,WAC7B,SAAUuG,OAAO5H,YAAa4H,OAAO5H,UAAU6H,U,mBCFjD1J,EAAOD,QANP,SAAkBS,GAChB,OAAOA,EAAKuH,QAAQ,YAAY,SAAS4B,EAAKC,GAC5C,MAAO,IAAMA,EAAGtH,iBACfyF,QAAQ,OAAQ,U,mBCXrB/H,EAAOD,QADO,I,mBCadC,EAAOD,QAJP,SAAkB4J,EAAKE,GACrB,UAAW,GAAKF,GAAK9F,QAAQgG,K,qBCXZ,EAAQ,QAA7B,IACIxD,EAAa,EAAQ,QACrB5D,EAAgB,EAAQ,QACxBqH,EAAU,EAAQ,QAwEpB9J,EAAOD,QA5DP,SAAiCgK,EAAMC,EAAUC,EAAOC,GACtD,IACIrE,EACAsE,EACA3C,EACA4C,EAJAC,EAAM,YAKNC,EAAM7H,EAAc,OACpBE,EAAOmH,IAEX,GAAIS,SAASN,EAAO,IAGlB,KAAOA,MACLzC,EAAO/E,EAAc,QAChB+H,GAAKN,EAAYA,EAAUD,GAASI,GAAOJ,EAAQ,GACxDK,EAAIpD,YAAYM,GA0CpB,OAtCA3B,EAAQpD,EAAc,UAChBqE,KAAO,WACbjB,EAAM2E,GAAK,IAAMH,GAIf1H,EAAKE,KAAaF,EAAN2H,GAAYpD,YAAYrB,GACtClD,EAAKuE,YAAYoD,GAEbzE,EAAM4E,WACR5E,EAAM4E,WAAW1D,QAAUgD,EAE3BlE,EAAMqB,YAAYtE,SAAS8H,eAAeX,IAE5CO,EAAIE,GAAKH,EAEL1H,EAAKE,OAEPF,EAAKkD,MAAM8E,WAAa,GAExBhI,EAAKkD,MAAM+E,SAAW,SACtBR,EAAc/D,EAAWR,MAAM+E,SAC/BvE,EAAWR,MAAM+E,SAAW,SAC5BvE,EAAWa,YAAYvE,IAGzBwH,EAAMH,EAASM,EAAKP,GAEhBpH,EAAKE,MACPF,EAAKkI,WAAWxD,YAAY1E,GAC5B0D,EAAWR,MAAM+E,SAAWR,EAG5B/D,EAAWe,cAEXkD,EAAIO,WAAWxD,YAAYiD,KAGpBH,I,qBCvEbhE,OAAOrD,UAAcqD,OAAOrD,WAAaoD,EAAQ,QACjDA,EAAQ,S,qBCcQ,EAAQ,QACZhD,QAAQ,aAAa,WAC7B,SAAUvC,OAAOmK,MACfnK,OAAOY,QACPZ,OAAOoK,gBACPpK,OAAOqK,qBACPrK,OAAOsK,UACPtK,OAAOuK,UACPvK,OAAOwK,cACPxK,OAAOyK,0BACPzK,OAAOC,gBACPD,OAAO0K,kBACP1K,OAAO2K,MACP3K,OAAO4K,QACP5K,OAAO6K,uB,qBClBb,IAAI1I,EAAY,EAAQ,QACpBL,EAAgB,EAAQ,QAC1BK,EAAUI,QAAQ,QAAQ,WACxB,IAAI2C,EAAQpD,EAAc,KAAKoD,MAG/B,OAFAA,EAAMkB,QAAU,yCAER,GAAKlB,EAAM4F,iBAAiB5H,QAAQ,SAAW,M,qBCV3D,IAAIf,EAAY,EAAQ,QACpB0C,EAAe,EAAQ,QACzB1C,EAAUI,QAAQ,iBAAkBsC,EAAa,aAAc,OAAO,K,uBCVxE,IAAIkG,EAAQ,EAAQ,QAOdzJ,EAAiB,CAEnB0J,SAAU,4BAIVvJ,QAAS,CACP,YAAe,GACf,eAAiB,EACjB,eAAiB,EACjB,aAAe,GAIjBgB,GAAI,GAGJwI,GAAI,SAAS5E,EAAM6E,GAOjB,IAAIC,EAAOC,KACXzH,YAAW,WACTuH,EAAGC,EAAK9E,MACP,IAGL9D,QAAS,SAAS1C,EAAMwL,EAAIC,GAC1BP,EAAMzF,KAAK,CAACzF,KAAMA,EAAMwL,GAAIA,EAAIC,QAASA,KAG3C9I,aAAc,SAAS6I,GACrBN,EAAMzF,KAAK,CAACzF,KAAM,KAAMwL,GAAIA,MAIhChM,EAAOD,QAAUkC,G,qBCTjBjC,EAAOD,QAxBP,SAAuB+F,EAAMoG,EAAQzG,GACnC,IAAI0G,EAEJ,GAAI,qBAAsBhG,OAAQ,CAChCgG,EAAShF,iBAAiB/G,KAAK+F,OAAQL,EAAMoG,GAC7C,IAAIzD,EAAUtC,OAAOsC,QAErB,GAAe,OAAX0D,EACE1G,IACF0G,EAASA,EAAOC,iBAAiB3G,SAGnC,GAAIgD,EAEFA,EADaA,EAAQ4D,MAAQ,QAAU,OACvBjM,KAAKqI,EAAS,4FAIlC0D,GAAUD,GAAUpG,EAAKwG,cAAgBxG,EAAKwG,aAAa7G,GAG7D,OAAO0G,I,qBClCX,IAAIT,EAAQ,EAAQ,QAChB5I,EAAY,EAAQ,QACpBC,EAAU,EAAQ,QAClBsC,EAAK,EAAQ,QAoEfrF,EAAOD,QA7DP,WACE,IAAIwM,EACAC,EACAC,EACAN,EACAO,EAEAC,EAEJ,IAAK,IAAIC,KAAclB,EACrB,GAAIA,EAAM5J,eAAe8K,GAAa,CAUpC,GATAL,EAAe,IACfC,EAAUd,EAAMkB,IAQJpM,OACV+L,EAAatG,KAAKuG,EAAQhM,KAAK8B,eAE3BkK,EAAQP,SAAWO,EAAQP,QAAQY,SAAWL,EAAQP,QAAQY,QAAQxJ,QAExE,IAAKoJ,EAAW,EAAGA,EAAWD,EAAQP,QAAQY,QAAQxJ,OAAQoJ,IAC5DF,EAAatG,KAAKuG,EAAQP,QAAQY,QAAQJ,GAAUnK,eAS1D,IAHA6J,EAAS9G,EAAGmH,EAAQR,GAAI,YAAcQ,EAAQR,KAAOQ,EAAQR,GAGxDU,EAAU,EAAGA,EAAUH,EAAalJ,OAAQqJ,IAUf,KAFhCC,EAPcJ,EAAaG,GAOInK,MAAM,MAEhBc,OACnBP,EAAU6J,EAAiB,IAAMR,IAG7BrJ,EAAU6J,EAAiB,KAAS7J,EAAU6J,EAAiB,cAAe7H,UAChFhC,EAAU6J,EAAiB,IAAM,IAAI7H,QAAQhC,EAAU6J,EAAiB,MAG1E7J,EAAU6J,EAAiB,IAAIA,EAAiB,IAAMR,GAGxDpJ,EAAQkD,MAAMkG,EAAS,GAAK,OAASQ,EAAiB1E,KAAK,S,qBCpDrD,EAAQ,QAWZ/E,QAAQ,WAAYN,SAASkK,eAAeC,WAAW,4CAA6C,S,qBCjBhH,IAAIjK,EAAY,EAAQ,QACpBL,EAAgB,EAAQ,QACxBiG,EAAW,EAAQ,QAKrB5F,EAAUI,QAAQ,WAAW,WAC3B,IAAI2C,EAAQpD,EAAc,KAAKoD,MAM/B,OALAA,EAAMkB,QAAU2B,EAAST,KAAK,gBAKvB,SAAWjB,KAAKnB,EAAMmH,a,mBCN/BhN,EAAOD,QANP,SAAgBiM,EAAIiB,GAClB,OAAO,WACL,OAAOjB,EAAGxI,MAAMyJ,EAAM3J,c,qBCZ5B,IAgDQ4J,EAhDJjL,EAAiB,EAAQ,QACzBkL,EAA0B,EAAQ,QA8ChCxE,GACEuE,EAAa/G,OAAO+G,YAAc/G,OAAOiH,cAEpC,SAASzE,GACd,IAAI0E,EAAMH,EAAWvE,GACrB,OAAO0E,GAAOA,EAAIC,UAAW,GAI1B,SAAS3E,GACd,IAAIhC,GAAO,EAQX,OANAwG,EAAwB,UAAYxE,EAAK,2CAA2C,SAASnB,GAC3Fb,EAEkC,cAF1BR,OAAOgB,iBACbhB,OAAOgB,iBAAiBK,EAAM,MAC9BA,EAAK8E,cAAciB,YAGhB5G,GAIX1E,EAAe0G,GAAKA,EAEpB3I,EAAOD,QAAU4I,G,qBCvEnB,IAAI1G,EAAiB,EAAQ,QACzBiG,EAAgB,EAAQ,QACxB7C,EAAK,EAAQ,QACbmI,EAAY,EAAQ,QACpBrL,EAAc,EAAQ,QACtBsL,EAAe,EAAQ,QAgBzB,SAASlI,EAAaE,EAAM6D,EAAUxD,EAAM5E,EAAOwE,GAEjD,IAAIgI,EAASjI,EAAKkI,OAAO,GAAGC,cAAgBnI,EAAKoI,MAAM,GACrDrH,GAASf,EAAO,IAAMyC,EAAcD,KAAKyF,EAAS,KAAOA,GAAQnL,MAAM,KAGzE,OAAI8C,EAAGiE,EAAU,WAAajE,EAAGiE,EAAU,aAClCkE,EAAUhH,EAAO8C,EAAUpI,EAAOwE,IAIzCc,GAASf,EAAO,IAAM,EAAcwC,KAAKyF,EAAS,KAAOA,GAAQnL,MAAM,KAChEkL,EAAajH,EAAO8C,EAAUxD,IASzC7D,EAAeuD,aAAeD,EAE9BvF,EAAOD,QAAUwF,G,mBC5BjBvF,EAAOD,QANP,SAAkBS,GAChB,OAAOA,EAAKuH,QAAQ,oBAAoB,SAAS4B,EAAKC,EAAIkE,GACxD,OAAOlE,EAAKkE,EAAGF,iBACd7F,QAAQ,KAAM,M,qBCGL,EAAQ,QACZ7E,QAAQ,eAAe,WAC/B,SAAU6K,SAASlM,YAAakM,SAASlM,UAAUJ,U,qBCTvD,IAAIqB,EAAY,EAAQ,QACpB6F,EAAK,EAAQ,QACf7F,EAAUI,QAAQ,eAAgByF,EAAG,c,qBCSvB,EAAQ,QACZzF,QAAQ,WAAW,WAK3B,IAAI8K,EAAK5J,UAAUC,UAInB,QAAmC,IAA9B2J,EAAGnK,QAAQ,gBACoB,IAA/BmK,EAAGnK,QAAQ,iBACqB,IAAjCmK,EAAGnK,QAAQ,mBACe,IAA1BmK,EAAGnK,QAAQ,YACsB,IAAjCmK,EAAGnK,QAAQ,kBAGW,UAAtBoK,SAASC,YAML/H,OAAOgI,SAAW,cAAehI,OAAOgI,a,mBCzClDnO,EAAOD,QADK,I,qBCcE,EAAQ,QAIZmD,QAAQ,OAAQ,SAAUiD,QAAU,UAAWiI,MAAQ,cAAeA,O,qBCnBlF,IAAIC,EAAW,EAAQ,QACnBzI,EAAS,EAAQ,QACjBnD,EAAgB,EAAQ,QACxB6L,EAAkB,EAAQ,QAC1BjJ,EAAK,EAAQ,QACbkJ,EAAW,EAAQ,QA6FrBvO,EAAOD,QA/EP,SAAmByG,EAAO8C,EAAUpI,EAAOwE,GAIzC,GAHAA,GAAgBL,EAAGK,EAAe,cAAuBA,GAGpDL,EAAGnE,EAAO,aAAc,CAC3B,IAAIiL,EAASmC,EAAgB9H,EAAOtF,GACpC,IAAKmE,EAAG8G,EAAQ,aACd,OAAOA,EAeX,IAVA,IAAIqC,EAAWvO,EAAGwO,EAAahJ,EAAMiJ,EASjCC,EAAQ,CAAC,YAAa,QAAS,SAC3B/I,EAAOC,OAAS8I,EAAMtL,QAC5BmL,GAAY,EACZ5I,EAAOI,QAAUvD,EAAckM,EAAMC,SACrChJ,EAAOC,MAAQD,EAAOI,QAAQH,MAIhC,SAASgJ,IACHL,WACK5I,EAAOC,aACPD,EAAOI,SAKlB,IADAyI,EAAcjI,EAAMnD,OACfpD,EAAI,EAAGA,EAAIwO,EAAaxO,IAQ3B,GAPAwF,EAAOe,EAAMvG,GACbyO,EAAS9I,EAAOC,MAAMJ,GAElB4I,EAAS5I,EAAM,OACjBA,EAAO8I,EAAS9I,SAGSE,IAAvBC,EAAOC,MAAMJ,GAAqB,CAKpC,GAAKC,GAAkBL,EAAGnE,EAAO,aAqB/B,OADA2N,IACoB,QAAbvF,GAAqB7D,EAjB5B,IACEG,EAAOC,MAAMJ,GAAQvE,EACrB,MAAOkI,IAMT,GAAIxD,EAAOC,MAAMJ,KAAUiJ,EAEzB,OADAG,IACoB,QAAbvF,GAAqB7D,EAYpC,OADAoJ,KACO,I,qBC/FX,IAAI5M,EAAiB,EAAQ,QAEvBa,EAAY,aAChBA,EAAUjB,UAAYI,EAItBa,EAAY,IAAIA,EAEhB9C,EAAOD,QAAU+C,G,qBCTnB,IAAIuC,EAAK,EAAQ,QACbyJ,EAAS,EAAQ,QAsCnB9O,EAAOD,QA1BP,SAAsByG,EAAOuI,EAAKjJ,GAChC,IAAIkJ,EAEJ,IAAK,IAAI/O,KAAKuG,EACZ,GAAIA,EAAMvG,KAAM8O,EAGd,OAAa,IAATjJ,EACKU,EAAMvG,IAGf+O,EAAOD,EAAIvI,EAAMvG,IAGboF,EAAG2J,EAAM,YAEJF,EAAOE,EAAMlJ,GAAQiJ,GAIvBC,GAGX,OAAO,I,qBCzBX,IAAIlM,EAAY,EAAQ,QACpB0C,EAAe,EAAQ,QACzB1C,EAAUI,QAAQ,mBAAmB,WACnC,QAASsC,EAAa,cAAe,OAAO,O,qBCdhD,IAAI2H,EAA0B,EAAQ,QAClC8B,EAAW,EAAQ,QACnBC,EAAgB,EAAQ,QAuC1BlP,EAAOD,QA1BP,SAAyByG,EAAOtF,GAC9B,IAAIjB,EAAIuG,EAAMnD,OAEd,GAAI,QAAS8C,QAAU,aAAcA,OAAOgJ,IAAK,CAE/C,KAAOlP,KACL,GAAIkG,OAAOgJ,IAAIC,SAASH,EAASzI,EAAMvG,IAAKiB,GAC1C,OAAO,EAGX,OAAO,EAGJ,GAAI,oBAAqBiF,OAAQ,CAGpC,IADA,IAAIkJ,EAAgB,GACbpP,KACLoP,EAAcpJ,KAAK,IAAMgJ,EAASzI,EAAMvG,IAAM,IAAMiB,EAAQ,KAG9D,OADAmO,EAAgBA,EAAcpH,KAAK,QAC5BkF,EAAwB,cAAgBkC,EAAgB,4CAA4C,SAAS7H,GAClH,MAAiD,aAA1C0H,EAAc1H,EAAM,KAAM,kB,qBCpCzC,IAAIvF,EAAiB,EAAQ,QACzBkL,EAA0B,EAAQ,QAwDhC5F,EAAatF,EAAesF,WAAa4F,EAC7CnN,EAAOD,QAAUwH,G,qBC1DnB,IAAItF,EAAiB,EAAQ,QACzBa,EAAY,EAAQ,QACpBqC,EAAa,EAAQ,QACrBlC,EAAa,EAAQ,QAsJvB,SAASC,EAAQsJ,EAASxF,GAExB,GAAuB,iBAAZwF,EACT,IAAK,IAAIhL,KAAOgL,EACVrH,EAAWqH,EAAShL,IACtB0B,EAAQ1B,EAAKgL,EAAShL,QAGrB,CAGL,IAAImL,GADJH,EAAUA,EAAQlK,eACaC,MAAM,KACjC+M,EAAOxM,EAAU6J,EAAiB,IAOtC,GAJgC,IAA5BA,EAAiBtJ,SACnBiM,EAAOA,EAAK3C,EAAiB,UAGX,IAAT2C,EAMT,OAAOxM,EAGTkE,EAAuB,mBAATA,EAAsBA,IAASA,EAGb,IAA5B2F,EAAiBtJ,OACnBP,EAAU6J,EAAiB,IAAM3F,IAG7BlE,EAAU6J,EAAiB,KAAS7J,EAAU6J,EAAiB,cAAe7H,UAChFhC,EAAU6J,EAAiB,IAAM,IAAI7H,QAAQhC,EAAU6J,EAAiB,MAG1E7J,EAAU6J,EAAiB,IAAIA,EAAiB,IAAM3F,GAIxD/D,EAAW,EAAI+D,IAAiB,IAATA,EAAiB,GAAK,OAAS2F,EAAiB1E,KAAK,OAG5EnF,EAAUyM,SAAS/C,EAASxF,GAG9B,OAAOlE,EApMTb,EAAeuN,GAAK,GA0BpBvN,EAAe2J,GAAK,SAASY,EAASX,GAE/BE,KAAKyD,GAAGhD,KACXT,KAAKyD,GAAGhD,GAAW,IAIrBT,KAAKyD,GAAGhD,GAASvG,KAAK4F,GAGlB/I,EAAUhB,eAAe0K,IAE3BlI,YAAW,WACTxB,EAAUyM,SAAS/C,EAAS1J,EAAU0J,MACrC,IAiBPvK,EAAesN,SAAW,SAAS/C,EAASiD,GAC1C,GAAK1D,KAAKyD,GAAGhD,GAAb,CAIA,IAAIkD,EAAM3D,KAAKyD,GAAGhD,GAGlBlI,YAAW,WACT,IAAIrE,EACJ,IAAKA,EAAI,EAAGA,EAAIyP,EAAIrM,OAAQpD,KAC1B4L,EAAK6D,EAAIzP,IACNwP,KAEJ,UAGI1D,KAAKyD,GAAGhD,KA8HjB1J,EAAUM,GAAG6C,MAAK,WAChBhE,EAAeiB,QAAUA,KAG3BlD,EAAOD,QAAUmD,G,qBC/LnB,IAAIJ,EAAY,EAAQ,QACpB4F,EAAW,EAAQ,QACnBjG,EAAgB,EAAQ,QAE1BK,EAAUI,QAAQ,gBAAgB,WAOhC,IALA,IAGIyM,EAHAC,EAAO,oBAEPC,EAAM,GAGD5P,EAAI,EAAG2G,EAAM8B,EAASrF,OAAS,EAAGpD,EAAI2G,EAAK3G,IAClD0P,EAAe,IAAN1P,EAAU,MAAQ,GAC3B4P,GAAOD,EAAOlH,EAASzI,GAAK,mBAAqB0P,EAAQ,0BAGvD7M,EAAUV,QAAQC,cAEpBwN,GAAOD,0EAGT,IACI/J,EADOpD,EAAc,KACRoD,MAIjB,OAHAA,EAAMkB,QAAU8I,GAGR,GAAKhK,EAAMiK,iBAAiBjM,QAAQ,aAAe,M,uBC7B/C,EAAQ,QACZX,QAAQ,WAAW,WAC3B,IACE6M,GAAkB,EACpB,IACEA,IAAoBC,KAAKC,MAHb,4BAIZ,MAAO7G,IAGT,SAAU4G,KAAKE,KACbF,KAAKnO,WACLmO,KAAKnO,UAAUsO,aACfH,KAAKnO,UAAUuO,QACfL,O,qBC7BN,IASM3J,EATc,EAAQ,OASV3D,CAAc,SAC9BzC,EAAOD,QAAUqG,G,qBCYH,EAAQ,QACZlD,QAAQ,QAASN,SAASW,mBAAqBX,SAASW,gBAAgB,6BAA8B,OAAO8M,gB,qBCKzH,IAGQrC,EACAsC,EACAC,EALJzN,EAAY,EAAQ,QACpByE,EAAa,EAAQ,SAEjByG,EAAK5J,UAAUC,UACfiM,EAAQtC,EAAGwC,MAAM,qBACjBD,EAASvC,EAAGwC,MAAM,oBAAsBxC,EAAGwC,MAAM,yBAA2BC,WAAW3I,OAAO4I,KAAO,EAClGJ,GAASC,GAGhBzN,EAAUI,QAAQ,YAAY,GAE9BqE,EAAW,uDAAuD,SAASC,EAAMuC,GAC/E,IAAIlE,EAAQjD,SAAS+N,eAAe,cAChCC,EAAQ/K,EAAM+K,OAAS/K,EAAM4E,WAC7B1D,EAAU6J,EAASA,EAAMC,UAAYD,EAAMC,SAAS,GAAKD,EAAMC,SAAS,GAAG9J,QAAU6J,EAAM7J,SAAW,GAAM,GAC5GJ,EAAO,OAAOK,KAAKD,IAAoD,IAAxCA,EAAQlD,QAAQkG,EAAKxH,MAAM,KAAK,IACnEO,EAAUI,QAAQ,WAAYyD,O,qBC9BlC3G,EAAOD,QAJP,SAAYgP,EAAKjI,GACf,cAAciI,IAAQjI,I,qBCD1B,IAAIhE,EAAY,EAAQ,QACpBL,EAAgB,EAAQ,QAc1BK,EAAUI,QAAQ,SAAS,WACzB,IAAI4C,EAAOrD,EAAc,SACrBkE,GAAO,EAEX,KACEA,IAASb,EAAKgD,gBAEZnC,EAAY,IAAI7B,QAAQ6B,IACnBoC,IAAOjD,EAAKgD,YAAY,8BAA+Bf,QAAQ,OAAQ,IAC5EpB,EAAKmK,IAAOhL,EAAKgD,YAAY,4BAA+Bf,QAAQ,OAAQ,IAC5EpB,EAAKoK,KAAQjL,EAAKgD,YAAY,6BACjBhD,EAAKgD,YAAY,6BAA8Bf,QAAQ,OAAQ,IAK5EpB,EAAKqK,IAAOlL,EAAKgD,YAAY,yBAA8Bf,QAAQ,OAAQ,IAC3EpB,EAAKsK,KAAQnL,EAAKgD,YAAY,iBACjBhD,EAAKgD,YAAY,eAA4Bf,QAAQ,OAAQ,KAE5E,MAAOqB,IAET,OAAOzC,M,qBC/CX,IAOMjE,EAA8C,QAPnC,EAAQ,QAOAwO,SAAS5O,cAEhCtC,EAAOD,QAAU2C,G,qBCUnB,IAAII,EAAY,EAAQ,QACpB0C,EAAe,EAAQ,QACzB1C,EAAUI,QAAQ,gBAAgB,WAChC,OAAOsC,EAAa,sBAAuB,OAAO,IAASA,EAAa,sBAAuB,OAAO,O,qBCX1G,IAAI1C,EAAY,EAAQ,QACpBL,EAAgB,EAAQ,QAC1BK,EAAUI,QAAQ,cAAgB,gBAAiBT,EAAc,UAAY,gBAAiBA,EAAc","file":"/js/detection.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","var ModernizrProto = require('./ModernizrProto.js');\nvar omPrefixes = require('./omPrefixes.js');\n  /**\n   * List of JavaScript DOM values used for tests\n   *\n   * @memberOf Modernizr\n   * @name Modernizr._domPrefixes\n   * @optionName Modernizr._domPrefixes\n   * @optionProp domPrefixes\n   * @access public\n   * @example\n   *\n   * Modernizr._domPrefixes is exactly the same as [_prefixes](#modernizr-_prefixes), but rather\n   * than kebab-case properties, all properties are their Capitalized variant\n   *\n   * ```js\n   * Modernizr._domPrefixes === [ \"Moz\", \"O\", \"ms\", \"Webkit\" ];\n   * ```\n   */\n  var domPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.toLowerCase().split(' ') : []);\n  ModernizrProto._domPrefixes = domPrefixes;\n  module.exports = domPrefixes;\n\n","var createElement = require('./createElement.js');\nvar isSVG = require('./isSVG.js');\n  /**\n   * getBody returns the body of a document, or an element that can stand in for\n   * the body if a real body does not exist\n   *\n   * @access private\n   * @function getBody\n   * @returns {HTMLElement|SVGElement} Returns the real body of a document, or an\n   * artificially created element that stands in for the body\n   */\n  function getBody() {\n    // After page load injecting a fake body doesn't work so check if body exists\n    var body = document.body;\n\n    if (!body) {\n      // Can't use the real body create a fake one.\n      body = createElement(isSVG ? 'svg' : 'body');\n      body.fake = true;\n    }\n\n    return body;\n  }\n\n  module.exports = getBody;\n\n","var Modernizr = require('./lib/Modernizr'),\n    ModernizrProto = require('./lib/ModernizrProto'),\n    classes = require('./lib/classes'),\n    testRunner = require('./lib/testRunner'),\n    setClasses = require('./lib/setClasses');\n\n// Run each test\ntestRunner();\n\n// Remove the \"no-js\" class if it exists\nsetClasses(classes);\n\ndelete ModernizrProto.addTest;\ndelete ModernizrProto.addAsyncTest;\n\n// Run the things that are supposed to run after the tests\nfor (var i = 0; i < Modernizr._q.length; i++) {\n  Modernizr._q[i]();\n}\n\nmodule.exports = Modernizr;\n","var isSVG = require('./isSVG.js');\n  /**\n   * createElement is a convenience wrapper around document.createElement. Since we\n   * use createElement all over the place, this allows for (slightly) smaller code\n   * as well as abstracting away issues with creating elements in contexts other than\n   * HTML documents (e.g. SVG documents).\n   *\n   * @access private\n   * @function createElement\n   * @returns {HTMLElement|SVGElement} An HTML or SVG element\n   */\n  function createElement() {\n    if (typeof document.createElement !== 'function') {\n      // This is the case in IE7, where the type of createElement is \"object\".\n      // For this reason, we cannot call apply() as Object is not a Function.\n      return document.createElement(arguments[0]);\n    } else if (isSVG) {\n      return document.createElementNS.call(document, 'http://www.w3.org/2000/svg', arguments[0]);\n    } else {\n      return document.createElement.apply(document, arguments);\n    }\n  }\n\n  module.exports = createElement;\n\n","/*!\n{\n  \"name\": \"ES5 Array\",\n  \"property\": \"es5array\",\n  \"notes\": [{\n    \"name\": \"ECMAScript 5.1 Language Specification\",\n    \"href\": \"https://www.ecma-international.org/ecma-262/5.1/\"\n  }],\n  \"polyfills\": [\"es5shim\"],\n  \"authors\": [\"Ron Waldon (@jokeyrhyme)\"],\n  \"tags\": [\"es5\"]\n}\n!*/\n/* DOC\nCheck if browser implements ECMAScript 5 Array per specification.\n*/\nvar Modernizr = require('./../../lib/Modernizr.js');\n  Modernizr.addTest('es5array', function() {\n    return !!(Array.prototype &&\n      Array.prototype.every &&\n      Array.prototype.filter &&\n      Array.prototype.forEach &&\n      Array.prototype.indexOf &&\n      Array.prototype.lastIndexOf &&\n      Array.prototype.map &&\n      Array.prototype.some &&\n      Array.prototype.reduce &&\n      Array.prototype.reduceRight &&\n      Array.isArray);\n  });\n\n","/*!\n{\n  \"name\": \"Data URI\",\n  \"property\": \"datauri\",\n  \"caniuse\": \"datauri\",\n  \"tags\": [\"url\"],\n  \"builderAliases\": [\"url_data_uri\"],\n  \"async\": true,\n  \"notes\": [{\n    \"name\": \"Wikipedia article\",\n    \"href\": \"https://en.wikipedia.org/wiki/Data_URI_scheme\"\n  }],\n  \"warnings\": [\"Support in Internet Explorer 8 is limited to images and linked resources like CSS files, not HTML files\"]\n}\n!*/\n/* DOC\nDetects support for data URIs. Provides a subproperty to report support for data URIs over 32kb in size:\n\n```javascript\nModernizr.datauri           // true\nModernizr.datauri.over32kb  // false in IE8\n```\n*/\nvar Modernizr = require('./../../lib/Modernizr.js');\nvar addTest = require('./../../lib/addTest.js');\n  // https://github.com/Modernizr/Modernizr/issues/14\n  Modernizr.addAsyncTest(function() {\n\n    // IE7 throw a mixed content warning on HTTPS for this test, so we'll\n    // just blacklist it (we know it doesn't support data URIs anyway)\n    // https://github.com/Modernizr/Modernizr/issues/362\n    if (navigator.userAgent.indexOf('MSIE 7.') !== -1) {\n      // Keep the test async\n      setTimeout(function() {\n        addTest('datauri', false);\n      }, 10);\n    }\n\n    var datauri = new Image();\n\n    datauri.onerror = function() {\n      addTest('datauri', false);\n    };\n    datauri.onload = function() {\n      if (datauri.width === 1 && datauri.height === 1) {\n        testOver32kb();\n      }\n      else {\n        addTest('datauri', false);\n      }\n    };\n\n    datauri.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';\n\n    // Once we have datauri, let's check to see if we can use data URIs over\n    // 32kb (IE8 can't). https://github.com/Modernizr/Modernizr/issues/321\n    function testOver32kb() {\n\n      var datauriBig = new Image();\n\n      datauriBig.onerror = function() {\n        addTest('datauri', true);\n        Modernizr.datauri = new Boolean(true);\n        Modernizr.datauri.over32kb = false;\n      };\n      datauriBig.onload = function() {\n        addTest('datauri', true);\n        Modernizr.datauri = new Boolean(true);\n        Modernizr.datauri.over32kb = (datauriBig.width === 1 && datauriBig.height === 1);\n      };\n\n      var base64str = 'R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';\n      while (base64str.length < 33000) {\n        base64str = '\\r\\n' + base64str;\n      }\n      datauriBig.src = 'data:image/gif;base64,' + base64str;\n    }\n\n  });\n\n","var is = require('./is.js');\n  /**\n   * hasOwnProp is a shim for hasOwnProperty that is needed for Safari 2.0 support\n   *\n   * @author kangax\n   * @access private\n   * @function hasOwnProp\n   * @param {object} object - The object to check for a property\n   * @param {string} property - The property to check for\n   * @returns {boolean}\n   */\n\n  // hasOwnProperty shim by kangax needed for Safari 2.0 support\n  var hasOwnProp;\n\n  (function() {\n    var _hasOwnProperty = ({}).hasOwnProperty;\n    /* istanbul ignore else */\n    /* we have no way of testing IE 5.5 or safari 2,\n     * so just assume the else gets hit */\n    if (!is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined')) {\n      hasOwnProp = function(object, property) {\n        return _hasOwnProperty.call(object, property);\n      };\n    }\n    else {\n      hasOwnProp = function(object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */\n        return ((property in object) && is(object.constructor.prototype[property], 'undefined'));\n      };\n    }\n  })();\n\n  module.exports = hasOwnProp;\n\n","var ModernizrProto = require('./ModernizrProto.js');\nvar testPropsAll = require('./testPropsAll.js');\n  /**\n   * testAllProps determines whether a given CSS property is supported in the browser\n   *\n   * @memberOf Modernizr\n   * @name Modernizr.testAllProps\n   * @optionName Modernizr.testAllProps()\n   * @optionProp testAllProps\n   * @access public\n   * @function testAllProps\n   * @param {string} prop - String naming the property to test (either camelCase or kebab-case)\n   * @param {string} [value] - String of the value to test\n   * @param {boolean} [skipValueTest=false] - Whether to skip testing that the value is supported when using non-native detection\n   * @returns {false|string} returns the string version of the property, or false if it is unsupported\n   * @example\n   *\n   * testAllProps determines whether a given CSS property, in some prefixed form,\n   * is supported by the browser.\n   *\n   * ```js\n   * testAllProps('boxSizing')  // true\n   * ```\n   *\n   * It can optionally be given a CSS value in string form to test if a property\n   * value is valid\n   *\n   * ```js\n   * testAllProps('display', 'block') // true\n   * testAllProps('display', 'penguin') // false\n   * ```\n   *\n   * A boolean can be passed as a third parameter to skip the value check when\n   * native detection (@supports) isn't available.\n   *\n   * ```js\n   * testAllProps('shapeOutside', 'content-box', true);\n   * ```\n   */\n  function testAllProps(prop, value, skipValueTest) {\n    return testPropsAll(prop, undefined, undefined, value, skipValueTest);\n  }\n\n  ModernizrProto.testAllProps = testAllProps;\n\n  module.exports = testAllProps;\n\n","var Modernizr = require('./Modernizr.js');\nvar modElem = require('./modElem.js');\n  var mStyle = {\n    style: modElem.elem.style\n  };\n\n  // kill ref for gc, must happen before mod.elem is removed, so we unshift on to\n  // the front of the queue.\n  Modernizr._q.unshift(function() {\n    delete mStyle.style;\n  });\n\n  module.exports = mStyle;\n\n","var Modernizr = require('./Modernizr.js');\nvar createElement = require('./createElement.js');\n  /**\n   * Create our \"modernizr\" element that we do most feature tests on.\n   *\n   * @access private\n   */\n  var modElem = {\n    elem: createElement('modernizr')\n  };\n\n  // Clean up this element\n  Modernizr._q.push(function() {\n    delete modElem.elem;\n  });\n\n  module.exports = modElem;\n\n","/*!\n{\n  \"name\": \"CSS Transforms\",\n  \"property\": \"csstransforms\",\n  \"caniuse\": \"transforms2d\",\n  \"tags\": [\"css\"]\n}\n!*/\nvar Modernizr = require('./../../lib/Modernizr.js');\nvar testAllProps = require('./../../lib/testAllProps.js');\n  Modernizr.addTest('csstransforms', function() {\n    // Android < 3.0 is buggy, so we sniff and blacklist\n    // https://github.com/Modernizr/Modernizr/issues/903\n    return navigator.userAgent.indexOf('Android 2.') === -1 &&\n           testAllProps('transform', 'scale(1)', true);\n  });\n\n","\n  /**\n   * If the browsers follow the spec, then they would expose vendor-specific styles as:\n   *   elem.style.WebkitBorderRadius\n   * instead of something like the following (which is technically incorrect):\n   *   elem.style.webkitBorderRadius\n\n   * WebKit ghosts their properties in lowercase but Opera & Moz do not.\n   * Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+\n   *   erik.eae.net/archives/2008/03/10/21.48.10/\n\n   * More here: github.com/Modernizr/Modernizr/issues/issue/21\n   *\n   * @access private\n   * @returns {string} The string representing the vendor-specific style properties\n   */\n  var omPrefixes = 'Moz O ms Webkit';\n  module.exports = omPrefixes;\n\n","// global window: false, document: false, addTest: false\n\n/**\n * Custom Tests\n */\n \nrequire('browsernizr/test/css/animations');\nrequire('browsernizr/test/css/backgroundsize');\nrequire('browsernizr/test/css/backgroundposition-xy');\nrequire('browsernizr/test/css/fontface');\nrequire('browsernizr/test/css/rgba');\nrequire('browsernizr/test/css/transforms');\nrequire('browsernizr/test/css/transforms3d');\nrequire('browsernizr/test/css/transitions');\nrequire('browsernizr/test/css/mediaqueries');\nrequire('browsernizr/test/css/opacity');\nrequire('browsernizr/test/css/gradients');\nrequire('browsernizr/test/css/generatedcontent');\n\nrequire('browsernizr/test/audio');\nrequire('browsernizr/test/audio/webaudio');\n\nrequire('browsernizr/test/es5/array');\nrequire('browsernizr/test/es5/date');\nrequire('browsernizr/test/es5/function');\nrequire('browsernizr/test/es5/object');\nrequire('browsernizr/test/es5/string');\n\nrequire('browsernizr/test/event/deviceorientation-motion');\n\nrequire('browsernizr/test/forms/placeholder');\nrequire('browsernizr/test/input');\nrequire('browsernizr/test/inputtypes');\n\nrequire('browsernizr/test/svg/asimg');\nrequire('browsernizr/test/svg');\nrequire('browsernizr/test/url/data-uri');\n\nrequire('browsernizr/test/history');\nrequire('browsernizr/test/touchevents');\nrequire('browsernizr/test/webanimations');\nrequire('browsernizr/test/json');\nrequire('browsernizr/test/video');\n\nwindow.Modernizr = require('browsernizr');\nmodule.exports = window.Modernizr;\n","/*!\n{\n  \"name\": \"Form input types\",\n  \"property\": \"inputtypes\",\n  \"caniuse\": \"forms\",\n  \"tags\": [\"forms\"],\n  \"authors\": [\"Mike Taylor\"],\n  \"polyfills\": [\n    \"jquerytools\",\n    \"webshims\",\n    \"h5f\",\n    \"webforms2\",\n    \"nwxforms\",\n    \"fdslider\",\n    \"html5slider\",\n    \"galleryhtml5forms\",\n    \"jscolor\",\n    \"html5formshim\",\n    \"selectedoptionsjs\",\n    \"formvalidationjs\"\n  ]\n}\n!*/\n/* DOC\nDetects support for HTML5 form input types and exposes Boolean subproperties with the results:\n\n```javascript\nModernizr.inputtypes.color\nModernizr.inputtypes.date\nModernizr.inputtypes.datetime\nModernizr.inputtypes['datetime-local']\nModernizr.inputtypes.email\nModernizr.inputtypes.month\nModernizr.inputtypes.number\nModernizr.inputtypes.range\nModernizr.inputtypes.search\nModernizr.inputtypes.tel\nModernizr.inputtypes.time\nModernizr.inputtypes.url\nModernizr.inputtypes.week\n```\n*/\nvar Modernizr = require('./../lib/Modernizr.js');\nvar inputElem = require('./../lib/inputElem.js');\nvar docElement = require('./../lib/docElement.js');\n  // Run through HTML5's new input types to see if the UA understands any.\n  //   This is put behind the tests runloop because it doesn't return a\n  //   true/false like all the other tests; instead, it returns an object\n  //   containing each input type with its corresponding true/false value\n\n  // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/\n  var inputtypes = 'search tel url email datetime date month week time datetime-local number range color'.split(' ');\n  var inputs = {};\n\n  Modernizr.inputtypes = (function(props) {\n    var len = props.length;\n    var smile = '1)';\n    var inputElemType;\n    var defaultView;\n    var bool;\n\n    for (var i = 0; i < len; i++) {\n\n      inputElem.setAttribute('type', inputElemType = props[i]);\n      bool = inputElem.type !== 'text' && 'style' in inputElem;\n\n      // We first check to see if the type we give it sticks..\n      // If the type does, we feed it a textual value, which shouldn't be valid.\n      // If the value doesn't stick, we know there's input sanitization which infers a custom UI\n      if (bool) {\n\n        inputElem.value         = smile;\n        inputElem.style.cssText = 'position:absolute;visibility:hidden;';\n\n        if (/^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined) {\n\n          docElement.appendChild(inputElem);\n          defaultView = document.defaultView;\n\n          // Safari 2-4 allows the smiley as a value, despite making a slider\n          bool =  defaultView.getComputedStyle &&\n            defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&\n            // Mobile android web browser has false positive, so must\n            // check the height to see if the widget is actually there.\n            (inputElem.offsetHeight !== 0);\n\n          docElement.removeChild(inputElem);\n\n        } else if (/^(search|tel)$/.test(inputElemType)) {\n          // Spec doesn't define any special parsing or detectable UI\n          //   behaviors so we pass these through as true\n\n          // Interestingly, opera fails the earlier test, so it doesn't\n          //  even make it here.\n\n        } else if (/^(url|email)$/.test(inputElemType)) {\n          // Real url and email support comes with prebaked validation.\n          bool = inputElem.checkValidity && inputElem.checkValidity() === false;\n\n        } else {\n          // If the upgraded input component rejects the :) text, we got a winner\n          bool = inputElem.value !== smile;\n        }\n      }\n\n      inputs[ props[i] ] = !!bool;\n    }\n    return inputs;\n  })(inputtypes);\n\n","/*!\n{\n  \"name\": \"CSS Generated Content\",\n  \"property\": \"generatedcontent\",\n  \"tags\": [\"css\"],\n  \"warnings\": [\"Android won't return correct height for anything below 7px #738\"],\n  \"notes\": [{\n    \"name\": \"W3C Spec\",\n    \"href\": \"https://www.w3.org/TR/css3-selectors/#gen-content\"\n  },{\n    \"name\": \"MDN Docs on :before\",\n    \"href\": \"https://developer.mozilla.org/en-US/docs/Web/CSS/::before\"\n  },{\n    \"name\": \"MDN Docs on :after\",\n    \"href\": \"https://developer.mozilla.org/en-US/docs/Web/CSS/::after\"\n  }]\n}\n!*/\nvar Modernizr = require('./../../lib/Modernizr.js');\nvar testStyles = require('./../../lib/testStyles.js');\n  testStyles('#modernizr{font:0/0 a}#modernizr:after{content:\":)\";visibility:hidden;font:7px/1 a}', function(node) {\n    // See bug report on why this value is 6 crbug.com/608142\n    Modernizr.addTest('generatedcontent', node.offsetHeight >= 6);\n  });\n\n","/*!\n{\n  \"name\": \"CSS Animations\",\n  \"property\": \"cssanimations\",\n  \"caniuse\": \"css-animation\",\n  \"polyfills\": [\"transformie\", \"csssandpaper\"],\n  \"tags\": [\"css\"],\n  \"warnings\": [\"Android < 4 will pass this test, but can only animate a single property at a time\"],\n  \"notes\": [{\n    \"name\": \"Article: 'Dispelling the Android CSS animation myths'\",\n    \"href\": \"https://web.archive.org/web/20180602074607/https://daneden.me/2011/12/14/putting-up-with-androids-bullshit/\"\n  }]\n}\n!*/\n/* DOC\nDetects whether or not elements can be animated using CSS\n*/\nvar Modernizr = require('./../../lib/Modernizr.js');\nvar testAllProps = require('./../../lib/testAllProps.js');\n  Modernizr.addTest('cssanimations', testAllProps('animationName', 'a', true));\n\n","/*!\n{\n  \"name\": \"Background Size\",\n  \"property\": \"backgroundsize\",\n  \"tags\": [\"css\"],\n  \"knownBugs\": [\"This will false positive in Opera Mini - https://github.com/Modernizr/Modernizr/issues/396\"],\n  \"notes\": [{\n    \"name\": \"Related Issue\",\n    \"href\": \"https://github.com/Modernizr/Modernizr/issues/396\"\n  }]\n}\n!*/\nvar Modernizr = require('./../../lib/Modernizr.js');\nvar testAllProps = require('./../../lib/testAllProps.js');\n  Modernizr.addTest('backgroundsize', testAllProps('backgroundSize', '100%', true));\n\n","var Modernizr = require('./Modernizr.js');\nvar docElement = require('./docElement.js');\nvar isSVG = require('./isSVG.js');\n  /**\n   * setClasses takes an array of class names and adds them to the root element\n   *\n   * @access private\n   * @function setClasses\n   * @param {string[]} classes - Array of class names\n   */\n  // Pass in an and array of class names, e.g.:\n  //  ['no-webp', 'borderradius', ...]\n  function setClasses(classes) {\n    var className = docElement.className;\n    var classPrefix = Modernizr._config.classPrefix || '';\n\n    if (isSVG) {\n      className = className.baseVal;\n    }\n\n    // Change `no-js` to `js` (independently of the `enableClasses` option)\n    // Handle classPrefix on this too\n    if (Modernizr._config.enableJSClass) {\n      var reJS = new RegExp('(^|\\\\s)' + classPrefix + 'no-js(\\\\s|$)');\n      className = className.replace(reJS, '$1' + classPrefix + 'js$2');\n    }\n\n    if (Modernizr._config.enableClasses) {\n      // Add the new classes\n      if (classes.length > 0) {\n        className += ' ' + classPrefix + classes.join(' ' + classPrefix);\n      }\n      if (isSVG) {\n        docElement.className.baseVal = className;\n      } else {\n        docElement.className = className;\n      }\n    }\n  }\n\n  module.exports = setClasses;\n\n","/*!\n{\n  \"name\": \"Orientation and Motion Events\",\n  \"property\": [\"devicemotion\", \"deviceorientation\"],\n  \"caniuse\": \"deviceorientation\",\n  \"notes\": [{\n    \"name\": \"W3C Editor's Draft Spec\",\n    \"href\": \"https://w3c.github.io/deviceorientation/\"\n  },{\n    \"name\": \"MDN Docs\",\n    \"href\": \"https://developer.mozilla.org/en-US/docs/Web/API/Detecting_device_orientation\"\n  }],\n  \"authors\": [\"Shi Chuan\"],\n  \"tags\": [\"event\"],\n  \"builderAliases\": [\"event_deviceorientation_motion\"]\n}\n!*/\n/* DOC\nPart of Device Access aspect of HTML5, same category as geolocation.\n\n`devicemotion` tests for Device Motion Event support, returns boolean value true/false.\n\n`deviceorientation` tests for Device Orientation Event support, returns boolean value true/false\n*/\nvar Modernizr = require('./../../lib/Modernizr.js');\n  Modernizr.addTest('devicemotion', 'DeviceMotionEvent' in window);\n  Modernizr.addTest('deviceorientation', 'DeviceOrientationEvent' in window);\n\n","var ModernizrProto = require('./ModernizrProto.js');\nvar omPrefixes = require('./omPrefixes.js');\n  var cssomPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.split(' ') : []);\n  ModernizrProto._cssomPrefixes = cssomPrefixes;\n  module.exports = cssomPrefixes;\n\n","/*!\n{\n  \"name\": \"Input attributes\",\n  \"property\": \"input\",\n  \"tags\": [\"forms\"],\n  \"authors\": [\"Mike Taylor\"],\n  \"notes\": [{\n    \"name\": \"WHATWG Spec\",\n    \"href\": \"https://html.spec.whatwg.org/multipage/input.html#input-type-attr-summary\"\n  }],\n  \"knownBugs\": [\"Some blackberry devices report false positive for input.multiple\"]\n}\n!*/\n/* DOC\nDetects support for HTML5 `<input>` element attributes and exposes Boolean subproperties with the results:\n\n```javascript\nModernizr.input.autocomplete\nModernizr.input.autofocus\nModernizr.input.list\nModernizr.input.max\nModernizr.input.min\nModernizr.input.multiple\nModernizr.input.pattern\nModernizr.input.placeholder\nModernizr.input.required\nModernizr.input.step\n```\n*/\nvar Modernizr = require('./../lib/Modernizr.js');\nvar createElement = require('./../lib/createElement.js');\nvar inputElem = require('./../lib/inputElem.js');\n  // Run through HTML5's new input attributes to see if the UA understands any.\n  // Mike Taylr has created a comprehensive resource for testing these attributes\n  //   when applied to all input types:\n  //   miketaylr.com/code/input-type-attr.html\n\n  // Only input placeholder is tested while textarea's placeholder is not.\n  // Currently Safari 4 and Opera 11 have support only for the input placeholder\n  // Both tests are available in feature-detects/forms-placeholder.js\n\n  var inputattrs = 'autocomplete autofocus list placeholder max min multiple pattern required step'.split(' ');\n  var attrs = {};\n\n  Modernizr.input = (function(props) {\n    for (var i = 0, len = props.length; i < len; i++) {\n      attrs[ props[i] ] = !!(props[i] in inputElem);\n    }\n    if (attrs.list) {\n      // safari false positive's on datalist: webk.it/74252\n      // see also github.com/Modernizr/Modernizr/issues/146\n      attrs.list = !!(createElement('datalist') && window.HTMLDataListElement);\n    }\n    return attrs;\n  })(inputattrs);\n\n","// global window: false\n\n/**\n * Protect window.console method calls, e.g. console is not defined on IE\n * unless dev tools are open, and IE doesn't define console.debug\n */\n \n(function () {\n    'use strict';\n\n    var m, i;\n\n    if (!window.console) {\n        window.console = {};\n        // union of Chrome, FF, IE, and Safari console methods\n        m = [\n            \"log\", \"info\", \"warn\", \"error\", \"debug\", \"trace\", \"dir\", \"group\",\n            \"groupCollapsed\", \"groupEnd\", \"time\", \"timeEnd\", \"profile\", \"profileEnd\",\n            \"dirxml\", \"assert\", \"count\", \"markTimeline\", \"timeStamp\", \"clear\"\n        ];\n        // define undefined methods as noops to prevent errors\n        for (i = 0; i < m.length; i += 1) {\n            if (!window.console[m[i]]) {\n                window.console[m[i]] = function () {};\n            }\n        }\n    }\n}());\n","/*!\n{\n  \"name\": \"Touch Events\",\n  \"property\": \"touchevents\",\n  \"caniuse\": \"touch\",\n  \"tags\": [\"media\", \"attribute\"],\n  \"notes\": [{\n    \"name\": \"Touch Events spec\",\n    \"href\": \"https://www.w3.org/TR/2013/WD-touch-events-20130124/\"\n  }],\n  \"warnings\": [\n    \"Indicates if the browser supports the Touch Events spec, and does not necessarily reflect a touchscreen device\"\n  ],\n  \"knownBugs\": [\n    \"False-positive on some configurations of Nokia N900\",\n    \"False-positive on some BlackBerry 6.0 builds – https://github.com/Modernizr/Modernizr/issues/372#issuecomment-3112695\"\n  ]\n}\n!*/\n/* DOC\nIndicates if the browser supports the W3C Touch Events API.\n\nThis *does not* necessarily reflect a touchscreen device:\n\n* Older touchscreen devices only emulate mouse events\n* Modern IE touch devices implement the Pointer Events API instead: use `Modernizr.pointerevents` to detect support for that\n* Some browsers & OS setups may enable touch APIs when no touchscreen is connected\n* Future browsers may implement other event models for touch interactions\n\nSee this article: [You Can't Detect A Touchscreen](http://www.stucox.com/blog/you-cant-detect-a-touchscreen/).\n\nIt's recommended to bind both mouse and touch/pointer events simultaneously – see [this HTML5 Rocks tutorial](https://www.html5rocks.com/en/mobile/touchandmouse/).\n\nThis test will also return `true` for Firefox 4 Multitouch support.\n*/\nvar Modernizr = require('./../lib/Modernizr.js');\nvar prefixes = require('./../lib/prefixes.js');\nvar mq = require('./../lib/mq.js');\n  // Chrome (desktop) used to lie about its support on this, but that has since been rectified: https://bugs.chromium.org/p/chromium/issues/detail?id=36415\n  Modernizr.addTest('touchevents', function() {\n    if (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {\n      return true;\n    }\n\n    // include the 'heartz' as a way to have a non matching MQ to help terminate the join\n    // https://github.com/Modernizr/Modernizr/issues/1814\n    var query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join('');\n    return mq(query);\n  });\n\n","/*!\n{\n  \"name\": \"HTML5 Video\",\n  \"property\": \"video\",\n  \"caniuse\": \"video\",\n  \"tags\": [\"html5\"],\n  \"knownBugs\": [\"Without QuickTime, `Modernizr.video.h264` will be `undefined`; https://github.com/Modernizr/Modernizr/issues/546\"],\n  \"polyfills\": [\n    \"html5media\",\n    \"mediaelementjs\",\n    \"sublimevideo\",\n    \"videojs\",\n    \"leanbackplayer\",\n    \"videoforeverybody\"\n  ]\n}\n!*/\n/* DOC\nDetects support for the video element, as well as testing what types of content it supports.\n\nSubproperties are provided to describe support for `ogg`, `h264` and `webm` formats, e.g.:\n\n```javascript\nModernizr.video         // true\nModernizr.video.ogg     // 'probably'\n```\n*/\nvar Modernizr = require('./../lib/Modernizr.js');\nvar createElement = require('./../lib/createElement.js');\n  // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845\n  //                     thx to NielsLeenheer and zcorpan\n\n  // Note: in some older browsers, \"no\" was a return value instead of empty string.\n  //   It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2\n  //   It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5\n\n  Modernizr.addTest('video', function() {\n    var elem = createElement('video');\n    var bool = false;\n\n    // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224\n    try {\n      bool = !!elem.canPlayType;\n      if (bool) {\n        bool = new Boolean(bool);\n        bool.ogg = elem.canPlayType('video/ogg; codecs=\"theora\"').replace(/^no$/, '');\n\n        // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546\n        bool.h264 = elem.canPlayType('video/mp4; codecs=\"avc1.42E01E\"').replace(/^no$/, '');\n\n        bool.webm = elem.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/^no$/, '');\n\n        bool.vp9 = elem.canPlayType('video/webm; codecs=\"vp9\"').replace(/^no$/, '');\n\n        bool.hls = elem.canPlayType('application/x-mpegURL; codecs=\"avc1.42E01E\"').replace(/^no$/, '');\n      }\n    } catch (e) {}\n\n    return bool;\n  });\n\n","\n  /**\n   * docElement is a convenience wrapper to grab the root element of the document\n   *\n   * @access private\n   * @returns {HTMLElement|SVGElement} The root element of the document\n   */\n  var docElement = document.documentElement;\n  module.exports = docElement;\n\n","/*!\n{\n  \"name\": \"Web Audio API\",\n  \"property\": \"webaudio\",\n  \"caniuse\": \"audio-api\",\n  \"polyfills\": [\"xaudiojs\", \"dynamicaudiojs\", \"audiolibjs\"],\n  \"tags\": [\"audio\", \"media\"],\n  \"builderAliases\": [\"audio_webaudio_api\"],\n  \"authors\": [\"Addy Osmani\"],\n  \"notes\": [{\n    \"name\": \"W3C Spec\",\n    \"href\": \"https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html\"\n  }]\n}\n!*/\n/* DOC\nDetects the older non standard webaudio API, (as opposed to the standards based AudioContext API)\n*/\nvar Modernizr = require('./../../lib/Modernizr.js');\n  Modernizr.addTest('webaudio', function() {\n    var prefixed = 'webkitAudioContext' in window;\n    var unprefixed = 'AudioContext' in window;\n\n    if (Modernizr._config.usePrefixes) {\n      return prefixed || unprefixed;\n    }\n    return unprefixed;\n  });\n\n","/*!\n{\n  \"name\": \"Web Animation API\",\n  \"property\": \"webanimations\",\n  \"caniuse\": \"web-animation\",\n  \"tags\": [\"webanimations\"],\n  \"polyfills\": [\"webanimationsjs\"],\n  \"notes\": [{\n    \"name\": \"Introducing Web Animations\",\n    \"href\": \"https://birtles.wordpress.com/2013/06/26/introducing-web-animations/\"\n  }]\n}\n!*/\n/* DOC\nDetects support for the Web Animation API, a way to create css animations in js\n*/\nvar Modernizr = require('./../lib/Modernizr.js');\nvar createElement = require('./../lib/createElement.js');\n  Modernizr.addTest('webanimations', 'animate' in createElement('div'));\n\n","var ModernizrProto = require('./ModernizrProto.js');\n  /**\n   * List of property values to set for css tests. See ticket #21\n   * https://github.com/modernizr/modernizr/issues/21\n   *\n   * @memberOf Modernizr\n   * @name Modernizr._prefixes\n   * @optionName Modernizr._prefixes\n   * @optionProp prefixes\n   * @access public\n   * @example\n   *\n   * Modernizr._prefixes is the internal list of prefixes that we test against\n   * inside of things like [prefixed](#modernizr-prefixed) and [prefixedCSS](#-code-modernizr-prefixedcss). It is simply\n   * an array of kebab-case vendor prefixes you can use within your code.\n   *\n   * Some common use cases include\n   *\n   * Generating all possible prefixed version of a CSS property\n   * ```js\n   * var rule = Modernizr._prefixes.join('transform: rotate(20deg); ');\n   *\n   * rule === 'transform: rotate(20deg); webkit-transform: rotate(20deg); moz-transform: rotate(20deg); o-transform: rotate(20deg); ms-transform: rotate(20deg);'\n   * ```\n   *\n   * Generating all possible prefixed version of a CSS value\n   * ```js\n   * rule = 'display:' +  Modernizr._prefixes.join('flex; display:') + 'flex';\n   *\n   * rule === 'display:flex; display:-webkit-flex; display:-moz-flex; display:-o-flex; display:-ms-flex; display:flex'\n   * ```\n   */\n  // we use ['',''] rather than an empty array in order to allow a pattern of .`join()`ing prefixes to test\n  // values in feature detects to continue to work\n  var prefixes = (ModernizrProto._config.usePrefixes ? ' -webkit- -moz- -o- -ms- '.split(' ') : ['','']);\n\n  // expose these for the plugin API. Look in the source for how to join() them against your input\n  ModernizrProto._prefixes = prefixes;\n\n  module.exports = prefixes;\n\n","/*!\n{\n  \"name\": \"ES5 String\",\n  \"property\": \"es5string\",\n  \"notes\": [{\n    \"name\": \"ECMAScript 5.1 Language Specification\",\n    \"href\": \"https://www.ecma-international.org/ecma-262/5.1/\"\n  }],\n  \"polyfills\": [\"es5shim\"],\n  \"authors\": [\"Ron Waldon (@jokeyrhyme)\"],\n  \"tags\": [\"es5\"]\n}\n!*/\n/* DOC\nCheck if browser implements ECMAScript 5 String per specification.\n*/\nvar Modernizr = require('./../../lib/Modernizr.js');\n  Modernizr.addTest('es5string', function() {\n    return !!(String.prototype && String.prototype.trim);\n  });\n\n","\n  /**\n   * domToCSS takes a camelCase string and converts it to kebab-case\n   * e.g. boxSizing -> box-sizing\n   *\n   * @access private\n   * @function domToCSS\n   * @param {string} name - String name of camelCase prop we want to convert\n   * @returns {string} The kebab-case version of the supplied name\n   */\n  function domToCSS(name) {\n    return name.replace(/([A-Z])/g, function(str, m1) {\n      return '-' + m1.toLowerCase();\n    }).replace(/^ms-/, '-ms-');\n  }\n\n  module.exports = domToCSS;\n\n","\n  var classes = [];\n  module.exports = classes;\n\n","\n  /**\n   * contains checks to see if a string contains another string\n   *\n   * @access private\n   * @function contains\n   * @param {string} str - The string we want to check for substrings\n   * @param {string} substr - The substring we want to search the first string for\n   * @returns {boolean} true if and only if the first string 'str' contains the second string 'substr'\n   */\n  function contains(str, substr) {\n    return !!~('' + str).indexOf(substr);\n  }\n\n  module.exports = contains;\n\n","var ModernizrProto = require('./ModernizrProto.js');\nvar docElement = require('./docElement.js');\nvar createElement = require('./createElement.js');\nvar getBody = require('./getBody.js');\n  /**\n   * injectElementWithStyles injects an element with style element and some CSS rules\n   *\n   * @access private\n   * @function injectElementWithStyles\n   * @param {string} rule - String representing a css rule\n   * @param {Function} callback - A function that is used to test the injected element\n   * @param {number} [nodes] - An integer representing the number of additional nodes you want injected\n   * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes\n   * @returns {boolean} the result of the specified callback test\n   */\n  function injectElementWithStyles(rule, callback, nodes, testnames) {\n    var mod = 'modernizr';\n    var style;\n    var ret;\n    var node;\n    var docOverflow;\n    var div = createElement('div');\n    var body = getBody();\n\n    if (parseInt(nodes, 10)) {\n      // In order not to give false positives we create a node for each test\n      // This also allows the method to scale for unspecified uses\n      while (nodes--) {\n        node = createElement('div');\n        node.id = testnames ? testnames[nodes] : mod + (nodes + 1);\n        div.appendChild(node);\n      }\n    }\n\n    style = createElement('style');\n    style.type = 'text/css';\n    style.id = 's' + mod;\n\n    // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.\n    // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270\n    (!body.fake ? div : body).appendChild(style);\n    body.appendChild(div);\n\n    if (style.styleSheet) {\n      style.styleSheet.cssText = rule;\n    } else {\n      style.appendChild(document.createTextNode(rule));\n    }\n    div.id = mod;\n\n    if (body.fake) {\n      //avoid crashing IE8, if background image is used\n      body.style.background = '';\n      //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n      body.style.overflow = 'hidden';\n      docOverflow = docElement.style.overflow;\n      docElement.style.overflow = 'hidden';\n      docElement.appendChild(body);\n    }\n\n    ret = callback(div, rule);\n    // If this is done after page load we don't want to remove the body so check if body exists\n    if (body.fake) {\n      body.parentNode.removeChild(body);\n      docElement.style.overflow = docOverflow;\n      // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n      // eslint-disable-next-line\n      docElement.offsetHeight;\n    } else {\n      div.parentNode.removeChild(div);\n    }\n\n    return !!ret;\n  }\n\n  module.exports = injectElementWithStyles;\n\n","// global window: false\nwindow.Modernizr   = window.Modernizr || require('./detection/modernizr');\nrequire('./detection/console-log-fix');\n","/*!\n{\n  \"name\": \"ES5 Object\",\n  \"property\": \"es5object\",\n  \"notes\": [{\n    \"name\": \"ECMAScript 5.1 Language Specification\",\n    \"href\": \"https://www.ecma-international.org/ecma-262/5.1/\"\n  }],\n  \"polyfills\": [\"es5shim\", \"es5sham\"],\n  \"authors\": [\"Ron Waldon (@jokeyrhyme)\"],\n  \"tags\": [\"es5\"]\n}\n!*/\n/* DOC\nCheck if browser implements ECMAScript 5 Object per specification.\n*/\nvar Modernizr = require('./../../lib/Modernizr.js');\n  Modernizr.addTest('es5object', function() {\n    return !!(Object.keys &&\n      Object.create &&\n      Object.getPrototypeOf &&\n      Object.getOwnPropertyNames &&\n      Object.isSealed &&\n      Object.isFrozen &&\n      Object.isExtensible &&\n      Object.getOwnPropertyDescriptor &&\n      Object.defineProperty &&\n      Object.defineProperties &&\n      Object.seal &&\n      Object.freeze &&\n      Object.preventExtensions);\n  });\n\n","/*!\n{\n  \"name\": \"CSS rgba\",\n  \"caniuse\": \"css3-colors\",\n  \"property\": \"rgba\",\n  \"tags\": [\"css\"],\n  \"notes\": [{\n    \"name\": \"CSSTricks Tutorial\",\n    \"href\": \"https://css-tricks.com/rgba-browser-support/\"\n  }]\n}\n!*/\nvar Modernizr = require('./../../lib/Modernizr.js');\nvar createElement = require('./../../lib/createElement.js');\n  Modernizr.addTest('rgba', function() {\n    var style = createElement('a').style;\n    style.cssText = 'background-color:rgba(150,255,150,.5)';\n\n    return ('' + style.backgroundColor).indexOf('rgba') > -1;\n  });\n\n","/*!\n{\n  \"name\": \"CSS Transitions\",\n  \"property\": \"csstransitions\",\n  \"caniuse\": \"css-transitions\",\n  \"tags\": [\"css\"]\n}\n!*/\nvar Modernizr = require('./../../lib/Modernizr.js');\nvar testAllProps = require('./../../lib/testAllProps.js');\n  Modernizr.addTest('csstransitions', testAllProps('transition', 'all', true));\n\n","var tests = require('./tests.js');\n  /**\n   * ModernizrProto is the constructor for Modernizr\n   *\n   * @class\n   * @access public\n   */\n  var ModernizrProto = {\n    // The current version, dummy\n    _version: '3.6.0 (browsernizr 2.3.0)',\n\n    // Any settings that don't work as separate modules\n    // can go in here as configuration.\n    _config: {\n      'classPrefix': '',\n      'enableClasses': true,\n      'enableJSClass': true,\n      'usePrefixes': true\n    },\n\n    // Queue of tests\n    _q: [],\n\n    // Stub these for people who are listening\n    on: function(test, cb) {\n      // I don't really think people should do this, but we can\n      // safe guard it a bit.\n      // -- NOTE:: this gets WAY overridden in src/addTest for actual async tests.\n      // This is in case people listen to synchronous tests. I would leave it out,\n      // but the code to *disallow* sync tests in the real version of this\n      // function is actually larger than this.\n      var self = this;\n      setTimeout(function() {\n        cb(self[test]);\n      }, 0);\n    },\n\n    addTest: function(name, fn, options) {\n      tests.push({name: name, fn: fn, options: options});\n    },\n\n    addAsyncTest: function(fn) {\n      tests.push({name: null, fn: fn});\n    }\n  };\n\n  module.exports = ModernizrProto;\n\n","\n\n  /**\n   * wrapper around getComputedStyle, to fix issues with Firefox returning null when\n   * called inside of a hidden iframe\n   *\n   * @access private\n   * @function computedStyle\n   * @param {HTMLElement|SVGElement} elem - The element we want to find the computed styles of\n   * @param {string|null} [pseudo] - An optional pseudo element selector (e.g. :before), of null if none\n   * @param {string} prop - A CSS property\n   * @returns {CSSStyleDeclaration} the value of the specified CSS property\n   */\n  function computedStyle(elem, pseudo, prop) {\n    var result;\n\n    if ('getComputedStyle' in window) {\n      result = getComputedStyle.call(window, elem, pseudo);\n      var console = window.console;\n\n      if (result !== null) {\n        if (prop) {\n          result = result.getPropertyValue(prop);\n        }\n      } else {\n        if (console) {\n          var method = console.error ? 'error' : 'log';\n          console[method].call(console, 'getComputedStyle returning null, its possible modernizr test results are inaccurate');\n        }\n      }\n    } else {\n      result = !pseudo && elem.currentStyle && elem.currentStyle[prop];\n    }\n\n    return result;\n  }\n\n  module.exports = computedStyle;\n\n","var tests = require('./tests.js');\nvar Modernizr = require('./Modernizr.js');\nvar classes = require('./classes.js');\nvar is = require('./is.js');\n  /**\n   * Run through all tests and detect their support in the current UA.\n   *\n   * @access private\n   * @returns {void}\n   */\n  function testRunner() {\n    var featureNames;\n    var feature;\n    var aliasIdx;\n    var result;\n    var nameIdx;\n    var featureName;\n    var featureNameSplit;\n\n    for (var featureIdx in tests) {\n      if (tests.hasOwnProperty(featureIdx)) {\n        featureNames = [];\n        feature = tests[featureIdx];\n        // run the test, throw the return value into the Modernizr,\n        // then based on that boolean, define an appropriate className\n        // and push it into an array of classes we'll join later.\n        //\n        // If there is no name, it's an 'async' test that is run,\n        // but not directly added to the object. That should\n        // be done with a post-run addTest call.\n        if (feature.name) {\n          featureNames.push(feature.name.toLowerCase());\n\n          if (feature.options && feature.options.aliases && feature.options.aliases.length) {\n            // Add all the aliases into the names list\n            for (aliasIdx = 0; aliasIdx < feature.options.aliases.length; aliasIdx++) {\n              featureNames.push(feature.options.aliases[aliasIdx].toLowerCase());\n            }\n          }\n        }\n\n        // Run the test, or use the raw value if it's not a function\n        result = is(feature.fn, 'function') ? feature.fn() : feature.fn;\n\n        // Set each of the names on the Modernizr object\n        for (nameIdx = 0; nameIdx < featureNames.length; nameIdx++) {\n          featureName = featureNames[nameIdx];\n          // Support dot properties as sub tests. We don't do checking to make sure\n          // that the implied parent tests have been added. You must call them in\n          // order (either in the test, or make the parent test a dependency).\n          //\n          // Cap it to TWO to make the logic simple and because who needs that kind of subtesting\n          // hashtag famous last words\n          featureNameSplit = featureName.split('.');\n\n          if (featureNameSplit.length === 1) {\n            Modernizr[featureNameSplit[0]] = result;\n          } else {\n            // cast to a Boolean, if not one already\n            if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {\n              Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);\n            }\n\n            Modernizr[featureNameSplit[0]][featureNameSplit[1]] = result;\n          }\n\n          classes.push((result ? '' : 'no-') + featureNameSplit.join('-'));\n        }\n      }\n    }\n  }\n  module.exports = testRunner;\n\n","/*!\n{\n  \"name\": \"SVG as an <img> tag source\",\n  \"property\": \"svgasimg\",\n  \"caniuse\": \"svg-img\",\n  \"tags\": [\"svg\"],\n  \"aliases\": [\"svgincss\"],\n  \"authors\": [\"Chris Coyier\"],\n  \"notes\": [{\n    \"name\": \"HTML5 Spec\",\n    \"href\": \"https://www.w3.org/TR/html5/embedded-content-0.html#the-img-element\"\n  }]\n}\n!*/\nvar Modernizr = require('./../../lib/Modernizr.js');\n\n  // Original Async test by Stu Cox\n  // https://gist.github.com/chriscoyier/8774501\n\n  // Now a Sync test based on good results here\n  // https://codepen.io/chriscoyier/pen/bADFx\n\n  // Note https://www.w3.org/TR/SVG11/feature#Image is *supposed* to represent\n  // support for the `<image>` tag in SVG, not an SVG file linked from an `<img>`\n  // tag in HTML – but it’s a heuristic which works\n  Modernizr.addTest('svgasimg', document.implementation.hasFeature('https://www.w3.org/TR/SVG11/feature#Image', '1.1'));\n\n","/*!\n{\n  \"name\": \"CSS Opacity\",\n  \"caniuse\": \"css-opacity\",\n  \"property\": \"opacity\",\n  \"tags\": [\"css\"]\n}\n!*/\nvar Modernizr = require('./../../lib/Modernizr.js');\nvar createElement = require('./../../lib/createElement.js');\nvar prefixes = require('./../../lib/prefixes.js');\n  // Browsers that actually have CSS Opacity implemented have done so\n  // according to spec, which means their return values are within the\n  // range of [0.0,1.0] - including the leading zero.\n\n  Modernizr.addTest('opacity', function() {\n    var style = createElement('a').style;\n    style.cssText = prefixes.join('opacity:.55;');\n\n    // The non-literal . in this regex is intentional:\n    // German Chrome returns this value as 0,55\n    // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632\n    return (/^0.55$/).test(style.opacity);\n  });\n\n","\n  /**\n   * fnBind is a super small [bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) polyfill.\n   *\n   * @access private\n   * @function fnBind\n   * @param {Function} fn - a function you want to change `this` reference to\n   * @param {Object} that - the `this` you want to call the function with\n   * @returns {Function} The wrapped version of the supplied function\n   */\n  function fnBind(fn, that) {\n    return function() {\n      return fn.apply(that, arguments);\n    };\n  }\n\n  module.exports = fnBind;\n\n","var ModernizrProto = require('./ModernizrProto.js');\nvar injectElementWithStyles = require('./injectElementWithStyles.js');\n  /**\n   * Modernizr.mq tests a given media query, live against the current state of the window\n   * adapted from matchMedia polyfill by Scott Jehl and Paul Irish\n   * gist.github.com/786768\n   *\n   * @memberOf Modernizr\n   * @name Modernizr.mq\n   * @optionName Modernizr.mq()\n   * @optionProp mq\n   * @access public\n   * @function mq\n   * @param {string} mq - String of the media query we want to test\n   * @returns {boolean}\n   * @example\n   * Modernizr.mq allows for you to programmatically check if the current browser\n   * window state matches a media query.\n   *\n   * ```js\n   *  var query = Modernizr.mq('(min-width: 900px)');\n   *\n   *  if (query) {\n   *    // the browser window is larger than 900px\n   *  }\n   * ```\n   *\n   * Only valid media queries are supported, therefore you must always include values\n   * with your media query\n   *\n   * ```js\n   * // good\n   *  Modernizr.mq('(min-width: 900px)');\n   *\n   * // bad\n   *  Modernizr.mq('min-width');\n   * ```\n   *\n   * If you would just like to test that media queries are supported in general, use\n   *\n   * ```js\n   *  Modernizr.mq('only all'); // true if MQ are supported, false if not\n   * ```\n   *\n   * Note that if the browser does not support media queries (e.g. old IE) mq will\n   * always return false.\n   */\n  var mq = (function() {\n    var matchMedia = window.matchMedia || window.msMatchMedia;\n    if (matchMedia) {\n      return function(mq) {\n        var mql = matchMedia(mq);\n        return mql && mql.matches || false;\n      };\n    }\n\n    return function(mq) {\n      var bool = false;\n\n      injectElementWithStyles('@media ' + mq + ' { #modernizr { position: absolute; } }', function(node) {\n        bool = (window.getComputedStyle ?\n          window.getComputedStyle(node, null) :\n          node.currentStyle).position === 'absolute';\n      });\n\n      return bool;\n    };\n  })();\n\n  ModernizrProto.mq = mq;\n\n  module.exports = mq;\n\n","var ModernizrProto = require('./ModernizrProto.js');\nvar cssomPrefixes = require('./cssomPrefixes.js');\nvar is = require('./is.js');\nvar testProps = require('./testProps.js');\nvar domPrefixes = require('./domPrefixes.js');\nvar testDOMProps = require('./testDOMProps.js');\n  /**\n   * testPropsAll tests a list of DOM properties we want to check against.\n   * We specify literally ALL possible (known and/or likely) properties on\n   * the element including the non-vendor prefixed one, for forward-\n   * compatibility.\n   *\n   * @access private\n   * @function testPropsAll\n   * @param {string} prop - A string of the property to test for\n   * @param {string|Object} [prefixed] - An object to check the prefixed properties on. Use a string to skip\n   * @param {HTMLElement|SVGElement} [elem] - An element used to test the property and value against\n   * @param {string} [value] - A string of a css value\n   * @param {boolean} [skipValueTest] - An boolean representing if you want to test if value sticks when set\n   * @returns {false|string} returns the string version of the property, or false if it is unsupported\n   */\n  function testPropsAll(prop, prefixed, elem, value, skipValueTest) {\n\n    var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),\n      props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');\n\n    // did they call .prefixed('boxSizing') or are we just testing a prop?\n    if (is(prefixed, 'string') || is(prefixed, 'undefined')) {\n      return testProps(props, prefixed, value, skipValueTest);\n\n      // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])\n    } else {\n      props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');\n      return testDOMProps(props, prefixed, elem);\n    }\n  }\n\n  // Modernizr.testAllProps() investigates whether a given style property,\n  // or any of its vendor-prefixed variants, is recognized\n  //\n  // Note that the property names must be provided in the camelCase variant.\n  // Modernizr.testAllProps('boxSizing')\n  ModernizrProto.testAllProps = testPropsAll;\n\n  module.exports = testPropsAll;\n\n","\n  /**\n   * cssToDOM takes a kebab-case string and converts it to camelCase\n   * e.g. box-sizing -> boxSizing\n   *\n   * @access private\n   * @function cssToDOM\n   * @param {string} name - String name of kebab-case prop we want to convert\n   * @returns {string} The camelCase version of the supplied name\n   */\n  function cssToDOM(name) {\n    return name.replace(/([a-z])-([a-z])/g, function(str, m1, m2) {\n      return m1 + m2.toUpperCase();\n    }).replace(/^-/, '');\n  }\n\n  module.exports = cssToDOM;\n\n","/*!\n{\n  \"name\": \"ES5 Function\",\n  \"property\": \"es5function\",\n  \"notes\": [{\n    \"name\": \"ECMAScript 5.1 Language Specification\",\n    \"href\": \"https://www.ecma-international.org/ecma-262/5.1/\"\n  }],\n  \"polyfills\": [\"es5shim\"],\n  \"authors\": [\"Ron Waldon (@jokeyrhyme)\"],\n  \"tags\": [\"es5\"]\n}\n!*/\n/* DOC\nCheck if browser implements ECMAScript 5 Function per specification.\n*/\nvar Modernizr = require('./../../lib/Modernizr.js');\n  Modernizr.addTest('es5function', function() {\n    return !!(Function.prototype && Function.prototype.bind);\n  });\n\n","/*!\n{\n  \"name\": \"CSS Media Queries\",\n  \"caniuse\": \"css-mediaqueries\",\n  \"property\": \"mediaqueries\",\n  \"tags\": [\"css\"],\n  \"builderAliases\": [\"css_mediaqueries\"]\n}\n!*/\nvar Modernizr = require('./../../lib/Modernizr.js');\nvar mq = require('./../../lib/mq.js');\n  Modernizr.addTest('mediaqueries', mq('only all'));\n\n","/*!\n{\n  \"name\": \"History API\",\n  \"property\": \"history\",\n  \"caniuse\": \"history\",\n  \"tags\": [\"history\"],\n  \"authors\": [\"Hay Kranen\", \"Alexander Farkas\"],\n  \"notes\": [{\n    \"name\": \"W3C Spec\",\n    \"href\": \"https://www.w3.org/TR/html51/browsers.html#the-history-interface\"\n  }, {\n    \"name\": \"MDN Docs\",\n    \"href\": \"https://developer.mozilla.org/en-US/docs/Web/API/window.history\"\n  }],\n  \"polyfills\": [\"historyjs\", \"html5historyapi\"]\n}\n!*/\n/* DOC\nDetects support for the History API for manipulating the browser session history.\n*/\nvar Modernizr = require('./../lib/Modernizr.js');\n  Modernizr.addTest('history', function() {\n    // Issue #733\n    // The stock browser on Android 2.2 & 2.3, and 4.0.x returns positive on history support\n    // Unfortunately support is really buggy and there is no clean way to detect\n    // these bugs, so we fall back to a user agent sniff :(\n    var ua = navigator.userAgent;\n\n    // We only want Android 2 and 4.0, stock browser, and not Chrome which identifies\n    // itself as 'Mobile Safari' as well, nor Windows Phone (issue #1471).\n    if ((ua.indexOf('Android 2.') !== -1 ||\n        (ua.indexOf('Android 4.0') !== -1)) &&\n        ua.indexOf('Mobile Safari') !== -1 &&\n        ua.indexOf('Chrome') === -1 &&\n        ua.indexOf('Windows Phone') === -1 &&\n    // Since all documents on file:// share an origin, the History apis are\n    // blocked there as well\n        location.protocol !== 'file:'\n    ) {\n      return false;\n    }\n\n    // Return the regular check\n    return (window.history && 'pushState' in window.history);\n  });\n\n","\n  var tests = [];\n  module.exports = tests;\n\n","/*!\n{\n  \"name\": \"JSON\",\n  \"property\": \"json\",\n  \"caniuse\": \"json\",\n  \"notes\": [{\n    \"name\": \"MDN Docs\",\n    \"href\": \"https://developer.mozilla.org/en-US/docs/Glossary/JSON\"\n  }],\n  \"polyfills\": [\"json2\"]\n}\n!*/\n/* DOC\nDetects native support for JSON handling functions.\n*/\nvar Modernizr = require('./../lib/Modernizr.js');\n  // this will also succeed if you've loaded the JSON2.js polyfill ahead of time\n  //   ... but that should be obvious. :)\n\n  Modernizr.addTest('json', 'JSON' in window && 'parse' in JSON && 'stringify' in JSON);\n\n","var contains = require('./contains.js');\nvar mStyle = require('./mStyle.js');\nvar createElement = require('./createElement.js');\nvar nativeTestProps = require('./nativeTestProps.js');\nvar is = require('./is.js');\nvar cssToDOM = require('./cssToDOM.js');\n  // testProps is a generic CSS / DOM property test.\n\n  // In testing support for a given CSS property, it's legit to test:\n  //    `elem.style[styleName] !== undefined`\n  // If the property is supported it will return an empty string,\n  // if unsupported it will return undefined.\n\n  // We'll take advantage of this quick test and skip setting a style\n  // on our modernizr element, but instead just testing undefined vs\n  // empty string.\n\n  // Property names can be provided in either camelCase or kebab-case.\n\n  function testProps(props, prefixed, value, skipValueTest) {\n    skipValueTest = is(skipValueTest, 'undefined') ? false : skipValueTest;\n\n    // Try native detect first\n    if (!is(value, 'undefined')) {\n      var result = nativeTestProps(props, value);\n      if (!is(result, 'undefined')) {\n        return result;\n      }\n    }\n\n    // Otherwise do it properly\n    var afterInit, i, propsLength, prop, before;\n\n    // If we don't have a style element, that means we're running async or after\n    // the core tests, so we'll need to create our own elements to use\n\n    // inside of an SVG element, in certain browsers, the `style` element is only\n    // defined for valid tags. Therefore, if `modernizr` does not have one, we\n    // fall back to a less used element and hope for the best.\n    // for strict XHTML browsers the hardly used samp element is used\n    var elems = ['modernizr', 'tspan', 'samp'];\n    while (!mStyle.style && elems.length) {\n      afterInit = true;\n      mStyle.modElem = createElement(elems.shift());\n      mStyle.style = mStyle.modElem.style;\n    }\n\n    // Delete the objects if we created them.\n    function cleanElems() {\n      if (afterInit) {\n        delete mStyle.style;\n        delete mStyle.modElem;\n      }\n    }\n\n    propsLength = props.length;\n    for (i = 0; i < propsLength; i++) {\n      prop = props[i];\n      before = mStyle.style[prop];\n\n      if (contains(prop, '-')) {\n        prop = cssToDOM(prop);\n      }\n\n      if (mStyle.style[prop] !== undefined) {\n\n        // If value to test has been passed in, do a set-and-check test.\n        // 0 (integer) is a valid property value, so check that `value` isn't\n        // undefined, rather than just checking it's truthy.\n        if (!skipValueTest && !is(value, 'undefined')) {\n\n          // Needs a try catch block because of old IE. This is slow, but will\n          // be avoided in most cases because `skipValueTest` will be used.\n          try {\n            mStyle.style[prop] = value;\n          } catch (e) {}\n\n          // If the property value has changed, we assume the value used is\n          // supported. If `value` is empty string, it'll fail here (because\n          // it hasn't changed), which matches how browsers have implemented\n          // CSS.supports()\n          if (mStyle.style[prop] !== before) {\n            cleanElems();\n            return prefixed === 'pfx' ? prop : true;\n          }\n        }\n        // Otherwise just return true, or the property name if this is a\n        // `prefixed()` call\n        else {\n          cleanElems();\n          return prefixed === 'pfx' ? prop : true;\n        }\n      }\n    }\n    cleanElems();\n    return false;\n  }\n\n  module.exports = testProps;\n\n","var ModernizrProto = require('./ModernizrProto.js');\n  // Fake some of Object.create so we can force non test results to be non \"own\" properties.\n  var Modernizr = function() {};\n  Modernizr.prototype = ModernizrProto;\n\n  // Leak modernizr globally when you `require` it rather than force it here.\n  // Overwrite name so constructor name is nicer :D\n  Modernizr = new Modernizr();\n\n  module.exports = Modernizr;\n\n","var is = require('./is.js');\nvar fnBind = require('./fnBind.js');\n  /**\n   * testDOMProps is a generic DOM property test; if a browser supports\n   *   a certain property, it won't return undefined for it.\n   *\n   * @access private\n   * @function testDOMProps\n   * @param {Array<string>} props - An array of properties to test for\n   * @param {Object} obj - An object or Element you want to use to test the parameters again\n   * @param {boolean|Object} elem - An Element to bind the property lookup again. Use `false` to prevent the check\n   * @returns {false|*} returns false if the prop is unsupported, otherwise the value that is supported\n   */\n  function testDOMProps(props, obj, elem) {\n    var item;\n\n    for (var i in props) {\n      if (props[i] in obj) {\n\n        // return the property name as a string\n        if (elem === false) {\n          return props[i];\n        }\n\n        item = obj[props[i]];\n\n        // let's bind a function\n        if (is(item, 'function')) {\n          // bind to obj unless overridden\n          return fnBind(item, elem || obj);\n        }\n\n        // return the unbound function or obj or value\n        return item;\n      }\n    }\n    return false;\n  }\n\n  module.exports = testDOMProps;\n\n","/*!\n{\n  \"name\": \"CSS Transforms 3D\",\n  \"property\": \"csstransforms3d\",\n  \"caniuse\": \"transforms3d\",\n  \"tags\": [\"css\"],\n  \"warnings\": [\n    \"Chrome may occasionally fail this test on some systems; more info: https://bugs.chromium.org/p/chromium/issues/detail?id=129004\"\n  ]\n}\n!*/\nvar Modernizr = require('./../../lib/Modernizr.js');\nvar testAllProps = require('./../../lib/testAllProps.js');\n  Modernizr.addTest('csstransforms3d', function() {\n    return !!testAllProps('perspective', '1px', true);\n  });\n\n","var injectElementWithStyles = require('./injectElementWithStyles.js');\nvar domToCSS = require('./domToCSS.js');\nvar computedStyle = require('./computedStyle.js');\n  /**\n   * nativeTestProps allows for us to use native feature detection functionality if available.\n   * some prefixed form, or false, in the case of an unsupported rule\n   *\n   * @access private\n   * @function nativeTestProps\n   * @param {array} props - An array of property names\n   * @param {string} value - A string representing the value we want to check via @supports\n   * @returns {boolean|undefined} A boolean when @supports exists, undefined otherwise\n   */\n  // Accepts a list of property names and a single value\n  // Returns `undefined` if native detection not available\n  function nativeTestProps(props, value) {\n    var i = props.length;\n    // Start with the JS API: https://www.w3.org/TR/css3-conditional/#the-css-interface\n    if ('CSS' in window && 'supports' in window.CSS) {\n      // Try every prefixed variant of the property\n      while (i--) {\n        if (window.CSS.supports(domToCSS(props[i]), value)) {\n          return true;\n        }\n      }\n      return false;\n    }\n    // Otherwise fall back to at-rule (for Opera 12.x)\n    else if ('CSSSupportsRule' in window) {\n      // Build a condition string for every prefixed variant\n      var conditionText = [];\n      while (i--) {\n        conditionText.push('(' + domToCSS(props[i]) + ':' + value + ')');\n      }\n      conditionText = conditionText.join(' or ');\n      return injectElementWithStyles('@supports (' + conditionText + ') { #modernizr { position: absolute; } }', function(node) {\n        return computedStyle(node, null, 'position') === 'absolute';\n      });\n    }\n    return undefined;\n  }\n  module.exports = nativeTestProps;\n\n","var ModernizrProto = require('./ModernizrProto.js');\nvar injectElementWithStyles = require('./injectElementWithStyles.js');\n  /**\n   * testStyles injects an element with style element and some CSS rules\n   *\n   * @memberOf Modernizr\n   * @name Modernizr.testStyles\n   * @optionName Modernizr.testStyles()\n   * @optionProp testStyles\n   * @access public\n   * @function testStyles\n   * @param {string} rule - String representing a css rule\n   * @param {function} callback - A function that is used to test the injected element\n   * @param {number} [nodes] - An integer representing the number of additional nodes you want injected\n   * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes\n   * @returns {boolean}\n   * @example\n   *\n   * `Modernizr.testStyles` takes a CSS rule and injects it onto the current page\n   * along with (possibly multiple) DOM elements. This lets you check for features\n   * that can not be detected by simply checking the [IDL](https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Interface_development_guide/IDL_interface_rules).\n   *\n   * ```js\n   * Modernizr.testStyles('#modernizr { width: 9px; color: papayawhip; }', function(elem, rule) {\n   *   // elem is the first DOM node in the page (by default #modernizr)\n   *   // rule is the first argument you supplied - the CSS rule in string form\n   *\n   *   addTest('widthworks', elem.style.width === '9px')\n   * });\n   * ```\n   *\n   * If your test requires multiple nodes, you can include a third argument\n   * indicating how many additional div elements to include on the page. The\n   * additional nodes are injected as children of the `elem` that is returned as\n   * the first argument to the callback.\n   *\n   * ```js\n   * Modernizr.testStyles('#modernizr {width: 1px}; #modernizr2 {width: 2px}', function(elem) {\n   *   document.getElementById('modernizr').style.width === '1px'; // true\n   *   document.getElementById('modernizr2').style.width === '2px'; // true\n   *   elem.firstChild === document.getElementById('modernizr2'); // true\n   * }, 1);\n   * ```\n   *\n   * By default, all of the additional elements have an ID of `modernizr[n]`, where\n   * `n` is its index (e.g. the first additional, second overall is `#modernizr2`,\n   * the second additional is `#modernizr3`, etc.).\n   * If you want to have more meaningful IDs for your function, you can provide\n   * them as the fourth argument, as an array of strings\n   *\n   * ```js\n   * Modernizr.testStyles('#foo {width: 10px}; #bar {height: 20px}', function(elem) {\n   *   elem.firstChild === document.getElementById('foo'); // true\n   *   elem.lastChild === document.getElementById('bar'); // true\n   * }, 2, ['foo', 'bar']);\n   * ```\n   */\n  var testStyles = ModernizrProto.testStyles = injectElementWithStyles;\n  module.exports = testStyles;\n\n","var ModernizrProto = require('./ModernizrProto.js');\nvar Modernizr = require('./Modernizr.js');\nvar hasOwnProp = require('./hasOwnProp.js');\nvar setClasses = require('./setClasses.js');\n\n  // _l tracks listeners for async tests, as well as tests that execute after the initial run\n  ModernizrProto._l = {};\n\n  /**\n   * Modernizr.on is a way to listen for the completion of async tests. Being\n   * asynchronous, they may not finish before your scripts run. As a result you\n   * will get a possibly false negative `undefined` value.\n   *\n   * @memberOf Modernizr\n   * @name Modernizr.on\n   * @access public\n   * @function on\n   * @param {string} feature - String name of the feature detect\n   * @param {Function} cb - Callback function returning a Boolean - true if feature is supported, false if not\n   * @returns {void}\n   * @example\n   *\n   * ```js\n   * Modernizr.on('flash', function( result ) {\n   *   if (result) {\n   *    // the browser has flash\n   *   } else {\n   *     // the browser does not have flash\n   *   }\n   * });\n   * ```\n   */\n  ModernizrProto.on = function(feature, cb) {\n    // Create the list of listeners if it doesn't exist\n    if (!this._l[feature]) {\n      this._l[feature] = [];\n    }\n\n    // Push this test on to the listener list\n    this._l[feature].push(cb);\n\n    // If it's already been resolved, trigger it on next tick\n    if (Modernizr.hasOwnProperty(feature)) {\n      // Next Tick\n      setTimeout(function() {\n        Modernizr._trigger(feature, Modernizr[feature]);\n      }, 0);\n    }\n  };\n\n  /**\n   * _trigger is the private function used to signal test completion and run any\n   * callbacks registered through [Modernizr.on](#modernizr-on)\n   *\n   * @memberOf Modernizr\n   * @name Modernizr._trigger\n   * @access private\n   * @function _trigger\n   * @param {string} feature - string name of the feature detect\n   * @param {Function|boolean} [res] - A feature detection function, or the boolean =\n   * result of a feature detection function\n   * @returns {void}\n   */\n  ModernizrProto._trigger = function(feature, res) {\n    if (!this._l[feature]) {\n      return;\n    }\n\n    var cbs = this._l[feature];\n\n    // Force async\n    setTimeout(function() {\n      var i, cb;\n      for (i = 0; i < cbs.length; i++) {\n        cb = cbs[i];\n        cb(res);\n      }\n    }, 0);\n\n    // Don't trigger these again\n    delete this._l[feature];\n  };\n\n  /**\n   * addTest allows you to define your own feature detects that are not currently\n   * included in Modernizr (under the covers it's the exact same code Modernizr\n   * uses for its own [feature detections](https://github.com/Modernizr/Modernizr/tree/master/feature-detects)).\n   * Just like the official detects, the result\n   * will be added onto the Modernizr object, as well as an appropriate className set on\n   * the html element when configured to do so\n   *\n   * @memberOf Modernizr\n   * @name Modernizr.addTest\n   * @optionName Modernizr.addTest()\n   * @optionProp addTest\n   * @access public\n   * @function addTest\n   * @param {string|Object} feature - The string name of the feature detect, or an\n   * object of feature detect names and test\n   * @param {Function|boolean} test - Function returning true if feature is supported,\n   * false if not. Otherwise a boolean representing the results of a feature detection\n   * @returns {Object} the Modernizr object to allow chaining\n   * @example\n   *\n   * The most common way of creating your own feature detects is by calling\n   * `Modernizr.addTest` with a string (preferably just lowercase, without any\n   * punctuation), and a function you want executed that will return a boolean result\n   *\n   * ```js\n   * Modernizr.addTest('itsTuesday', function() {\n   *  var d = new Date();\n   *  return d.getDay() === 2;\n   * });\n   * ```\n   *\n   * When the above is run, it will set Modernizr.itstuesday to `true` when it is tuesday,\n   * and to `false` every other day of the week. One thing to notice is that the names of\n   * feature detect functions are always lowercased when added to the Modernizr object. That\n   * means that `Modernizr.itsTuesday` will not exist, but `Modernizr.itstuesday` will.\n   *\n   *\n   *  Since we only look at the returned value from any feature detection function,\n   *  you do not need to actually use a function. For simple detections, just passing\n   *  in a statement that will return a boolean value works just fine.\n   *\n   * ```js\n   * Modernizr.addTest('hasjquery', 'jQuery' in window);\n   * ```\n   *\n   * Just like before, when the above runs `Modernizr.hasjquery` will be true if\n   * jQuery has been included on the page. Not using a function saves a small amount\n   * of overhead for the browser, as well as making your code much more readable.\n   *\n   * Finally, you also have the ability to pass in an object of feature names and\n   * their tests. This is handy if you want to add multiple detections in one go.\n   * The keys should always be a string, and the value can be either a boolean or\n   * function that returns a boolean.\n   *\n   * ```js\n   * var detects = {\n   *  'hasjquery': 'jQuery' in window,\n   *  'itstuesday': function() {\n   *    var d = new Date();\n   *    return d.getDay() === 2;\n   *  }\n   * }\n   *\n   * Modernizr.addTest(detects);\n   * ```\n   *\n   * There is really no difference between the first methods and this one, it is\n   * just a convenience to let you write more readable code.\n   */\n  function addTest(feature, test) {\n\n    if (typeof feature === 'object') {\n      for (var key in feature) {\n        if (hasOwnProp(feature, key)) {\n          addTest(key, feature[ key ]);\n        }\n      }\n    } else {\n\n      feature = feature.toLowerCase();\n      var featureNameSplit = feature.split('.');\n      var last = Modernizr[featureNameSplit[0]];\n\n      // Again, we don't check for parent test existence. Get that right, though.\n      if (featureNameSplit.length === 2) {\n        last = last[featureNameSplit[1]];\n      }\n\n      if (typeof last !== 'undefined') {\n        // we're going to quit if you're trying to overwrite an existing test\n        // if we were to allow it, we'd do this:\n        //   var re = new RegExp(\"\\\\b(no-)?\" + feature + \"\\\\b\");\n        //   docElement.className = docElement.className.replace( re, '' );\n        // but, no rly, stuff 'em.\n        return Modernizr;\n      }\n\n      test = typeof test === 'function' ? test() : test;\n\n      // Set the value (this is the magic, right here).\n      if (featureNameSplit.length === 1) {\n        Modernizr[featureNameSplit[0]] = test;\n      } else {\n        // cast to a Boolean, if not one already\n        if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {\n          Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);\n        }\n\n        Modernizr[featureNameSplit[0]][featureNameSplit[1]] = test;\n      }\n\n      // Set a single class (either `feature` or `no-feature`)\n      setClasses([(!!test && test !== false ? '' : 'no-') + featureNameSplit.join('-')]);\n\n      // Trigger the event\n      Modernizr._trigger(feature, test);\n    }\n\n    return Modernizr; // allow chaining.\n  }\n\n  // After all the tests are run, add self to the Modernizr prototype\n  Modernizr._q.push(function() {\n    ModernizrProto.addTest = addTest;\n  });\n\n  module.exports = addTest;\n\n","/*!\n{\n  \"name\": \"CSS Gradients\",\n  \"caniuse\": \"css-gradients\",\n  \"property\": \"cssgradients\",\n  \"tags\": [\"css\"],\n  \"knownBugs\": [\"False-positives on webOS (https://github.com/Modernizr/Modernizr/issues/202)\"],\n  \"notes\": [{\n    \"name\": \"Webkit Gradient Syntax\",\n    \"href\": \"https://webkit.org/blog/175/introducing-css-gradients/\"\n  },{\n    \"name\": \"Linear Gradient Syntax\",\n    \"href\": \"https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient\"\n  },{\n    \"name\": \"W3C Spec\",\n    \"href\": \"https://drafts.csswg.org/css-images-3/#gradients\"\n  }]\n}\n!*/\nvar Modernizr = require('./../../lib/Modernizr.js');\nvar prefixes = require('./../../lib/prefixes.js');\nvar createElement = require('./../../lib/createElement.js');\n\n  Modernizr.addTest('cssgradients', function() {\n\n    var str1 = 'background-image:';\n    var str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));';\n    var css = '';\n    var angle;\n\n    for (var i = 0, len = prefixes.length - 1; i < len; i++) {\n      angle = (i === 0 ? 'to ' : '');\n      css += str1 + prefixes[i] + 'linear-gradient(' + angle + 'left top, #9f9, white);';\n    }\n\n    if (Modernizr._config.usePrefixes) {\n    // legacy webkit syntax (FIXME: remove when syntax not in use anymore)\n      css += str1 + '-webkit-' + str2;\n    }\n\n    var elem = createElement('a');\n    var style = elem.style;\n    style.cssText = css;\n\n    // IE6 returns undefined so cast to string\n    return ('' + style.backgroundImage).indexOf('gradient') > -1;\n  });\n\n","/*!\n{\n  \"name\": \"ES5 Date\",\n  \"property\": \"es5date\",\n  \"notes\": [{\n    \"name\": \"ECMAScript 5.1 Language Specification\",\n    \"href\": \"https://www.ecma-international.org/ecma-262/5.1/\"\n  }],\n  \"polyfills\": [\"es5shim\"],\n  \"authors\": [\"Ron Waldon (@jokeyrhyme)\"],\n  \"tags\": [\"es5\"]\n}\n!*/\n/* DOC\nCheck if browser implements ECMAScript 5 Date per specification.\n*/\nvar Modernizr = require('./../../lib/Modernizr.js');\n  Modernizr.addTest('es5date', function() {\n    var isoDate = '2013-04-12T06:06:37.307Z',\n      canParseISODate = false;\n    try {\n      canParseISODate = !!Date.parse(isoDate);\n    } catch (e) {\n      // no ISO date parsing yet\n    }\n    return !!(Date.now &&\n      Date.prototype &&\n      Date.prototype.toISOString &&\n      Date.prototype.toJSON &&\n      canParseISODate);\n  });\n\n","var createElement = require('./createElement.js');\n  /**\n   * since we have a fairly large number of input tests that don't mutate the input\n   * we create a single element that can be shared with all of those tests for a\n   * minor perf boost\n   *\n   * @access private\n   * @returns {HTMLInputElement}\n   */\n  var inputElem = createElement('input');\n  module.exports = inputElem;\n\n","/*!\n{\n  \"name\": \"SVG\",\n  \"property\": \"svg\",\n  \"caniuse\": \"svg\",\n  \"tags\": [\"svg\"],\n  \"authors\": [\"Erik Dahlstrom\"],\n  \"polyfills\": [\n    \"svgweb\",\n    \"raphael\",\n    \"amplesdk\",\n    \"canvg\",\n    \"svg-boilerplate\",\n    \"sie\",\n    \"dojogfx\",\n    \"fabricjs\"\n  ]\n}\n!*/\n/* DOC\nDetects support for SVG in `<embed>` or `<object>` elements.\n*/\nvar Modernizr = require('./../lib/Modernizr.js');\n  Modernizr.addTest('svg', !!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect);\n\n","/*!\n{\n  \"name\": \"@font-face\",\n  \"property\": \"fontface\",\n  \"authors\": [\"Diego Perini\", \"Mat Marquis\"],\n  \"tags\": [\"css\"],\n  \"knownBugs\": [\n    \"False Positive: WebOS https://github.com/Modernizr/Modernizr/issues/342\",\n    \"False Positive: WP7 https://github.com/Modernizr/Modernizr/issues/538\"\n  ],\n  \"notes\": [{\n    \"name\": \"@font-face detection routine by Diego Perini\",\n    \"href\": \"http://javascript.nwbox.com/CSSSupport/\"\n  },{\n    \"name\": \"Filament Group @font-face compatibility research\",\n    \"href\": \"https://docs.google.com/presentation/d/1n4NyG4uPRjAA8zn_pSQ_Ket0RhcWC6QlZ6LMjKeECo0/edit#slide=id.p\"\n  },{\n    \"name\": \"Filament Grunticon/@font-face device testing results\",\n    \"href\": \"https://docs.google.com/spreadsheet/ccc?key=0Ag5_yGvxpINRdHFYeUJPNnZMWUZKR2ItMEpRTXZPdUE#gid=0\"\n  },{\n    \"name\": \"CSS fonts on Android\",\n    \"href\": \"https://stackoverflow.com/questions/3200069/css-fonts-on-android\"\n  },{\n    \"name\": \"@font-face and Android\",\n    \"href\": \"http://archivist.incutio.com/viewlist/css-discuss/115960\"\n  }]\n}\n!*/\nvar Modernizr = require('./../../lib/Modernizr.js');\nvar testStyles = require('./../../lib/testStyles.js');\n  var blacklist = (function() {\n    var ua = navigator.userAgent;\n    var webos = ua.match(/w(eb)?osbrowser/gi);\n    var wppre8 = ua.match(/windows phone/gi) && ua.match(/iemobile\\/([0-9])+/gi) && parseFloat(RegExp.$1) >= 9;\n    return webos || wppre8;\n  }());\n  if (blacklist) {\n    Modernizr.addTest('fontface', false);\n  } else {\n    testStyles('@font-face {font-family:\"font\";src:url(\"https://\")}', function(node, rule) {\n      var style = document.getElementById('smodernizr');\n      var sheet = style.sheet || style.styleSheet;\n      var cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';\n      var bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;\n      Modernizr.addTest('fontface', bool);\n    });\n  }\n\n","\n  /**\n   * is returns a boolean if the typeof an obj is exactly type.\n   *\n   * @access private\n   * @function is\n   * @param {*} obj - A thing we want to check the type of\n   * @param {string} type - A string to compare the typeof against\n   * @returns {boolean} true if the typeof the first parameter is exactly the specified type, false otherwise\n   */\n  function is(obj, type) {\n    return typeof obj === type;\n  }\n\n  module.exports = is;\n\n","/*!\n{\n  \"name\": \"HTML5 Audio Element\",\n  \"property\": \"audio\",\n  \"tags\": [\"html5\", \"audio\", \"media\"]\n}\n!*/\n/* DOC\nDetects the audio element\n*/\nvar Modernizr = require('./../lib/Modernizr.js');\nvar createElement = require('./../lib/createElement.js');\n  // This tests evaluates support of the audio element, as well as\n  // testing what types of content it supports.\n  //\n  // We're using the Boolean constructor here, so that we can extend the value\n  // e.g.  Modernizr.audio     // true\n  //       Modernizr.audio.ogg // 'probably'\n  //\n  // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845\n  //                     thx to NielsLeenheer and zcorpan\n\n  // Note: in some older browsers, \"no\" was a return value instead of empty string.\n  //   It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2\n  //   It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5\n  Modernizr.addTest('audio', function() {\n    var elem = createElement('audio');\n    var bool = false;\n\n    try {\n      bool = !!elem.canPlayType;\n      if (bool) {\n        bool      = new Boolean(bool);\n        bool.ogg  = elem.canPlayType('audio/ogg; codecs=\"vorbis\"') .replace(/^no$/, '');\n        bool.mp3  = elem.canPlayType('audio/mpeg; codecs=\"mp3\"')   .replace(/^no$/, '');\n        bool.opus  = elem.canPlayType('audio/ogg; codecs=\"opus\"')  ||\n                     elem.canPlayType('audio/webm; codecs=\"opus\"') .replace(/^no$/, '');\n\n        // Mimetypes accepted:\n        //   developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements\n        //   bit.ly/iphoneoscodecs\n        bool.wav  = elem.canPlayType('audio/wav; codecs=\"1\"')     .replace(/^no$/, '');\n        bool.m4a  = (elem.canPlayType('audio/x-m4a;')            ||\n                     elem.canPlayType('audio/aac;'))             .replace(/^no$/, '');\n      }\n    } catch (e) {}\n\n    return bool;\n  });\n\n","var docElement = require('./docElement.js');\n  /**\n   * A convenience helper to check if the document we are running in is an SVG document\n   *\n   * @access private\n   * @returns {boolean}\n   */\n  var isSVG = docElement.nodeName.toLowerCase() === 'svg';\n\n  module.exports = isSVG;\n\n","/*!\n{\n  \"name\": \"Background Position XY\",\n  \"property\": \"bgpositionxy\",\n  \"tags\": [\"css\"],\n  \"builderAliases\": [\"css_backgroundposition_xy\"],\n  \"authors\": [\"Allan Lei\", \"Brandom Aaron\"],\n  \"notes\": [{\n    \"name\": \"Demo\",\n    \"href\": \"https://jsfiddle.net/allanlei/R8AYS/\"\n  }, {\n    \"name\": \"Adapted From\",\n    \"href\": \"https://github.com/brandonaaron/jquery-cssHooks/blob/master/bgpos.js\"\n  }]\n}\n!*/\n/* DOC\nDetects the ability to control an element's background position using css\n*/\nvar Modernizr = require('./../../lib/Modernizr.js');\nvar testAllProps = require('./../../lib/testAllProps.js');\n  Modernizr.addTest('bgpositionxy', function() {\n    return testAllProps('backgroundPositionX', '3px', true) && testAllProps('backgroundPositionY', '5px', true);\n  });\n\n","/*!\n{\n  \"name\": \"placeholder attribute\",\n  \"property\": \"placeholder\",\n  \"tags\": [\"forms\", \"attribute\"],\n  \"builderAliases\": [\"forms_placeholder\"]\n}\n!*/\n/* DOC\nTests for placeholder attribute in inputs and textareas\n*/\nvar Modernizr = require('./../../lib/Modernizr.js');\nvar createElement = require('./../../lib/createElement.js');\n  Modernizr.addTest('placeholder', ('placeholder' in createElement('input') && 'placeholder' in createElement('textarea')));\n\n"],"sourceRoot":""}