{"version":3,"sources":["fastclick.js","activeLinks.js","capture.js","outerClick.js","sharedState.js","touchmoveDefaults.js","mobile-angular-ui.core.js","overthrow-detect.js","overthrow-init.js","overthrow-polyfill.js","modals.js","navbars.js","scrollable.js","sidebars.js","switch.js","mobile-angular-ui.components.js","mobile-angular-ui.js"],"names":["FastClick","layer","options","bind","method","context","apply","arguments","oldOnClick","this","trackingClick","trackingClickStart","targetElement","touchStartX","touchStartY","lastTouchIdentifier","touchBoundary","tapDelay","tapTimeout","notNeeded","methods","i","l","length","deviceIsAndroid","addEventListener","onMouse","onClick","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel","Event","prototype","stopImmediatePropagation","removeEventListener","type","callback","capture","rmv","Node","call","hijacked","adv","event","propagationStopped","onclick","deviceIsWindowsPhone","navigator","userAgent","indexOf","deviceIsIOS","test","deviceIsIOS4","deviceIsIOSWithBadTarget","deviceIsBlackBerry10","needsClick","target","nodeName","toLowerCase","disabled","className","needsFocus","readOnly","sendClick","clickEvent","touch","document","activeElement","blur","changedTouches","createEvent","initMouseEvent","determineEventType","window","screenX","screenY","clientX","clientY","forwardedTouchEvent","dispatchEvent","tagName","focus","setSelectionRange","value","updateScrollParent","scrollParent","parentElement","fastClickScrollParent","contains","scrollHeight","offsetHeight","fastClickLastScrollTop","scrollTop","getTargetElementFromEventTarget","eventTarget","nodeType","TEXT_NODE","parentNode","selection","targetTouches","getSelection","rangeCount","isCollapsed","identifier","preventDefault","timeStamp","pageX","pageY","lastClickTime","touchHasMoved","boundary","Math","abs","findControl","labelElement","undefined","control","htmlFor","getElementById","querySelector","forElement","targetTagName","cancelNextClick","elementFromPoint","pageXOffset","pageYOffset","top","cancelable","stopPropagation","permitted","detail","destroy","metaViewport","chromeVersion","blackberryVersion","firefoxVersion","ontouchstart","exec","content","documentElement","scrollWidth","outerWidth","match","style","msTouchAction","touchAction","attach","define","amd","module","exports","angular","run","$rootScope","$window","$document","$location","setupActiveLinks","newPath","url","firstHash","firstSearchMark","locationHref","location","href","plainUrlLength","slice","domLinks","links","domLink","link","element","attr","addClass","removeClass","$on","Capture","resetAll","factory","$compile","yielders","name","hasOwnProperty","resetYielder","b","setContentFor","defaultContent","defaultScope","putYielder","yielder","getYielder","removeYielder","scope","html","contents","directive","compile","tElem","tAttrs","rawContent","uiDuplicate","remove","elem","attrs","uiContentFor","uiYieldTo","on","orgHandler","body","forEach","directiveName","restrict","isAncestorOrSelf","parent","$timeout","outerClickFn","outerClickIf","handleOuterClick","$apply","$event","stopWatching","noop","t","$watch","cancel","unbind","bindOuterClick","$parse","uiOuterClick","uiOuterClickIf","values","statusesMeta","scopes","exclusionGroups","initialize","id","isNewScope","defaultValue","exclusionGroup","$id","push","references","extend","$broadcast","setOne","ids","status","Object","keys","prev","console","warn","setMany","map","set","idOrMap","isObject","isUndefined","turnOn","eg","egStatuses","item","turnOff","toggle","get","isActive","active","has","referenceCount","equals","eq","uiBindEvent","eventNames","fn","SharedState","priority","uiState","defaultValueExpr","uiDefault","$eval","uiExclusionGroup","methodName","toUpperCase","$interpolate","needsInterpolation","exprFn","$scope","res","interpolateFn","arg","uiTriggers","parseScopeContext","vars","trim","split","Error","mixScopeContext","scopeVars","key","alias","reduce","nextKey","parseUiCondition","expr","parseFn","uiScopeContext","$animate","getBlockNodes","nodes","node","endNode","blockNodes","nextSibling","multiElement","transclude","terminal","$$tlb","$element","$attr","ctrl","$transclude","block","childScope","previousElements","uiIfFn","clone","newScope","createComment","uiIf","enter","$destroy","done","nga","leave","then","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","uiHideFn","tempClasses","uiShowFn","uiClassFn","classesToAdd","classesToRemove","Ui","preventTouchmoveDefaultsCb","e","allowTouchmoveDefault","fnTrue","condition","allowTouchmoveDefaultCallback","off","w","doc","docElem","enabledClassName","canBeFilledWithPoly","nativeOverflow","screen","width","ua","webkit","wkversion","wkLte534","RegExp","$1","blackberry","parseFloat","overthrow","replace","forget","support","o","scrollIndicatorClassName","configure","closest","ascend","enabled","start","lastDown","lastRight","inputs","lastTops","lastLefts","resetVertTracking","resetHorTracking","setPointers","val","querySelectorAll","il","pointerEvents","changeScrollTarget","startEvent","tEnd","newTarget","touchchild","initEvent","intercept","touches","touchStartE","scrollT","scrollL","scrollLeft","height","offsetWidth","startY","startX","move","ty","tx","down","right","unshift","pop","end","setTimeout","$rootElement","hasClass","side","charAt","getTouchY","originalEvent","controller","scrollableContent","scrollable","allowUp","allowDown","prevTop","prevBot","lastY","setupTouchstart","clientHeight","currY","up","scrollTo","elementOrNumber","marginTop","isNumber","offsetParent","offsetTop","require","h1","h2","uiScrollTop","uiScrollBottom","reached","Top","Bottom","el","parentStyle","adjustParentPadding","styles","getComputedStyle","margin","parseInt","marginBottom","interval","setInterval","clearInterval","stateName","parentClass","visibleClass","activeClass","outerClickCb","defaultActive","uiTrackAsSearchParam","search","closeOnOuterClicks","$injector","$drag","model","changeExpr","unwatchDisabled","handle","append","unwatch","isEnabled","setModel","$parent","clickCb","transform","TRANSLATE_INSIDE","removeAttr","rh","getBoundingClientRect","re","left"],"mappings":"CAAA,WACA,YAqBA,SAAAA,GAAAC,EAAAC,GAuFA,QAAAC,GAAAC,EAAAC,GACA,MAAA,YAAA,MAAAD,GAAAE,MAAAD,EAAAE,YAvFA,GAAAC,EAiFA,IA/EAN,EAAAA,MAOAO,KAAAC,eAAA,EAQAD,KAAAE,mBAAA,EAQAF,KAAAG,cAAA,KAQAH,KAAAI,YAAA,EAQAJ,KAAAK,YAAA,EAQAL,KAAAM,oBAAA,EAQAN,KAAAO,cAAAd,EAAAc,eAAA,GAQAP,KAAAR,MAAAA,EAOAQ,KAAAQ,SAAAf,EAAAe,UAAA,IAOAR,KAAAS,WAAAhB,EAAAgB,YAAA,KAEAlB,EAAAmB,UAAAlB,GAAA,CAYA,IAAA,GAFAmB,IAAA,UAAA,UAAA,eAAA,cAAA,aAAA,iBACAf,EAAAI,KACAY,EAAA,EAAAC,EAAAF,EAAAG,OAAAD,EAAAD,EAAAA,IACAhB,EAAAe,EAAAC,IAAAlB,EAAAE,EAAAe,EAAAC,IAAAhB,EAIAmB,KACAvB,EAAAwB,iBAAA,YAAAhB,KAAAiB,SAAA,GACAzB,EAAAwB,iBAAA,YAAAhB,KAAAiB,SAAA,GACAzB,EAAAwB,iBAAA,UAAAhB,KAAAiB,SAAA,IAGAzB,EAAAwB,iBAAA,QAAAhB,KAAAkB,SAAA,GACA1B,EAAAwB,iBAAA,aAAAhB,KAAAmB,cAAA,GACA3B,EAAAwB,iBAAA,YAAAhB,KAAAoB,aAAA,GACA5B,EAAAwB,iBAAA,WAAAhB,KAAAqB,YAAA,GACA7B,EAAAwB,iBAAA,cAAAhB,KAAAsB,eAAA,GAKAC,MAAAC,UAAAC,2BACAjC,EAAAkC,oBAAA,SAAAC,EAAAC,EAAAC,GACA,GAAAC,GAAAC,KAAAP,UAAAE,mBACA,WAAAC,EACAG,EAAAE,KAAAxC,EAAAmC,EAAAC,EAAAK,UAAAL,EAAAC,GAEAC,EAAAE,KAAAxC,EAAAmC,EAAAC,EAAAC,IAIArC,EAAAwB,iBAAA,SAAAW,EAAAC,EAAAC,GACA,GAAAK,GAAAH,KAAAP,UAAAR,gBACA,WAAAW,EACAO,EAAAF,KAAAxC,EAAAmC,EAAAC,EAAAK,WAAAL,EAAAK,SAAA,SAAAE,GACAA,EAAAC,oBACAR,EAAAO,KAEAN,GAEAK,EAAAF,KAAAxC,EAAAmC,EAAAC,EAAAC,KAQA,kBAAArC,GAAA6C,UAIAtC,EAAAP,EAAA6C,QACA7C,EAAAwB,iBAAA,QAAA,SAAAmB,GACApC,EAAAoC,KACA,GACA3C,EAAA6C,QAAA,OASA,GAAAC,GAAAC,UAAAC,UAAAC,QAAA,kBAAA,EAOA1B,EAAAwB,UAAAC,UAAAC,QAAA,WAAA,IAAAH,EAQAI,EAAA,iBAAAC,KAAAJ,UAAAC,aAAAF,EAQAM,EAAAF,GAAA,gBAAAC,KAAAJ,UAAAC,WAQAK,EAAAH,GAAA,cAAAC,KAAAJ,UAAAC,WAOAM,EAAAP,UAAAC,UAAAC,QAAA,QAAA,CAQAlD,GAAAiC,UAAAuB,WAAA,SAAAC,GACA,OAAAA,EAAAC,SAAAC,eAGA,IAAA,SACA,IAAA,SACA,IAAA,WACA,GAAAF,EAAAG,SACA,OAAA,CAGA,MACA,KAAA,QAGA,GAAAT,GAAA,SAAAM,EAAArB,MAAAqB,EAAAG,SACA,OAAA,CAGA,MACA,KAAA,QACA,IAAA,SACA,IAAA,QACA,OAAA,EAGA,MAAA,iBAAAR,KAAAK,EAAAI,YAUA7D,EAAAiC,UAAA6B,WAAA,SAAAL,GACA,OAAAA,EAAAC,SAAAC,eACA,IAAA,WACA,OAAA,CACA,KAAA,SACA,OAAAnC,CACA,KAAA,QACA,OAAAiC,EAAArB,MACA,IAAA,SACA,IAAA,WACA,IAAA,OACA,IAAA,QACA,IAAA,QACA,IAAA,SACA,OAAA,EAIA,OAAAqB,EAAAG,WAAAH,EAAAM,QACA,SACA,MAAA,iBAAAX,KAAAK,EAAAI,aAWA7D,EAAAiC,UAAA+B,UAAA,SAAApD,EAAAgC,GACA,GAAAqB,GAAAC,CAGAC,UAAAC,eAAAD,SAAAC,gBAAAxD,GACAuD,SAAAC,cAAAC,OAGAH,EAAAtB,EAAA0B,eAAA,GAGAL,EAAAE,SAAAI,YAAA,eACAN,EAAAO,eAAA/D,KAAAgE,mBAAA7D,IAAA,GAAA,EAAA8D,OAAA,EAAAR,EAAAS,QAAAT,EAAAU,QAAAV,EAAAW,QAAAX,EAAAY,SAAA,GAAA,GAAA,GAAA,EAAA,EAAA,MACAb,EAAAc,qBAAA,EACAnE,EAAAoE,cAAAf,IAGAjE,EAAAiC,UAAAwC,mBAAA,SAAA7D,GAGA,MAAAY,IAAA,WAAAZ,EAAAqE,QAAAtB,cACA,YAGA,SAOA3D,EAAAiC,UAAAiD,MAAA,SAAAtE,GACA,GAAAW,EAGA4B,IAAAvC,EAAAuE,mBAAA,IAAAvE,EAAAwB,KAAAc,QAAA,SAAA,SAAAtC,EAAAwB,MAAA,UAAAxB,EAAAwB,MACAb,EAAAX,EAAAwE,MAAA7D,OACAX,EAAAuE,kBAAA5D,EAAAA,IAEAX,EAAAsE,SAUAlF,EAAAiC,UAAAoD,mBAAA,SAAAzE,GACA,GAAA0E,GAAAC,CAMA,IAJAD,EAAA1E,EAAA4E,uBAIAF,IAAAA,EAAAG,SAAA7E,GAAA,CACA2E,EAAA3E,CACA,GAAA,CACA,GAAA2E,EAAAG,aAAAH,EAAAI,aAAA,CACAL,EAAAC,EACA3E,EAAA4E,sBAAAD,CACA,OAGAA,EAAAA,EAAAA,oBACAA,GAIAD,IACAA,EAAAM,uBAAAN,EAAAO,YASA7F,EAAAiC,UAAA6D,gCAAA,SAAAC,GAGA,MAAAA,GAAAC,WAAAxD,KAAAyD,UACAF,EAAAG,WAGAH,GAUA/F,EAAAiC,UAAAL,aAAA,SAAAgB,GACA,GAAAhC,GAAAsD,EAAAiC,CAGA,IAAAvD,EAAAwD,cAAA7E,OAAA,EACA,OAAA,CAMA,IAHAX,EAAAH,KAAAqF,gCAAAlD,EAAAa,QACAS,EAAAtB,EAAAwD,cAAA,GAEAjD,EAAA,CAIA,GADAgD,EAAAzB,OAAA2B,eACAF,EAAAG,aAAAH,EAAAI,YACA,OAAA,CAGA,KAAAlD,EAAA,CAUA,GAAAa,EAAAsC,YAAAtC,EAAAsC,aAAA/F,KAAAM,oBAEA,MADA6B,GAAA6D,kBACA,CAGAhG,MAAAM,oBAAAmD,EAAAsC,WAQA/F,KAAA4E,mBAAAzE,IAgBA,MAZAH,MAAAC,eAAA,EACAD,KAAAE,mBAAAiC,EAAA8D,UACAjG,KAAAG,cAAAA,EAEAH,KAAAI,YAAAqD,EAAAyC,MACAlG,KAAAK,YAAAoD,EAAA0C,MAGAhE,EAAA8D,UAAAjG,KAAAoG,cAAApG,KAAAQ,UACA2B,EAAA6D,kBAGA,GAUAzG,EAAAiC,UAAA6E,cAAA,SAAAlE,GACA,GAAAsB,GAAAtB,EAAA0B,eAAA,GAAAyC,EAAAtG,KAAAO,aAEA,OAAAgG,MAAAC,IAAA/C,EAAAyC,MAAAlG,KAAAI,aAAAkG,GAAAC,KAAAC,IAAA/C,EAAA0C,MAAAnG,KAAAK,aAAAiG,GACA,GAGA,GAUA/G,EAAAiC,UAAAJ,YAAA,SAAAe,GACA,MAAAnC,MAAAC,gBAKAD,KAAAG,gBAAAH,KAAAqF,gCAAAlD,EAAAa,SAAAhD,KAAAqG,cAAAlE,MACAnC,KAAAC,eAAA,EACAD,KAAAG,cAAA,OAGA,IATA,GAmBAZ,EAAAiC,UAAAiF,YAAA,SAAAC,GAGA,MAAAC,UAAAD,EAAAE,QACAF,EAAAE,QAIAF,EAAAG,QACAnD,SAAAoD,eAAAJ,EAAAG,SAKAH,EAAAK,cAAA,wFAUAxH,EAAAiC,UAAAH,WAAA,SAAAc,GACA,GAAA6E,GAAA9G,EAAA+G,EAAApC,EAAApB,EAAAtD,EAAAH,KAAAG,aAEA,KAAAH,KAAAC,cACA,OAAA,CAIA,IAAAkC,EAAA8D,UAAAjG,KAAAoG,cAAApG,KAAAQ,SAEA,MADAR,MAAAkH,iBAAA,GACA,CAGA,IAAA/E,EAAA8D,UAAAjG,KAAAE,mBAAAF,KAAAS,WACA,OAAA,CAyBA,IArBAT,KAAAkH,iBAAA,EAEAlH,KAAAoG,cAAAjE,EAAA8D,UAEA/F,EAAAF,KAAAE,mBACAF,KAAAC,eAAA,EACAD,KAAAE,mBAAA,EAMA2C,IACAY,EAAAtB,EAAA0B,eAAA,GAGA1D,EAAAuD,SAAAyD,iBAAA1D,EAAAyC,MAAAjC,OAAAmD,YAAA3D,EAAA0C,MAAAlC,OAAAoD,cAAAlH,EACAA,EAAA4E,sBAAA/E,KAAAG,cAAA4E,uBAGAkC,EAAA9G,EAAAqE,QAAAtB,cACA,UAAA+D,GAEA,GADAD,EAAAhH,KAAAyG,YAAAtG,GACA,CAEA,GADAH,KAAAyE,MAAAtE,GACAY,EACA,OAAA,CAGAZ,GAAA6G,OAEA,IAAAhH,KAAAqD,WAAAlD,GAIA,MAAAgC,GAAA8D,UAAA/F,EAAA,KAAAwC,GAAAuB,OAAAqD,MAAArD,QAAA,UAAAgD,GACAjH,KAAAG,cAAA,MACA,IAGAH,KAAAyE,MAAAtE,GACAH,KAAAuD,UAAApD,EAAAgC,GAIAO,GAAA,WAAAuE,IACAjH,KAAAG,cAAA,KACAgC,EAAA6D,mBAGA,EAGA,OAAAtD,KAAAE,IAIAiC,EAAA1E,EAAA4E,sBACAF,GAAAA,EAAAM,yBAAAN,EAAAO,YACA,GAMApF,KAAA+C,WAAA5C,KACAgC,EAAA6D,iBACAhG,KAAAuD,UAAApD,EAAAgC,KAGA,IASA5C,EAAAiC,UAAAF,cAAA,WACAtB,KAAAC,eAAA,EACAD,KAAAG,cAAA,MAUAZ,EAAAiC,UAAAP,QAAA,SAAAkB,GAGA,MAAAnC,MAAAG,cAIAgC,EAAAmC,qBACA,EAIAnC,EAAAoF,cAOAvH,KAAA+C,WAAA/C,KAAAG,gBAAAH,KAAAkH,kBAGA/E,EAAAV,yBACAU,EAAAV,2BAIAU,EAAAC,oBAAA,EAIAD,EAAAqF,kBACArF,EAAA6D,kBAEA,IArBA,GATA,GA8CAzG,EAAAiC,UAAAN,QAAA,SAAAiB,GACA,GAAAsF,EAGA,OAAAzH,MAAAC,eACAD,KAAAG,cAAA,KACAH,KAAAC,eAAA,GACA,GAIA,WAAAkC,EAAAa,OAAArB,MAAA,IAAAQ,EAAAuF,QACA,GAGAD,EAAAzH,KAAAiB,QAAAkB,GAGAsF,IACAzH,KAAAG,cAAA,MAIAsH,IASAlI,EAAAiC,UAAAmG,QAAA,WACA,GAAAnI,GAAAQ,KAAAR,KAEAuB,KACAvB,EAAAkC,oBAAA,YAAA1B,KAAAiB,SAAA,GACAzB,EAAAkC,oBAAA,YAAA1B,KAAAiB,SAAA,GACAzB,EAAAkC,oBAAA,UAAA1B,KAAAiB,SAAA,IAGAzB,EAAAkC,oBAAA,QAAA1B,KAAAkB,SAAA,GACA1B,EAAAkC,oBAAA,aAAA1B,KAAAmB,cAAA,GACA3B,EAAAkC,oBAAA,YAAA1B,KAAAoB,aAAA,GACA5B,EAAAkC,oBAAA,WAAA1B,KAAAqB,YAAA,GACA7B,EAAAkC,oBAAA,cAAA1B,KAAAsB,eAAA,IASA/B,EAAAmB,UAAA,SAAAlB,GACA,GAAAoI,GACAC,EACAC,EACAC,CAGA,IAAA,mBAAA9D,QAAA+D,aACA,OAAA,CAMA,IAFAH,IAAA,mBAAAI,KAAA1F,UAAAC,aAAA,CAAA,IAAA,GAEA,CAEA,IAAAzB,EAgBA,OAAA,CAbA,IAFA6G,EAAAlE,SAAAqD,cAAA,uBAEA,CAEA,GAAA,KAAAa,EAAAM,QAAAzF,QAAA,oBACA,OAAA,CAGA,IAAAoF,EAAA,IAAAnE,SAAAyE,gBAAAC,aAAAnE,OAAAoE,WACA,OAAA,GAUA,GAAAvF,IACAgF,EAAAvF,UAAAC,UAAA8F,MAAA,+BAIAR,EAAA,IAAA,IAAAA,EAAA,IAAA,IACAF,EAAAlE,SAAAqD,cAAA,yBAEA,CAEA,GAAA,KAAAa,EAAAM,QAAAzF,QAAA,oBACA,OAAA,CAGA,IAAAiB,SAAAyE,gBAAAC,aAAAnE,OAAAoE,WACA,OAAA,EAOA,MAAA,SAAA7I,EAAA+I,MAAAC,eAAA,iBAAAhJ,EAAA+I,MAAAE,aACA,GAIAV,IAAA,oBAAAE,KAAA1F,UAAAC,aAAA,CAAA,IAAA,GAEAuF,GAAA,KAGAH,EAAAlE,SAAAqD,cAAA,uBACAa,IAAA,KAAAA,EAAAM,QAAAzF,QAAA,qBAAAiB,SAAAyE,gBAAAC,aAAAnE,OAAAoE,cACA,EAMA,SAAA7I,EAAA+I,MAAAE,aAAA,iBAAAjJ,EAAA+I,MAAAE,aACA,GAGA,IAUAlJ,EAAAmJ,OAAA,SAAAlJ,EAAAC,GACA,MAAA,IAAAF,GAAAC,EAAAC,IAIA,kBAAAkJ,SAAA,gBAAAA,QAAAC,KAAAD,OAAAC,IAGAD,OAAA,WACA,MAAApJ,KAEA,mBAAAsJ,SAAAA,OAAAC,SACAD,OAAAC,QAAAvJ,EAAAmJ,OACAG,OAAAC,QAAAvJ,UAAAA,GAEA0E,OAAA1E,UAAAA,KC7yBA,WACA,YAEAwJ,SAAAF,OAAA,yCAEAG,KACA,aACA,UACA,YACA,YACA,SAAAC,EAAAC,EAAAC,EAAAC,GAEA,GAAAC,GAAA,WAGA,GAKAC,GALAC,EAAAH,EAAAG,MACAC,EAAAD,EAAA9G,QAAA,KACAgH,EAAAF,EAAA9G,QAAA,KACAiH,EAAAR,EAAAS,SAAAC,KACAC,EAAAH,EAAAjH,QAAA8G,EAGA,MAAAC,GAAA,KAAAC,EACAH,EAAAI,EACA,KAAAF,GAAAA,EAAAC,EACAH,EAAAI,EAAAI,MAAA,EAAAD,EAAAL,GACA,KAAAC,GAAAA,EAAAD,IACAF,EAAAI,EAAAI,MAAA,EAAAD,EAAAJ,GAIA,KAAA,GADAM,GAAAZ,EAAA,GAAAa,MACApJ,EAAA,EAAAA,EAAAmJ,EAAAjJ,OAAAF,IAAA,CACA,GAAAqJ,GAAAF,EAAAnJ,GACAsJ,EAAAnB,QAAAoB,QAAAF,EACAC,GAAAE,KAAA,SAAA,KAAAF,EAAAE,KAAA,SAAAH,EAAAL,OAAAN,EACAY,EAAAG,SAAA,UACAH,EAAAE,KAAA,SAAA,KAAAF,EAAAE,KAAA,SAAAH,EAAAL,MAAAK,EAAAL,KAAA9I,QACAoJ,EAAAI,YAAA,WAKArB,GAAAsB,IAAA,yBAAAlB,GACAJ,EAAAsB,IAAA,wBAAAlB,SC0CA,WACA,YAEAN,SAAAF,OAAA,qCAEAG,KACA,UACA,aACA,SAAAwB,EAAAvB,GACAA,EAAAsB,IAAA,sBAAA,WACAC,EAAAC,gBAKAC,QAAA,WACA,WACA,SAAAC,GACA,GAAAC,KAEA,QACAH,SAAA,WACA,IAAA,GAAAI,KAAAD,GACAA,EAAAE,eAAAD,IACA7K,KAAA+K,aAAAF,IAKAE,aAAA,SAAAF,GACA,GAAAG,GAAAJ,EAAAC,EACA7K,MAAAiL,cAAAJ,EAAAG,EAAAE,eAAAF,EAAAG,eAGAC,WAAA,SAAAP,EAAAV,EAAAgB,EAAAD,GACA,GAAAG,KACAA,GAAAR,KAAAA,EACAQ,EAAAlB,QAAAA,EACAkB,EAAAH,eAAAA,GAAA,GACAG,EAAAF,aAAAA,EACAP,EAAAC,GAAAQ,GAGAC,WAAA,SAAAT,GACA,MAAAD,GAAAC,IAGAU,cAAA,SAAAV,SACAD,GAAAC,IAGAI,cAAA,SAAAJ,EAAA3C,EAAAsD,GACA,GAAAR,GAAAJ,EAAAC,EACAG,KAGAA,EAAAb,QAAAsB,KAAAvD,GACAyC,EAAAK,EAAAb,QAAAuB,YAAAF,SAuBAG,UAAA,gBACA,UACA,SAAAnB,GACA,OACAoB,QAAA,SAAAC,EAAAC,GACA,GAAAC,GAAAF,EAAAJ,MAMA,QALA,OAAAK,EAAAE,aAAArF,SAAAmF,EAAAE,eAEAH,EAAAJ,KAAA,IACAI,EAAAI,UAEA,SAAAT,EAAAU,EAAAC,GACA3B,EAAAS,cAAAkB,EAAAC,aAAAL,EAAAP,SAmBAG,UAAA,aACA,WAAA,UAAA,SAAAhB,EAAAH,GACA,OACAN,KAAA,SAAAsB,EAAArB,EAAAC,GACAI,EAAAY,WAAAhB,EAAAiC,UAAAlC,EAAAqB,EAAArB,EAAAsB,QAEAtB,EAAAmC,GAAA,WAAA,WACA9B,EAAAe,cAAAnB,EAAAiC,aAGAb,EAAAjB,IAAA,WAAA,WACAC,EAAAe,cAAAnB,EAAAiC,qBFxOA,WACA,YACA,IAAAxD,GAAAE,QAAAF,OAAA,sCAEAA,GAAAG,KAAA,UAAA,SAAAE,GAMA,QAAAxJ,GAAAC,EAAAC,GACA,MAAA,YAAA,MAAAD,GAAAE,MAAAD,EAAAE,YAJA,GAAAyM,GAAAhN,UAAAiC,UAAAH,UAOA9B,WAAAiC,UAAAH,WAAA,SAAAc,GAEAA,EAAA0B,iBACA1B,EAAA0B,sBAGA0I,EAAA7M,EAAA6M,EAAAvM,OACAmC,IAGA5C,UAAAmJ,OAAAQ,EAAAxF,SAAA8I,SAIAzD,QAAA0D,SAAA,SAAA,QAAA,YAAA,SAAAC,GAEA7D,EAAA8C,UAAAe,EAAA,WACA,OACAC,SAAA,IACAf,QAAA,SAAAM,GACAA,EAAA7B,SAAA,uBGuBA,WACA,YAEA,IAAAuC,GAAA,SAAAzC,EAAAnH,GAEA,IADA,GAAA6J,GAAA1C,EACA0C,EAAA/L,OAAA,GAAA,CACA,GAAA+L,EAAA,KAAA7J,EAAA,GAEA,MADA6J,GAAA,MACA,CAEAA,GAAAA,EAAAA,SAGA,MADAA,GAAA,MACA,EAGA9D,SAAAF,OAAA,wCA8BA6B,QAAA,kBACA,YACA,WACA,SAAAvB,EAAA2D,GAEA,MAAA,UAAAtB,EAAArB,EAAA4C,EAAAC,GACA,GAAAC,GAAA,SAAA9K,GACAyK,EAAA7D,QAAAoB,QAAAhI,EAAAa,QAAAmH,IACAqB,EAAA0B,OAAA,WACAH,EAAAvB,GAAA2B,OAAAhL,OAKAiL,EAAArE,QAAAsE,KACAC,EAAA,IAEAN,GACAI,EAAA5B,EAAA+B,OAAAP,EAAA,SAAArI,GACAmI,EAAAU,OAAAF,GAEA3I,EAGA2I,EAAAR,EAAA,WACA3D,EAAAmD,GAAA,YAAAW,IACA,GAGA9D,EAAAsE,OAAA,YAAAR,MAIAH,EAAAU,OAAAF,GACAnE,EAAAmD,GAAA,YAAAW,IAGAzB,EAAAjB,IAAA,WAAA,WACA6C,IACAjE,EAAAsE,OAAA,YAAAR,SAgBAtB,UAAA,gBACA,iBACA,SACA,SAAA+B,EAAAC,GACA,OACAhB,SAAA,IACAf,QAAA,SAAAM,EAAAC,GACA,GAAAY,GAAAY,EAAAxB,EAAAyB,cACAZ,EAAAb,EAAA0B,cACA,OAAA,UAAArC,EAAAU,GACAwB,EAAAlC,EAAAU,EAAAa,EAAAC,YCxKA,WACA,YA2FA,IAAAnE,GAAAE,QAAAF,OAAA,wCAsFAA,GAAA6B,QAAA,eACA,aACA,SAAAzB,GACA,GAAA6E,MACAC,KACAC,KACAC,IAEA,QAkBAC,WAAA,SAAA1C,EAAA2C,EAAA1O,GACAA,EAAAA,KAEA,IAAA2O,GAAAzH,SAAAqH,EAAAxC,GACA6C,EAAA5O,EAAA4O,aACAC,EAAA7O,EAAA6O,cAEAN,GAAAxC,EAAA+C,KAAAP,EAAAxC,EAAA+C,SACAP,EAAAxC,EAAA+C,KAAAC,KAAAL,GAEAJ,EAAAI,GAkBAC,GAEAL,EAAAI,GAAAM,cAhBAV,EAAAI,GAAApF,QAAA2F,UAAAjP,GAAAgP,WAAA,IAEAxF,EAAA0F,WAAA,uCAAAR,EAAAE,GAEA1H,SAAA0H,GACArO,KAAA4O,OAAAT,EAAAE,GAGAC,IAEAL,EAAAK,GAAAL,EAAAK,OACAL,EAAAK,GAAAH,IAAA,IAOA3C,EAAAjB,IAAA,WAAA,WAEA,IAAA,GADAsE,GAAAb,EAAAxC,EAAA+C,SACA3N,EAAA,EAAAA,EAAAiO,EAAA/N,OAAAF,IAAA,CACA,GAAAkO,GAAAf,EAAAc,EAAAjO,GAEAkO,GAAAR,uBACAL,GAAAa,EAAAR,gBAAAO,EAAAjO,IACA,IAAAmO,OAAAC,KAAAf,EAAAa,EAAAR,iBAAAxN,cACAmN,GAAAa,EAAAR,iBAIAQ,EAAAL,aACAK,EAAAL,YAAA,UACAV,GAAAc,EAAAjO,UACAkN,GAAAe,EAAAjO,IACAqI,EAAA0F,WAAA,qCAAAR,UAGAH,GAAAxC,EAAA+C,QAcAK,OAAA,SAAAT,EAAAxJ,GACA,GAAAgC,SAAAoH,EAAAI,GAAA,CACA,GAAAc,GAAAnB,EAAAK,EAKA,OAJAL,GAAAK,GAAAxJ,EACAsK,IAAAtK,GACAsE,EAAA0F,WAAA,mCAAAR,EAAAxJ,EAAAsK,GAEAtK,EAGAuK,SACAA,QAAAC,KAAA,sDAAAhB,IAmBAiB,QAAA,SAAAC,GACAtG,QAAA0D,QAAA4C,EAAA,SAAA1K,EAAAwJ,GACAnO,KAAA4O,OAAAT,EAAAxJ,IACA3E,OAiBAsP,IAAA,SAAAC,EAAA5K,GACAoE,QAAAyG,SAAAD,IAAAxG,QAAA0G,YAAA9K,GACA3E,KAAAoP,QAAAG,GAEAvP,KAAA4O,OAAAW,EAAA5K,IAgBA+K,OAAA,SAAAvB,GAEA,GAAAwB,GAAA5B,EAAAI,IAAAJ,EAAAI,GAAAG,cACA,IAAAqB,EAEA,IAAA,GADAC,GAAAb,OAAAC,KAAAf,EAAA0B,IACA/O,EAAA,EAAAA,EAAAgP,EAAA9O,OAAAF,IAAA,CACA,GAAAiP,GAAAD,EAAAhP,EACAiP,KAAA1B,GACAnO,KAAA8P,QAAAD,GAIA,MAAA7P,MAAA4O,OAAAT,GAAA,IAYA2B,QAAA,SAAA3B,GACA,MAAAnO,MAAA4O,OAAAT,GAAA,IAeA4B,OAAA,SAAA5B,GACA,MAAAnO,MAAAgQ,IAAA7B,GAAAnO,KAAA8P,QAAA3B,GAAAnO,KAAA0P,OAAAvB,IAaA6B,IAAA,SAAA7B,GACA,MAAAJ,GAAAI,IAAAL,EAAAK,IAaA8B,SAAA,SAAA9B,GACA,QAAAnO,KAAAgQ,IAAA7B,IAcA+B,OAAA,SAAA/B,GACA,MAAAnO,MAAAiQ,SAAA9B,IAaAsB,YAAA,SAAAtB,GACA,MAAAxH,UAAAoH,EAAAI,IAAAxH,SAAA3G,KAAAgQ,IAAA7B,IAYAgC,IAAA,SAAAhC,GACA,MAAAxH,UAAAoH,EAAAI,IAYAiC,eAAA,SAAAjC,GACA,GAAAW,GAAAf,EAAAI,EACA,OAAAxH,UAAAmI,EAAA,EAAAA,EAAAL,YAaA4B,OAAA,SAAAlC,EAAAxJ,GACA,MAAA3E,MAAAgQ,IAAA7B,KAAAxJ,GAeA2L,GAAA,SAAAnC,EAAAxJ,GACA,MAAA3E,MAAAqQ,OAAAlC,EAAAxJ,IAkBAmJ,OAAA,WACA,MAAAA,OAOA,IAAAyC,GAAA,SAAA/E,EAAArB,EAAAqG,EAAAC,GACAD,EAAAA,GAAA,YACArG,EAAAmC,GAAAkE,EAAA,SAAArO,GACAqJ,EAAA0B,OAAA,WACAuD,EAAAjF,GAAA2B,OAAAhL,QAaA0G,GAAA8C,UAAA,WACA,cACA,SAAA+E,GACA,OACA/D,SAAA,KACAgE,SAAA,IACAzG,KAAA,SAAAsB,EAAAU,EAAAC,GACA,GAAAgC,GAAAhC,EAAAyE,SAAAzE,EAAAgC,GACA0C,EAAA1E,EAAA2E,WAAA3E,EAAA,WACAkC,EAAAwC,EAAArF,EAAAuF,MAAAF,GAAAlK,MAEA+J,GAAAxC,WAAA1C,EAAA2C,GACAE,aAAAA,EACAC,eAAAnC,EAAA6E,wBAOAjI,QAAA0D,SAAA,SAAA,SAAA,UAAA,OACA,SAAAwE,GACA,GAAAvE,GAAA,KAAAuE,EAAA,GAAAC,cAAAD,EAAAnH,MAAA,EAgDAjB,GAAA8C,UAAAe,GACA,SACA,eACA,cACA,SAAAiB,EAAAwD,EAAAT,GACA,GAAA/Q,GAAA+Q,EAAAO,EACA,QACAtE,SAAA,IACAgE,SAAA,EAMA/E,QAAA,SAAAM,EAAAC,GACA,GAAA/B,GAAA+B,EAAAO,GACA0E,EAAAhH,EAAA9B,MAAA,QAEA+I,EAAA,SAAAC,GACA,GAAAC,GAAAnH,CACA,IAAAgH,EAAA,CACA,GAAAI,GAAAL,EAAAI,EACAA,GAAAC,EAAAF,GAKA,MAHA,QAAAL,IACAM,EAAA5D,EAAA4D,GAAAD,IAEAC,EAGA,OAAA,UAAA/F,EAAAU,EAAAC,GACA,GAAAvK,GAAA,WACA,GAAA6P,GAAAJ,EAAA7F,EACA,OAAA7L,GAAAqC,KAAA0O,EAAAe,GAEAlB,GAAA/E,EAAAU,EAAAC,EAAAuF,WAAA9P,UAgFA,IAAA+P,GAAA,SAAAvH,GACA,IAAAA,GAAA,KAAAA,EACA,QAIA,KAAA,GAFAwH,GAAAxH,EAAAA,EAAAyH,OAAAC,MAAA,YACAP,KACA3Q,EAAA,EAAAA,EAAAgR,EAAA9Q,OAAAF,IAAA,CACA,GAAAiP,GAAA+B,EAAAhR,GAAAkR,MAAA,SACA,IAAAjC,EAAA/O,OAAA,GAAA+O,EAAA/O,OAAA,EACA,KAAA,IAAAiR,OAAA,iCAAA3H,EAAA,IAEAmH,GAAA/C,KAAAqB,GAEA,MAAA0B,IAGAS,EAAA,SAAApS,EAAAqS,EAAAzG,GACA,IAAA,GAAA5K,GAAA,EAAAA,EAAAqR,EAAAnR,OAAAF,IAAA,CACA,GAAAsR,GAAAD,EAAArR,GAAA,GACAuR,EAAAF,EAAArR,GAAA,IAAAsR,CACAtS,GAAAuS,GAAAD,EAAAJ,MAAA,KAAAM,OAAA,SAAA5G,EAAA6G,GACA,MAAA7G,GAAA6G,IACA7G,KAIA8G,EAAA,SAAAzH,EAAAsB,EAAAmF,EAAAZ,EAAA/C,EAAAwD,GACA,GAEAE,GAFAkB,EAAApG,EAAAtB,GACAuG,EAAAmB,EAAAjK,MAAA,OAIA+I,GADAD,EACA,SAAAxR,GACA,GAAA4R,GAAAL,EAAAoB,GACAC,EAAA7E,EAAA6D,EAAAF,GACA,OAAAkB,GAAA5S,IAGA+N,EAAA4E,EAGA,IAAAE,GAAAd,EAAAxF,EAAAsG,eACA,OAAA,YACA,GAAA7S,EAOA,OANA6S,GAAA3R,QACAlB,EAAAmJ,QAAA2F,UAAAgC,EAAA5C,UACAkE,EAAApS,EAAA6S,EAAAnB,IAEA1R,EAAA8Q,EAAA5C,SAEAuD,EAAAzR,IAeAiJ,GAAA8C,UAAA,QAAA,WAAA,cAAA,SAAA,eAAA,SAAA+G,EAAAhC,EAAA/C,EAAAwD,GACA,QAAAwB,GAAAC,GACA,GAAAC,GAAAD,EAAA,GACAE,EAAAF,EAAAA,EAAA9R,OAAA,GACAiS,GAAAF,EACA,GAAA,CAEA,GADAA,EAAAA,EAAAG,aACAH,EAAA,KACAE,GAAAvE,KAAAqE,SACAA,IAAAC,EAEA,OAAA/J,SAAAoB,QAAA4I,GAGA,OACAE,cAAA,EACAC,WAAA,UACAvC,SAAA,IACAwC,UAAA,EACAxG,SAAA,IACAyG,OAAA,EACAlJ,KAAA,SAAAoH,EAAA+B,EAAAC,EAAAC,EAAAC,GACA,GAAAC,GAAAC,EAAAC,EACAC,EAAAtB,EAAA,OAAAgB,EAAAhC,EAAAZ,EAAA/C,EAAAwD,EAEAG,GAAA/D,OAAAqG,EAAA,SAAAjP,GACA,GAAAA,EACA+O,GACAF,EAAA,SAAAK,EAAAC,GACAJ,EAAAI,EACAD,EAAAA,EAAA/S,UAAA4C,SAAAqQ,cAAA,cAAAT,EAAAU,KAAA,KAIAP,GACAI,MAAAA,GAEAnB,EAAAuB,MAAAJ,EAAAR,EAAAxG,SAAAwG,SAYA,IARAM,IACAA,EAAA1H,SACA0H,EAAA,MAEAD,IACAA,EAAAQ,WACAR,EAAA,MAEAD,EAAA,CACAE,EAAAhB,EAAAc,EAAAI,MACA,IAAAM,GAAA,WACAR,EAAA,MAEAS,EAAA1B,EAAA2B,MAAAV,EAAAQ,EACAC,IACAA,EAAAE,KAAAH,GAEAV,EAAA,aAmBA5K,EAAA8C,UAAA,UAAA,WAAA,cAAA,SAAA,eAAA,SAAA+G,EAAAhC,EAAA/C,EAAAwD,GACA,GAAAoD,GAAA,UACAC,EAAA,iBAEA,QACA7H,SAAA,IACAsG,cAAA,EACA/I,KAAA,SAAAsB,EAAArB,EAAAC,GACA,GAAAqK,GAAAnC,EAAA,SAAAlI,EAAAoB,EAAAkF,EAAA/C,EAAAwD,EACA3F,GAAA+B,OAAAkH,EAAA,SAAA9P,GACA+N,EAAA/N,EAAA,WAAA,eAAAwF,EAAAoK,GACAG,YAAAF,WAiBA3L,EAAA8C,UAAA,UAAA,WAAA,cAAA,SAAA,eAAA,SAAA+G,EAAAhC,EAAA/C,GACA,GAAA4G,GAAA,UACAC,EAAA,iBAEA,QACA7H,SAAA,IACAsG,cAAA,EACA/I,KAAA,SAAAsB,EAAArB,EAAAC,GACA,GAAAuK,GAAArC,EAAA,SAAAlI,EAAAoB,EAAAkF,EAAA/C,EACAnC,GAAA+B,OAAAoH,EAAA,SAAAhQ,GACA+N,EAAA/N,EAAA,cAAA,YAAAwF,EAAAoK,GACAG,YAAAF,WAiBA3L,EAAA8C,UAAA,WAAA,cAAA,SAAA,eAAA,SAAA+E,EAAA/C,GACA,OACAhB,SAAA,IACAzC,KAAA,SAAAsB,EAAArB,EAAAC,GACA,GAAAwK,GAAAtC,EAAA,UAAAlI,EAAAoB,EAAAkF,EAAA/C,EACAnC,GAAA+B,OAAAqH,EAAA,SAAAjQ,GACA,GAAAkQ,GAAA,GACAC,EAAA,EACA/L,SAAA0D,QAAA9H,EAAA,SAAA4N,EAAAnP,GACAmP,EACAsC,GAAA,IAAAzR,EAEA0R,GAAA,IAAA1R,EAEAyR,EAAAA,EAAAhD,OACAiD,EAAAA,EAAAjD,OACAgD,EAAA/T,QACAqJ,EAAAE,SAAAwK,GAEAC,EAAAhU,QACAqJ,EAAAG,YAAAwK,OAGA,QAKAjM,EAAAG,KACA,aACA,cACA,SAAAC,EAAAyH,GACAzH,EAAA8L,GAAArE,QC74BA,WACA,YACA,IAAA7H,GAAAE,QAAAF,OAAA,8CAEAA,GAAA8C,UAAA,6BAAA,WACA,GAAAqJ,GAAA,SAAAC,GACAA,EAAAC,yBAAA,GACAD,EAAAjP,iBAIA,QACA4F,QAAA,SAAAzB,GACA,eAAAzG,WACAyG,EAAAmC,GAAA,YAAA0I,OAgCAnM,EAAA6B,QAAA,wBAAA,WACA,GAAAyK,GAAA,WAAA,OAAA,EAEA,OAAA,eAAAzR,UACA,SAAA2P,EAAA+B,GACAA,EAAAA,GAAAD,CAEA,IAAAE,GAAA,SAAAJ,GACAG,EAAAH,KAAAA,EAAAC,uBAAA,GAWA,OARA7B,GAAAtK,QAAAoB,QAAAkJ,GACAA,EAAA/G,GAAA,YAAA+I,GAEAhC,EAAA/G,GAAA,WAAA,WACA+G,EAAAiC,IAAA,YAAAD,GACAhC,EAAA,OAGA,WACAA,GACAA,EAAAiC,IAAA,YAAAD,KAKAtM,QAAAsE,UCtFA,WACA,YACAtE,SAAAF,OAAA,0BACA,mCACA,qCACA,iCACA,oCACA,qCACA,gDCpCA,SAAA0M,EAAA5O,GAEA,GAAA6O,GAAAD,EAAA7R,SACA+R,EAAAD,EAAArN,gBACAuN,EAAA,oBAGAC,EAAA,eAAAH,GAIAI,EAEA,2BAAAH,GAAAlN,OAEA,mBAAAkN,GAAAlN,QAIAoN,GAAAJ,EAAAM,OAAAC,MAAA,KAIA,WACA,GAAAC,GAAAR,EAAAhT,UAAAC,UAEAwT,EAAAD,EAAAzN,MAAA,yBACA2N,EAAAD,GAAAA,EAAA,GACAE,EAAAF,GAAAC,GAAA,GAEA,OAGAF,GAAAzN,MAAA,qBAAA6N,OAAAC,IAAA,GAAAF,GAGAH,EAAAzN,MAAA,uBAAA6N,OAAAC,IAAA,GAAAb,EAAAc,YAAAH,GAGAH,EAAAtT,QAAA,YAAA,IAAAyT,GAAA,MAAAH,EAAAtT,QAAA,cAGAsT,EAAAzN,MAAA,sBAAA6N,OAAAC,IAAA,GAGAL,EAAAzN,MAAA,yBAAA6N,OAAAC,IAAA,KAAAF,GAIAH,EAAAzN,MAAA,6BAAA,MAAAgO,WAAAH,OAAAC,KAAAJ,GAAAC,GAAA,MAKAV,GAAAgB,aAEAhB,EAAAgB,UAAAb,iBAAAA,EAEAH,EAAAgB,UAAAlM,SAAA,WACA,KAAAoL,EAAArS,UAAAX,QAAA8S,EAAAgB,UAAAb,oBACAD,EAAArS,WAAA,IAAAmS,EAAAgB,UAAAb,mBAIAH,EAAAgB,UAAAjM,YAAA,WACAmL,EAAArS,UAAAqS,EAAArS,UAAAoT,QAAAjB,EAAAgB,UAAAb,iBAAA,KAIAH,EAAAgB,UAAAjH,IAAA,WAGAsG,GACAL,EAAAgB,UAAAlM,YAMAkL,EAAAgB,UAAAZ,oBAAAA,EAGAJ,EAAAgB,UAAAE,OAAA,WAEAlB,EAAAgB,UAAAjM,eAKAiL,EAAAgB,UAAAG,QAAAd,EAAA,SAAA,QAEA5V,MC3FA,SAAAuV,EAAA5O,GAGA4O,EAAAgB,UAAAjH,OAEAtP,MCLA,SAAAuV,EAAAoB,EAAAhQ,GAGA,GAAAgQ,IAAAhQ,EAAA,CAIAgQ,EAAAC,yBAAA,WAEA,IAAApB,GAAAD,EAAA7R,SACA+R,EAAAD,EAAArN,gBAEAyN,EAAA,WAAAe,EAAAD,QACAf,EAAAgB,EAAAhB,oBAEArG,GADAqH,EAAAE,UACAF,EAAArH,KACAmH,EAAAE,EAAAF,OACAG,EAAAD,EAAAC,wBAGAD,GAAAG,QAAA,SAAA9T,EAAA+T,GACA,OAAAA,GAAA/T,EAAAI,WAAAJ,EAAAI,UAAAX,QAAAmU,GAAA,IAAA5T,GAAA2T,EAAAG,QAAA9T,EAAAyC,YAIA,IAAAuR,IAAA,CACAL,GAAArH,IAAA,WAKA,GAHAA,KAGA0H,IAAApB,GAAAD,EAAA,CAIAJ,EAAAgB,UAAAlM,WAEA2M,GAAA,EAEAL,EAAAD,QAAA,aAEAC,EAAAF,OAAA,WACAA,IACAO,GAAA,EAEAxB,EAAA9T,qBACA8T,EAAA9T,oBAAA,aAAAuV,GAAA,GAOA,IAAA/K,GASAgL,EAGAC,EAiBAC,EA1BAC,KAGAC,KASAC,EAAA,WACAF,KACAH,EAAA,MAGAM,EAAA,WACAF,KACAH,EAAA,MAQAM,EAAA,SAAAC,GACAN,EAAAlL,EAAAyL,iBAAA,kBACA,KAAA,GAAA/W,GAAA,EAAAgX,EAAAR,EAAAtW,OAAA8W,EAAAhX,EAAAA,IACAwW,EAAAxW,GAAA2H,MAAAsP,cAAAH,GAKAI,EAAA,SAAAC,EAAAhB,GACA,GAAAvB,EAAA1R,YAAA,CACA,GACAkU,GADAC,IAAAlB,GAAAA,IAAApQ,IAAAuF,EAAAzG,YAAAyG,EAAAgM,YAAAhM,CAGA+L,KAAA/L,IACA8L,EAAAxC,EAAA1R,YAAA,cACAkU,EAAAG,UAAA,YAAA,GAAA,GACAjM,EAAA3H,cAAAyT,GACAC,EAAAC,WAAAhM,EACAA,EAAA+L,EACAA,EAAA1T,cAAAwT,MAQAd,EAAA,SAAAhC,GAaA,GAVA0B,EAAAyB,WACAzB,EAAAyB,YAIAb,IACAC,IAEAtL,EAAAyK,EAAAG,QAAA7B,EAAAjS,QAEAkJ,GAAAA,IAAAuJ,KAAAR,EAAAoD,QAAAvX,OAAA,GAAA,CAIA2W,EAAA,OACA,IAAAa,GAAArD,EACAsD,EAAArM,EAAA9G,UACAoT,EAAAtM,EAAAuM,WACAC,EAAAxM,EAAAhH,aACA4Q,EAAA5J,EAAAyM,YACAC,EAAA3D,EAAAoD,QAAA,GAAAlS,MACA0S,EAAA5D,EAAAoD,QAAA,GAAAnS,MACAjB,EAAAiH,EAAAjH,aACAmD,EAAA8D,EAAA9D,YAGA0Q,EAAA,SAAA7D,GAEA,GAAA8D,GAAAR,EAAAK,EAAA3D,EAAAoD,QAAA,GAAAlS,MACA6S,EAAAR,EAAAK,EAAA5D,EAAAoD,QAAA,GAAAnS,MACA+S,EAAAF,IAAA1B,EAAAvW,OAAAuW,EAAA,GAAA,GACA6B,EAAAF,IAAA1B,EAAAxW,OAAAwW,EAAA,GAAA,EAGAyB,GAAA,GAAA9T,EAAAyT,EAAAK,GAAAC,EAAA,GAAA5Q,EAAA0N,EAAAkD,EACA/D,EAAAjP,iBAIA8R,EAAAQ,GAIApB,GAAA+B,IAAA/B,GACAK,IAIAJ,GAAA+B,IAAA/B,GACAK,IAIAN,EAAA+B,EACA9B,EAAA+B,EAGAhN,EAAA9G,UAAA2T,EACA7M,EAAAuM,WAAAO,EAEA3B,EAAA8B,QAAAJ,GACAzB,EAAA6B,QAAAH,GAEA3B,EAAAvW,OAAA,GACAuW,EAAA+B,MAEA9B,EAAAxW,OAAA,GACAwW,EAAA8B,OAKAC,EAAA,SAAApE,GAGAwC,EAAA,QACA6B,WAAA,WACA7B,EAAA,SACA,KACAvL,EAAAxK,oBAAA,YAAAoX,GAAA,GACA5M,EAAAxK,oBAAA,WAAA2X,GAAA,GAGAnN,GAAAlL,iBAAA,YAAA8X,GAAA,GACA5M,EAAAlL,iBAAA,WAAAqY,GAAA,IAIA7D,GAAAxU,iBAAA,aAAAiW,GAAA,OAGAjX,KAAAA,KAAAuW,WCxMA,WACA,YACAxN,SAAAF,OAAA,0CAgGA8C,UAAA,SACA,eACA,SAAA4N,GACA,OACA5M,SAAA,IACAzC,KAAA,SAAAsB,EAAAU,GACAqN,EAAAlP,SAAA,aACA6B,EAAAI,GAAA,WAAA,WACAiN,EAAAjP,YAAA,eAEAkB,EAAAjB,IAAA,WAAA,WACAgP,EAAAjP,YAAA,eAGA4B,EAAAsN,SAAA,mBACAD,EAAAlP,SAAA,qBACA6B,EAAAI,GAAA,WAAA,WACAiN,EAAAjP,YAAA,uBAEAkB,EAAAjB,IAAA,WAAA,WACAgP,EAAAjP,YAAA,gCCxCA,WACA,YAEA,IAAAzB,GAAAE,QAAAF,OAAA,0CA6BAE,SAAA0D,SAAA,MAAA,UAAA,SAAAgN,GACA,GAAA/M,GAAA,iBAAA+M,EAAAC,OAAA,GAAAxI,cAAAuI,EAAA3P,MAAA,EACAjB,GAAA8C,UAAAe,GACA,eACA,SAAA6M,GACA,OACA5M,SAAA,IACAzC,KAAA,SAAAsB,GACA+N,EAAAlP,SAAA,cAAAoP,GACAjO,EAAAjB,IAAA,WAAA,WACAgP,EAAAjP,YAAA,cAAAmP,eCvDA,WACA,YACA,IAAA5Q,GAAAE,QAAAF,OAAA,2CACA,6CAGA8Q,EAAA,SAAAxX,GACA,GAAAkW,GAAAlW,EAAAkW,SAAAlW,EAAAkW,QAAAvX,OAAAqB,EAAAkW,SAAAlW,GACA8S,EAAA9S,EAAA0B,gBAAA1B,EAAA0B,eAAA,IACA1B,EAAAyX,eAAAzX,EAAAyX,cAAA/V,gBACA1B,EAAAyX,cAAA/V,eAAA,IACAwU,EAAA,GAAAuB,eAAAvB,EAAA,EAEA,OAAApD,GAAA5Q,QAGAwE,GAAA8C,UAAA,oBAAA,WACA,OACAgB,SAAA,IACAkN,YAAA,WAAA,wBAAA,SAAAxG,EAAA6B,GACA,GAAA4E,GAAAzG,EAAA,GACA0G,EAAA1G,EAAAxG,SAAA,EAGA,IAAA,eAAAnJ,UAAA,CACA,GAAAsW,GAAAC,EAAAC,EAAAC,EAAAC,EACAC,EAAA,SAAAlY,GACA6X,EAAAF,EAAA1U,UAAA,EAEA6U,EAAAH,EAAA1U,UAAA0U,EAAA7U,aAAA6U,EAAAQ,aACAJ,EAAA,KACAC,EAAA,KACAC,EAAAT,EAAAxX,GAGAkR,GAAA/G,GAAA,aAAA+N,GACAhH,EAAA/G,GAAA,WAAA,WACA+G,EAAAiC,IAAA,gBAGAJ,EAAA7B,EAAA,SAAAlR,GACA,GAAAoY,GAAAZ,EAAAxX,GACAqY,EAAAD,EAAAH,EAAAnB,GAAAuB,CAEA,OADAJ,GAAAG,EACAC,GAAAR,GAAAf,GAAAgB,IAIAja,KAAA8Z,kBAAAA,EAEA9Z,KAAAya,SAAA,SAAAC,EAAAC,GAGA,GAFAA,EAAAA,GAAA,EAEA5R,QAAA6R,SAAAF,GACAZ,EAAA1U,UAAAsV,EAAAC,MACA,CACA,GAAA3X,GAAA+F,QAAAoB,QAAAuQ,GAAA,EACA1X,GAAA6X,cAAA7X,EAAA6X,eAAAd,EAIA/Z,KAAAya,SAAAzX,EAAA6X,aAAAF,EAAA3X,EAAA8X,WAHAhB,EAAA1U,UAAApC,EAAA8X,UAAAH,MAQAzQ,KAAA,SAAAsB,EAAArB,GACA,WAAAoM,UAAAG,UACAvM,EAAAE,SAAA,aACAkM,UAAAE,SACAF,UAAAjH,WAMAvG,QAAA0D,SAAA,QAAA,YAAA,SAAAC,GACA7D,EAAA8C,UAAAe,GAAA,aAAA,WAAA,SAAAzD,EAAA6D,GACA,OACAiO,QAAA,uBACA7Q,KAAA,SAAAsB,EAAAU,EAAAC,EAAA4N,GAEA7N,EAAAI,GAAA,QAAA,WACA,GAAAyN,GAAAA,EAAAD,kBAAA,CACA,GAAAkB,GAAAjB,EAAAD,kBAAA5U,YACA4H,GAAA,WACA,GAAAmO,GAAAlB,EAAAD,kBAAA5U,YAKA8V,GAAAC,GACAlB,EAAAU,SAAAvO,EAAA,KAEA,eAuBAnD,QAAA0D,SAEAyO,YAAA,SAAAhP,GACA,MAAA,KAAAA,EAAA9G,WAEA+V,eAAA,SAAAjP,GACA,MAAAA,GAAAjH,eAAAiH,EAAA9G,UAAA8G,EAAAoO,eAGA,SAAAc,EAAA1O,GACA7D,EAAA8C,UAAAe,GAAA,WACA,OACAC,SAAA,IACAzC,KAAA,SAAAsB,EAAAU,EAAAC,GACAD,EAAAI,GAAA,SAAA,WAEA8O,EAAAlP,EAAA,KAEAV,EAAA0B,OAAA,WACA1B,EAAAuF,MAAA5E,EAAAO,eAkBA3D,QAAA0D,SAAA4O,IAAA,mBAAAC,OAAA,oBACA,SAAA5O,EAAA+M,GACA5Q,EAAA8C,UAAAe,GACA,UACA,SAAAxD,GACA,OACAyD,SAAA,IACAzC,KAAA,SAAAsB,EAAArB,GACA,GAAAoR,GAAApR,EAAA,GACAqR,EAAArR,EAAA0C,SAAA,GAAAtE,MAEAkT,EAAA,WACA,GAAAC,GAAAxS,EAAAyS,iBAAAJ,GACAK,EAAAC,SAAAH,EAAAf,UAAA,IAAAkB,SAAAH,EAAAI,aAAA,GACAN,GAAA,UAAA/B,GAAA8B,EAAArW,aAAA0W,EAAA,MAGAG,EAAAC,YAAAP,EAAA,GAEAtR,GAAAmC,GAAA,WAAA,WACAkP,EAAA,UAAA/B,GAAA,KACAwC,cAAAF,GACAA,EAAAN,EAAAtR,EAAA,iBC5MA,WACA,YAEA,IAAAtB,GAAAE,QAAAF,OACA,yCACA,qCACA,qCAIAE,SAAA0D,SAAA,OAAA,SAAA,SAAAgN,GACA,GAAA/M,GAAA,UAAA+M,EAAAC,OAAA,GAAAxI,cAAAuI,EAAA3P,MAAA,GACAoS,EAAA,KAAAxP,EAAAgN,OAAA,GAAAxI,cAAAxE,EAAA5C,MAAA,EAEAjB,GAAA8C,UAAAe,GACA,eACA,cACA,iBACA,YACA,SACA6M,EACA7I,EACAhD,EACAtE,GAEA,OACAuD,SAAA,IACAzC,KAAA,SAAAsB,EAAAU,EAAAC,GACA,GAAAgQ,GAAA,eAAA1C,EACA2C,EAAA,WAAA3C,EAAA,WACA4C,EAAA,WAAA5C,EAAA,KAEAtN,GAAAgC,KACA+N,EAAA/P,EAAAgC,GAGA,IAAAmO,GAAA,WACA5L,EAAAZ,QAAAoM,IAGAlP,EAAA,WACA,MAAA0D,GAAAT,SAAAiM,GAGA3C,GAAAlP,SAAA8R,GACA3Q,EAAAjB,IAAA,WAAA,WACAgP,EACAjP,YAAA6R,GACA5C,EACAjP,YAAA8R,GACA7C,EACAjP,YAAA+R,IAGA,IAAAE,GAAA5V,SAAAwF,EAAA+D,QAAA,UAAA/D,EAAA+D,MACAQ,GAAAxC,WAAA1C,EAAA0Q,GAAA7N,aAAAkO,IAEA/Q,EAAAjB,IAAA,mCAAA2R,EAAA,SAAAjH,EAAA/E,IACA,KAAA/D,EAAAqQ,sBAAArQ,EAAAqQ,uBACApT,EAAAqT,OAAAP,EAAAhM,GAAA,MAGAA,GACAqJ,EACAlP,SAAA+R,GACA7C,EACAlP,SAAAgS,IAEA9C,EACAjP,YAAA+R,KAKA7Q,EAAAjB,IAAA,sBAAA,WACAmG,EAAAZ,QAAAoM,KAGA1Q,EAAAjB,IAAA,eAAA,WACA4B,EAAAqQ,uBACApT,EAAAqT,SAAAP,GACAxL,EAAAhB,OAAAwM,GAEAxL,EAAAZ,QAAAoM,MAKA1Q,EAAAjB,IAAA,sCAAA,WACAmG,EAAAT,SAAAiM,IACA3C,EAAAjP,YAAA8R,KAIA,UAAAjQ,EAAAuQ,oBACAhP,EAAAlC,EAAAU,EAAAoQ,EAAAtP,UAQAnE,EAAA8C,UAAA,OAAA,aAAA,SAAA1C,GACA,OACA0D,SAAA,IACAzC,KAAA,SAAAsB,EAAArB,GAEAA,EAAAmC,GAAA,kEAAA,WACArD,EAAA0F,WAAA,iDClJA,WACA,YACA5F,SAAAF,OAAA,0CAoCA8C,UAAA,YAAA,YAAA,SAAAgR,GACA,GAAAC,GAAAD,EAAAxM,IAAA,UAAAwM,EAAA3M,IAAA,QAEA,QACArD,SAAA,KACAnB,OACAqR,MAAA,WACAC,WAAA,aAEA5S,KAAA,SAAAsB,EAAAU,EAAAC,GACAD,EAAA7B,SAAA,SAEA,IAAAlH,GAAAgJ,EAAAhJ,UAAA+I,EAAA9B,KAAA,YAEA2S,EAAAvR,EAAA+B,OACA,WACA,MAAApB,GAAAhJ,UAAA+I,EAAA9B,KAAA,aAEA,SAAAzF,GAIAxB,EAHAwB,GAAA,UAAAA,GAAA,MAAAA,GAGA,GAFA,IAOAqY,EAAAjU,QAAAoB,QAAA,oCACA+B,GAAA+Q,OAAAD,GAEAxR,EAAAqR,OACA3Q,EAAA7B,SAAA,UAEA6B,EAAA7B,SAAA,4BAEA,IAAA6S,GAAA1R,EAAA+B,OAAA,QAAA,SAAA5I,GACAA,EACAuH,EAAA7B,SAAA,UAEA6B,EAAA5B,YAAA,YAIA6S,EAAA,WACA,OAAAha,GAGAia,EAAA,SAAAzY,GACAwY,KAAAxY,IAAA6G,EAAAqR,QACArR,EAAAqR,MAAAlY,EACA6G,EAAA0B,SACA,OAAA1B,EAAAsR,YAAAnW,SAAA6E,EAAAsR,YACAtR,EAAA6R,QAAAtM,MAAAvF,EAAAsR,cAKAQ,EAAA,WACAF,GAAA5R,EAAAqR,OAGA3Q,GAAAI,GAAA,YAAAgR,EAEA,IAAA7P,GAAA1E,QAAAsE,IAEAuP,KACAnP,EAAAmP,EAAAld,KAAAsd,GACAO,UAAAX,EAAAY,iBAAAtR,GACA+K,MAAA,WACA/K,EAAAoJ,IAAA,YAAAgI,IAEA9P,OAAA,WACAwP,EAAAS,WAAA,SACAvR,EAAAoJ,IAAA,YAAAgI,GACApR,EAAAI,GAAA,YAAAgR,IAEAjE,IAAA,WACA,GAAAqE,GAAAV,EAAA,GAAAW,wBACAC,EAAA1R,EAAA,GAAAyR,uBACAD,GAAAG,KAAAD,EAAAC,KAAAH,EAAA5H,MAAA,GACAsH,GAAA,GACAJ,EAAAS,WAAA,UACAG,EAAA1E,MAAAwE,EAAAxE,MAAAwE,EAAA5H,MAAA,GACAsH,GAAA,GACAJ,EAAAS,WAAA,UAEAT,EAAAS,WAAA,SAEAvR,EAAAI,GAAA,YAAAgR,OAKApR,EAAAI,GAAA,WAAA,WACAmB,IACAsP,IACAG,IACAC,EAAAC,EAAA3P,EAAAyP,EAAAH,EAAAO,EAAA,eCvHA,WACA,YAEAvU,SAAAF,OAAA,gCACA,sCACA,uCACA,wCACA,0CACA,2CCVA,WACA,YAEAE,SAAAF,OAAA,qBACA,yBACA","file":"mobile-angular-ui.min.js","sourcesContent":["(function () {\n 'use strict';\n var module = angular.module('mobile-angular-ui.core.fastclick', []);\n\n module.run(['$window', function($window) {\n\n\t//Temporarly bugfix in overthrow/fastclick:\n\tvar orgHandler = FastClick.prototype.onTouchEnd;\n\n\t// Some old versions of Android don't have Function.prototype.bind\n\tfunction bind(method, context) {\n\t\treturn function() { return method.apply(context, arguments); };\n\t}\n\n\tFastClick.prototype.onTouchEnd = function(event) {\n\n\t\tif (!event.changedTouches) {\n event.changedTouches = [{}];\n }\n \n\t\torgHandler = bind(orgHandler, this);\n\t\torgHandler(event);\n\t};\n\n\tFastClick.attach($window.document.body);\n\n }]);\n\n angular.forEach(['select', 'input', 'textarea'], function(directiveName){\n\n module.directive(directiveName, function(){\n return {\n restrict: 'E',\n compile: function(elem) {\n elem.addClass('needsclick');\n }\n };\n });\n });\n}());\n","/**\n@module mobile-angular-ui.core.activeLinks\n@description\n\n`mobile-angular-ui.activeLinks` module sets up `.active` class for `a` elements those `href` attribute matches the current angular `$location` url. It takes care of excluding both search part and hash part from comparison.\n\n`.active` classes are added/removed each time one of `$locationChangeSuccess` or `$includeContentLoaded` is fired.\n\n## Usage\n\nJust declare it as a dependency to your app unless you have already included one of its super-modules.\n\n```\nangular.module('myApp', ['mobile-angular-ui.core.activeLinks']);\n```\n\n**NOTE:** if you are using it without Bootstrap you may need to add some css to your stylesheets to reflect the activation state of links. I.e.\n\n``` css\na.active {\n color: blue;\n}\n```\n\n*/\n(function () {\n 'use strict';\n\n angular.module(\"mobile-angular-ui.core.activeLinks\", [])\n\n .run([\n '$rootScope', \n '$window', \n '$document',\n '$location',\n function($rootScope, $window, $document, $location){\n\n var setupActiveLinks = function() {\n // Excludes both search part and hash part from \n // comparison.\n var url = $location.url(),\n firstHash = url.indexOf('#'),\n firstSearchMark = url.indexOf('?'),\n locationHref = $window.location.href,\n plainUrlLength = locationHref.indexOf(url),\n newPath;\n\n if (firstHash === -1 && firstSearchMark === -1) {\n newPath = locationHref;\n } else if (firstHash !== -1 && firstHash > firstSearchMark) {\n newPath = locationHref.slice(0, plainUrlLength + firstHash);\n } else if (firstSearchMark !== -1 && firstSearchMark > firstHash) {\n newPath = locationHref.slice(0, plainUrlLength + firstSearchMark);\n }\n \n var domLinks = $document[0].links;\n for (var i = 0; i < domLinks.length; i++) {\n var domLink = domLinks[i];\n var link = angular.element(domLink);\n if (link.attr('href') && link.attr('href') !== '' && domLink.href === newPath) {\n link.addClass('active');\n } else if (link.attr('href') && link.attr('href') !== '' && domLink.href && domLink.href.length) {\n link.removeClass('active');\n }\n }\n };\n\n $rootScope.$on('$locationChangeSuccess', setupActiveLinks);\n $rootScope.$on('$includeContentLoaded', setupActiveLinks);\n }\n ]);\n\n}());\n\n","/**\n * @module mobile-angular-ui.core.capture\n * @description\n *\n * The `capture` module exposes directives to let you extract markup which can be used in other parts of a template using `uiContentFor` and `uiYieldTo` directives.\n *\n * It provides a way to move or clone a block of markup to other parts of the document.\n *\n * This method is particularly useful to setup parts of the layout within an angular view. Since blocks of html are transplanted within their original `$scope` is easy to create layout interactions depending on the context. Some tipical task you can accomplish with these directives are: _setup the navbar title depending on the view_ or _place a submit button for a form inside a navbar_.\n *\n * ## Usage\n *\n * Declare it as a dependency to your app unless you have already included some of its super-modules.\n *\n * ```\n * angular.module('myApp', ['mobile-angular-ui']);\n * ```\n *\n * Or\n *\n * ```\n * angular.module('myApp', ['mobile-angular-ui']);\n * ```\n *\n * Or\n *\n * ```\n * angular.module('myApp', ['mobile-angular-ui.core.capture']);\n * ```\n *\n * Use `ui-yield-to` as a placeholder.\n *\n * ``` html\n * \n *\n *
\n *
\n * Default Title\n *
\n *
\n *\n *
\n * \n *
\n * ```\n *\n * Use `ui-content-for` inside any view to populate the `ui-yield-to` content.\n *\n * ``` html\n * \n *\n *
\n * My View Title\n *
\n * ```\n *\n * Since the original scope is preserved you can use directives inside `ui-content-for` blocks to interact with the current scope. In the following example we will add a navbar button to submit a form inside a nested view.\n *\n *\n * ``` html\n * \n *\n *
\n *
\n *
\n *
\n *\n *
\n * \n *
\n * ```\n *\n * ``` html\n * \n *\n *
\n *\n *
\n * \n *
\n *\n *
\n * \n *
\n *\n *
\n * ```\n *\n * ``` javascript\n * app.controller('newCustomerController', function($scope, Store){\n * $scope.customer = {};\n * $scope.createCustomer = function(){\n * Store.create($scope.customer);\n * // ...\n * }\n * });\n * ```\n *\n * If you wish you can also duplicate markup instead of move it. Just add `duplicate` parameter to `uiContentFor` directive to specify this behaviour.\n *\n * ``` html\n *
\n * \n *
\n * ```\n */\n(function () {\n 'use strict';\n\n angular.module('mobile-angular-ui.core.capture', [])\n\n .run([\n 'Capture',\n '$rootScope',\n function(Capture, $rootScope) {\n $rootScope.$on('$routeChangeSuccess', function() {\n Capture.resetAll();\n });\n }\n ])\n\n .factory('Capture', [\n '$compile',\n function($compile) {\n var yielders = {};\n\n return {\n resetAll: function() {\n for (var name in yielders) {\n if (yielders.hasOwnProperty(name)) {\n this.resetYielder(name);\n }\n }\n },\n\n resetYielder: function(name) {\n var b = yielders[name];\n this.setContentFor(name, b.defaultContent, b.defaultScope);\n },\n\n putYielder: function(name, element, defaultScope, defaultContent) {\n var yielder = {};\n yielder.name = name;\n yielder.element = element;\n yielder.defaultContent = defaultContent || '';\n yielder.defaultScope = defaultScope;\n yielders[name] = yielder;\n },\n\n getYielder: function(name) {\n return yielders[name];\n },\n\n removeYielder: function(name) {\n delete yielders[name];\n },\n\n setContentFor: function(name, content, scope) {\n var b = yielders[name];\n if (!b) {\n return;\n }\n b.element.html(content);\n $compile(b.element.contents())(scope);\n }\n\n };\n }\n ])\n\n /**\n * @directive uiContentFor\n * @restrict A\n * @description\n *\n * `ui-content-for` makes inner contents to replace the corresponding\n * `ui-yield-to` placeholder contents.\n *\n * `uiContentFor` is intended to be used inside a view in order to populate outer placeholders.\n * Any content you send to placeholders via `ui-content-for` is\n * reverted to placeholder defaults after view changes (ie. on `$routeChangeStart`).\n *\n * @param {string} uiContentFor The id of the placeholder to be replaced\n * @param {boolean} uiDuplicate If present duplicates the content instead of moving it (default to `false`)\n *\n */\n .directive('uiContentFor', [\n 'Capture',\n function(Capture) {\n return {\n compile: function(tElem, tAttrs) {\n var rawContent = tElem.html();\n if(tAttrs.uiDuplicate === null || tAttrs.uiDuplicate === undefined) {\n // no need to compile anything!\n tElem.html('');\n tElem.remove();\n }\n return function(scope, elem, attrs) {\n Capture.setContentFor(attrs.uiContentFor, rawContent, scope);\n };\n }\n };\n }\n ])\n\n /**\n * @directive uiYieldTo\n * @restrict A\n * @description\n *\n * `ui-yield-to` defines a placeholder which contents will be further replaced by `ui-content-for` directive.\n *\n * Inner html is considered to be a default. Default is restored any time `$routeChangeStart` happens.\n *\n * @param {string} uiYieldTo The unique id of this placeholder.\n *\n */\n .directive('uiYieldTo', [\n '$compile', 'Capture', function($compile, Capture) {\n return {\n link: function(scope, element, attr) {\n Capture.putYielder(attr.uiYieldTo, element, scope, element.html());\n\n element.on('$destroy', function(){\n Capture.removeYielder(attr.uiYieldTo);\n });\n\n scope.$on('$destroy', function(){\n Capture.removeYielder(attr.uiYieldTo);\n });\n }\n };\n }\n ]);\n\n}());\n","/**\n\n@module mobile-angular-ui.core.outerClick\n@description\n\nProvides a directive to specifiy a behaviour when click/tap events \nhappen outside an element. This can be easily used \nto implement eg. __close on outer click__ feature for a dropdown.\n\n## Usage\n\nDeclare it as a dependency to your app unless you have already \nincluded some of its super-modules.\n\n```\nangular.module('myApp', ['mobile-angular-ui']);\n```\n\nOr\n\n```\nangular.module('myApp', ['mobile-angular-ui.core']);\n```\n\nOr\n\n```\nangular.module('myApp', ['mobile-angular-ui.core.outerClick']);\n```\n\nUse `ui-outer-click` to define an expression to evaluate when an _Outer Click_ event happens.\nUse `ui-outer-click-if` parameter to define a condition to enable/disable the listener.\n\n``` html\n
\n \n \n \n \n
\n```\n\n*/\n(function () {\n 'use strict';\n\n var isAncestorOrSelf = function(element, target) {\n var parent = element;\n while (parent.length > 0) {\n if (parent[0] === target[0]) {\n parent = null;\n return true;\n }\n parent = parent.parent();\n }\n parent = null;\n return false;\n };\n\n angular.module('mobile-angular-ui.core.outerClick', [])\n\n /**\n * @service bindOuterClick\n * @as function\n * \n * @description\n * This is a service function that binds a callback to be conditionally executed\n * when a click event happens outside a specified element.\n *\n * Ie.\n * \n * ``` js\n * app.directive('myDirective', function('bindOuterClick'){\n * return {\n * link: function(scope, element) {\n * bindOuterClick(element, function(scope, extra){\n * alert('You clicked ouside me!');\n * }, function(e){\n * return element.hasClass('disabled') ? true : false;\n * });\n * }\n * };\n * });\n * ```\n * @scope {scope} the scope to eval callbacks\n * @param {DomElement|$element} element The element to bind to. \n * @param {function} callback A `function(scope, options)`, usually the result of `$parse`, that is called when an _outer click_ event happens.\n * @param {string|function} condition Angular `$watch` expression to decide whether to run `callback` or not.\n */\n .factory('bindOuterClick', [\n '$document',\n '$timeout',\n function ($document, $timeout) {\n \n return function (scope, element, outerClickFn, outerClickIf) {\n var handleOuterClick = function(event){\n if (!isAncestorOrSelf(angular.element(event.target), element)) {\n scope.$apply(function() {\n outerClickFn(scope, {$event:event});\n });\n }\n };\n\n var stopWatching = angular.noop;\n var t = null;\n\n if (outerClickIf) {\n stopWatching = scope.$watch(outerClickIf, function(value){\n $timeout.cancel(t);\n\n if (value) {\n // prevents race conditions \n // activating with other click events\n t = $timeout(function() {\n $document.on('click tap', handleOuterClick);\n }, 0);\n\n } else {\n $document.unbind('click tap', handleOuterClick); \n }\n });\n } else {\n $timeout.cancel(t);\n $document.on('click tap', handleOuterClick);\n }\n\n scope.$on('$destroy', function(){\n stopWatching();\n $document.unbind('click tap', handleOuterClick);\n });\n };\n }\n ])\n\n\n /**\n * @directive outerClick\n * \n * @description\n * Evaluates an expression when an _Outer Click_ event happens.\n * \n * @param {expression} uiOuterClick Expression to evaluate when an _Outer Click_ event happens.\n * @param {expression} uiOuterClickIf Condition to enable/disable the listener. Defaults to `true`.\n */\n .directive('uiOuterClick', [\n 'bindOuterClick', \n '$parse',\n function(bindOuterClick, $parse){\n return {\n restrict: 'A',\n compile: function(elem, attrs) {\n var outerClickFn = $parse(attrs.uiOuterClick);\n var outerClickIf = attrs.uiOuterClickIf;\n return function(scope, elem) {\n bindOuterClick(scope, elem, outerClickFn, outerClickIf);\n };\n }\n };\n }\n ]);\n}());","(function() {\n 'use strict'; \n /**\n * @module mobile-angular-ui.core.sharedState\n *\n * @description\n * `mobile-angular-ui.core.sharedState` is expose the homonymous service\n * `SharedState` and a group of directives to access it.\n *\n * `SharedState` allows to use elementary angular or angularish directives\n * to create interactive components.\n *\n * Ie.\n *\n * ``` html\n *
\n * Tab1\n * Tab2\n * Tab3\n *
\n *
\n *
Tab1
\n *
Tab2
\n *
Tab3
\n *
\n * ```\n * \n * Using `SharedState` you will be able to:\n * \n * - Create interactive components without having to write javascript code\n * - Have your controller free from UI logic\n * - Separe `ng-click` triggering application logic from those having a visual effect only\n * - Export state of components to urls\n * - Easily make components comunicate each other\n *\n * Also note that:\n *\n * Data structures retaining statuses will stay outside angular scopes\n * thus they are not evaluated against digest cycle until its necessary. \n * Also although statuses are sort of global variables `SharedState` will \n * take care of disposing them when no scopes are requiring them anymore.\n * \n * A set of `ui-*` directives are available to interact with `SharedState`\n * module and will hopefully let you spare your controllers and your time \n * for something that is more meaningful than this:\n * \n * ``` js\n * $scope.activeTab = 1;\n * \n * $scope.setActiveTab = function(n) {\n * $scope.activeTab = n;\n * };\n * ```\n * \n * ## Usage\n * \n * Declare it as a dependency to your app unless you have already included some \n * of its super-modules.\n * \n * ```\n * angular.module('myApp', ['mobile-angular-ui.core.sharedState']);\n * ```\n * \n * Use `ui-state` directive to require/initialize a state from the target element scope\n * \n * **Example.** Tabs\n * \n * \n *\n * **Example.** Custom components\n *\n * \n *\n * NOTE: `ui-toggle/set/turnOn/turnOff` responds to `click/tap` without stopping propagation so you can use them along with ng-click too. You can also change events to respond to with `ui-triggers` attribute.\n * \n * Any `SharedState` method is exposed through `Ui` object in `$rootScope`. So you could always do `ng-click=\"Ui.turnOn('myVar')\"`.\n * \n * Since `SharedState` is a service you can initialize/set statuses through controllers too:\n * \n * ``` js\n * app.controller('myController', function($scope, SharedState){\n * SharedState.initialize($scope, \"activeTab\", 3);\n * });\n * ```\n * \n * As well as you can use `ui-default` for that: \n * \n * ``` html\n *
\n * ```\n * \n */\n var module = angular.module('mobile-angular-ui.core.sharedState', []);\n\n /**\n * @ngdoc service\n * @class SharedState\n *\n * @description\n * \n * A `SharedState` state can be considered as a global variable identified by an `id`.\n * \n * `SharedState` service exposes methods to interact with statuses to create, read and update states. \n * \n * It acts as a BUS between UI elements to share UI related state that is automatically disposed when all scopes requiring it are destroyed.\n * \n * eg.\n * \n * ``` js\n * app.controller('controller1', function($scope, SharedState){\n * SharedState.initialize($scope, 'myId');\n * });\n * \n * app.controller('controller2', function(SharedState){\n * SharedState.toggle('myId');\n * });\n * ```\n * \n * Data structures retaining statuses will stay outside angular scopes thus they are not evaluated against digest cycle until its necessary. Also although statuses are sort of global variables `SharedState` will take care of disposing them when no scopes are requiring them anymore.\n * \n * A set of `ui-*` directives are available to interact with `SharedState` module and will hopefully let you spare your controllers and your time for something that is more meaningful than this:\n * \n * ``` js\n * $scope.activeTab = 1;\n * \n * $scope.setActiveTab = function(n) {\n * $scope.activeTab = n;\n * };\n * ```\n *\n */\n \n /**\n * @event 'mobile-angular-ui.state.initialized.ID'\n * @shortname initialized\n * @memberOf mobile-angular-ui.core.sharedState~SharedState \n * \n * @description\n * Broadcasted on `$rootScope` when `#initialize` is called for a new state not referenced by any scope currently.\n * \n * @param {any} currentValue The value with which this state has been initialized\n * \n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n */\n \n /**\n * @event 'mobile-angular-ui.state.destroyed.ID'\n * @shortname destroyed\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * \n * @description\n * Broadcasted on `$rootScope` when a state is destroyed. \n * \n */\n \n /**\n * @event 'mobile-angular-ui.state.changed.ID'\n * @shortname changed\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * \n * @description\n * Broadcasted on `$rootScope` the value of a state changes.\n * \n * ``` js\n * $scope.$on('mobile-angular-ui.state.changed.uiSidebarLeft', function(e, newVal, oldVal) {\n * if (newVal === true) {\n * console.log('sidebar opened');\n * } else {\n * console.log('sidebar closed');\n * }\n * });\n * ```\n * \n * @param {any} newValue\n * @param {any} oldValue\n * \n */ \n\n module.factory('SharedState', [\n '$rootScope',\n function($rootScope){\n var values = {}; // values, context object for evals\n var statusesMeta = {}; // status info\n var scopes = {}; // scopes references\n var exclusionGroups = {}; // support exclusive boolean sets\n\n return {\n /**\n * @function initialize\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * Initialize, or require if already intialized, a state identified by `id` within the provided `scope`, making it available to the rest of application.\n * \n * A `SharedState` is bound to one or more scopes. Each time `initialize` is called for an angular `scope` this will be bound to the `SharedState` and a reference count is incremented to allow garbage collection.\n * \n * Reference count is decremented once the scope is destroyed. When the counter reach 0 the state will be disposed.\n * \n * @param {scope} scope The scope to bound this state\n * @param {string} id The unique name of this state \n * @param {object} [options] Options\n * @param {object} [options.defaultValue] the initialization value, it is taken into account only if the state `id` is not already initialized\n * @param {object} [options.exclusionGroup] Specifies an exclusion group for the state. This means that for boolean operations (ie. toggle, turnOn, turnOf) when this state is set to `true`, any other state that is in the same `exclusionGroup` will be set to `false`.\n */\n initialize: function(scope, id, options) {\n options = options || {};\n \n var isNewScope = scopes[scope] === undefined,\n defaultValue = options.defaultValue,\n exclusionGroup = options.exclusionGroup;\n\n scopes[scope.$id] = scopes[scope.$id] || [];\n scopes[scope.$id].push(id);\n\n if (!statusesMeta[id]) { // is a brand new state \n // not referenced by any \n // scope currently\n\n statusesMeta[id] = angular.extend({}, options, {references: 1});\n\n $rootScope.$broadcast('mobile-angular-ui.state.initialized.' + id, defaultValue);\n\n if (defaultValue !== undefined) {\n this.setOne(id, defaultValue);\n }\n\n if (exclusionGroup) {\n // Exclusion groups are sets of statuses references\n exclusionGroups[exclusionGroup] = exclusionGroups[exclusionGroup] || {};\n exclusionGroups[exclusionGroup][id] = true;\n }\n\n } else if (isNewScope) { // is a new reference from \n // a different scope\n statusesMeta[id].references++; \n }\n scope.$on('$destroy', function(){\n var ids = scopes[scope.$id] || [];\n for (var i = 0; i < ids.length; i++) {\n var status = statusesMeta[ids[i]];\n \n if (status.exclusionGroup) {\n delete exclusionGroups[status.exclusionGroup][ids[i]];\n if (Object.keys(exclusionGroups[status.exclusionGroup]).length === 0) {\n delete exclusionGroups[status.exclusionGroup];\n }\n }\n\n status.references--;\n if (status.references <= 0) {\n delete statusesMeta[ids[i]];\n delete values[ids[i]];\n $rootScope.$broadcast('mobile-angular-ui.state.destroyed.' + id);\n }\n }\n delete scopes[scope.$id];\n });\n },\n\n /**\n * @function setOne\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * Set the value of the state identified by `id` to the `value` parameter.\n *\n * @param {string} id Unique identifier for state\n * @param {any} value New value for this state\n */\n setOne: function(id, value) {\n if (statusesMeta[id] !== undefined) {\n var prev = values[id];\n values[id] = value;\n if (prev !== value) {\n $rootScope.$broadcast('mobile-angular-ui.state.changed.' + id, value, prev);\n }\n return value;\n } else {\n /* global console: false */\n if (console) {\n console.warn('Warning: Attempt to set uninitialized shared state:', id);\n }\n }\n },\n\n /**\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * \n * @function setMany\n * @description\n *\n * Set multiple statuses at once. ie.\n * \n * ```\n * SharedState.setMany({ activeTab: 'firstTab', sidebarIn: false });\n * ```\n * \n * @param {object} object An object of the form `{state1: value1, ..., stateN: valueN}`\n */\n setMany: function(map) {\n angular.forEach(map, function(value, id) {\n this.setOne(id, value);\n }, this);\n },\n\n\n /**\n * @function set\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n * \n * A shorthand for both `setOne` and `setMany`.\n * When called with only one parameter that is an object \n * it is the same of `setMany`, otherwise is the \n * same of `setOne`.\n * \n * @param {string|object} idOrMap A state id or a `{state: value}` map object.\n * @param {any} [value] The value to assign in case idOrMap is a string.\n */\n set: function(idOrMap, value) {\n if (angular.isObject(idOrMap) && angular.isUndefined(value)) {\n this.setMany(idOrMap);\n } else {\n this.setOne(idOrMap, value);\n }\n },\n\n /**\n * @function turnOn\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n * \n * Set shared state identified by `id` to `true`. If the \n * shared state has been initialized with `exclusionGroup` \n * option it will also turn off (set to `false`) all other \n * statuses from the same exclusion group.\n * \n * @param {string} id The unique name of this state\n */\n turnOn: function(id) {\n // Turns off other statuses belonging to the same exclusion group.\n var eg = statusesMeta[id] && statusesMeta[id].exclusionGroup;\n if (eg) {\n var egStatuses = Object.keys(exclusionGroups[eg]);\n for (var i = 0; i < egStatuses.length; i++) {\n var item = egStatuses[i];\n if (item !== id) {\n this.turnOff(item);\n }\n }\n }\n return this.setOne(id, true);\n },\n\n /**\n * @function turnOff\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * \n * @description\n * Set shared state identified by `id` to `false`.\n *\n * @param {string} id The unique name of this state\n */\n turnOff: function(id) {\n return this.setOne(id, false);\n },\n\n /**\n * @function toggle\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * If current value for shared state identified by `id` evaluates \n * to `true` it calls `turnOff` on it otherwise calls `turnOn`. \n * Be aware that it will take into account `exclusionGroup` option. \n * See `#turnOn` and `#initialize` for more.\n *\n * @param {string} id The unique name of this state\n */\n toggle: function(id) {\n return this.get(id) ? this.turnOff(id) : this.turnOn(id);\n },\n\n /**\n * @function get\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * \n * @description\n * Returns the current value of the state identified by `id`.\n *\n * @param {string} id The unique name of this state\n * @returns {any}\n */\n get: function(id) {\n return statusesMeta[id] && values[id];\n },\n\n /**\n * @function isActive\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * Return `true` if the boolean conversion of `#get(id)` evaluates to `true`.\n *\n * @param {string} id The unique name of this state\n * @returns {bool}\n */\n isActive: function(id) {\n return !! this.get(id);\n },\n\n /**\n * @function active\n * @alias mobile-angular-ui.core.sharedState~SharedState.isActive\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n * \n * Alias for `#isActive`.\n * \n * @param {string} id The unique name of this state\n * @returns {bool}\n */\n active: function(id) {\n return this.isActive(id);\n },\n\n /**\n * @function isUndefined\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n * \n * Return `true` if state identified by `id` is not defined.\n * \n * @param {string} id The unique name of this state\n * @returns {bool}\n */\n isUndefined: function(id) {\n return statusesMeta[id] === undefined || this.get(id) === undefined;\n },\n\n /**\n * Returns `true` if state identified by `id` exsists.\n * \n * @param {string} id The unique name of this state\n * @returns {bool}\n * \n * @function has\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n */\n has: function(id) {\n return statusesMeta[id] !== undefined;\n },\n\n /**\n * Returns the number of references of a status.\n * \n * @param {string} id The unique name of this state\n * @returns {integer}\n * \n * @function referenceCount\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n */\n referenceCount: function(id) {\n var status = statusesMeta[id];\n return status === undefined ? 0 : status.references;\n },\n\n /**\n * Returns `true` if `#get(id)` is exactly equal (`===`) to `value` param.\n *\n * @param {string} id The unique name of this state\n * @param {any} value The value for comparison\n * @returns {bool} \n * \n * @function equals\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n */\n equals: function(id, value) {\n return this.get(id) === value;\n },\n\n\n /**\n * Alias for `#equals`\n * \n * @param {string} id The unique name of this state\n * @param {any} value The value for comparison\n * @returns {bool} \n * \n * @function eq\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @alias mobile-angular-ui.core.sharedState~SharedState.equals\n */\n eq: function(id, value) {\n return this.equals(id, value);\n },\n\n /**\n * Returns an object with all the status values currently stored. \n * It has the form of `{statusId: statusValue}`.\n * \n * Bear in mind that in order to spare resources it currently \n * returns just the internal object retaining statuses values. \n * Thus it is not intended to be modified and direct changes to it will be not tracked or notified.\n * \n * Just clone before apply any change to it.\n * \n * @returns {object}\n * \n * @function values\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n */\n values: function() {\n return values;\n }\n \n };\n }\n ]);\n\n var uiBindEvent = function(scope, element, eventNames, fn){\n eventNames = eventNames || 'click tap';\n element.on(eventNames, function(event){\n scope.$apply(function() {\n fn(scope, {$event:event});\n });\n });\n };\n\n /**\n * Calls `SharedState#initialize` on the scope relative to the element using it.\n * \n * @param {string} uiState The shared state id\n * @param {expression} [uiDefault] the default value\n * \n * @directive uiState\n */\n module.directive('uiState', [\n 'SharedState',\n function(SharedState){\n return {\n restrict: 'EA',\n priority: 601, // more than ng-if\n link: function(scope, elem, attrs){\n var id = attrs.uiState || attrs.id,\n defaultValueExpr = attrs.uiDefault || attrs['default'],\n defaultValue = defaultValueExpr ? scope.$eval(defaultValueExpr) : undefined;\n\n SharedState.initialize(scope, id, {\n defaultValue: defaultValue,\n exclusionGroup: attrs.uiExclusionGroup\n });\n }\n };\n }\n ]);\n\n angular.forEach(['toggle', 'turnOn', 'turnOff', 'set'], \n function(methodName){\n var directiveName = 'ui' + methodName[0].toUpperCase() + methodName.slice(1);\n\n /**\n * Calls `SharedState#toggle` when triggering events happens on the element using it.\n * \n * @param {string} uiToggle the target shared state\n * @param {expression} uiDefault the default value\n *\n * @directive uiToggle\n */\n \n /**\n * @function uiTurnOn\n * \n * @description\n * Calls `SharedState#turnOn` when triggering events happens on the element using it.\n *\n * \n * @ngdoc directive\n * \n * @param {string} uiTurnOn the target shared state\n * @param {expression} uiDefault the default value\n */\n\n /**\n * @function uiTurnOff\n * \n * @description\n * Calls `SharedState#turnOff` when triggering events happens on the element using it.\n * \n * @ngdoc directive\n * \n * @param {string} uiTurnOff the target shared state\n * @param {string} [uiTriggers='click tap'] the event triggering the call.\n */\n\n /**\n * @function uiSet\n * \n * @description\n * Calls `SharedState#set` when triggering events happens on the element using it.\n * \n * @ngdoc directive\n * \n * @param {object} uiSet The object to pass to SharedState#set\n * @param {string} [uiTriggers='click tap'] the event triggering the call.\n */\n \n module.directive(directiveName, [\n '$parse',\n '$interpolate',\n 'SharedState',\n function($parse, $interpolate, SharedState) {\n var method = SharedState[methodName];\n return {\n restrict: 'A',\n priority: 1, // This would make postLink calls happen after ngClick \n // (and similar) ones, thus intercepting events after them.\n // \n // This will prevent eventual ng-if to detach elements \n // before ng-click fires.\n\n compile: function(elem, attrs) {\n var attr = attrs[directiveName];\n var needsInterpolation = attr.match(/\\{\\{/);\n \n var exprFn = function($scope) {\n var res = attr;\n if (needsInterpolation) {\n var interpolateFn = $interpolate(res);\n res = interpolateFn($scope);\n }\n if (methodName === 'set') {\n res = ($parse(res))($scope); \n }\n return res; \n };\n\n return function(scope, elem, attrs) {\n var callback = function() {\n var arg = exprFn(scope);\n return method.call(SharedState, arg);\n };\n uiBindEvent(scope, elem, attrs.uiTriggers, callback);\n };\n }\n };\n }\n ]);\n });\n\n /**\n * @name uiScopeContext\n * @inner \n * @description\n * \n * `uiScopeContext` is not a directive, but a parameter common to any of the \n * `ui-*` directives in this module.\n *\n * By default all `ui-*` conditions in this module evaluates in the context of \n * `SharedState` only, thus scope variable are not accessible. To use them you have \n * two options:\n *\n * #### 1. pre-interpolation\n * \n * You can use pre-interpolation in expression attribute. For instance the following syntax\n * is ligit:\n * \n * ``` html\n *
\n * ```\n *\n * In this case `idx` value is taken from scope and embedded into\n * conditions before parse them.\n *\n * This works as expected and is fine for the most cases, but it has a little caveat:\n *\n * The condition has to be re-parsed at each digest loop and has to walk scopes \n * in watchers.\n *\n * #### 2. uiScopeContext\n *\n * If you are concerned about performance issues using the first approach \n * `uiScopeContext` is a more verbose but also lightweight alternative \n * to accomplish the same.\n * \n * It allows to use current scope vars inside `ui-*` conditions, leaving\n * other scope vars (or the entire scope if not present) apart from the\n * condition evaluation process.\n * \n * Hopefully this will keep evaluation running against a flat and small data \n * structure instead of taking into account the whole scope. \n * \n * It is a list `scopeVar[ as aliasName] [, ...]` specifing one of more scope\n * variables to take into account when evaluating conditions. ie:\n * \n * ``` html\n * \n *
\n *
\n * \n *
\n *
\n * ```\n * \n * ``` html\n *
\n *
\n * ```\n * \n * Be aware that scope vars will take precedence over sharedStates so,\n * in order to avoid name clashes you can use 'as' to refer to scope vars\n * with a different name in conditions:\n * \n * ``` html\n *
\n *
\n * ```\n */\n var parseScopeContext = function(attr) {\n if (!attr || attr === '') {\n return [];\n }\n var vars = attr ? attr.trim().split(/ *, */) : [];\n var res = [];\n for (var i = 0; i < vars.length; i++) {\n var item = vars[i].split(/ *as */);\n if (item.length > 2 || item.length < 1) {\n throw new Error('Error parsing uiScopeContext=\"' + attr + '\"');\n }\n res.push(item);\n }\n return res;\n };\n\n var mixScopeContext = function(context, scopeVars, scope) {\n for (var i = 0; i < scopeVars.length; i++) {\n var key = scopeVars[i][0];\n var alias = scopeVars[i][1] || key;\n context[alias] = key.split('.').reduce(function (scope, nextKey) {\n return scope[nextKey];\n }, scope);\n }\n };\n\n var parseUiCondition = function(name, attrs, $scope, SharedState, $parse, $interpolate) {\n var expr = attrs[name];\n var needsInterpolation = expr.match(/\\{\\{/);\n var exprFn;\n\n if (needsInterpolation) {\n exprFn = function(context) {\n var interpolateFn = $interpolate(expr);\n var parseFn = $parse(interpolateFn($scope));\n return parseFn(context);\n };\n } else {\n exprFn = $parse(expr);\n }\n\n var uiScopeContext = parseScopeContext(attrs.uiScopeContext);\n return function() {\n var context;\n if (uiScopeContext.length) {\n context = angular.extend({}, SharedState.values());\n mixScopeContext(context, uiScopeContext, $scope); \n } else {\n context = SharedState.values();\n }\n return exprFn(context);\n };\n };\n\n \n /**\n * @ngdoc directive\n * @function uiIf\n * \n * @description \n * Same as `ngIf` but evaluates condition against `SharedState` statuses too\n * \n * @param {expression} uiIf A condition to decide wether to attach the element to the dom\n * @param {list} [uiScopeContext] A list `scopeVar[ as aliasName] [, ...]` specifing one of more scope variables to take into account when evaluating condition.\n */ \n module.directive('uiIf', ['$animate', 'SharedState', '$parse', '$interpolate', function($animate, SharedState, $parse, $interpolate) {\n function getBlockNodes(nodes) {\n var node = nodes[0];\n var endNode = nodes[nodes.length - 1];\n var blockNodes = [node];\n do {\n node = node.nextSibling;\n if (!node) { break; }\n blockNodes.push(node);\n } while (node !== endNode);\n\n return angular.element(blockNodes);\n }\n\n return {\n multiElement: true,\n transclude: 'element',\n priority: 600,\n terminal: true,\n restrict: 'A',\n $$tlb: true,\n link: function ($scope, $element, $attr, ctrl, $transclude) {\n var block, childScope, previousElements, \n uiIfFn = parseUiCondition('uiIf', $attr, $scope, SharedState, $parse, $interpolate);\n\n $scope.$watch(uiIfFn, function uiIfWatchAction(value) {\n if (value) {\n if (!childScope) {\n $transclude(function (clone, newScope) {\n childScope = newScope;\n clone[clone.length++] = document.createComment(' end uiIf: ' + $attr.uiIf + ' ');\n // Note: We only need the first/last node of the cloned nodes.\n // However, we need to keep the reference to the jqlite wrapper as it might be changed later\n // by a directive with templateUrl when its template arrives.\n block = {\n clone: clone\n };\n $animate.enter(clone, $element.parent(), $element);\n });\n }\n } else {\n if (previousElements) {\n previousElements.remove();\n previousElements = null;\n }\n if (childScope) {\n childScope.$destroy();\n childScope = null;\n }\n if (block) {\n previousElements = getBlockNodes(block.clone);\n var done = function() {\n previousElements = null;\n };\n var nga = $animate.leave(previousElements, done);\n if (nga) {\n nga.then(done);\n }\n block = null;\n }\n }\n });\n }\n };\n }]);\n\n \n /**\n * @ngdoc directive \n * @function uiHide\n * \n * @description\n * Same as `ngHide` but evaluates condition against `SharedState` statuses\n * \n * @param {expression} uiShow A condition to decide wether to hide the element\n * @param {list} [uiScopeContext] A list `scopeVar[ as aliasName] [, ...]` specifing one of more scope variables to take into account when evaluating condition.\n */ \n module.directive('uiHide', ['$animate', 'SharedState', '$parse', '$interpolate', function($animate, SharedState, $parse, $interpolate) {\n var NG_HIDE_CLASS = 'ng-hide';\n var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';\n\n return {\n restrict: 'A',\n multiElement: true,\n link: function(scope, element, attr) {\n var uiHideFn = parseUiCondition('uiHide', attr, scope, SharedState, $parse, $interpolate);\n scope.$watch(uiHideFn, function uiHideWatchAction(value){\n $animate[value ? 'addClass' : 'removeClass'](element,NG_HIDE_CLASS, {\n tempClasses : NG_HIDE_IN_PROGRESS_CLASS\n });\n });\n }\n };\n }]);\n\n /**\n * @ngdoc directive \n * @function uiShow\n * \n * @description\n * Same as `ngShow` but evaluates condition against `SharedState` statuses\n * \n * @param {expression} uiShow A condition to decide wether to show the element\n * @param {list} [uiScopeContext] A list `scopeVar[ as aliasName] [, ...]` specifing one of more scope variables to take into account when evaluating condition.\n */ \n module.directive('uiShow', ['$animate', 'SharedState', '$parse', '$interpolate', function($animate, SharedState, $parse) {\n var NG_HIDE_CLASS = 'ng-hide';\n var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';\n\n return {\n restrict: 'A',\n multiElement: true,\n link: function(scope, element, attr) {\n var uiShowFn = parseUiCondition('uiShow', attr, scope, SharedState, $parse);\n scope.$watch(uiShowFn, function uiShowWatchAction(value){\n $animate[value ? 'removeClass' : 'addClass'](element, NG_HIDE_CLASS, {\n tempClasses : NG_HIDE_IN_PROGRESS_CLASS\n });\n });\n }\n };\n }]);\n\n /**\n * @ngdoc directive \n * @function uiClass\n * \n * @description\n * A simplified version of `ngClass` that evaluates in context of `SharedState`, it only suppors the `{'className': expr}` syntax.\n * \n * @param {expression} uiClass An expression that has to evaluate to an object of the form `{'className': expr}`, where `expr` decides wether the class should appear to element's class list.\n * @param {list} [uiScopeContext] A list `scopeVar[ as aliasName] [, ...]` specifing one of more scope variables to take into account when evaluating condition.\n */ \n module.directive('uiClass', ['SharedState', '$parse', '$interpolate', function(SharedState, $parse) {\n return {\n restrict: 'A',\n link: function(scope, element, attr) {\n var uiClassFn = parseUiCondition('uiClass', attr, scope, SharedState, $parse);\n scope.$watch(uiClassFn, function uiClassWatchAction(value){\n var classesToAdd = '';\n var classesToRemove = '';\n angular.forEach(value, function(expr, className) {\n if (expr) {\n classesToAdd += ' ' + className;\n } else {\n classesToRemove += ' ' + className;\n }\n classesToAdd = classesToAdd.trim();\n classesToRemove = classesToRemove.trim();\n if (classesToAdd.length) {\n element.addClass(classesToAdd); \n }\n if (classesToRemove.length) {\n element.removeClass(classesToRemove);\n }\n });\n }, true);\n }\n };\n }]);\n\n module.run([\n '$rootScope',\n 'SharedState',\n function($rootScope, SharedState){\n $rootScope.Ui = SharedState;\n }\n ]);\n\n\n}());\n","/**\n * Provides directives and service to prevent touchmove default behaviour \n * for touch devices (ie. bounce on overscroll in IOS).\n *\n * #### Usage\n *\n * Use `ui-prevent-touchmove-defaults` directive on root element of your app:\n * \n * ``` html\n * \n * \n * \n * ```\n *\n * Doing so `touchmove.preventDefault` logic for inner elements is inverted,\n * so any `touchmove` default behaviour is automatically prevented.\n * \n * If you wish to allow the default behaviour, for example to allow \n * inner elements to scroll, you have to explicitly mark an event to allow \n * touchmove default.\n *\n * Mobile Angular UI already handles this for `scrollable` elements, so you don't have\n * to do anything in order to support scroll.\n *\n * If you wish to allow touchmove defaults for certain element under certain conditions\n * you can use the `allowTouchmoveDefault` service.\n *\n * ie.\n * \n * ``` js\n * // always allow touchmove default for an element\n * allowTouchmoveDefault(myelem);\n * ```\n * \n * ``` js\n * // allow touchmove default for an element only under certain conditions\n * allowTouchmoveDefault(myelem, function(touchmove){\n * return touchmove.pageY > 100;\n * });\n * ```\n * \n * @module mobile-angular-ui.core.touchmoveDefaults\n */\n(function () {\n 'use strict';\n var module = angular.module('mobile-angular-ui.core.touchmoveDefaults', []);\n\n module.directive('uiPreventTouchmoveDefaults', function() {\n var preventTouchmoveDefaultsCb = function(e) {\n if (e.allowTouchmoveDefault !== true) {\n e.preventDefault();\n }\n };\n\n return {\n compile: function(element) {\n if ('ontouchmove' in document) {\n element.on('touchmove', preventTouchmoveDefaultsCb);\n }\n }\n };\n });\n\n /**\n * Bind a listener to an element to allow `touchmove` default behaviour\n * when `touchmove` happens inside the bound element.\n * \n * You can also provide a function to decide when to allow and \n * when to prevent it.\n *\n * ``` js\n * // always allow touchmove default\n * allowTouchmoveDefault(myelem);\n * \n * // allow touchmove default only under certain conditions\n * allowTouchmoveDefault(myelem, function(touchmove){\n * return touchmove.pageY > 100;\n * });\n * ```\n *\n * @param {Element|$element} element The element to bind.\n * @param {function} condition A `function(touchmove)⟶boolean` to decide\n * whether to allow default behavior or not. \n * \n * @service allowTouchmoveDefault\n * @as function\n * @returns function Function to unbind the listener\n */\n \n module.factory('allowTouchmoveDefault', function(){\n var fnTrue = function() { return true; };\n\n if ('ontouchmove' in document) {\n return function($element, condition) {\n condition = condition || fnTrue;\n\n var allowTouchmoveDefaultCallback = function(e) {\n if (condition(e)) { e.allowTouchmoveDefault = true; }\n };\n\n $element = angular.element($element);\n $element.on('touchmove', allowTouchmoveDefaultCallback);\n\n $element.on('$destroy', function() {\n $element.off('touchmove', allowTouchmoveDefaultCallback);\n $element = null;\n });\n\n return function() {\n if ($element) {\n $element.off('touchmove', allowTouchmoveDefaultCallback); \n }\n };\n };\n } else {\n return angular.noop;\n }\n });\n\n}());","/**\n\n@module mobile-angular-ui.core\n\n@description\n\nIt has all the core functionalities of Mobile Angular UI. It aims to act as a common base \nfor an UI framework providing services and directives to create components and implement \nUI interactions with angular.\n\n
\n NOTE\n \n
\n\n## Standalone Usage\n\nAlthough `.core` module is required by `mobile-angular-ui` by default you can use it alone.\n\n``` js\nangular.module('myApp', ['mobile-angular-ui.core']);\n```\n\n*/\n(function () {\n 'use strict';\n angular.module('mobile-angular-ui.core', [\n 'mobile-angular-ui.core.fastclick',\n 'mobile-angular-ui.core.activeLinks',\n 'mobile-angular-ui.core.capture',\n 'mobile-angular-ui.core.outerClick',\n 'mobile-angular-ui.core.sharedState',\n 'mobile-angular-ui.core.touchmoveDefaults'\n ]);\n}());","/*! Overthrow. An overflow:auto polyfill for responsive design. (c) 2012: Scott Jehl, Filament Group, Inc. http://filamentgroup.github.com/Overthrow/license.txt */\n(function( w, undefined ){\n\t\n\tvar doc = w.document,\n\t\tdocElem = doc.documentElement,\n\t\tenabledClassName = \"overthrow-enabled\",\n\n\t\t// Touch events are used in the polyfill, and thus are a prerequisite\n\t\tcanBeFilledWithPoly = \"ontouchmove\" in doc,\n\t\t\n\t\t// The following attempts to determine whether the browser has native overflow support\n\t\t// so we can enable it but not polyfill\n\t\tnativeOverflow = \n\t\t\t// Features-first. iOS5 overflow scrolling property check - no UA needed here. thanks Apple :)\n\t\t\t\"WebkitOverflowScrolling\" in docElem.style ||\n\t\t\t// Test the windows scrolling property as well\n\t\t\t\"msOverflowStyle\" in docElem.style ||\n\t\t\t// Touch events aren't supported and screen width is greater than X\n\t\t\t// ...basically, this is a loose \"desktop browser\" check. \n\t\t\t// It may wrongly opt-in very large tablets with no touch support.\n\t\t\t( !canBeFilledWithPoly && w.screen.width > 800 ) ||\n\t\t\t// Hang on to your hats.\n\t\t\t// Whitelist some popular, overflow-supporting mobile browsers for now and the future\n\t\t\t// These browsers are known to get overlow support right, but give us no way of detecting it.\n\t\t\t(function(){\n\t\t\t\tvar ua = w.navigator.userAgent,\n\t\t\t\t\t// Webkit crosses platforms, and the browsers on our list run at least version 534\n\t\t\t\t\twebkit = ua.match( /AppleWebKit\\/([0-9]+)/ ),\n\t\t\t\t\twkversion = webkit && webkit[1],\n\t\t\t\t\twkLte534 = webkit && wkversion >= 534;\n\t\t\t\t\t\n\t\t\t\treturn (\n\t\t\t\t\t/* Android 3+ with webkit gte 534\n\t\t\t\t\t~: Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13 */\n\t\t\t\t\tua.match( /Android ([0-9]+)/ ) && RegExp.$1 >= 3 && wkLte534 ||\n\t\t\t\t\t/* Blackberry 7+ with webkit gte 534\n\t\t\t\t\t~: Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0 Mobile Safari/534.11+ */\n\t\t\t\t\tua.match( / Version\\/([0-9]+)/ ) && RegExp.$1 >= 0 && w.blackberry && wkLte534 ||\n\t\t\t\t\t/* Blackberry Playbook with webkit gte 534\n\t\t\t\t\t~: Mozilla/5.0 (PlayBook; U; RIM Tablet OS 1.0.0; en-US) AppleWebKit/534.8+ (KHTML, like Gecko) Version/0.0.1 Safari/534.8+ */ \n\t\t\t\t\tua.indexOf( \"PlayBook\" ) > -1 && wkLte534 && !ua.indexOf( \"Android 2\" ) === -1 ||\n\t\t\t\t\t/* Firefox Mobile (Fennec) 4 and up\n\t\t\t\t\t~: Mozilla/5.0 (Mobile; rv:15.0) Gecko/15.0 Firefox/15.0 */\n\t\t\t\t\tua.match(/Firefox\\/([0-9]+)/) && RegExp.$1 >= 4 ||\n\t\t\t\t\t/* WebOS 3 and up (TouchPad too)\n\t\t\t\t\t~: Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.48 Safari/534.6 TouchPad/1.0 */\n\t\t\t\t\tua.match( /wOSBrowser\\/([0-9]+)/ ) && RegExp.$1 >= 233 && wkLte534 ||\n\t\t\t\t\t/* Nokia Browser N8\n\t\t\t\t\t~: Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaN8-00/012.002; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.0 Mobile Safari/533.4 3gpp-gba \n\t\t\t\t\t~: Note: the N9 doesn't have native overflow with one-finger touch. wtf */\n\t\t\t\t\tua.match( /NokiaBrowser\\/([0-9\\.]+)/ ) && parseFloat(RegExp.$1) === 7.3 && webkit && wkversion >= 533\n\t\t\t\t);\n\t\t\t})();\n\n\t// Expose overthrow API\n\tw.overthrow = {};\n\n\tw.overthrow.enabledClassName = enabledClassName;\n\n\tw.overthrow.addClass = function(){\n\t\tif( docElem.className.indexOf( w.overthrow.enabledClassName ) === -1 ){\n\t\t\tdocElem.className += \" \" + w.overthrow.enabledClassName;\n\t\t}\n\t};\n\n\tw.overthrow.removeClass = function(){\n\t\tdocElem.className = docElem.className.replace( w.overthrow.enabledClassName, \"\" );\n\t};\n\n\t// Enable and potentially polyfill overflow\n\tw.overthrow.set = function(){\n\t\t\t\n\t\t// If nativeOverflow or at least the element canBeFilledWithPoly, add a class to cue CSS that assumes overflow scrolling will work (setting height on elements and such)\n\t\tif( nativeOverflow ){\n\t\t\tw.overthrow.addClass();\n\t\t}\n\n\t};\n\n\t// expose polyfillable \n\tw.overthrow.canBeFilledWithPoly = canBeFilledWithPoly;\n\n\t// Destroy everything later. If you want to.\n\tw.overthrow.forget = function(){\n\n\t\tw.overthrow.removeClass();\n\t\t\n\t};\n\t\t\n\t// Expose overthrow API\n\tw.overthrow.support = nativeOverflow ? \"native\" : \"none\";\n\t\t\n})( this );\n","/*! Overthrow. An overflow:auto polyfill for responsive design. (c) 2012: Scott Jehl, Filament Group, Inc. http://filamentgroup.github.com/Overthrow/license.txt */\n(function( w, undefined ){\n\t\n\t// Auto-init\n\tw.overthrow.set();\n\n}( this ));","/*! Overthrow. An overflow:auto polyfill for responsive design. (c) 2012: Scott Jehl, Filament Group, Inc. http://filamentgroup.github.com/Overthrow/license.txt */\n(function( w, o, undefined ){\n\n\t// o is overthrow reference from overthrow-polyfill.js\n\tif( o === undefined ){\n\t\treturn;\n\t}\n\n\to.scrollIndicatorClassName = \"overthrow\";\n\t\n\tvar doc = w.document,\n\t\tdocElem = doc.documentElement,\n\t\t// o api\n\t\tnativeOverflow = o.support === \"native\",\n\t\tcanBeFilledWithPoly = o.canBeFilledWithPoly,\n\t\tconfigure = o.configure,\n\t\tset = o.set,\n\t\tforget = o.forget,\n\t\tscrollIndicatorClassName = o.scrollIndicatorClassName;\n\n\t// find closest overthrow (elem or a parent)\n\to.closest = function( target, ascend ){\n\t\treturn !ascend && target.className && target.className.indexOf( scrollIndicatorClassName ) > -1 && target || o.closest( target.parentNode );\n\t};\n\t\t\n\t// polyfill overflow\n\tvar enabled = false;\n\to.set = function(){\n\t\t\t\n\t\tset();\n\n\t\t// If nativeOverflow or it doesn't look like the browser canBeFilledWithPoly, our job is done here. Exit viewport left.\n\t\tif( enabled || nativeOverflow || !canBeFilledWithPoly ){\n\t\t\treturn;\n\t\t}\n\n\t\tw.overthrow.addClass();\n\n\t\tenabled = true;\n\n\t\to.support = \"polyfilled\";\n\n\t\to.forget = function(){\n\t\t\tforget();\n\t\t\tenabled = false;\n\t\t\t// Remove touch binding (check for method support since this part isn't qualified by touch support like the rest)\n\t\t\tif( doc.removeEventListener ){\n\t\t\t\tdoc.removeEventListener( \"touchstart\", start, false );\n\t\t\t}\n\t\t};\n\n\t\t// Fill 'er up!\n\t\t// From here down, all logic is associated with touch scroll handling\n\t\t\t// elem references the overthrow element in use\n\t\tvar elem,\n\t\t\t\n\t\t\t// The last several Y values are kept here\n\t\t\tlastTops = [],\n\t\n\t\t\t// The last several X values are kept here\n\t\t\tlastLefts = [],\n\t\t\t\n\t\t\t// lastDown will be true if the last scroll direction was down, false if it was up\n\t\t\tlastDown,\n\t\t\t\n\t\t\t// lastRight will be true if the last scroll direction was right, false if it was left\n\t\t\tlastRight,\n\t\t\t\n\t\t\t// For a new gesture, or change in direction, reset the values from last scroll\n\t\t\tresetVertTracking = function(){\n\t\t\t\tlastTops = [];\n\t\t\t\tlastDown = null;\n\t\t\t},\n\t\t\t\n\t\t\tresetHorTracking = function(){\n\t\t\t\tlastLefts = [];\n\t\t\t\tlastRight = null;\n\t\t\t},\n\t\t\n\t\t\t// On webkit, touch events hardly trickle through textareas and inputs\n\t\t\t// Disabling CSS pointer events makes sure they do, but it also makes the controls innaccessible\n\t\t\t// Toggling pointer events at the right moments seems to do the trick\n\t\t\t// Thanks Thomas Bachem http://stackoverflow.com/a/5798681 for the following\n\t\t\tinputs,\n\t\t\tsetPointers = function( val ){\n\t\t\t\tinputs = elem.querySelectorAll( \"textarea, input\" );\n\t\t\t\tfor( var i = 0, il = inputs.length; i < il; i++ ) {\n\t\t\t\t\tinputs[ i ].style.pointerEvents = val;\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t\t// For nested overthrows, changeScrollTarget restarts a touch event cycle on a parent or child overthrow\n\t\t\tchangeScrollTarget = function( startEvent, ascend ){\n\t\t\t\tif( doc.createEvent ){\n\t\t\t\t\tvar newTarget = ( !ascend || ascend === undefined ) && elem.parentNode || elem.touchchild || elem,\n\t\t\t\t\t\ttEnd;\n\t\t\t\t\t\t\t\n\t\t\t\t\tif( newTarget !== elem ){\n\t\t\t\t\t\ttEnd = doc.createEvent( \"HTMLEvents\" );\n\t\t\t\t\t\ttEnd.initEvent( \"touchend\", true, true );\n\t\t\t\t\t\telem.dispatchEvent( tEnd );\n\t\t\t\t\t\tnewTarget.touchchild = elem;\n\t\t\t\t\t\telem = newTarget;\n\t\t\t\t\t\tnewTarget.dispatchEvent( startEvent );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t\t// Touchstart handler\n\t\t\t// On touchstart, touchmove and touchend are freshly bound, and all three share a bunch of vars set by touchstart\n\t\t\t// Touchend unbinds them again, until next time\n\t\t\tstart = function( e ){\n\n\t\t\t\t// Stop any throw in progress\n\t\t\t\tif( o.intercept ){\n\t\t\t\t\to.intercept();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Reset the distance and direction tracking\n\t\t\t\tresetVertTracking();\n\t\t\t\tresetHorTracking();\n\t\t\t\t\n\t\t\t\telem = o.closest( e.target );\n\t\t\t\t\t\n\t\t\t\tif( !elem || elem === docElem || e.touches.length > 1 ){\n\t\t\t\t\treturn;\n\t\t\t\t}\t\t\t\n\n\t\t\t\tsetPointers( \"none\" );\n\t\t\t\tvar touchStartE = e,\n\t\t\t\t\tscrollT = elem.scrollTop,\n\t\t\t\t\tscrollL = elem.scrollLeft,\n\t\t\t\t\theight = elem.offsetHeight,\n\t\t\t\t\twidth = elem.offsetWidth,\n\t\t\t\t\tstartY = e.touches[ 0 ].pageY,\n\t\t\t\t\tstartX = e.touches[ 0 ].pageX,\n\t\t\t\t\tscrollHeight = elem.scrollHeight,\n\t\t\t\t\tscrollWidth = elem.scrollWidth,\n\t\t\t\t\n\t\t\t\t\t// Touchmove handler\n\t\t\t\t\tmove = function( e ){\n\t\t\t\t\t\n\t\t\t\t\t\tvar ty = scrollT + startY - e.touches[ 0 ].pageY,\n\t\t\t\t\t\t\ttx = scrollL + startX - e.touches[ 0 ].pageX,\n\t\t\t\t\t\t\tdown = ty >= ( lastTops.length ? lastTops[ 0 ] : 0 ),\n\t\t\t\t\t\t\tright = tx >= ( lastLefts.length ? lastLefts[ 0 ] : 0 );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t// If there's room to scroll the current container, prevent the default window scroll\n\t\t\t\t\t\tif( ( ty > 0 && ty < scrollHeight - height ) || ( tx > 0 && tx < scrollWidth - width ) ){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// This bubbling is dumb. Needs a rethink.\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tchangeScrollTarget( touchStartE );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// If down and lastDown are inequal, the y scroll has changed direction. Reset tracking.\n\t\t\t\t\t\tif( lastDown && down !== lastDown ){\n\t\t\t\t\t\t\tresetVertTracking();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// If right and lastRight are inequal, the x scroll has changed direction. Reset tracking.\n\t\t\t\t\t\tif( lastRight && right !== lastRight ){\n\t\t\t\t\t\t\tresetHorTracking();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// remember the last direction in which we were headed\n\t\t\t\t\t\tlastDown = down;\n\t\t\t\t\t\tlastRight = right;\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t// set the container's scroll\n\t\t\t\t\t\telem.scrollTop = ty;\n\t\t\t\t\t\telem.scrollLeft = tx;\n\t\t\t\t\t\n\t\t\t\t\t\tlastTops.unshift( ty );\n\t\t\t\t\t\tlastLefts.unshift( tx );\n\t\t\t\t\t\n\t\t\t\t\t\tif( lastTops.length > 3 ){\n\t\t\t\t\t\t\tlastTops.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif( lastLefts.length > 3 ){\n\t\t\t\t\t\t\tlastLefts.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\n\t\t\t\t\t// Touchend handler\n\t\t\t\t\tend = function( e ){\n\n\t\t\t\t\t\t// Bring the pointers back\n\t\t\t\t\t\tsetPointers( \"auto\" );\n\t\t\t\t\t\tsetTimeout( function(){\n\t\t\t\t\t\t\tsetPointers( \"none\" );\n\t\t\t\t\t\t}, 450 );\n\t\t\t\t\t\telem.removeEventListener( \"touchmove\", move, false );\n\t\t\t\t\t\telem.removeEventListener( \"touchend\", end, false );\n\t\t\t\t\t};\n\t\t\t\t\n\t\t\t\telem.addEventListener( \"touchmove\", move, false );\n\t\t\t\telem.addEventListener( \"touchend\", end, false );\n\t\t\t};\n\t\t\t\n\t\t// Bind to touch, handle move and end within\n\t\tdoc.addEventListener( \"touchstart\", start, false );\n\t};\n\t\t\n})( this, this.overthrow );\n","/**\n * This module will provide directives to create modals and overlays components.\n * \n * @module mobile-angular-ui.components.modals\n */\n(function () {\n 'use strict';\n angular.module('mobile-angular-ui.components.modals', [])\n\n /**\n * A directive to create modals and overlays components.\n * \n * Modals are basically the same of Bootstrap 3 but you have to use uiState \n * with `ngIf/uiIf` or `ngHide/uiHide` to `activate/dismiss` it.\n * \n * By default both modals and overlay are made always showing up by \n * css rule `.modal {display:block}`, so you can use it with \n * `ngAnimate` and other angular directives in a simpler way.\n *\n * Overlay are a style of modal that looks more native in mobile devices providing a blurred\n * overlay as background.\n * \n * You can create an overlay adding `.modal-overlay` class to a modal.\n * \n * ### Note\n * \n * For modals and overlays to cover the entire page you have to attach them \n * as child of `body` element. To achieve this from a view is a common use for\n * `contentFor/yieldTo` directives contained from \n * [capture module](/docs/module:mobile-angular-ui/module:core/module:capture):\n * \n * ``` html\n * \n * \n * \n * \n *
\n * \n * \n * ```\n * \n * Then you can wrap your modals and overlays in `contentFor`:\n * \n * ``` html\n *
\n * *
\n *
\n * ```\n * \n * **Example.** Create a Modal.\n * \n * ``` html\n *
\n *
\n *
\n *
\n *
\n *
\n * \n *

Modal title

\n *
\n *
\n *

Lorem ipsum ...

\n *
\n *
\n * \n * \n *
\n *
\n *
\n *
\n *
\n * ```\n * \n * **Example.** Create an Overlay.\n * \n * ``` html\n *
\n *
\n *
\n *
\n *
\n * \n *

Modal title

\n *
\n *
\n *

Lorem ipsum ...

\n *
\n *
\n * \n * \n *
\n *
\n *
\n *
\n *
\n * ```\n * \n * @directive modal\n * @restrict C\n */\n .directive('modal', [\n '$rootElement',\n function($rootElement) {\n return {\n restrict: 'C',\n link: function(scope, elem) {\n $rootElement.addClass('has-modal');\n elem.on('$destroy', function(){\n $rootElement.removeClass('has-modal');\n });\n scope.$on('$destroy', function(){\n $rootElement.removeClass('has-modal');\n });\n\n if (elem.hasClass('modal-overlay')) {\n $rootElement.addClass('has-modal-overlay');\n elem.on('$destroy', function(){\n $rootElement.removeClass('has-modal-overlay');\n });\n scope.$on('$destroy', function(){\n $rootElement.removeClass('has-modal-overlay');\n }); \n }\n }\n };\n }]);\n}());","/** \n * @module mobile-angular-ui.components.navbars \n * @description\n * \n * Bootstrap default navbars are awesome for responsive websites, but are not the\n * best with a small screen. Also fixed positioning is yet not an option to create\n * navbars standing in top or bottom of the screen.\n * \n * Mobile Angular Ui offers an alternative to bootstrap navbars that is more\n * suitable for mobile.\n * \n * It uses scrollable areas to avoid scroll issues. In the following figure you can\n * see the difference between fixed navbars and navbars with absolute positioning.\n * \n *
\n * \"\"/\n *
\n * \n * Here is the basic markup to achieve this.\n * \n * ``` html\n *
\n *
\n * \n *
\n * \n *
\n * \n *
\n * \n *
\n * \n *
\n *
\n * ```\n * \n * As you can notice the base class is `.navbar-app` while the positioning is\n * obtained adding either `.navbar-absolute-top` or `.navbar-absolute-bottom`\n * class.\n * \n * ### Mobile Navbar Layout\n * \n * Top navbar in mobile design most of the times follows a clear pattern: a\n * centered title surrounded by one or two action buttons, the _back_ or the\n * _menu_ buttons are two common examples.\n * \n * Twitter Bootstrap ships with a different arrangement of components for navbars\n * since they are supposed to host an horizontal navigation menu.\n * \n * `.navbar-app` is specifically designed to support this different type of\n * `.interaction and arrangement.\n * \n * Consider the following example:\n * \n * ``` html\n *
\n * \n *
\n * Navbar Brand\n *
\n * \n *
\n *
\n * Left Action\n *
\n *
\n * \n *
\n *
\n * Right Action\n *
\n *
\n *
\n * \n * ```\n * \n * `.navbar-brand-center` is a specialization of BS3's `.navbar-brand`. It will\n * render the title centered and below the two button groups. Note that `.navbar-\n * brand-center` will position the title with absolute positioning ensuring that\n * it will never cover the buttons, which would cause interaction problems.\n * \n */\n\n(function() {\n 'use strict';\n\n var module = angular.module('mobile-angular-ui.components.navbars', []);\n\n /** \n * @directive navbarAbsoluteTop\n * @restrict C\n * @description\n *\n * Setup absolute positioned top navbar.\n * \n * ``` html\n *
\n * \n *
\n * ``` \n */\n\n /** \n * @directive navbarAbsoluteBottom\n * @restrict C\n * @description\n * \n * Setup absolute positioned bottom navbar.\n * \n * ``` html\n *
\n * \n *
\n * ``` \n */\n angular.forEach(['top', 'bottom'], function(side) {\n var directiveName = 'navbarAbsolute' + side.charAt(0).toUpperCase() + side.slice(1);\n module.directive(directiveName, [\n '$rootElement',\n function($rootElement) {\n return {\n restrict: 'C',\n link: function(scope) {\n $rootElement.addClass('has-navbar-' + side);\n scope.$on('$destroy', function(){\n $rootElement.removeClass('has-navbar-' + side);\n });\n }\n };\n }\n ]);\n });\n\n})();","/** \n * @module mobile-angular-ui.components.scrollable\n * @description\n * \n * One thing you'll always have to deal with approaching mobile web app development is scroll and `position:fixed` bugs.\n * \n * Due to the lack of support in some devices fixed positioned elements may bounce or disappear during scroll. Also mobile interaction often leverages horizontal scroll eg. in carousels or sliders.\n * \n * We use `overflow:auto` to create scrollable areas and solve any problems related to scroll.\n * \n * Since `overflow:auto` is not always available in touch devices we use [Overthrow](http://filamentgroup.github.io/Overthrow/) to polyfill that.\n * \n * Markup for any scrollable areas is as simple as:\n * \n * ``` html\n *
\n *
...
\n *
\n * ```\n * \n * This piece of code will trigger a directive that properly setup a new `Overthrow` instance for the `.scrollable` node.\n * \n * #### Headers and footers\n * \n * `.scrollable-header/.scrollable-footer` can be used to add fixed header/footer to a scrollable area without having to deal with css height and positioning to avoid breaking scroll.\n * \n * ``` html\n *
\n *
\n *
\n *
\n *
\n * ```\n * \n * #### scrollTo\n * \n * `.scrollable-content` controller exposes a `scrollTo` function: `scrollTo(offsetOrElement, margin)` \n * \n * You have to require it in your directives to use it or obtain through `element().controller`:\n * \n * ``` js\n * var elem = element(document.getElementById('myScrollableContent'));\n * var scrollableContentController = elem.controller('scrollableContent');\n * \n * // - Scroll to top of containedElement\n * scrollableContentController.scrollTo(containedElement);\n * \n * // - Scroll to top of containedElement with a margin of 10px;\n * scrollableContentController.scrollTo(containedElement, 10);\n * \n * // - Scroll top by 200px;\n * scrollableContentController.scrollTo(200);\n * ```\n * \n * #### `ui-scroll-bottom/ui-scroll-top`\n * \n * You can use `ui-scroll-bottom/ui-scroll-top` directives handle that events and implement features like _infinite scroll_.\n * \n * ``` html\n *
\n *
\n * \n *
\n *
\n * ```\n */\n(function() {\n 'use strict';\n var module = angular.module('mobile-angular-ui.components.scrollable', \n ['mobile-angular-ui.core.touchmoveDefaults']);\n\n\n var getTouchY = function(event) {\n var touches = event.touches && event.touches.length ? event.touches : [event];\n var e = (event.changedTouches && event.changedTouches[0]) ||\n (event.originalEvent && event.originalEvent.changedTouches &&\n event.originalEvent.changedTouches[0]) ||\n touches[0].originalEvent || touches[0];\n\n return e.clientY;\n };\n\n module.directive('scrollableContent', function() {\n return {\n restrict: 'C',\n controller: ['$element', 'allowTouchmoveDefault', function($element, allowTouchmoveDefault) {\n var scrollableContent = $element[0],\n scrollable = $element.parent()[0];\n\n // Handle nobounce behaviour\n if ('ontouchmove' in document) {\n var allowUp, allowDown, prevTop, prevBot, lastY;\n var setupTouchstart = function(event) {\n allowUp = (scrollableContent.scrollTop > 0);\n\n allowDown = (scrollableContent.scrollTop < scrollableContent.scrollHeight - scrollableContent.clientHeight);\n prevTop = null; \n prevBot = null;\n lastY = getTouchY(event);\n };\n\n $element.on('touchstart', setupTouchstart);\n $element.on('$destroy', function() {\n $element.off('touchstart');\n });\n\n allowTouchmoveDefault($element, function(event) {\n var currY = getTouchY(event);\n var up = (currY > lastY), down = !up;\n lastY = currY;\n return (up && allowUp) || (down && allowDown);\n });\n }\n\n this.scrollableContent = scrollableContent;\n\n this.scrollTo = function(elementOrNumber, marginTop) {\n marginTop = marginTop || 0;\n\n if (angular.isNumber(elementOrNumber)) {\n scrollableContent.scrollTop = elementOrNumber - marginTop;\n } else {\n var target = angular.element(elementOrNumber)[0];\n if ((! target.offsetParent) || target.offsetParent === scrollable) {\n scrollableContent.scrollTop = target.offsetTop - marginTop;\n } else {\n // recursively subtract offsetTop from marginTop until it reaches scrollable element.\n this.scrollTo(target.offsetParent, marginTop - target.offsetTop);\n }\n }\n };\n }],\n link: function(scope, element) {\n if (overthrow.support !== 'native') {\n element.addClass('overthrow');\n overthrow.forget();\n overthrow.set();\n }\n }\n };\n });\n\n angular.forEach(['input', 'textarea'], function(directiveName) {\n module.directive(directiveName, ['$rootScope','$timeout', function($rootScope, $timeout) {\n return {\n require: '?^^scrollableContent',\n link: function(scope, elem, attrs, scrollable) {\n // Workaround to avoid soft keyboard hiding inputs\n elem.on('focus', function(){\n if (scrollable && scrollable.scrollableContent) {\n var h1 = scrollable.scrollableContent.offsetHeight;\n $timeout(function() {\n var h2 = scrollable.scrollableContent.offsetHeight;\n // \n // if scrollableContent height is reduced in half second\n // since an input got focus we assume soft keyboard is showing.\n //\n if (h1 > h2) {\n scrollable.scrollTo(elem, 10); \n }\n }, 500); \n }\n });\n }\n };\n }]);\n });\n\n /**\n * @directive uiScrollTop\n * @restrict A\n *\n * @param {expression} uiScrollTop The expression to be evaluated when scroll \n * reaches top of element.\n */\n\n /**\n * @directive uiScrollBottom\n * @restrict A\n *\n * @param {expression} uiScrollBottom The expression to be evaluated when scroll \n * reaches bottom of element.\n */\n angular.forEach(\n {\n uiScrollTop: function(elem){\n return elem.scrollTop === 0;\n }, \n uiScrollBottom: function(elem){\n return elem.scrollHeight === elem.scrollTop + elem.clientHeight;\n }\n }, \n function(reached, directiveName){\n module.directive(directiveName, [function() {\n return {\n restrict: 'A',\n link: function(scope, elem, attrs) {\n elem.on('scroll', function(){\n /* If reached bottom */\n if ( reached(elem[0]) ) {\n /* Do what is specified by onScrollBottom */\n scope.$apply(function(){\n scope.$eval(attrs[directiveName]);\n });\n }\n });\n }\n };\n }]);\n });\n\n /**\n * @directive uiScrollableHeader\n * @restrict C\n */\n\n /**\n * @directive uiScrollableFooter\n * @restrict C\n */\n angular.forEach({Top: 'scrollableHeader', Bottom: 'scrollableFooter'}, \n function(directiveName, side) {\n module.directive(directiveName, [\n '$window',\n function($window) {\n return {\n restrict: 'C',\n link: function(scope, element) {\n var el = element[0],\n parentStyle = element.parent()[0].style;\n\n var adjustParentPadding = function() {\n var styles = $window.getComputedStyle(el),\n margin = parseInt(styles.marginTop, 10) + parseInt(styles.marginBottom, 10);\n parentStyle['padding' + side] = el.offsetHeight + margin + 'px';\n };\n\n var interval = setInterval(adjustParentPadding, 30);\n\n element.on('$destroy', function(){\n parentStyle['padding' + side] = null;\n clearInterval(interval);\n interval = adjustParentPadding = element = null;\n });\n }\n };\n }\n ]);\n });\n}());","/**\n@module mobile-angular-ui.components.sidebars\n\n@description\n\nSidebars can be placed either in left side or right side adding respectively `.sidebar-left` and `.sidebar-right` classes.\n\n``` html\n
\n
\n

My App

\n
\n \n
\n
\n
\n\n
\n \n
\n```\n\n#### Interacting with sidebars\n\nUnder the hood sidebar uses `SharedState` exposing respective statuses: `uiSidebarLeft` and `uiSidebarRight` unless you define different state name through `id` attribute on sidebar elements.\n\n``` html\nToggle sidebar left\n\nToggle sidebar right\n```\n\nYou can put `ui-turn-off='uiSidebarLeft'` or `ui-turn-off='uiSidebarLeft'` inside the sidebar to make it close after clicking links inside them.\n\nBy default sidebar are closed by clicking/tapping outside them.\n\n*/\n(function() {\n 'use strict';\n\n var module = angular.module(\n 'mobile-angular-ui.components.sidebars', [\n 'mobile-angular-ui.core.sharedState',\n 'mobile-angular-ui.core.outerClick'\n ]\n );\n\n angular.forEach(['left', 'right'], function (side) {\n var directiveName = 'sidebar' + side.charAt(0).toUpperCase() + side.slice(1);\n var stateName = 'ui' + directiveName.charAt(0).toUpperCase() + directiveName.slice(1);\n\n module.directive(directiveName, [\n '$rootElement',\n 'SharedState',\n 'bindOuterClick',\n '$location',\n function (\n $rootElement,\n SharedState,\n bindOuterClick,\n $location\n ) { \n return {\n restrict: 'C',\n link: function (scope, elem, attrs) {\n var parentClass = 'has-sidebar-' + side;\n var visibleClass = 'sidebar-' + side + '-visible';\n var activeClass = 'sidebar-' + side + '-in';\n\n if (attrs.id) {\n stateName = attrs.id;\n }\n\n var outerClickCb = function (){\n SharedState.turnOff(stateName);\n };\n\n var outerClickIf = function() {\n return SharedState.isActive(stateName);\n };\n\n $rootElement.addClass(parentClass);\n scope.$on('$destroy', function () {\n $rootElement\n .removeClass(parentClass);\n $rootElement\n .removeClass(visibleClass);\n $rootElement\n .removeClass(activeClass);\n });\n\n var defaultActive = attrs.active !== undefined && attrs.active !== 'false'; \n SharedState.initialize(scope, stateName, {defaultValue: defaultActive});\n\n scope.$on('mobile-angular-ui.state.changed.' + stateName, function (e, active) {\n if (attrs.uiTrackAsSearchParam === '' || attrs.uiTrackAsSearchParam) {\n $location.search(stateName, active || null);\n }\n \n if (active) {\n $rootElement\n .addClass(visibleClass);\n $rootElement\n .addClass(activeClass);\n } else {\n $rootElement\n .removeClass(activeClass);\n // Note: .removeClass(visibleClass) is called on 'mobile-angular-ui.app.transitionend'\n }\n });\n\n scope.$on('$routeChangeSuccess', function() {\n SharedState.turnOff(stateName);\n });\n\n scope.$on('$routeUpdate', function() {\n if (attrs.uiTrackAsSearchParam) {\n if (($location.search())[stateName]) {\n SharedState.turnOn(stateName);\n } else {\n SharedState.turnOff(stateName);\n } \n }\n });\n\n scope.$on('mobile-angular-ui.app.transitionend', function() {\n if (!SharedState.isActive(stateName)) {\n $rootElement.removeClass(visibleClass); \n }\n });\n\n if (attrs.closeOnOuterClicks !== 'false') {\n bindOuterClick(scope, elem, outerClickCb, outerClickIf);\n }\n }\n };\n }\n ]);\n });\n\n module.directive('app', ['$rootScope', function($rootScope) {\n return {\n restrict: 'C',\n link: function(scope, element) {\n \n element.on('transitionend webkitTransitionEnd oTransitionEnd otransitionend', function() {\n $rootScope.$broadcast('mobile-angular-ui.app.transitionend');\n }); \n\n }\n };\n }]);\n}());","/**\n * A module with just a directive to create a switch input component.\n * \n * @module mobile-angular-ui.components.switch\n */\n(function() {\n 'use strict'; \n angular.module('mobile-angular-ui.components.switch', [])\n\n /** \n * @directive uiSwitch\n * @restrict EA\n * @requires ngModel\n * @description\n * \n * The `ui-switch` directive (not to be confused with `ng-switch`) lets \n * you create a toggle switch control bound to a boolean `ngModel` value.\n * \n *
\n * \"\"/\n *
\n * \n * It requires `ngModel`. It supports `ngChange` and `ngDisabled`.\n * \n * ``` html\n * \n * ```\n * \n * ``` html\n * \n * ```\n * \n * ``` html\n * \n * ```\n * \n * Note that if `$drag` service from `mobile-angular-ui.gestures` is available \n * `ui-switch` will support drag too.\n * \n * @param {expression} ngModel The model bound to this component.\n * @param {boolean} [disabled] Whether this component should be disabled.\n * @param {expression} [ngChange] An expression to be evaluated when model changes.\n */\n .directive('uiSwitch', ['$injector', function($injector) {\n var $drag = $injector.has('$drag') && $injector.get('$drag');\n\n return {\n restrict: 'EA',\n scope: {\n model: '=ngModel',\n changeExpr: '@ngChange'\n },\n link: function(scope, elem, attrs) {\n elem.addClass('switch');\n \n var disabled = attrs.disabled || elem.attr('disabled');\n\n var unwatchDisabled = scope.$watch(\n function() { \n return attrs.disabled || elem.attr('disabled'); \n },\n function(value) {\n if (!value || value === 'false' || value === '0') {\n disabled = false;\n } else {\n disabled = true;\n }\n }\n );\n\n var handle = angular.element('
');\n elem.append(handle);\n\n if (scope.model) {\n elem.addClass('active');\n }\n elem.addClass('switch-transition-enabled');\n\n var unwatch = scope.$watch('model', function(value) {\n if (value) {\n elem.addClass('active');\n } else {\n elem.removeClass('active');\n }\n });\n \n var isEnabled = function() {\n return !disabled;\n };\n\n var setModel = function(value) {\n if (isEnabled() && value !== scope.model) {\n scope.model = value;\n scope.$apply();\n if (scope.changeExpr !== null && scope.changeExpr !== undefined) {\n scope.$parent.$eval(scope.changeExpr);\n }\n }\n };\n\n var clickCb = function() {\n setModel(!scope.model);\n };\n\n elem.on('click tap', clickCb);\n\n var unbind = angular.noop;\n\n if ($drag) {\n unbind = $drag.bind(handle, {\n transform: $drag.TRANSLATE_INSIDE(elem),\n start: function() {\n elem.off('click tap', clickCb);\n },\n cancel: function() {\n handle.removeAttr('style');\n elem.off('click tap', clickCb);\n elem.on('click tap', clickCb);\n },\n end: function() {\n var rh = handle[0].getBoundingClientRect();\n var re = elem[0].getBoundingClientRect();\n if (rh.left - re.left < rh.width / 3) {\n setModel(false);\n handle.removeAttr('style');\n } else if (re.right - rh.right < rh.width / 3) {\n setModel(true);\n handle.removeAttr('style');\n } else {\n handle.removeAttr('style');\n }\n elem.on('click tap', clickCb);\n }\n }); \n }\n\n elem.on('$destroy', function() {\n unbind();\n unwatchDisabled();\n unwatch();\n isEnabled = setModel = unbind = unwatch = unwatchDisabled = clickCb = null;\n });\n }\n };\n }]);\n}());","/**\n@module mobile-angular-ui.components\n\n@description\n\nIt has directives and services providing mobile friendly \ncomponents like navbars and sidebars. \nIt requires `mobile-angular-ui.base.css` \nin order to work properly.\n\n## Standalone Usage\n\nAlthough `.components` module is required by `mobile-angular-ui` by default \nyou can use it alone. Some submodules requires `mobile-angular-ui.core` to work,\nso be sure its sources are available.\n\n``` js\nangular.module('myApp', ['mobile-angular-ui.components']);\n```\n\n*/\n(function() {\n 'use strict';\n\n angular.module('mobile-angular-ui.components', [\n 'mobile-angular-ui.components.modals',\n 'mobile-angular-ui.components.navbars',\n 'mobile-angular-ui.components.sidebars',\n 'mobile-angular-ui.components.scrollable',\n 'mobile-angular-ui.components.switch'\n ]);\n}());","/**\n@module mobile-angular-ui\n@position 0\n@description\n\nThis is the main angular module of `mobile-angular-ui` framework.\n\nBy requiring this module you will have all `mobile-angular-ui.core`\nand `mobile-angular-ui.components` features required as well. \n\n## Usage\n\nDeclare it as a dependency for your application:\n\n``` js\nangular.module('myApp', ['mobile-angular-ui']);\n```\n\n*/\n(function() {\n 'use strict';\n\n angular.module('mobile-angular-ui', [\n 'mobile-angular-ui.core',\n 'mobile-angular-ui.components'\n ]);\n\n}());"],"sourceRoot":"/source/"}