{"version":3,"sources":["main.js","_anim.js","_attr.js","_classy.js","_dom.js","_event.js","_loadCSS.js","_nut.js","_onloadCSS.js","_ready.js","_str.js","_template.js","_$.js","_map.js","_drawer.js","_layoutprimarynav.js","_linkmanager.js","_moreDrawer.js","_configuresearch.js","_drawerManager.js","_istatstracking.js","_searchhint.js","_skiplinks.js","nav.js"],"names":["dependencies","require","i","l","arguments","length","define","easeOut","t","b","c","d","exports","prefixes","transitionSupported","s","document","createElement","style","animate","el","opts","duration","height","tick","startHeight","parseFloat","offsetHeight","targetHeight","frameInterval","startTime","Date","getTime","clearTimeout","orbAnimTimer","elapsedTime","newHeight","setTimeout","getAttr","node","name","attrNode","value","attributes","specified","getAttributeNode","getAttribute","setAttr","setAttribute","addClass","len","Object","prototype","toString","call","nodeName","hasClass","className","removeClass","replace","RegExp","indexOf","remove","parentNode","removeChild","addEventListener","addEvent","callback","window","attachEvent","e","event","srcElement","target","mixin","__events","eventQueue","add","handler","push","fire","w","loadCSS","href","before","media","ready","cb","doc","body","loadCB","ss","removeEventListener","ref","refs","getElementsByTagName","childNodes","sheets","styleSheets","rel","insertBefore","nextSibling","onloadcssdefined","resolvedHref","global","this","module","def","nut","firstChild","getElementsByClassName","getNodesFromIdSelector","selector","context","getElementById","getNodesByClassName","elements","nodes","nodeType","match","concat","getNodesFromClassSelector","getNodesFromTagSelector","selectors","pop","local_contexts","future_local_contexts","j","k","m","n","o","getNodesFromSelector","split","charAt","substr","onloadCSS","newcb","called","navigator","runAll","callbacks","shift","contentLoaded","win","fn","top","root","documentElement","modern","rem","pre","init","type","readyState","isReady","poll","doScroll","frameElement","undefined","htmlEntities","subject","trimHtml","limit","trimmed","chunk","test","tmpl","str","data","cache","slice","innerHTML","Function","join","animator","dom","classy","attr","script","template","$","banner","header","anim","client","old_ie","ie8","ie7","ie6","config","fixed","rtl","addCSS","css","styleElement","styleSheet","cssText","appendChild","createTextNode","addHTML","html","tagName","orbScript","assetPath","map","paths","Drawer","contentElement","content","_currentPanel","panels","panelName","addPanel","panel","drawer","getPanel","resize","showPanel","current","publishState","hidePanel","deactivatedPanelName","activate","deactivate","getCurrentPanel","Panel","panelDom","stateChangeCallback","control","newState","api","LinkManager","orbFig","istatsTracking","drawerManager","moreDrawer","replacePrimaryLinks","links","worldWideNavLinksHtml","orb","worldwideNavlinks","link","id","insertAdjacentHTML","worldwideFooterLinksHtml","worldwideFooterlinks","blocksEl","blocksHref","linkManager","hideShowNavItems","beforeLayout","afterLayout","containerTop","container","offsetTop","hideMenu","showAll","lastItem","getLastItem","search","unhideMenuAndSetDefaults","hideToFit","index","menu","MIN_LINKS_TO_SHOW","moreWidth","menuWidth","maxWidth","originalStyleAttribute","menuLink","width","textIndent","moreText","offsetWidth","menuText","Math","max","lockMasthead","LOCK_CLASS","unlockMasthead","trigger","handleResize","throttle","currentWidth","innerWidth","layoutMorePanelContent","handleMenuOrMore","onAfterLayout","hasVisible","handleExpandMenuItem","resizeMoreLink","more","availableSpace","nullElement","isNull","offsetLeft","doLayout","fig","location","uk","geo","isUK","maxLinks","applyMaximum","DYNAMIC_CLASS","EMPTY_CLASS","layoutDone","recalculateLayout","load","HIDE_CLASS","forEach","that","linkElements","text","innerText","textContent","trim","linktrack","nav_link","removeLink","minimumLinks","hideAllLinks","maximumLinks","newLinks","nav","generateLinks","morePanelLinks","firstVisible","FIRST_VISIBLE_CLASS","visibleLinks","mastheadDrawer","getMastheadDrawer","lenj","currentPanel","addDrawer","navButton","istats","track","region","linkLocation","addNoTrack","timer","searchInput","searchElements","closePanel","lang","suggestions","Suggestions","console","warn","hasFocus","activeElement","focusNode","primaryNav","initDrawerDom","templateNode","templateText","firstElement","ELEMENT_NODE","getPanelContent","panelActionTracking","actionDescription","log","animPanelOpen","panelHeight","focusTarget","controlElement","closePanelTimer","NAV_HILITE","display","navMode","ANIM_DURATION","focus","ACTIVE_PANEL_CLASS","ACTIVE_HEADER_CLASS","animPanelClose","animPanelSwap","activatedPanel","currentControlElement","activatedControlElement","addMastheadEvents","resizePanelHeight","getSizeOf1Em","layoutPanelContent","getComputedStyle","fontSize","testEl","emSize","margin","padding","border","initPanelDom","drawerElement","panelHTML","panelControl","panelNode","panelcontent","panelname","cloneNode","refreshNav","addPanelEvents","preventDefault","returnValue","charCode","which","keyCode","controlLink","supportsPlaceholderAtrribute","searchForm","placeholderText","accLinks","clickHandler","hash","targetElement","tabIndex","loadCss","url","stylesheet","loadJs","src","async","getDrawerState","updateDrawerHeight","refresh"],"mappings":"AAKA,GAAAA,eAEA,WACA,0BACA,0CAGAC,SAAAD,aAAA,WACA,YACA,KAAA,GAAAE,GAAA,EAAAC,EAAAC,UAAAC,OAAAH,EAAAC,EAAAD,IACAE,UAAAF,OCVAI,OAAA,gBAAA,WACA,YAeA,SAAAC,GAAAC,EAAAC,EAAAC,EAAAC,GAEA,MADAH,IAAAG,GACAD,EAAAF,GAAAA,EAAA,GAAAC,EAfA,GAAAG,MACAC,GAAA,aAAA,mBAAA,gBAAA,eAAA,eACAC,EAAA,WAGA,IAFA,GAAAC,GAAAC,SAAAC,cAAA,OAAAC,MACAhB,EAAAW,EAAAR,OACAH,KACA,GAAAW,EAAAX,IAAAa,GACA,MAAAF,GAAAX,EAGA,QAAA,IAsDA,OAxCAU,GAAAO,QAAAL,EACA,SAAAM,EAAAC,GACAD,EAAAF,MAAAJ,GAAA,UAAAO,EAAAC,SAAA,KACAF,EAAAF,MAAAK,OAAAF,EAAAE,OAAA,MAIA,SAAAH,EAAAC,GACA,GAMAG,GANAC,EAAAC,WAAAN,EAAAO,cACAC,EAAAP,EAAAE,OACAD,EAAAD,EAAAC,SACAJ,EAAAE,EAAAF,MACAW,EAAA,GACAC,GAAA,GAAAC,OAAAC,SAGAC,cAAAb,EAAAc,cAEA,IAAAZ,EACAJ,EAAAK,OAAAK,EAAA,MAGAJ,EAAA,WACA,GAAAW,IAAA,GAAAJ,OAAAC,UAAAF,EACAM,EAAA7B,EAAA4B,EAAAV,EAAAG,EAAAH,EAAAH,EAEA,OAAAa,GAAAb,OACAJ,EAAAK,OAAAK,EAAA,OAIAV,EAAAK,OAAAa,EAAA,UACAhB,EAAAc,aAAAG,WAAAb,EAAAK,MAGAT,EAAAc,aAAAG,WAAAb,EAAA,KAKAZ,ICnEAN,OAAA,gBAAA,WACA,YAEA,QACAgC,QAAA,SAAAC,EAAAC,GACA,GAAAC,GACAC,CAEA,OAAAH,GAAAI,WAAAH,GACAD,EAAAI,WAAAH,GAAAI,UAAAL,EAAAI,WAAAH,GAAAE,MAAA,GAEAH,EAAAM,kBACAJ,EAAAF,EAAAM,iBAAAL,EAAA,GACA,OAAAC,EAAA,GAAAA,EAAAC,QAGAA,EAAAH,EAAAO,aAAAN,EAAA,GACA,OAAAE,EAAA,GAAAA,IAGAK,QAAA,SAAAR,EAAAC,EAAAE,GACAH,EAAAS,aAAAR,EAAA,GAAAE,OCrBApC,OAAA,kBAAA,WACA,YAEA,IAAAM,KA2DA,OArDAA,GAAAqC,SAAA,SAAAV,EAAAC,GACA,GAAAtC,GAAAgD,CAEA,IAAA,mBAAAC,OAAAC,UAAAC,SAAAC,KAAAd,GACA,IAAAtC,EAAA,EAAAgD,EAAAV,EAAAnC,OAAAH,EAAAgD,EAAAhD,IACAU,EAAAqC,SAAAV,EAAAC,EAAAtC,GAIA,IAAAqC,EAAAgB,SACA3C,EAAA4C,SAAAjB,EAAAC,KACAD,EAAAkB,YAAAlB,EAAAkB,UAAA,IAAA,IAAAjB,OAGA,IAAAD,EAAAlC,OACA,IAAAH,EAAA,EAAAgD,EAAAX,EAAAlC,OAAAH,EAAAgD,EAAAhD,IACAU,EAAAqC,SAAAV,EAAArC,GAAAsC,IASA5B,EAAA8C,YAAA,SAAAnB,EAAAC,GACA,GAAAtC,GAAAgD,CAEA,IAAA,mBAAAC,OAAAC,UAAAC,SAAAC,KAAAd,GACA,IAAAtC,EAAA,EAAAgD,EAAAV,EAAAnC,OAAAH,EAAAgD,EAAAhD,IACAU,EAAA8C,YAAAnB,EAAAC,EAAAtC,GAIA,IAAAqC,EAAAgB,SACAhB,EAAAkB,UAAAlB,EAAAkB,UAAAE,QAAA,GAAAC,QAAA,QAAApB,EAAA,QAAA,KAAA,KAAAmB,QAAA,WAAA,IAAAA,QAAA,QAAA,SAEA,IAAApB,EAAAlC,OACA,IAAAH,EAAA,EAAAgD,EAAAX,EAAAlC,OAAAH,EAAAgD,EAAAhD,IACAU,EAAA8C,YAAAnB,EAAArC,GAAAsC,IAUA5B,EAAA4C,SAAA,SAAAjB,EAAAC,GACA,OAAA,IAAAD,EAAAkB,UAAA,KAAAI,QAAA,IAAArB,EAAA,SAGA5B,IC9DAN,OAAA,eAAA,WACA,YAEA,QACAwD,OAAA,SAAAvB,GACAA,EAAAwB,WAAAC,YAAAzB,OCJAjC,OAAA,iBAAA,WACA,YAOA,IAAAM,KA2EA,OAzEAI,UAAAiD,iBACArD,EAAAsD,SAAA,SAAA3B,EAAAC,EAAA2B,GACA,GAAA5B,IAAAA,EAAAgB,UAAAhB,IAAA6B,QACA7B,EAAA0B,iBAAAzB,EAAA2B,GAAA,OAEA,IAAA5B,GAAAA,EAAAlC,OACA,IAAA,GAAAH,GAAA,EAAAgD,EAAAX,EAAAlC,OAAAH,EAAAgD,EAAAhD,IACAU,EAAAsD,SAAA3B,EAAArC,GAAAsC,EAAA2B,IAMAvD,EAAAsD,SAAA,SAAA3B,EAAAC,EAAA2B,GACA,GAAA5B,IAAAA,EAAAgB,UAAAhB,IAAA6B,QACA7B,EAAA8B,YAAA,KAAA7B,EAAA,SAAA8B,GAMA,MALAA,GAAAA,GAAAF,OAAAG,UAEAD,EAAAE,YAAA,mBAAAF,GAAAG,SACAH,EAAAG,OAAAH,EAAAE,YAEAL,EAAAb,KAAAf,EAAA+B,SAGA,IAAA/B,GAAAA,EAAAlC,OACA,IAAA,GAAAH,GAAA,EAAAgD,EAAAX,EAAAlC,OAAAH,EAAAgD,EAAAhD,IACAU,EAAAsD,SAAA3B,EAAArC,GAAAsC,EAAA2B,IAoBAvD,EAAA8D,MAAA,SAAAD,GACAA,EAAAE,YAEAF,EAAAF,MAAA,SAAA/B,GACA,GAAAoC,EASA,OANAA,GADA,mBAAAH,GAAAE,SAAAnC,GACAiC,EAAAE,SAAAnC,GAGAiC,EAAAE,SAAAnC,OAIAqC,IAAA,SAAAC,GACAF,EAAAG,KAAAD,IAEAE,KAAA,SAAAV,GACAA,EAAAA,KACA,KAAA,GAAApE,GAAA,EAAAgD,EAAA0B,EAAAvE,OAAAH,EAAAgD,EAAAhD,IACA0E,EAAA1E,GAAAoE,OAOA1D,IC5EA,SAAAqE,GACA,YAEA,IAAAC,GAAA,SAAAC,EAAAC,EAAAC,GAwBA,QAAAC,GAAAC,GACA,MAAAC,GAAAC,KACAF,QAEAlD,YAAA,WACAiD,EAAAC,KAuBA,QAAAG,KACAC,EAAA1B,kBACA0B,EAAAC,oBAAA,OAAAF,GAEAC,EAAAN,MAAAA,GAAA,MAlDA,GAEAQ,GAFAL,EAAAP,EAAAjE,SACA2E,EAAAH,EAAAvE,cAAA,OAEA,IAAAmE,EACAS,EAAAT,MAEA,CACA,GAAAU,IAAAN,EAAAC,MAAAD,EAAAO,qBAAA,QAAA,IAAAC,UACAH,GAAAC,EAAAA,EAAAzF,OAAA,GAGA,GAAA4F,GAAAT,EAAAU,WACAP,GAAAQ,IAAA,aACAR,EAAAR,KAAAA,EAEAQ,EAAAN,MAAA,SAcAC,EAAA,WACAO,EAAA9B,WAAAqC,aAAAT,EAAAP,EAAAS,EAAAA,EAAAQ,cAGA,IAAAC,GAAA,SAAAf,GAGA,IAFA,GAAAgB,GAAAZ,EAAAR,KACAjF,EAAA+F,EAAA5F,OACAH,KACA,GAAA+F,EAAA/F,GAAAiF,OAAAoB,EACA,MAAAhB,IAGAlD,YAAA,WACAiE,EAAAf,KAiBA,OALAI,GAAA1B,kBACA0B,EAAA1B,iBAAA,OAAAyB,GAEAC,EAAAW,iBAAAA,EACAA,EAAAZ,GACAC,EAGA,oBAAA/E,SACAA,QAAAsE,QAAAA,EAGAD,EAAAC,QAAAA,GAEA,mBAAAsB,QAAAA,OAAAC,MCvFAnG,OAAA,kBAAA,WACA,GAAAoG,IAAA9F,WAsMA,OA3LA,UAAA+F,GAMA,mBAAAD,GACAA,EAAA9F,QAAA+F,EAGAF,KAAAG,IAAAD,GAEA,WAEA,GAAAnB,GAAAxE,SACA6F,EAAA,aACAR,EAAA,cACAS,EAAA,yBACAzG,EAAA,SAYA0G,EAAA,SAAAC,EAAAC,GACA,GAAA1E,GAAAiD,EAAA0B,eAAAF,EACA,OAAAzE,IAIAA,OAcA4E,EAAA,SAAA3E,EAAAyE,GAEA,GAEAG,GAFA7E,EAAA0E,EAAAJ,GACAQ,IAGA,IAAA9E,EACA,EACA,IAAAA,EAAA+E,WAEA/E,EAAAkB,WAAAlB,EAAAkB,UAAA8D,MAAA,MAAA/E,EAAA,QACA6E,EAAAtC,KAAAxC,IAGA6E,EAAAD,EAAA3E,EAAAD,IAAAlC,KACAgH,EAAAA,EAAAG,OAAAJ,WAIA7E,EAAAA,EAAA8D,GAEA,OAAAgB,IAaAI,EAAA,SAAAT,EAAAC,GACA,MAAAA,GAAAH,GACAG,EAAAH,GAAAE,GAGAG,EAAAH,EAAAC,IAcAS,EAAA,SAAAV,EAAAC,GACA,MAAAA,GAAAlB,qBAAAiB,GAaA,OAAA,UAAAW,EAAAV,GAEAA,IACAA,EAAAzB,GAEA,gBAAAyB,IAAAA,EAAAW,MACAX,EAAAA,EAAA,GAGA,IAAAY,GACAC,EACAd,EACAI,EAEAW,EAAAC,EAAA7H,EAAA8H,EAAAC,EAAAC,EACAC,EAFAf,IAMA,KAFAM,EAAAA,EAAAU,MAAA,KACAH,KACAlB,EAAAW,IAAAO,IACAP,EAAAO,GAAAlB,EAAAqB,MAAA,MAIA,KADAN,EAAAJ,EAAAtH,GACA0H,GAAA,CAMA,IAJAF,GAAAZ,GAEAe,KACA7H,EAAAwH,IAAAI,GAAA1H,KACA2H,EAAA7H,GAEA,GAAA6G,EAAAW,EAAAI,GAAAC,GAAA,CAkBA,IAhBA,KAAAhB,EAAAsB,OAAA,IACAtB,EAAAA,EAAAuB,OAAA,GACAH,EAAArB,GAGA,KAAAC,EAAAsB,OAAA,IACAtB,EAAAA,EAAAuB,OAAA,GACAH,EAAAX,GAIAW,EAAAV,EAGAI,KACAG,KACAJ,IAAAI,IAIA,IAHAb,EAAAgB,EAAApB,EAAAa,EAAAI,IACAC,KACAC,EAAAf,EAAA/G,KACA6H,EAAAC,GACAL,EAAA/C,KAAAqC,EAAAc,GAIAL,GAAAC,EAIAT,EAAAA,EAAAG,OAAAK,GAEA,MAAAR,QAKAX,EAAA9F,UCtMAN,OAAA,qBAAA,WAaA,QAAAkI,GAAA7C,EAAAxB,GAEA,QAAAsE,MACAC,GAAAvE,IACAuE,GAAA,EACAvE,EAAAb,KAAAqC,IAJA,GAAA+C,EAOA/C,GAAA1B,kBACA0B,EAAA1B,iBAAA,OAAAwE,GAEA9C,EAAAtB,aACAsB,EAAAtB,YAAA,SAAAoE,GAUA,0BAAAE,YAAA,oBAAAhD,IACAA,EAAAW,iBAAAmC,GAGA,MAAAD,KCxCAlI,OAAA,oBAAA,WACA,YAIA,SAAAsI,KACA,KAAAC,EAAAxI,QACAwI,EAAAC,QAAAxF,KAAA,MAgCA,QAAAyF,GAAAC,EAAAC,GAEA,GAAAC,IAAA,EAEA1D,EAAAwD,EAAAhI,SACAmI,EAAA3D,EAAA4D,gBACAC,EAAA7D,EAAAvB,iBAEAY,EAAAwE,EAAA,mBAAA,cACAC,EAAAD,EAAA,sBAAA,cACAE,EAAAF,EAAA,GAAA,KAEAG,EAAA,SAAAlF,GACA,qBAAAA,EAAAmF,MAAA,eAAAjE,EAAAkE,cACA,SAAApF,EAAAmF,KAAAT,EAAAxD,GAAA8D,GAAAC,EAAAjF,EAAAmF,KAAAD,GAAA,IACA5I,EAAA+I,UAAA/I,EAAA+I,SAAA,IAAAV,EAAA3F,KAAA0F,EAAA1E,EAAAmF,MAAAnF,KAGAsF,EAAA,WACA,IACAT,EAAAU,SAAA,QACA,MAAAvF,GAEA,WADAjC,YAAAuH,EAAA,IAGAJ,EAAA,QAGA,IAAA,aAAAhE,EAAAkE,WACA9I,EAAA+I,SAAA,EACAV,EAAA3F,KAAA0F,EAAA,YAEA,CACA,IAAAK,GAAAF,EAAAU,SAAA,CACA,IACAX,GAAAF,EAAAc,aACA,MAAAxF,IAEA4E,GAAAU,IAEApE,EAAAX,GAAA0E,EAAA,mBAAAC,GAAA,GACAhE,EAAAX,GAAA0E,EAAA,mBAAAC,GAAA,GACAR,EAAAnE,GAAA0E,EAAA,OAAAC,GAAA,IA9EA,GAAAX,MAQAjI,EAAA,SAAAuD,GACAvD,EAAA+I,QACAxF,IAGA0E,EAAA9D,KAAAZ,GAuEA,OAnEAvD,GAAA+I,SAAA,EAiEAZ,EAAA3E,OAAAwE,GAEAhI,ICxFAN,OAAA,eAAA,SAAAyJ,GACA,YAKA,IAAAnJ,IAKAoJ,aAAA,SAAAC,GACA,MAAAA,GAAAtG,QAAA,KAAA,SAAAA,QAAA,KAAA,QAAAA,QAAA,KAAA,QAAAA,QAAA,KAAA,WASAuG,SAAA,SAAAD,EAAAE,GACA,GAAAC,GAAA,GACA/J,EAAA,CA8BA,OA5BA4J,GAAAtG,QAAA,wBAAA,SAAA0G,GACA,OAAAA,EAAA/B,OAAA,IACA,IAAA,IACA+B,EAAAhK,GAAA8J,GAAA,MAAAG,KAAAD,GAAA,GAAAA,EACAhK,GAAA,CACA,MACA,KAAA,IACAgK,EAAAhK,GAAA8J,EAAA,GAAAE,EACAhK,GAAA,CACA,MACA,SACAgK,EAAAA,EAAA9B,OAAA,EAAA4B,EAAA9J,GACAA,GAAAgK,EAAAhK,OAIA+J,GAAAC,IAIAD,EAAAA,EACAzG,QAAA,gBAAA,MACAA,QAAA,iBAAA,IACAA,QAAA,OAAA,IAGAyG,GAAAH,IAAAG,EAAA,WAAA,IAMA,OAAAxJ,KC3DAN,OAAA,oBAAA,WACA,YAKA,SAAAiK,GAAAC,EAAAC,GAEAD,EAAAA,EAAA7G,QAAA,+BAAA,GAIA,IAAAsF,GAAA,MAAAuB,EAAAlC,OAAA,GACAoC,EAAAF,GAAAE,EAAAF,IACAD,EAAAvJ,SAAAkG,eAAAsD,EAAAG,MAAA,IAAAC,WAIA,GAAAC,UAAA,MACA,iLAMAL,EACA7G,QAAA,YAAA,KACA0E,MAAA,MAAAyC,KAAA,MACAnH,QAAA,mBAAA,QACAA,QAAA,cAAA,UACA0E,MAAA,MAAAyC,KAAA,OACAzC,MAAA,MAAAyC,KAAA,YACAzC,MAAA,MAAAyC,KAAA,OACA,yBAGA,OAAAL,GAAAxB,EAAAwB,GAAAxB,EAjCA,GAAAyB,KAoCA,OAAAH,KCjCAjK,OAAA,cAEA,eACA,iBACA,gBACA,eACA,iBACA,kBACA,gBACA,eACA,kBACA,oBACA,sBAEA,SAAAsG,EAAAtB,EAAAyF,EAAAC,EAAAzG,EAAA0G,EAAAC,EAAAV,EAAAW,EAAAC,EAAA5C,GACA,YAEA,IAAA6C,GAAAzE,EACA0E,EAAAD,EAAA,eAAA,GACAE,EAAAF,EAAA,eAAA,EA6EA,OA3EAA,GAAAG,KAAAT,EAAA5J,QACAkK,EAAA/F,MAAAA,EACA+F,EAAAvH,OAAAkH,EAAAlH,OACAuH,EAAAnH,SAAAK,EAAAL,SACAmH,EAAApI,SAAAgI,EAAAhI,SACAoI,EAAA3H,YAAAuH,EAAAvH,YACA2H,EAAA7H,SAAAyH,EAAAzH,SACA6H,EAAA/I,QAAA4I,EAAA5I,QACA+I,EAAAtI,QAAAmI,EAAAnI,QACAsI,EAAAb,IAAAA,EACAa,EAAAF,OAAAA,EACAE,EAAAD,SAAAA,EACAC,EAAA7C,UAAAA,EAEA6C,EAAAI,QACAC,OAAAL,EAAA7H,SAAA8H,EAAA,cACAK,IAAAN,EAAA7H,SAAA8H,EAAA,WACAM,IAAAP,EAAA7H,SAAA8H,EAAA,WACAO,IAAAR,EAAA7H,SAAA8H,EAAA,YAGAD,EAAAS,QACAC,MAAAV,EAAA7H,SAAA+H,EAAA,oBAAAF,EAAAI,OAAA,OACAO,IAAA,QAAAX,EAAA/I,QAAAiJ,EAAA,QAOAF,EAAAY,OAAA,SAAAC,GACA,GAAA,gBAAAA,IAAA,KAAAA,EACA,OAAA,CAGA,KAKA,GAAAC,GAAAnL,SAAAC,cAAA,QAaA,OAXAkL,GAAA1C,KAAA,WAEA0C,EAAAC,WACAD,EAAAC,WAAAC,QAAAH,EAGAC,EAAAG,YAAAtL,SAAAuL,eAAAL,IAGAlL,SAAA+E,qBAAA,QAAA,GAAAuG,YAAAH,IAEA,EAEA,MAAA7H,GACA,OAAA,IASA+G,EAAAmB,QAAA,SAAAjK,EAAAkK,GACA,SAAAlK,IAAAA,EAAAmK,SAAA,KAAAD,KACAlK,EAAAqI,UAAA6B,GACA,IAOApB,IC/FA/K,OAAA,YAAA,cAAA,SAAA+K,GACA,YAEA,OAAA,YACA,GAAAsB,GAAAtB,EAAA,kBAAA,GACAuB,EAAAvB,EAAA/I,QAAAqK,EAAA,kBACAE,IAEAA,GAAA,0BAAAD,EAAA,4BAIA3M,SAAA6M,MAAAD,OCdAvM,OAAA,iCAAA,aAAA,kBAAA,SAAA+K,EAAA9G,GACA,YAaA,IAAAwI,GAAA,SAAAC,GACAzI,EAAAG,MAAA+B,MACAA,KAAAwG,QAAAD,EACAvG,KAAAyG,cAAA,KACAzG,KAAA0G,UACA1G,KAAA2G,UAAA,KAsJA,OA3IAL,GAAA3J,UAAAiK,SAAA,SAAAC,GAGA,MAFA7G,MAAA0G,OAAAG,EAAA9K,MAAA8K,EACAA,EAAAC,OAAA9G,KACAA,MAWAsG,EAAA3J,UAAAoK,SAAA,SAAAhL,GACA,MAAAA,GACAiE,KAAA0G,OAAA3K,GAGAiE,KAAAyG,eAKAH,EAAA3J,UAAAqK,OAAA,SAAAjL,GACA,GAAAiE,KAAAyG,eAAAzG,KAAAyG,cAAA1K,OAAAA,EAAA,CACA,GAAAJ,GAAAqE,KAAA0G,OAAA3K,GAAAyK,QAAAtL,aAAA,IACA0J,GAAA,eAAA,GAAAnK,MAAAK,OAAAa,IAaA2K,EAAA3J,UAAAsK,UAAA,SAAAN,GACA,GAAAO,GAAAlH,KAAAyG,aAEA,QAAAS,GACAlH,KAAA2G,UAAAA,EACA3G,KAAAlC,MAAA,cAAAS,SACAyB,KAAAyG,cAAAzG,KAAA0G,OAAAC,GAGA3G,KAAAyG,cAAAU,aAAA,UAGAD,GAAAA,EAAAnL,OAAA4K,EACA3G,KAAAoH,aAIApH,KAAAqH,qBAAArH,KAAAyG,cAAA1K,KAGAiE,KAAAyG,cAAAU,aAAA,UAEAnH,KAAA2G,UAAAA,EACA3G,KAAAyG,cAAAzG,KAAA0G,OAAAC,GACA3G,KAAAlC,MAAA,kBAAAS,SACAyB,KAAAyG,cAAAU,aAAA,WAUAb,EAAA3J,UAAAyK,UAAA,WACA,GAAAF,GAAAlH,KAAAyG,aAGA,QAAAS,IACAlH,KAAAlC,MAAA,gBAAAS,SACA2I,EAAAC,aAAA,UAEAnH,KAAA2G,UAAA,KACA3G,KAAAyG,cAAA,OAIAH,EAAA3J,UAAA2K,SAAA,WACAtH,KAAAyG,eACAzG,KAAAiH,UAAAjH,KAAAyG,cAAA1K,OAIAuK,EAAA3J,UAAA4K,WAAA,WACAvH,KAAAoH,aAGAd,EAAA3J,UAAA6K,gBAAA,WACA,MAAAxH,MAAAyG,eAkBAH,EAAAmB,MAAA,SAAA1L,EAAA2L,EAAAC,GACA3H,KAAAjE,KAAAA,EACA2L,IACA1H,KAAA4H,QAAAF,EAAAE,QACA5H,KAAAwG,QAAAkB,EAAAlB,SAGAxG,KAAAmH,aAAA,SAAAU,GAEA,kBAAA7H,MAAA2H,qBAGA3H,KAAA2H,oBAAA9K,KAAA,KAAAgL,IAIA,kBAAAF,KACA3H,KAAA2H,oBAAAA,GAEA7J,EAAAG,MAAA+B,OAGAsG,ICxKAzM,OAAA,2CAAA,aAAA,iBAAA,UAAA,qCAAA,UAAA,+BAAA,8BAAA,4BACA,SAAA+K,EAAA9G,EAAAgK,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACA,YAsBA,SAAAhO,KAMA,QAAAiO,KACA,GAAAC,GAAAzD,EAAA,wBACA0D,EAAA3K,OAAA4K,IAAAC,iBAEA,IAAAF,EAAA,CAEA1D,EAAA,gCAAA,GAAAT,UAAAmE,CAGA,KAAA,GAAA7O,GAAA,EAAAC,EAAA2O,EAAAzO,OAAAH,EAAAC,EAAAD,IAAA,CACA,GAAAgP,GAAAJ,EAAA5O,EACA,kBAAAgP,EAAAC,IACA9D,EAAAvH,OAAAoL,GAKA7D,EAAA,iBAAA,GAAA+D,mBAAA,cAAAL,GAGA,GAAAM,GAAAjL,OAAA4K,IAAAM,oBAEAD,IAEAhE,EAAA,uBAAA,GAAA+D,mBAAA,YAAAC,EAIA,IAAAE,GAAAlE,EAAA,mBAAA,GAAAxE,WACA2I,EAAAnE,EAAA/I,QAAAiN,EAAA,QAAA5L,QAAA,QAAA,MAEA0H,GAAAtI,QAAAwM,EAAA,OAAAC,GAGAC,EAAA,GAAAjB,GAAAnD,EAAA,qBAAAV,MAAA,OAQA,QAAA+E,KACA,GAAAC,GACAC,EACAtL,EACAuL,CAEAF,GAAA/O,EAAA2D,MAAA,gBACAqL,EAAAhP,EAAA2D,MAAA,eACAD,GAAAwK,MAAAW,EAAAX,OACAe,EAAAC,EAAAC,UAGAJ,EAAA3K,KAAAV,GAGA0L,IAGAP,EAAAQ,SAEA,IAAAC,GAAAT,EAAAU,aAEAC,GAAAL,YAAAF,GAAAK,GAAAA,EAAAH,YAAAF,IAEAQ,IAGAZ,EAAAa,UAAA,SAAAC,GACA,GAAAC,EAAAT,YAAAF,GAAAO,EAAAL,YAAAF,EACA,OAAA,GAEAY,IAIAb,EAAA5K,KAAAV,GAGA,QAAA0L,KACA3E,EAAApI,SAAAuN,EAAA,gBAGA,QAAAH,KACA,GAAAK,GACAC,EACAC,CAEAvF,GAAA3H,YAAA8M,EAAA,eAUA,IAAAK,GAAAC,EAAAhO,aAAA,QACA0N,GAAAtP,MAAA6P,MAAA,OACAD,EAAA5P,MAAA8P,WAAA,IAEAF,EAAAjK,WAAA4D,KAAAwG,EACAP,EAAAF,EAAAU,YAEAJ,EAAAjK,WAAA4D,KAAA0G,EACAR,EAAAH,EAAAU,YAGAN,EAAAQ,KAAAC,IAAAX,EAAAC,GACAH,EAAAtP,MAAA6P,MAAAH,EAAA,KAGAE,EAAA9N,aAAA,QAAA6N,GAOA,QAAAS,KACAjG,EAAApI,SAAA6M,EAAAyB,GAGA,QAAAC,KACAnG,EAAA3H,YAAAoM,EAAAyB,GACAhD,EAAAkD,QAAA,UACAV,MAAAjB,EAAAoB,YACA3P,OAAAuO,EAAAnO,eAOA,QAAA+P,KACA,GAAAC,GACAC,EAAA,CAEA,OAAA,YAGAxN,OAAAyN,aAAAD,IAIAA,EAAAxN,OAAAyN,WAEAP,IAGAK,GACA1P,aAAA0P,GAEAA,EAAAtP,WAAA,WACAqN,IACAd,EAAAkD,yBACAN,KACA,OAqBA,QAAAO,KAMA,QAAAC,GAAA1N,GACAmL,EAAAwC,aACAnB,EAAAjK,WAAA4D,KAAAwG,EAGAH,EAAAjK,WAAA4D,KAAA0G,EAIAvQ,EAAA2D,MAAA,eAAAM,IAAAmN,GAOA,QAAAE,KA4BA,QAAAC,KACAC,EAAAlR,MAAA6P,MAAAqB,EAAAlB,YAAAmB,IAAA,EAAA,KAKA,QAAAL,GAAA1N,GACA6N,IAlCA,GAAAG,IAAAC,QAAA,EAAAC,cAAAtB,YAAA,GACAd,EAAA/E,EAAA,mBAAA,IAAAiH,EACAxD,EAAAzD,EAAA,kBAAA,IAAAiH,EACAF,EAAA/G,EAAA,iBAAA,IAAAiH,EAEAD,GADAhH,EAAA,eAAA,IAAAiH,EACA,EAIAD,GAFAhH,EAAAS,OAAAE,IACAX,EAAAI,OAAAI,KAAAR,EAAAI,OAAAG,IACA,WACA,MAAAwE,GAAAoC,WAAAJ,EAAAI,WAAA,GAIA,WACA,MAAAJ,GAAAI,YAAApC,EAAAoC,WAAApC,EAAAc,cAKA,WACA,MAAAd,GAAAoC,WAAA1D,EAAA0D,WAAA1D,EAAAoC,aAgBAtQ,EAAA2D,MAAA,eAAAM,IAAAmN,GAGA,QAAAS,GAAAC,GACA,GAAAC,IACAC,GAAAF,EAAAG,IAAAC,OAGA1O,QAAA4K,MAAA2D,EAAAC,IACA/D,GAGA,IAAAkE,GAAAJ,EAAAC,GAAAvH,EAAA/I,QAAAiJ,EAAA,cAAAF,EAAA/I,QAAAiJ,EAAA,aAEA,MAAAwH,GACAtD,EAAAuD,aAAAD,GAGAhB,EAAAtC,GACAyC,IAEAZ,IACAjG,EAAApI,SAAAsI,EAAA0H,GACA5H,EAAA3H,YAAA6H,EAAA2H,GACAxD,IACA8B,IAEA2B,GAAA,EAEAzE,IACAC,EAAA/N,GACAgO,IAEAvD,EAAAS,OAAAC,QACAV,EAAAnH,SAAAE,OAAA,SAAAsN,KAGArG,EAAAnH,SAAAE,OAAA,oBAAA,WACA/B,WAAAqP,IAAA,QAhHA9Q,EAAAwS,kBAAA,WACAD,IACA7B,IACA5B,IACAd,EAAAkD,yBACAI,IACAV,MAiHA/C,EAAA4E,KAAAZ,EAAAA,GAlTA,GAAAhD,GAAA,GAAAjB,GAAAnD,EAAA,qBAAAV,MAAA,OACAwI,GAAA,EACA/C,EAAA/E,EAAA,mBAAA,GACAmF,EAAAnF,EAAA,iBAAA,GACAE,EAAAF,EAAA,eAAA,GACAyE,EAAAzE,EAAA,0BAAA,GACA4H,EAAA,cACAC,EAAA,gBACA3B,EAAA,eACAd,EAAA,EAEAK,EAAAzF,EAAA,mBAAA,GACA8F,EAAAL,EAAAjK,WAAA4D,KACAwG,EAAA5F,EAAA/I,QAAAwO,EAAA,WA0SA,OADAvM,GAAAG,MAAA9D,GACAA,IChUAN,OAAA,sCAAA,cAAA,SAAA+K,GACA,YAEA,IACAzK,GADA0S,EAAA,eAIAC,EAAA,SAAApP,GACA,GAAAqP,GAAA/M,IAEA,IAAA,mBAAA+M,GAAA1E,MAGA,IAAA,GAAA5O,GAAA,EAAAgD,EAAAsQ,EAAA1E,MAAAzO,OAAAH,EAAAgD,EAAAhD,IACAiE,EAAAqP,EAAA1E,MAAA5O,GAAAA,GAwFA,OApFAU,GAAA,SAAA6S,GACAhN,KAAAqI,QACA,KAAA,GAAA5O,GAAA,EAAAgD,EAAAuQ,EAAApT,OAAAH,EAAAgD,EAAAhD,IAAA,CACAuG,KAAAqI,MAAA5O,GAAAuT,EAAAvT,EAEA,IAAAwT,IAAAjN,KAAAqI,MAAA5O,GAAAyT,WAAAlN,KAAAqI,MAAA5O,GAAA0T,aAAAC,MACApN,MAAAqI,MAAA5O,GAAA4T,WAAAC,SAAAL,KAIA9S,EAAAwC,UAAA4Q,WAAA,SAAAzD,GACAlF,EAAAvH,OAAA2C,KAAAqI,MAAAyB,UACA9J,MAAAqI,MAAAyB,IAGA3P,EAAAwC,UAAA6M,QAAA,WACAsD,EAAAjQ,KAAAmD,KAAA,SAAAyI,GACA7D,EAAA3H,YAAAwL,EAAAoE,MASA1S,EAAAwC,UAAAkN,UAAA,SAAAnM,EAAA8P,GAKA,IAJA,GAAAC,IAAA,EAEA/T,EAAAsG,KAAAqI,MAAAzO,OAEAF,KACA,GAAA+T,GAAA/P,IACAkH,EAAApI,SAAAwD,KAAAqI,MAAA3O,GAAAmT,OAEA,CACA,KAAAnT,EAAA8T,EAAA,GAKA,KAJAC,IAAA,EACA/T,MAaAS,EAAAwC,UAAA4P,aAAA,SAAAmB,GACA,GAAAX,GAAA/M,IACA8M,GAAAjQ,KAAAmD,KAAA,SAAAyI,EAAAqB,GACAA,GAAA4D,GACAX,EAAAQ,WAAAzD,IAIA,IAAA6D,KACAb,GAAAjQ,KAAAmD,KAAA,SAAAyI,GACAA,GACAkF,EAAArP,KAAAmK,KAIAzI,KAAAqI,MAAAsF,GAOAxT,EAAAwC,UAAA6O,WAAA,WACA,MAAAxL,MAAAqI,MAAA,IAAArI,KAAAqI,MAAA,GAAArL,UAAAI,QAAAyP,SAMA1S,EAAAwC,UAAA+M,YAAA,WACA,MAAA1J,MAAAqI,MAAAzO,OAAAoG,KAAAqI,MAAArI,KAAAqI,MAAAzO,OAAA,GAAA,MAGAO,IC5GAN,OAAA,4BAAA,aAAA,WAAA,SAAA+K,EAAAgJ,GAUA,QAAAC,KAEA,GAAA7H,GAAA,+FAAApB,EAAA,2CAAA,GAAAT,UAAA,aACAqC,GAAArC,UAAA6B,EAGA,QAAAqF,KAWA,IAAA,GARAhD,GAAAzD,EAAA,qBACAkJ,EAAAlJ,EAAA,sBACAmJ,EAAAnJ,EAAA,uBAAAoJ,GACAnB,EAAA,iBACAoB,EAAA,EACAC,EAAAN,EAAAO,oBAGA1U,EAAA,EAAAgD,EAAA4L,EAAAzO,OAAAH,EAAAgD,EAAA,GACA4L,EAAA5O,GAAAuD,UAAAI,QAAA,qBADA3D,IAIAwU,GAGA,KAAA,GAAA3M,GAAA,EAAA8M,EAAAN,EAAAlU,OAAA0H,EAAA8M,EAAA9M,IACAA,EAAA2M,EACArJ,EAAApI,SAAAsR,EAAAxM,GAAAuL,GAGAjI,EAAA3H,YAAA6Q,EAAAxM,GAAAuL,EAQA,IAJAkB,EAAAnU,QACAgL,EAAA3H,YAAA8Q,EAAA,GAAAC,GAGAC,EAAAH,EAAAlU,OAEAgL,EAAApI,SAAAsR,EAAAG,GAAAD,OACA,IAAAC,IAAAH,EAAAlU,OAAA,CAEA,GAAAyU,GAAAH,EAAA1G,iBAEA6G,IAAA,SAAAA,EAAAtS,MACAmS,EAAA9G,YAIAxC,EAAA,yBAAA,GAAAT,UAAAS,EAAA,mBAAA,GAAAT,UAGA,QAAAhK,KACAyT,EAAAU,UAAA,OAAAC,EAAA/H,GACAqH,IACAxC,IAOA7R,SAAA,YAAA,SAAAgV,GACAA,EAAAC,MAAA,YACAC,OAAAlI,EACAmI,aAAA,uBAGAH,EAAAI,WAAAhK,EAAA,IAAA2J,GAAA,IACA3J,EAAApI,SAAAoI,EAAA,QAAA,GAAA,qBA7EA,GAAA2J,GAAA3J,EAAA,iBAAA,GACAoJ,EAAA,oBAEAxH,EAAAjM,SAAAC,cAAA,MAiFA,OAhFAgM,GAAAjK,aAAA,KAAA,kBACAqI,EAAApI,SAAAgK,EAAA,aA6EArM,EAAAkR,uBAAAA,EAEAlR,ICjFAN,OAAA,iCAAA,aAAA,WAAA,SAAA+K,EAAAgJ,GACA,YAEA,IAAAzT,GAAA,WACA,GAAA0U,GAAA,IAEAjK,GAAA/F,MAAA,WACA,GAAAiQ,GAAAlK,EAAA,iBAAA,GACAmK,EAAAnK,EAAA,gDAEAkK,IAAAC,EAAAnV,QAOAgL,EAAAnH,SAAAsR,EAAA,QAAA,SAAAlR,GACArC,aAAAqT,GACAjB,EAAAoB,eAOArR,OAAA4K,KAAA,KAAA,GAAA5K,OAAA4K,IAAA0G,MAAA7R,QAAA,QACAwH,EAAAtI,QAAAwS,EAAA,eAAA,OACAlK,EAAAtI,QAAAwS,EAAA,cAAA,OACAlK,EAAAtI,QAAAwS,EAAA,iBAAA,OACAlK,EAAAtI,QAAAwS,EAAA,aAAA,SACAlK,EAAAnH,UAAAqR,GAAA,UAAA,SAAAjR,GACA,mBAAAiR,GAAAI,cACAJ,EAAAI,YAAA,eACA1V,SAAA,0BAAA,SAAA2V,GACAL,EAAAI,YAAA,GAAAC,GAAAL,SASAlK,EAAAnH,SAAAsR,EAAA,OAAA,SAAAlR,GACAgR,EAAAjT,WAAA,aAEA,QApCAwT,QAAAC,KAAA,2DA0CA,OAAAlV,KCrDAN,OAAA,+BAAA,aAAA,iCAAA,SAAA+K,EAAA0B,GACA,YAgBA,SAAAgJ,GAAA1O,GACA,GAAAnH,EAQA,KANA,mBAAAmH,GAAAhH,SACAgH,GAAAA,IAGAnH,EAAAmH,EAAAhH,OAEAH,KAAA,CACA,GAAAc,SAAAgV,eAAAhV,SAAAgV,gBAAA3O,EAAAnH,GACA,OAAA,CAEA,IAAAc,SAAAiV,WAAAjV,SAAAiV,YAAA5O,EAAAnH,GACA,OAAA,EAGA,OAAA,EAUA,QAAAU,GAAAsV,GAwCA,QAAAC,KACA,GAAAC,GAAA/K,EAAA,uBAAA,EAEA+K,KACAC,EAAAD,EAAAxL,UACAwL,EAAArS,WAAAC,YAAAoS,IASA,QAAAE,GAAAvS,GAIA,IAHA,GAAAwS,GAAA,EACAhU,EAAAwB,EAAA8C,WAEAtE,GAAA,CACA,GAAAA,EAAA+E,WAAAiP,EACA,MAAAhU,EAEAA,GAAAA,EAAA8D,YAEA,MAAA,MAQA,QAAAmQ,GAAApJ,GACA,MAAA,SAAAA,EACA,0CAAA/B,EAAA,2CAAA,GAAAT,UAAA,QAGA,GAwCA,QAAA6L,GAAArJ,EAAAsJ,GACAzW,SAAA,YAAA,SAAAgV,GACAA,EAAA0B,IAAAD,EAAA,SAAAtJ,KAQA,QAAAwJ,GAAAtJ,GACA,GACAuJ,GACAC,EAFAC,EAAAzJ,EAAAe,OAIAf,KAIArL,aAAA+U,GAGAD,GACA1L,EAAApI,SAAA8T,EAAAE,GAIAtC,EAAA1H,QAAA/L,MAAAK,OAAA,IACA+L,EAAAL,QAAA/L,MAAAgW,QAAA,QACAL,EAAAvJ,EAAAL,QAAAtL,aACA,UAAA4J,EAAA4L,SACA9L,EAAAG,KAAAmJ,EAAA1H,SACA1L,OAAAsV,EACAvV,SAAA8V,IAEA/L,EAAAtI,QAAAuK,EAAAL,QAAA,WAAA,MACAK,EAAAL,QAAAoK,UAGAhM,EAAAG,KAAAmJ,EAAA1H,SACA1L,OAAAsV,EACAvV,SAAA,IAGAwV,EAAAzL,EAAA,IAAAoJ,EAAA,KAAAnH,EAAAL,SAAA,IAAA5B,EAAA,IAAAoJ,EAAA,KAAAnH,EAAAL,SAAA,IAAA5B,EAAA,oBAAAiC,EAAAL,SAAA,GACA6J,GACAA,EAAAO,SAIAhM,EAAAtI,QAAA4R,EAAA1H,QAAA,gBAAA,QACA5B,EAAApI,SAAA0R,EAAA1H,QAAAqK,GACAjM,EAAApI,SAAAsI,EAAAgM,GAGAlV,WAAA,WACAoU,EAAAnJ,EAAA9K,KAAA,SACA,UAAA+I,EAAA4L,QAAAC,EAAA,IAOA,QAAAI,GAAAlK,GACA,GAAAyJ,GAAAzJ,EAAAe,OAEAf,KAIArL,aAAA+U,GAEA,UAAAzL,EAAA4L,QACA9L,EAAAG,KAAAmJ,EAAA1H,SACA1L,OAAA,EACAD,SAAA8V,IAIA/L,EAAAG,KAAAmJ,EAAA1H,SACA1L,OAAA,EACAD,SAAA,IAIA0V,EAAA3U,WAAA,WACAiL,EAAAL,QAAA/L,MAAAgW,QAAA,OACA7L,EAAA3H,YAAAiR,EAAA1H,QAAAqK,GACAjM,EAAA3H,YAAA6H,EAAAgM,GACAlM,EAAAtI,QAAA4R,EAAA1H,QAAA,gBAAA,SAEA8J,GACA1L,EAAA3H,YAAAqT,EAAAE,GAGAR,EAAAnJ,EAAA9K,KAAA,UACA,UAAA+I,EAAA4L,QAAAC,EAAA,IAQA,QAAAK,GAAA3C,EAAA4C,GACA,GAEAb,GAFAc,EAAA7C,EAAAzG,QACAuJ,EAAAF,EAAArJ,OAGAyG,GAAA7H,QAAA/L,MAAAgW,QAAA,OACAQ,EAAAzK,QAAA/L,MAAAgW,QAAA,QACAL,EAAAa,EAAAzK,QAAAtL,aACA,UAAA4J,EAAA4L,SACA9L,EAAAG,KAAAmJ,EAAA1H,SACA1L,OAAAsV,EACAvV,SAAA8V,IAEA/L,EAAAtI,QAAA2U,EAAAzK,QAAA,WAAA,MACAyK,EAAAzK,QAAAoK,UAGAhM,EAAAG,KAAAmJ,EAAA1H,SACA1L,OAAAsV,EACAvV,SAAA,IAEA+J,EAAA,IAAAoJ,EAAA,KAAAiD,EAAAzK,SAAA,GAAAoK,SAEAhM,EAAA3H,YAAAiU,EAAAV,GACA5L,EAAApI,SAAA2U,EAAAX,GAEAR,EAAA3B,EAAAtS,KAAA,SACAiU,EAAAiB,EAAAlV,KAAA,QAOA,QAAAqV,KAEAxM,EAAAnH,SAAAqH,EAAA,YAAA,SAAAjH,GACAiH,EAAA4L,QAAA,UAEA9L,EAAAnH,SAAAqH,EAAA,YAAA,SAAAjH,GACAiH,EAAA4L,QAAA,UAEA9L,EAAAnH,SAAAqH,EAAA,UAAA,SAAAjH,GACAiH,EAAA4L,QAAA,aAIA,QAAAW,GAAAxK,GAEAjC,EAAA7H,SAAAmR,EAAA1H,QAAAqK,KACA3C,EAAA1H,QAAA/L,MAAAK,OAAA+L,EAAAL,QAAAtL,aAAAoW,EAAApD,EAAA1H,SAAA,MAOA,QAAA+K,KAGA,GAAAlD,GAAAH,EAAA1G,iBAGA,QAAA6G,GACAgD,EAAAhD,GA5RA,GAAAuB,GACAW,EAAA,KAMAe,EAAA,WACA,MAAA3T,QAAA6T,iBACA,SAAA7W,GAEA,MADAA,GAAAA,GAAAJ,SAAAyE,KACArB,OAAA6T,iBAAA7W,GAAA8W,SAAAvU,QAAA,KAAA,KAIA,SAAAvC,GACA,GAAA+W,GACAC,CAYA,OAVAhX,GAAAA,GAAAJ,SAAAyE,KACA0S,EAAAnX,SAAAC,cAAA,OACAkX,EAAAjX,MAAAmX,OAAA,MACAF,EAAAjX,MAAAoX,QAAA,MACAH,EAAAjX,MAAAqX,OAAA,OACAJ,EAAAjX,MAAAK,OAAA,MAEAH,EAAAkL,YAAA6L,GACAC,EAAAD,EAAAxW,aACAP,EAAA4C,YAAAmU,GACAC,KAwDAxX,GAAA4X,aAAA,SAAApL,EAAAqL,GACA,GAAAC,GAGAC,EAFAvN,EAAAC,EAAAD,SAAAiL,GACAuC,EAAA5X,SAAAC,cAAA,MAmBA,OAhBAyX,GAAAtN,GACAyN,aAAArC,EAAApJ,GACA0L,UAAA1L,IAGAwL,EAAAhO,UAAA8N,EACAE,EAAAtC,EAAAsC,GAAAG,WAAA,GACAN,EAAAnM,YAAAsM,GAEAvN,EAAApI,SAAAoI,EAAA,sBAAA,GAAA,eAEAsN,EAAAtN,EAAA,IAAAuN,EAAA9V,aAAA,oBAAA,GACA6V,GACAtN,EAAAtI,QAAA4V,EAAA,gBAAAC,EAAAzJ,KAGAd,QAAAsK,EAAA1L,QAAA2L,IAsLAvN,EAAA/F,MAAA,WACA6Q,IAEA5K,EAAAgC,OAAAoH,EACAA,EAAApQ,MAAA,cAAAM,IAAA,WACA,GAAAyI,GAAAqH,EAAAnH,SAAAmH,EAAAvH,UACAwJ,GAAAtJ,KAEAqH,EAAApQ,MAAA,gBAAAM,IAAA,WACA,GAAAyI,GAAAqH,EAAAnH,UACAgK,GAAAlK,KAEAqH,EAAApQ,MAAA,kBAAAM,IAAA,WACA,GAAAiQ,GAAAH,EAAAxH,OAAAwH,EAAA7G,sBACA4J,EAAA/C,EAAAnH,UAEAiK,GAAA3C,EAAA4C,KAGAM,IAEAH,IAEA3B,EAAA3R,MAAA,eAAAM,IAAAmT,KAIApX,EAAAoY,WAAA,WACA9C,EAAA9C,qBAxWA,GAAAqF,GAAApN,EAAA,eAAA,GACAsJ,EAAA,GAAA5H,GAAA0L,GACAlN,EAAAF,EAAA,eAAA,GACA4L,EAAA,mBACAG,EAAA,IACAE,EAAA,mBACAC,EAAA,iBACA9C,EAAA,mBAkZA,OAtCA7T,GAAAqY,eAAA,SAAA3L,GACA,GAAAF,GAAAE,EAAA9K,IAEA6I,GAAAnH,SAAAoJ,EAAAe,QAAA,QAAA,SAAA/J,GAYA,MAXAgJ,GAAA/I,MAAA,cAAAS,KAAAV,GACAqQ,EAAAjH,UAAAN,GACAE,EAAA/I,MAAA,QAAAS,KAAAV,GAEAA,EAAA4U,eACA5U,EAAA4U,iBAGA5U,EAAA6U,aAAA,GAGA,IAIA9N,EAAAnH,SAAAqH,EAAA,UAAA,SAAAjH,GACA,GAAA8U,GAAA,gBAAA9U,GAAA+U,MAAA/U,EAAA+U,MAAA/U,EAAAgV,OAEA,IAAA,KAAAF,IAAArD,EAAAzI,EAAAe,UAAA0H,EAAA1K,EAAA,WAAAiC,EAAAL,WAAA8I,EAAAzI,EAAAL,UAAA,CAEA0H,EAAA9G,UAAAT,EACA,IAAAmM,GAAAlO,EAAA,IAAAiC,EAAAe,SAAA,EACAkL,IACAA,EAAAlC,YAOAzW,EAAAgU,kBAAA,WACA,MAAAD,IAGA/T,IC5ZAN,OAAA,gCAAA,cAAA,SAAA+K,GACA,YAKA,OAAA,YACApL,SAAA,YAAA,SAAAgV,GACA5J,EAAA/F,MAAA,WAEA2P,EAAAC,MAAA,YACAC,OAAA9J,EAAA,mBAAA,GACA+J,aAAA,wBAEAH,EAAAC,MAAA,YACAC,OAAA9J,EAAA,kBACA+J,aAAA,uBAEAH,EAAAC,MAAA,YACAC,OAAA9J,EAAA,cACA+J,aAAA,mBAEAH,EAAAC,MAAA,YACAC,OAAA9J,EAAA,eACA+J,aAAA,mBAEAH,EAAAC,MAAA,YACAC,OAAA9J,EAAA,QAAA,KAEA4J,EAAAC,MAAA,YACAC,OAAA9J,EAAA,QAAA,KAEAA,EAAA,mBAAA,GAAAyI,WAAAC,SAAA,mBChCAzT,OAAA,4BAAA,cAAA,SAAA+K,GACA,YAOA,OAAA,YACA,GAAAmO,GAAA,eAAAxY,UAAAC,cAAA,QAEA,KAAAuY,EAAA,CACA,GAAAjE,GAAAlK,EAAA,iBAAA,GACAoO,EAAApO,EAAA,oBAAA,GACAqO,EAAArO,EAAA/I,QAAAiT,EAAA,cAEAlK,GAAA/F,MAAA,WAEA+F,EAAAnH,SAAAqR,EAAA,WAAA,SAAAjR,GACA,KAAAiR,EAAA7S,QACA6S,EAAA7S,MAAAgX,KAIArO,EAAAnH,SAAAqR,EAAA,UAAA,SAAAjR,GACAiR,EAAA7S,QAAAgX,IACAnE,EAAA7S,MAAA,MAIA2I,EAAAnH,SAAAuV,EAAA,SAAA,SAAAnV,GACAiR,EAAA7S,QAAAgX,IACAnE,EAAA7S,MAAA,MAMA6S,EAAA7S,OAAA1B,SAAAgV,gBAAAT,IACAA,EAAA7S,MAAAgX,SCvCApZ,OAAA,2BAAA,cAAA,SAAA+K,GACA,YAMA,OAAA,YACAA,EAAA/F,MAAA,WACA,GAAAqU,GAAAtO,EAAA,mBAAA,GACAuO,EAAA,SAAAtV,GAEA,GAAAG,GAAAH,EAAAG,QAAAH,EAAAE,WACAqV,EAAApV,EAAA3B,aAAA,QAAAyE,MAAA,UACAuS,GAAAD,EAAAxO,EAAAwO,EAAA,QAAA,EAEAC,KACA,OAAAA,EAAAC,UAAAD,EAAAC,gBACAD,EAAAC,aAEAD,EAAAzC,SAGAhM,GAAAnH,SAAAyV,EAAA,QAAAC,QCvBAtZ,OAAA,WAAA,aAAA,8BAAA,iCAAA,SAAA+K,EAAAsD,EAAA5B,GACA,YAEA,IAAAwB,IACAyL,QAAA,SAAAC,EAAA9V,GACA,GAAA+V,GAAAhV,QAAA+U,EAEA,mBAAA9V,IACAkH,EAAA7C,UAAA0R,EAAA/V,IAIAgW,OAAA,SAAAF,GACA,GAAA9O,GAAAnK,SAAAC,cAAA,SACAkK,GAAA1B,KAAA,kBACA0B,EAAAiP,IAAAH,EACA9O,EAAAkP,OAAA,EACArZ,SAAA+E,qBAAA,QAAA,GAAAuG,YAAAnB,IAGA4J,UAAA,SAAA3H,EAAAiB,EAAApB,EAAAmB,GAEA,GAAAqK,GAAApN,EAAA,eAAA,EACAoN,GAAAnM,YAAAW,EAEA,IAAAK,GAAA,GAAAP,GAAAmB,MAAAd,GAAAiB,QAAAA,EAAApB,QAAAA,GAAAmB,EACAO,GAAAiG,oBAAAvH,SAAAC,GACAqB,EAAAsK,eAAA3L,IAGAgN,eAAA,SAAAlN,GACA,GAAAG,GAAAoB,EAAAiG,oBACAE,EAAAvH,EAAAU,iBAEA,OAAA,QAAA6G,GAAAA,EAAAtS,MAAA4K,EAAA,SAAA,SAGAmN,mBAAA,SAAAnN,GACA,GAAAG,GAAAoB,EAAAiG,mBACArH,GAAAE,OAAAL,IAGAwH,kBAAA,WACA,MAAAjG,GAAAiG,qBAGA4F,QAAA,WACA7L,EAAAqK,YACArK,EAAAqK,cAKA,OAAAzK","file":"orb.min.js","sourcesContent":["/** @lint */\n\n/**\n @overview Bootstrap for the ORB JavaScript preprocessing.\n */\nvar dependencies = [\n // order matters\n 'orb/_map',\n 'orb/features/_skiplinks',\n 'orb/features/masthead/_layoutprimarynav'\n];\n\nrequire(dependencies, function () {\n 'use strict';\n for (var i = 0, l = arguments.length; i < l; i++) {\n arguments[i]();\n }\n }\n);\n","/** @lint */\n\n/**\n * @module orb/lib/_anim\n */\ndefine('orb/lib/_anim', function () {\n 'use strict';\n\n var exports = {},\n prefixes = ['transition', 'WebkitTransition', 'MozTransition', 'msTransition', 'OTransition'],\n transitionSupported = (function () {\n var s = document.createElement('div').style,\n i = prefixes.length;\n while (i--) {\n if (prefixes[i] in s) {\n return prefixes[i];\n }\n }\n return false;\n }());\n\n function easeOut(t, b, c, d) {\n t /= d;\n return -c * t * (t - 2) + b;\n }\n\n /**\n @param {HTMLDOMElement} el\n @param {object} opts\n @param {number} opts.height The height to grow to (pixels)\n @param {number} opts.duration The time to grow (milliseconds)\n */\n exports.animate = transitionSupported ?\n function (el, opts) {\n el.style[transitionSupported] = 'height ' + opts.duration + 'ms';\n el.style.height = opts.height + 'px';\n\n }\n :\n function (el, opts) {\n var startHeight = parseFloat(el.offsetHeight),\n targetHeight = opts.height,\n duration = opts.duration,\n style = el.style,\n frameInterval = 10,\n startTime = (new Date()).getTime(),\n tick;\n\n clearTimeout(el.orbAnimTimer); // Ensure only one anim per element\n\n if ( duration === 0 ) {\n style.height = targetHeight + 'px';\n } else {\n\n tick = function () {\n var elapsedTime = (new Date()).getTime() - startTime,\n newHeight = easeOut(elapsedTime, startHeight, targetHeight - startHeight, duration);\n\n if (elapsedTime > duration) {\n style.height = targetHeight + 'px';\n return;\n }\n\n style.height = newHeight + 'px';\n el.orbAnimTimer = setTimeout(tick, frameInterval);\n };\n\n el.orbAnimTimer = setTimeout(tick, 0);\n }\n }\n ;\n\n return exports;\n});\n","/** @lint */\n\n/**\n * @module orb/lib/_attr\n */\ndefine('orb/lib/_attr', function () {\n 'use strict';\n \n return {\n getAttr: function (node, name) {\n var attrNode,\n value;\n \n if (node.attributes[name]) {\n return (!node.attributes[name].specified) ? '' : node.attributes[name].value;\n }\n else if (node.getAttributeNode) {\n attrNode = node.getAttributeNode(name, 0);\n return (attrNode === null) ? '' : attrNode.value;\n }\n else {\n value = node.getAttribute(name, 2);\n return (value === null) ? '' : value;\n }\n },\n setAttr: function (node, name, value) {\n node.setAttribute(name, '' + value);\n }\n };\n});\n ","/** @lint */\n\n/**\n * @module orb/lib/_classy\n */\ndefine('orb/lib/_classy', function () {\n 'use strict';\n \n var exports = {};\n \n /**\n @param {HTMLDOMElement | Array } node - DOM node or nodes to add the class/es to.\n @param {string | Array } name - Class name or names to add to the node.\n */\n exports.addClass = function (node, name) {\n var i, len;\n \n if (Object.prototype.toString.call(name) === '[object Array]') {\n for (i = 0, len = name.length; i < len; i++) {\n exports.addClass(node, name[i]);\n }\n }\n \n if (node.nodeName) {\n if (!exports.hasClass(node, name)) {\n node.className += (node.className ? ' ' : '') + name;\n }\n }\n else if (node.length) {\n for (i = 0, len = node.length; i < len; i++) {\n exports.addClass(node[i], name);\n }\n }\n };\n \n /**\n @param {HTMLDOMElement | Array } node - DOM node or nodes to remove the class/es from.\n @param {string | Array } name - Class name or names to remove from the node.\n */\n exports.removeClass = function (node, name) {\n var i, len;\n \n if (Object.prototype.toString.call(name) === '[object Array]') {\n for (i = 0, len = name.length; i < len; i++) {\n exports.removeClass(node, name[i]);\n }\n }\n \n if (node.nodeName) {\n node.className = node.className.replace(new RegExp('(^| )' + name + '( |$)', 'g'), ' ').replace(/(^ | $)/g, '').replace(/ {2}/g, ' ');\n }\n else if (node.length) {\n for (i = 0, len = node.length; i < len; i++) {\n exports.removeClass(node[i], name);\n }\n }\n };\n\n /**\n @param {HTMLDOMElement} node \n @param {string} name - Class name to check.\n @returns {boolean}\n */\n exports.hasClass = function (node, name) {\n return ((' ' + node.className + ' ').indexOf(' ' + name + ' ') > -1);\n };\n \n return exports;\n});\n\n ","/** @lint */\n\n/**\n * @module orb/lib/_dom\n */\ndefine('orb/lib/_dom', function () {\n 'use strict';\n \n return {\n remove: function (node) {\n node.parentNode.removeChild(node);\n }\n };\n});","/** @lint */\n\n/**\n * @module orb/lib/_event\n */\n\ndefine('orb/lib/_event', function () {\n 'use strict';\n \n /** Add an event listener to a DOM node.\n @param node\n @param eventName\n @param callback\n */\n var exports = {};\n \n if (document.addEventListener) { // W3C standards branch\n exports.addEvent = function (node, name, callback) {\n if (node && (node.nodeName || node === window)) {\n node.addEventListener(name, callback, false);\n }\n else if (node && node.length) {\n for (var i = 0, len = node.length; i < len; i++) {\n exports.addEvent(node[i], name, callback);\n }\n }\n };\n }\n else { // IE branch\n exports.addEvent = function (node, name, callback) {\n if (node && (node.nodeName || node === window)) {\n node.attachEvent('on' + name, function (e) {\n e = e || window.event || {};\n // IE uses `srcElement`, standard is `target`\n if (e.srcElement && typeof e.target === 'undefined') {\n e.target = e.srcElement;\n }\n return callback.call(node, e);\n });\n }\n else if (node && node.length) {\n for (var i = 0, len = node.length; i < len; i++) {\n exports.addEvent(node[i], name, callback);\n }\n } \n };\n }\n \n /**\n Add custom signal/event-like features to non-DOM objects.\n \n @param {object} target - object to receive the added features.\n @example\n var phone = new Phone();\n event.mixin(phone);\n \n phone.event('ring').add(function (e) {\n alert('Hello ' + e.callerName);\n });\n \n phone.event('ring').fire({callerName: 'Nikos'});\n */\n exports.mixin = function (target) {\n target.__events = {};\n \n target.event = function (name) {\n var eventQueue;\n \n if (typeof target.__events[name] !== 'undefined') {\n eventQueue = target.__events[name];\n }\n else {\n eventQueue = target.__events[name] = [];\n }\n \n return {\n add: function (handler) {\n eventQueue.push(handler);\n },\n fire: function (e) {\n e = e || {};\n for (var i = 0, len = eventQueue.length; i < len; i++) {\n eventQueue[i](e);\n }\n }\n };\n };\n };\n \n return exports;\n});","/**\n * @module orb/lib/_loadCSS\n */\n\n/*\n\tloadCSS: load a CSS file asynchronously.\n\n\tVersion : 1.2.0\n\tAuthor : @scottjehl, Filament Group, Inc.\n\tHomepage : https://github.com/filamentgroup/loadCSS\n\tLicense : MIT\n*/\n\n(function(w){\n\t\"use strict\";\n\t/* exported loadCSS */\n\tvar loadCSS = function( href, before, media ){\n\t\t// Arguments explained:\n\t\t// `href` [REQUIRED] is the URL for your CSS file.\n\t\t// `before` [OPTIONAL] is the element the script should use as a reference for injecting our stylesheet before\n\t\t\t// By default, loadCSS attempts to inject the link after the last stylesheet or script in the DOM. However, you might desire a more specific location in your document.\n\t\t// `media` [OPTIONAL] is the media type or query of the stylesheet. By default it will be 'all'\n\t\tvar doc = w.document;\n\t\tvar ss = doc.createElement( \"link\" );\n\t\tvar ref;\n\t\tif( before ){\n\t\t\tref = before;\n\t\t}\n\t\telse {\n\t\t\tvar refs = ( doc.body || doc.getElementsByTagName( \"head\" )[ 0 ] ).childNodes;\n\t\t\tref = refs[ refs.length - 1];\n\t\t}\n\n\t\tvar sheets = doc.styleSheets;\n\t\tss.rel = \"stylesheet\";\n\t\tss.href = href;\n\t\t// temporarily set media to something inapplicable to ensure it'll fetch without blocking render\n\t\tss.media = \"only x\";\n\n\t\t// wait until body is defined before injecting link. This ensures a non-blocking load in IE11.\n\t\tfunction ready( cb ){\n\t\t\tif( doc.body ){\n\t\t\t\treturn cb();\n\t\t\t}\n\t\t\tsetTimeout(function(){\n\t\t\t\tready( cb );\n\t\t\t});\n\t\t}\n\t\t// Inject link\n\t\t\t// Note: the ternary preserves the existing behavior of \"before\" argument, but we could choose to change the argument to \"after\" in a later release and standardize on ref.nextSibling for all refs\n\t\t\t// Note: `insertBefore` is used instead of `appendChild`, for safety re: http://www.paulirish.com/2011/surefire-dom-element-insertion/\n\t\tready( function(){\n\t\t\tref.parentNode.insertBefore( ss, ( before ? ref : ref.nextSibling ) );\n\t\t});\n\t\t// A method (exposed on return object for external use) that mimics onload by polling until document.styleSheets until it includes the new sheet.\n\t\tvar onloadcssdefined = function( cb ){\n\t\t\tvar resolvedHref = ss.href;\n\t\t\tvar i = sheets.length;\n\t\t\twhile( i-- ){\n\t\t\t\tif( sheets[ i ].href === resolvedHref ){\n\t\t\t\t\treturn cb();\n\t\t\t\t}\n\t\t\t}\n\t\t\tsetTimeout(function() {\n\t\t\t\tonloadcssdefined( cb );\n\t\t\t});\n\t\t};\n\n\t\tfunction loadCB(){\n\t\t\tif( ss.addEventListener ){\n\t\t\t\tss.removeEventListener( \"load\", loadCB );\n\t\t\t}\n\t\t\tss.media = media || \"all\";\n\t\t}\n\n\t\t// once loaded, set link's media back to `all` so that the stylesheet applies once it loads\n\t\tif( ss.addEventListener ){\n\t\t\tss.addEventListener( \"load\", loadCB);\n\t\t}\n\t\tss.onloadcssdefined = onloadcssdefined;\n\t\tonloadcssdefined( loadCB );\n\t\treturn ss;\n\t};\n\t// commonjs\n\tif( typeof exports !== \"undefined\" ){\n\t\texports.loadCSS = loadCSS;\n\t}\n\telse {\n\t\tw.loadCSS = loadCSS;\n\t}\n}( typeof global !== \"undefined\" ? global : this ));\n","/**\n * @module orb/lib/_nut\n */\ndefine('orb/lib/_nut', [], function() {\n var module = { exports: {} };\n\n /*\n nut, the concise CSS selector engine\n\n Version : 0.3.1\n Author : Aurélien Delogu (dev@dreamysource.fr)\n Homepage : https://github.com/pyrsmk/nut\n License : MIT\n */\n\n (function(def){\n /* The following line is not required within orb, left for future reference \n \n if(typeof define=='function'){\n \t\tdefine(def);\n \t}\n else */ if(typeof module!='undefined'){\n module.exports=def;\n }\n else{\n this.nut=def;\n }\n }(function(){\n \n var doc=document,\n firstChild='firstChild',\n nextSibling='nextSibling',\n getElementsByClassName='getElementsByClassName',\n length='length',\n \n /*\n Get id node\n \n Parameters\n String selector : one selector\n Object context : one context\n \n Return\n Array : nodes\n */\n getNodesFromIdSelector=function(selector,context){\n var node=doc.getElementById(selector);\n if(!node){\n return [];\n }\n else{\n return [node];\n }\n },\n \n /*\n Get nodes corresponding to one class name (for IE<9)\n \n Parameters\n String selector : one selector\n Object context : one context\n \n Return\n Array : nodes\n */\n getNodesByClassName=function(name,context){\n // Init vars\n var node=context[firstChild],\n nodes=[],\n elements;\n // Browse children\n if(node){\n do{\n if(node.nodeType==1){\n // Match the class\n if(node.className && node.className.match('\\\\b'+name+'\\\\b')){\n nodes.push(node);\n }\n // Get nodes from node's children\n if((elements=getNodesByClassName(name,node))[length]){\n nodes=nodes.concat(elements);\n }\n }\n }\n while(node=node[nextSibling]);\n }\n return nodes;\n },\n \n /*\n Get nodes from a class selector\n \n Parameters\n String selector : one selector\n Object context : one context\n \n Return\n Array : nodes\n */\n getNodesFromClassSelector=function(selector,context){\n if(context[getElementsByClassName]){\n return context[getElementsByClassName](selector);\n }\n else{\n return getNodesByClassName(selector,context);\n }\n },\n \n /*\n Get nodes from a tag selector\n \n Parameters\n String selector : one selector\n Object context : one context\n \n Return\n Array : nodes\n */\n getNodesFromTagSelector=function(selector,context){\n return context.getElementsByTagName(selector);\n };\n \n /*\n Select DOM nodes\n \n Parameters\n String selectors : CSS selectors\n Array, Object context : contextual node\n \n Return\n Array : found nodes\n */\n return function(selectors,context){\n // Format\n if(!context){\n context=doc;\n }\n if(typeof context=='object' && context.pop){\n context=context[0];\n }\n // Init vars\n var local_contexts,\n future_local_contexts,\n selector,\n elements,\n nodes=[],\n j,k,l,m,n,o,\n getNodesFromSelector;\n // Prepare selectors\n selectors=selectors.split(',');\n n=-1;\n while(selector=selectors[++n]){\n selectors[n]=selector.split(/\\s+/);\n }\n // Evaluate selectors for each global context\n j=selectors[length];\n while(j){\n // Init local context\n local_contexts=[context];\n // Evaluate selectors\n k=-1;\n l=selectors[--j][length];\n while(++k/g, '>').replace(/\"/g, '"');\n },\n \n /**\n Trim a string to the given length, counting embedded HTML tags as zero-width\n characters and HTML entities as single-width characters.\n @param {subjecting} subject - String, possibly with HTML tags and entities embedded.\n @param {number} limit - Trimming any characters after this length.\n */\n trimHtml: function (subject, limit) {\n var trimmed = '',\n length = 0;\n \n subject.replace(/(<.+?>|&.+?;|[^<&]+)/g, function (chunk) {\n switch (chunk.charAt(0)) {\n case '<':\n chunk = (length >= limit && /\\/>/.test(chunk)) ? '' : chunk;\n length += 0;\n break;\n case '&':\n chunk = (length >= limit) ? '' : chunk;\n length += 1;\n break;\n default:\n chunk = chunk.substr(0, limit - length);\n length += chunk.length;\n break;\n }\n \n trimmed += chunk;\n });\n \n // clean-up: remove empty tag pairs and trailing whitespace\n trimmed = trimmed\n .replace(/\\s+(<[^>]+>)$/, '$1')\n .replace(/<(\\w+)><\\/\\1>/g, '')\n .replace(/\\s+$/, '');\n \n // add ellipsis to indicate some characters have been trimmed\n trimmed += (subject !== trimmed) ? '…' : '';\n \n return trimmed;\n }\n };\n \n return exports;\n});\n","define('orb/lib/_template', function () {\n 'use strict';\n\n\tvar cache = {};\n\n // Resig's micro templating http://ejohn.org/blog/javascript-micro-templating/\n\tfunction tmpl(str, data){\n\t // Assume any CDATA wrapper is not intended to be part of the output\n\t str = str.replace(/(^\\s*\\s*$)/g, '');\n\t \n\t\t// Figure out if we're getting a template, or if we need to\n\t\t// load the template - and be sure to cache the result.\n\t\tvar fn = str.charAt(0) === '#' ?\n\t cache[str] = cache[str] ||\n\t\t\ttmpl(document.getElementById(str.slice(1)).innerHTML) :\n\t\t \n\t\t // Generate a reusable function that will serve as a template\n\t\t // generator (and which will be cached).\n\t\t new Function(\"obj\",\n\t\t\t\"var p=[],esc=function(v){return (''+v).replace(/&/g, '&').replace(/)[^\\t]*)'/g, \"$1\\r\")\n\t .replace(/\\t=(.*?)%>/g, \"',$1,'\")\n\t .split(\"\\t\").join(\"');\")\n\t .split(\"%>\").join(\"p.push('\")\n\t .split(\"\\r\").join(\"\\\\'\")\n\t + \"');}return p.join('');\");\n\t\t\t\n\t\t// Provide some basic currying to the user\n\t\treturn data ? fn( data ) : fn;\n \t};\n\n return tmpl;\n});","/** @lint */\n\n/**\n * @module orb/_$\n */\n\ndefine('orb/lib/_$',\n [\n 'orb/lib/_nut',\n 'orb/lib/_ready',\n 'orb/lib/_anim',\n 'orb/lib/_dom',\n 'orb/lib/_event',\n 'orb/lib/_classy',\n 'orb/lib/_attr',\n 'orb/lib/_str',\n 'orb/lib/_script',\n 'orb/lib/_template',\n 'orb/lib/_onloadCSS'\n ],\n function (nut, ready, animator, dom, event, classy, attr, str, script, template, onloadCSS) {\n 'use strict';\n\n var $ = nut,\n banner = $('#orb-banner')[0],\n header = $('#orb-header')[0];\n\n $.anim = animator.animate;\n $.ready = ready;\n $.remove = dom.remove;\n $.addEvent = event.addEvent;\n $.addClass = classy.addClass;\n $.removeClass = classy.removeClass;\n $.hasClass = classy.hasClass;\n $.getAttr = attr.getAttr;\n $.setAttr = attr.setAttr;\n $.str = str;\n $.script = script;\n $.template = template;\n $.onloadCSS = onloadCSS;\n\n $.client = {\n old_ie: $.hasClass(banner, 'orb-old-ie'),\n ie8: $.hasClass(banner, 'orb-ie8'),\n ie7: $.hasClass(banner, 'orb-ie7'),\n ie6: $.hasClass(banner, 'orb-ie6')\n };\n\n $.config = {\n fixed: $.hasClass(header, 'orb-fixed-width') || ($.client.old_ie),\n rtl: ($.getAttr(header, 'dir') === 'rtl')\n };\n\n /**\n Add CSS to the page.\n @param {String} the CSS string to be inserted into the page.\n */\n $.addCSS = function (css) {\n if (typeof css !== 'string' || css === '') {\n return false;\n }\n\n try {\n /* Work around for IE issue:\n * IE wont play ball as .innerHMTL and .text on the head & style tag is read only for IE8\n * See: http://msdn.microsoft.com/en-us/library/ms533897%28v=VS.85%29.aspx\n */\n var styleElement = document.createElement('style');\n\n styleElement.type = 'text/css';\n\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n }\n else {\n styleElement.appendChild(document.createTextNode(css));\n }\n\n document.getElementsByTagName('head')[0].appendChild(styleElement);\n\n return true;\n }\n catch (e) {\n return false;\n }\n };\n\n /**\n Add HTML to the page.\n @param {element} the HTML node.\n @param {string} the HTML string to be inserted into the page.\n */\n $.addHTML = function (node, html) {\n if (node && node.tagName && html !== \"\") {\n node.innerHTML = html;\n return true;\n }\n else {\n return false;\n }\n };\n\n return $;\n }\n);\n\n","/** @lint */\n\n/**\n * @module orb/_map\n *\n * Add any lazy-loaded orb modules to the requirejs map.\n */\ndefine('orb/_map', ['orb/lib/_$'], function ($) {\n 'use strict';\n\n return function () {\n var orbScript = $('#orb-js-script')[0], // the script tag that pulls in all of orb.js\n assetPath = $.getAttr(orbScript, 'data-assetpath'),\n map = {};\n //console.log('assetPath is '+ assetPath);\n map['orb/async/_suggestions'] = assetPath + 'js/async/_suggestions.min';\n\n // update the requirejs paths setting with our new map data\n // TODO use: require.config({})\n require({ paths: map });\n };\n});\n","/** @lint */\n\n/**\n * @module orb/features/masthead/_drawer\n */\ndefine('orb/features/masthead/_drawer', ['orb/lib/_$', 'orb/lib/_event'], function ($, event) {\n 'use strict';\n\n /**\n A Drawer is a kind of Widget that opens and can have multiple panels of content.\n @public\n @class Drawer\n @memberof module:orb/masthead\n \n @param {HTMLDOMElement} contentElement - The HTML element that contains the panel content. This will animate open and closed as appropriate.\n @property {module:orb/masthead.Drawer.Panel | null} _currentPanel - Which panel is currently shown?\n @property {Object<{string} name: {module:orb/masthead.Drawer.Panel} panel>} panels - A list of all panels in this panel.\n */\n\n var Drawer = function (contentElement) {\n event.mixin(this);\n this.content = contentElement;\n this._currentPanel = null; // The currently active panel\n this.panels = {};\n this.panelName = null; // The panel that is being activated - may not be fully active\n };\n\n /**\n Add a panel to this drawer.\n @public\n @method addPanel\n @memberof module:orb/masthead.Drawer.prototype\n\n @param {module:orb/masthead.Drawer.Panel} panel - A panel to add to this drawer.\n */\n Drawer.prototype.addPanel = function (panel) {\n this.panels[panel.name] = panel;\n panel.drawer = this;\n return this;\n };\n \n /**\n Get the named panel. If no name is given, return whatever the current panel is.\n @public\n @method getPanel\n @memberof module:orb/masthead.Drawer.prototype\n\n @param {string} [name] - The unique string identifer that names this panel.\n */\n Drawer.prototype.getPanel = function (name) {\n if (name) {\n return this.panels[name];\n }\n else {\n return this._currentPanel;\n }\n };\n\n // TODO Content has changed, need to make the drawer the right size\n Drawer.prototype.resize = function (name) {\n if (this._currentPanel && this._currentPanel.name === name) {\n var newHeight = this.panels[name].content.offsetHeight + 'px';\n $('#orb-panels')[0].style.height = newHeight;\n }\n };\n\n /**\n Show the panel with the given name if it is not currently shown.\n @public\n @method showPanel\n @memberof module:orb/masthead.Drawer.prototype\n\n @param {string} panelName - The name of the {@link module:orb/masthead.Drawer.Panel} to show.\n If state is changing from no panel shown then the drawer content element will animate open.\n */\n Drawer.prototype.showPanel = function (panelName) {\n var current = this._currentPanel;\n // no panel is showing, so the containing drawer must be inactive, so activate it\n if (current === null) {\n this.panelName = panelName;\n this.event('onActivate').fire({});\n this._currentPanel = this.panels[panelName];\n\n // Publish the new state of the panel\n this._currentPanel.publishState('shown');\n }\n // the panel being shown is already showing, so hide it\n else if (current && current.name === panelName) {\n this.hidePanel();\n }\n // some other panel is showing, so swap out the old panel for the new panel\n else {\n this.deactivatedPanelName = this._currentPanel.name;\n \n // Call the state change callback of the deactivated panel to give the new state\n this._currentPanel.publishState('hidden');\n\n this.panelName = panelName;\n this._currentPanel = this.panels[panelName];\n this.event('onSwapContents').fire({});\n this._currentPanel.publishState('shown');\n }\n };\n\n /**\n Hide the currently shown {@link module:orb/masthead.Drawer.Panel}, if any. If state is changing from any panel shown then the drawer content element will animate closed.\n @public\n @method hidePanel\n @memberof module:orb/masthead.Drawer.prototype\n */\n Drawer.prototype.hidePanel = function () {\n var current = this._currentPanel;\n \n // some panel is showing, so close it\n if (current !== null) {\n this.event('onDeactivate').fire({});\n current.publishState('hidden');\n \n this.panelName = null;\n this._currentPanel = null;\n }\n };\n \n Drawer.prototype.activate = function () {\n if (this._currentPanel) {\n this.showPanel(this._currentPanel.name); // fires onActivate\n }\n };\n \n Drawer.prototype.deactivate = function () {\n this.hidePanel(); // fires onDeactivate\n };\n\n Drawer.prototype.getCurrentPanel = function() {\n return this._currentPanel;\n }\n\n //-------------------------------------------------------------------//\n\n /**\n A Panel represents some content to be displayed inside a Drawer.\n @public\n @class Panel\n @memberof module:orb/masthead.Drawer\n \n @param {string} name\n @param {object} panelDom\n @param {HTMLDOMElement} panelDom.control\n @param {HTMLDOMElement} panelDom.content\n @param {function} stateChangeCallback\n */\n\n Drawer.Panel = function (name, panelDom, stateChangeCallback) {\n this.name = name;\n if (panelDom) {\n this.control = panelDom.control;\n this.content = panelDom.content;\n }\n \n this.publishState = function(newState) {\n \n if (typeof this.stateChangeCallback == 'function') {\n \n // Call the callback with global context\n this.stateChangeCallback.call(null, newState);\n }\n };\n \n if (typeof stateChangeCallback === 'function') {\n this.stateChangeCallback = stateChangeCallback;\n }\n event.mixin(this);\n };\n\n return Drawer;\n});\n","/** @lint */\n\n/**\n * @module orb/features/masthead/_layoutprimarynav\n */\n\ndefine('orb/features/masthead/_layoutprimarynav', ['orb/lib/_$', 'orb/lib/_event', 'orb/api', 'orb/features/masthead/_linkmanager', 'orb/fig', 'orb/features/_istatstracking', 'orb/features/_drawerManager', 'orb/features/_moreDrawer'],\n function ($, event, api, LinkManager, orbFig, istatsTracking, drawerManager, moreDrawer) {\n 'use strict';\n\n /**\n Hide or show any nav items that can fit in the masthead at the current width.\n @author Michael Mathews\n */\n\n var linkManager = new LinkManager($('.orb-nav-links li').slice(0, -1)), // slice excludes more link\n layoutDone = false,\n search = $('.orb-nav-search')[0],\n menu = $('#orb-nav-more')[0],\n header = $('#orb-header')[0],\n container = $('.orb-nav-pri-container')[0],\n DYNAMIC_CLASS = 'orb-nav-dyn',\n EMPTY_CLASS = 'orb-nav-empty',\n LOCK_CLASS = 'orb-nav-lock',\n MIN_LINKS_TO_SHOW = 1,\n currentWidth = 0,\n menuLink = $('#orb-nav-more a')[0],\n menuText = menuLink.firstChild.data, // Menu\n moreText = $.getAttr(menuLink, 'data-alt'); // More\n\n function exports() {\n\n /**\n Replace primary links for the worldwide ones if the worldwide\n header or footer nav links are present\n */\n function replacePrimaryLinks() {\n var links = $('.orb-nav-links ul li');\n var worldWideNavLinksHtml = window.orb.worldwideNavlinks;\n\n if (worldWideNavLinksHtml) {\n // replace domestic footer links\n $('.orb-footer-primary-links ul')[0].innerHTML = worldWideNavLinksHtml;\n\n // remove the domestic header links\n for (var i = 0, l = links.length; i < l; i++) {\n var link = links[i];\n if (link.id !== 'orb-nav-more') {\n $.remove(link);\n }\n }\n\n // insert worldwide header links\n $('#orb-nav-more')[0].insertAdjacentHTML('beforebegin', worldWideNavLinksHtml);\n }\n\n var worldwideFooterLinksHtml = window.orb.worldwideFooterlinks;\n\n if (worldwideFooterLinksHtml) {\n // add worldwide advertisement links to the footer\n $('#orb-contentinfo ul')[0].insertAdjacentHTML('beforeend', worldwideFooterLinksHtml);\n }\n\n // swap href for blocks\n var blocksEl = $('.orb-nav-blocks')[0].firstChild;\n var blocksHref = $.getAttr(blocksEl, 'href').replace('co.uk', 'com');\n\n $.setAttr(blocksEl, 'href', blocksHref);\n\n // create a new instance of the link manager if worldwide\n linkManager = new LinkManager($('.orb-nav-links li').slice(0, -1));\n }\n\n /**\n Hide or show navigation links.\n @fires $.events.beforeLayout\n @fires $.events.afterLayout\n */\n function hideShowNavItems() {\n var beforeLayout,\n afterLayout,\n e,\n containerTop;\n\n beforeLayout = exports.event('beforeLayout');\n afterLayout = exports.event('afterLayout');\n e = {links: linkManager.links};\n containerTop = container.offsetTop;\n\n // run any beforeLayout event handlers\n beforeLayout.fire(e);\n\n // hide the menu - maybe we won't need it\n hideMenu();\n\n // show all nav links\n linkManager.showAll();\n\n var lastItem = linkManager.getLastItem();\n\n if (search.offsetTop !== containerTop || !lastItem || lastItem.offsetTop !== containerTop) {\n\n unhideMenuAndSetDefaults();\n\n // hide as many nav links as needed to bring the more link back to the top\n linkManager.hideToFit(function keepHidingWhile(index) {\n if (menu.offsetTop !== containerTop || search.offsetTop !== containerTop) {\n return true;\n }\n }, MIN_LINKS_TO_SHOW);\n\n }\n // run any afterLayout event handlers\n afterLayout.fire(e);\n }\n\n function hideMenu() {\n $.addClass(menu, 'orb-nav-hide');\n }\n\n function unhideMenuAndSetDefaults() {\n var moreWidth,\n menuWidth,\n maxWidth;\n\n $.removeClass(menu, 'orb-nav-hide');\n\n /**\n * Reserve space for the larger of the two possible words ('Menu' or 'More')\n * The width is initially calculated with \"Menu\"\n * which in some languages may be much shorter than \"More\".\n * In these cases, when \"More\" replaces \"Menu\" after layout\n * there is not enough space for the word and it overflows from the
  • .\n */\n // save More Link's style attribute to restore later\n var originalStyleAttribute = menuLink.getAttribute('style');\n menu.style.width = 'auto';\n menuLink.style.textIndent = '0';\n\n menuLink.firstChild.data = moreText;\n moreWidth = menu.offsetWidth;\n\n menuLink.firstChild.data = menuText;\n menuWidth = menu.offsetWidth;\n\n // Set the more item width to the width of the longest word\n maxWidth = Math.max(moreWidth, menuWidth);\n menu.style.width = maxWidth + 'px';\n\n // restore More Link's style attribute\n menuLink.setAttribute('style', originalStyleAttribute);\n }\n\n /**\n Keep wrapped nav items in the masthead from pushing the page content\n around during a window resize.\n */\n function lockMasthead() {\n $.addClass(container, LOCK_CLASS);\n }\n\n function unlockMasthead() {\n $.removeClass(container, LOCK_CLASS);\n api.trigger('layout', {\n width: container.offsetWidth,\n height: container.offsetHeight\n });\n }\n\n /**\n Responsible for deciding when to re-layout the masthead\n */\n function handleResize() {\n var throttle;\n var currentWidth = 0;\n\n return function() {\n // FWGEL-754: Don't resize unless the width has changed\n // iPhones fire window.resize when the address bar comes in/out of view\n if (window.innerWidth === currentWidth) {\n return;\n }\n\n currentWidth = window.innerWidth;\n\n lockMasthead();\n\n // we only run the layout code when a window resize has stopped\n if (throttle) {\n clearTimeout(throttle);\n }\n throttle = setTimeout(function () {\n hideShowNavItems();\n moreDrawer.layoutMorePanelContent();\n unlockMasthead();\n }, 100); // PAN\n }\n }\n\n /**\n Rearrange the layout in case notification comes after our layout is loaded\n */\n exports.recalculateLayout = function() {\n if (layoutDone) {\n lockMasthead();\n hideShowNavItems();\n moreDrawer.layoutMorePanelContent();\n handleExpandMenuItem();\n unlockMasthead();\n }\n };\n\n /**\n If the primary nav has links showing we use the word \"More\" otherwise \"Menu\"\n @author Michael Mathews\n */\n function handleMenuOrMore() {\n\n /**\n @param {object} e The event object\n @param {DOMArray} e.links\n */\n function onAfterLayout(e) {\n if (linkManager.hasVisible()) {\n menuLink.firstChild.data = moreText;\n }\n else {\n menuLink.firstChild.data = menuText;\n }\n }\n\n exports.event('afterLayout').add(onAfterLayout);\n }\n\n /**\n Expand the width of the menu/more nav item to take up any remain space.\n @author Nikos Tsouknidas\n */\n function handleExpandMenuItem() {\n var nullElement = {isNull: true, offsetLeft: -1, offsetWidth: 0},\n search = $('.orb-nav-search')[0] || nullElement,\n links = $('#orb-nav-links')[0] || nullElement,\n more = $('#orb-nav-more')[0] || nullElement,\n id = $('.orb-nav-id')[0] || nullElement,\n availableSpace = 0;\n\n if ($.config.rtl) {\n if ($.client.ie6 || $.client.ie7) {\n availableSpace = function () {\n return search.offsetLeft + more.offsetLeft + 1; //PAN for IE7\n };\n }\n else {\n availableSpace = function () {\n return more.offsetLeft - (search.offsetLeft + search.offsetWidth);\n };\n }\n }\n else {\n availableSpace = function () {\n return search.offsetLeft - links.offsetLeft - links.offsetWidth;\n };\n }\n\n /**\n */\n function resizeMoreLink() {\n more.style.width = more.offsetWidth + availableSpace() - 3 + 'px'; //PAN to try to account for rounding errors in subpixel css positioning\n }\n\n /**\n */\n function onAfterLayout(e) {\n resizeMoreLink();\n }\n\n exports.event('afterLayout').add(onAfterLayout);\n }\n\n function doLayout(fig) {\n var location = {\n 'uk': fig.geo.isUK()\n };\n\n if (window.orb && !location.uk) {\n replacePrimaryLinks();\n }\n\n var maxLinks = (location.uk ? $.getAttr(header, 'data-max-d') : $.getAttr(header, 'data-max-w'));\n\n if (maxLinks !== '') {\n linkManager.applyMaximum(maxLinks);\n }\n\n handleMenuOrMore(linkManager);\n handleExpandMenuItem();\n\n lockMasthead();\n $.addClass(header, DYNAMIC_CLASS);\n $.removeClass(header, EMPTY_CLASS);\n hideShowNavItems();\n unlockMasthead();\n\n layoutDone = true;\n\n istatsTracking();\n drawerManager(exports);\n moreDrawer();\n\n if (!$.config.fixed) { // don't do resize for old versions of IE or fixed width pages\n $.addEvent(window, 'resize', handleResize());\n\n // handle rotation of device, re-layout after rotation is complete\n $.addEvent(window, 'orientationchange', function () {\n setTimeout(handleResize(), 100);\n });\n }\n\n }\n\n // Do layout even if fig fails (using default UK data is fine)\n orbFig.load(doLayout, doLayout);\n\n }\n\n event.mixin(exports);\n return exports;\n\n});\n\n","/** @lint */\n\n/**\n * @module orb/features/masthead/_linkmanager\n */\n\ndefine('orb/features/masthead/_linkmanager', ['orb/lib/_$'], function ($) {\n 'use strict';\n\n var HIDE_CLASS = 'orb-nav-hide',\n exports;\n\n // TODO: Optimise this by using native Array.protoype.forEach if available\n var forEach = function (callback) {\n var that = this;\n\n if (typeof that.links === 'undefined') {\n return;\n }\n for (var i = 0, len = that.links.length; i < len; i++) {\n callback(that.links[i], i);\n }\n };\n\n exports = function (linkElements) {\n this.links = [];\n for (var i = 0, len = linkElements.length; i < len; i++) {\n this.links[i] = linkElements[i];\n //add linktrack data\n var text = (this.links[i].innerText || this.links[i].textContent).trim();\n this.links[i].linktrack = {'nav_link' : text};\n }\n };\n\n exports.prototype.removeLink = function (index) {\n $.remove(this.links[index]);\n delete(this.links[index]);\n };\n\n exports.prototype.showAll = function () {\n forEach.call(this, function (link) {\n $.removeClass(link, HIDE_CLASS);\n });\n };\n\n /**\n Progressively hide links in reverse order\n @param {function} callback A callback that returns true if a link is to be hidden\n @param {int} minimumLinks Minimum number of links to be shown. Below this, all are hidden\n */\n exports.prototype.hideToFit = function (callback, minimumLinks) {\n var hideAllLinks = false;\n\n var l = this.links.length;\n\n while (l--) {\n if (hideAllLinks || callback()) {\n $.addClass(this.links[l], HIDE_CLASS);\n }\n else {\n if (l < minimumLinks - 1) {\n hideAllLinks = true;\n l++;\n }\n else {\n break;\n }\n }\n }\n };\n\n /**\n Remove links over a maximum limit\n @param {int} maximumLinks maximum to be applied\n */\n exports.prototype.applyMaximum = function (maximumLinks) {\n var that = this;\n forEach.call(this, function (link, index) {\n if (index >= maximumLinks) {\n that.removeLink(index);\n }\n });\n\n var newLinks = [];\n forEach.call(this, function (link) {\n if (link) {\n newLinks.push(link);\n }\n });\n\n this.links = newLinks;\n };\n\n /**\n Determine if the first link is visible in the current set\n @return {bool}\n */\n exports.prototype.hasVisible = function () {\n return (this.links[0] && this.links[0].className.indexOf(HIDE_CLASS) === -1);\n };\n\n /**\n * Get last link in the current set\n */\n exports.prototype.getLastItem = function () {\n return this.links.length ? this.links[this.links.length - 1] : null;\n };\n\n return exports;\n});\n","define('orb/features/_moreDrawer', ['orb/lib/_$', 'orb/nav'], function ($, nav) {\n\n var navButton = $('#orb-nav-more')[0],\n FIRST_VISIBLE_CLASS = 'orb-first-visible';\n\n var content = document.createElement('div');\n content.setAttribute('id', 'orb-panel-more');\n $.addClass(content, 'orb-panel');\n\n\n function generateLinks() {\n\n var html = '

      ' + $('#orb-aside .orb-footer-primary-links ul')[0].innerHTML + '
    ';\n content.innerHTML = html;\n }\n\n function layoutMorePanelContent() {\n // re-flow layout in response to changes\n // in the window dimensions\n var links = $('.orb-nav-links li'),\n morePanelLinks = $('#orb-panel-more li'),\n firstVisible = $('.orb-panel-content .' + FIRST_VISIBLE_CLASS),\n HIDE_CLASS = 'orb-panel-hide',\n visibleLinks = 0,\n mastheadDrawer = nav.getMastheadDrawer();\n\n\n for (var i = 0, len = links.length; i < len - 1; i++) { // length -1 for more link\n if (links[i].className.indexOf('orb-nav-hide') !== -1) {\n break;\n }\n visibleLinks++;\n }\n\n for (var j = 0, lenj = morePanelLinks.length; j < lenj; j++) {\n if (j < visibleLinks) {\n $.addClass(morePanelLinks[j], HIDE_CLASS);\n }\n else {\n $.removeClass(morePanelLinks[j], HIDE_CLASS);\n }\n }\n\n if (firstVisible.length) {\n $.removeClass(firstVisible[0], FIRST_VISIBLE_CLASS);\n }\n\n if (visibleLinks < morePanelLinks.length) {\n // some links are hidden (so we need a \"more\" menu)\n $.addClass(morePanelLinks[visibleLinks], FIRST_VISIBLE_CLASS);\n } else if (visibleLinks === morePanelLinks.length) {\n // all links are visible, hide the more panel\n var currentPanel = mastheadDrawer.getCurrentPanel();\n\n if (currentPanel && currentPanel.name === 'more') {\n mastheadDrawer.hidePanel();\n }\n }\n\n $('#orb-panel-more-title')[0].innerHTML = $('#orb-nav-more a')[0].innerHTML;\n }\n\n function exports() {\n nav.addDrawer('more', navButton, content);\n generateLinks();\n layoutMorePanelContent();\n\n /**\n Add istats tracking to the links inside a panel.\n @param {Drawer.Panel} panel\n */\n\n require(['istats-1'], function (istats) {\n istats.track('internal', {\n region: content,\n linkLocation: 'blq-nav-more-orbit'\n });\n // don't track the panel control link (that is covered by istats log() calls elsewhere)\n istats.addNoTrack($('a', navButton)[0]);\n $.addClass($('html')[0], 'orb-more-loaded');\n });\n\n }\n\n exports.layoutMorePanelContent = layoutMorePanelContent;\n\n return exports;\n});\n","/** @lint */\n\n/**\n * @module orb/features/_configuresearch\n */\ndefine('orb/features/_configuresearch', ['orb/lib/_$', 'orb/nav'], function ($, nav) {\n 'use strict';\n \n var exports = function () {\n var timer = null;\n \n $.ready(function () {\n var searchInput = $('#orb-search-q')[0],\n searchElements = $('.orb-nav-search input, .orb-nav-search button');\n \n if (!searchInput || !searchElements.length) {\n console.warn('Cannot configure Search: Search DOM elements missing.');\n }\n else {\n /**\n Fade masthead to white when search is active.\n */\n $.addEvent(searchElements, 'focus', function (e) {\n clearTimeout(timer);\n nav.closePanel();\n });\n \n /**\n When the user types in the search input, create a suggestions\n menu widget if we haven't already. Only active in English lang pages.\n */\n if (window.orb && ('' + window.orb.lang).indexOf('en') === 0) {\n $.setAttr(searchInput, 'autocomplete', 'off');\n $.setAttr(searchInput, 'autocorrect', 'off');\n $.setAttr(searchInput, 'autocapitalize', 'off');\n $.setAttr(searchInput, 'spellcheck', 'false');\n $.addEvent([searchInput], 'keydown', function (e) {\n if (typeof searchInput.suggestions === 'undefined') {\n searchInput.suggestions = 'initialising';\n require(['orb/async/_suggestions'], function (Suggestions) {\n searchInput.suggestions = new Suggestions(searchInput);\n });\n }\n });\n }\n \n /**\n Fade masthead to default shade when search feature is no longer active.\n */\n $.addEvent(searchElements, 'blur', function (e) {\n timer = setTimeout(function () {\n\n }, 220);\n });\n }\n });\n };\n \n return exports;\n});\n","/** @lint */\n\n/**\n * @module orb/features/_drawerManager\n */\ndefine('orb/features/_drawerManager', ['orb/lib/_$', 'orb/features/masthead/_drawer'], function ($, Drawer) {\n 'use strict';\n\n var drawerElement = $('#orb-panels')[0];\n var mastheadDrawer = new Drawer(drawerElement);\n var header = $('#orb-header')[0],\n NAV_HILITE = 'orb-nav-focus-on',\n ANIM_DURATION = 400,\n ACTIVE_PANEL_CLASS = 'orb-panel-active',\n ACTIVE_HEADER_CLASS = 'orb-nav-active',\n FIRST_VISIBLE_CLASS = 'orb-first-visible';\n\n /**\n Determine if a given DOM node currently has focus.\n @param {HTMLDOMNode | HTMLDOMNode[]} nodes - A node or an array of nodes.\n @returns {boolean}\n */\n function hasFocus(nodes) {\n var i;\n\n if (typeof nodes.length === 'undefined') {\n nodes = [nodes];\n }\n\n i = nodes.length;\n\n while (i--) {\n if (document.activeElement && document.activeElement === nodes[i]) {\n return true;\n }\n else if (document.focusNode && document.focusNode === nodes[i]) {\n return true;\n }\n }\n return false;\n }\n\n /**\n Implement the masthead drawer and panel feature.\n @author Michael Mathews\n @author Robin Murphy\n @author Nikos Tsouknidas\n @author Philip Whitehall\n */\n function exports(primaryNav) {\n\n var templateText,\n closePanelTimer = null;\n\n /**\n Dynamically calculate the equivalent pixel size of 1em within\n a given container element.\n */\n var getSizeOf1Em = (function () {\n if (window.getComputedStyle) {\n return function (el) {\n el = el || document.body;\n return (window.getComputedStyle(el).fontSize.replace('px', ''));\n };\n }\n else {\n return function (el) {\n var testEl,\n emSize;\n\n el = el || document.body;\n testEl = document.createElement('div');\n testEl.style.margin = '0px';\n testEl.style.padding = '0px';\n testEl.style.border = 'none';\n testEl.style.height = '1em';\n\n el.appendChild(testEl);\n emSize = testEl.offsetHeight;\n el.removeChild(testEl);\n return emSize;\n };\n }\n }());\n\n /**\n The masthead drawer/panel HTML is stored in the page DOM as a template.\n Note this method should only be called once.\n */\n function initDrawerDom() {\n var templateNode = $('#orb-panel-template')[0];\n\n if (templateNode) {\n templateText = templateNode.innerHTML;\n templateNode.parentNode.removeChild(templateNode);\n }\n }\n\n /**\n Given a parent node, return the first child of that parent node that is an element node.\n @param {HTMLDOMNode} parentNode\n @returns {HTMLDOMNode | null}\n */\n function firstElement(parentNode) {\n var ELEMENT_NODE = 1, // built-in browser constant\n node = parentNode.firstChild;\n\n while (node) {\n if (node.nodeType === ELEMENT_NODE) {\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n /**\n Given the name of a panel, returns the HTML source code content to be displayed in the panel.\n @param {string} panelName - The name of the panel.\n @returns {string} The HTML source code to display in the panel.\n */\n function getPanelContent(panelName) {\n if (panelName === 'more') {\n return '

      ' + $('#orb-aside .orb-footer-primary-links ul')[0].innerHTML + '
    ';\n }\n else {\n return '';\n }\n }\n\n /**\n Given the name of a panel, initialises the DOM content of that panel.\n @param {string} panelName - The name of the panel.\n @param {HTMLDOMNode} drawerElement - The DOM element that will contain the panel DOM.\n @returns {object} The DOM nodes representing the \"control\" and the \"content\" elements.\n */\n exports.initPanelDom = function (panelName, drawerElement) {\n var panelHTML,\n template = $.template(templateText),\n panelNode = document.createElement('div'),\n panelControl;\n\n panelHTML = template({\n panelcontent: getPanelContent(panelName),\n panelname: panelName\n });\n\n panelNode.innerHTML = panelHTML;\n panelNode = firstElement(panelNode).cloneNode(true);\n drawerElement.appendChild(panelNode);\n\n $.addClass($('.orb-panel-content')[0], 'orb-nav-sec');\n\n panelControl = $('#' + panelNode.getAttribute('aria-labelledby'))[0];\n if (panelControl) {\n $.setAttr(panelControl, 'aria-controls', panelNode.id);\n }\n\n return {control: panelControl, content: panelNode};\n };\n\n /**\n Add istats tracking to a panel.\n @param {string} panelName - The name of the panel being tracked.\n @param {string} actionDescription - A description of the action being logged, eg 'open' or 'close'.\n */\n function panelActionTracking(panelName, actionDescription) {\n require(['istats-1'], function (istats) {\n istats.log(actionDescription, 'panel-' + panelName);\n });\n }\n\n /**\n Given a panel object, perform the steps to animate that panel from a closed appearance to an open one.\n @param {Drawer.Panel} panel - The panel object to be opened.\n */\n function animPanelOpen(panel) {\n var controlElement = panel.control,\n panelHeight,\n focusTarget;\n\n if (!panel) { // protect against timing edge cases possibly caused by multiple fast clicks\n return;\n }\n\n clearTimeout(closePanelTimer);\n\n // Add underline to panel link\n if (controlElement) {\n $.addClass(controlElement, NAV_HILITE);\n }\n\n // Open the drawer to the panel content's height\n mastheadDrawer.content.style.height = '0';\n panel.content.style.display = 'block';\n panelHeight = panel.content.offsetHeight;\n if (header.navMode === 'mouse') {\n $.anim(mastheadDrawer.content, {\n height: panelHeight,\n duration: ANIM_DURATION\n });\n $.setAttr(panel.content, 'tabindex', '-1');\n panel.content.focus();\n }\n else {\n $.anim(mastheadDrawer.content, {\n height: panelHeight,\n duration: 0\n });\n\n focusTarget = $('.' + FIRST_VISIBLE_CLASS + ' a', panel.content)[0] || $('.' + FIRST_VISIBLE_CLASS + ' a', panel.content)[0] || $('.orb-focus-target', panel.content)[0];\n if (focusTarget) {\n focusTarget.focus();\n }\n }\n\n $.setAttr(mastheadDrawer.content, 'aria-expanded', 'true');\n $.addClass(mastheadDrawer.content, ACTIVE_PANEL_CLASS);\n $.addClass(header, ACTIVE_HEADER_CLASS);\n\n // only do tracking stuff when the animation has completed\n setTimeout(function () {\n panelActionTracking(panel.name, 'open');\n }, (header.navMode === 'mouse') ? ANIM_DURATION : 0);\n }\n\n /**\n Given a panel object, perform the steps to animate that panel from a open appearance to a closed one.\n @param {Drawer.Panel} panel - The panel object to be closed.\n */\n function animPanelClose(panel) {\n var controlElement = panel.control;\n\n if (!panel) { // prevent timing edge cases caused by double clicks\n return;\n }\n\n clearTimeout(closePanelTimer);\n\n if (header.navMode === 'mouse') {\n $.anim(mastheadDrawer.content, {\n height: 0,\n duration: ANIM_DURATION\n });\n }\n else {\n $.anim(mastheadDrawer.content, {\n height: 0,\n duration: 0\n });\n }\n\n closePanelTimer = setTimeout(function () {\n panel.content.style.display = 'none';\n $.removeClass(mastheadDrawer.content, ACTIVE_PANEL_CLASS);\n $.removeClass(header, ACTIVE_HEADER_CLASS);\n $.setAttr(mastheadDrawer.content, 'aria-expanded', 'false');\n\n if (controlElement) {\n $.removeClass(controlElement, NAV_HILITE);\n }\n\n panelActionTracking(panel.name, 'close');\n }, (header.navMode === 'mouse') ? ANIM_DURATION : 0);\n }\n\n /**\n Given two panel objects, perform the steps to animate the swap of these panels.\n @param {Drawer.Panel} currentPanel - The current panel object.\n @param {Drawer.Panel} activatedPanel - The panel object that was just activated.\n */\n function animPanelSwap(currentPanel, activatedPanel) {\n var currentControlElement = currentPanel.control,\n activatedControlElement = activatedPanel.control,\n panelHeight;\n\n currentPanel.content.style.display = 'none';\n activatedPanel.content.style.display = 'block';\n panelHeight = activatedPanel.content.offsetHeight;\n if (header.navMode === 'mouse') {\n $.anim(mastheadDrawer.content, {\n height: panelHeight,\n duration: ANIM_DURATION\n });\n $.setAttr(activatedPanel.content, 'tabindex', '-1');\n activatedPanel.content.focus();\n }\n else {\n $.anim(mastheadDrawer.content, {\n height: panelHeight,\n duration: 0\n });\n $('.' + FIRST_VISIBLE_CLASS + ' a', activatedPanel.content)[0].focus();\n }\n $.removeClass(currentControlElement, NAV_HILITE);\n $.addClass(activatedControlElement, NAV_HILITE);\n\n panelActionTracking(currentPanel.name, 'close');\n panelActionTracking(activatedPanel.name, 'open');\n }\n\n /**\n The masthead tracks whether the user is navigating by mouse or keyboard, and\n exposes that as a property named \"navmode\".\n */\n function addMastheadEvents() {\n // feature behaviours may vary depending on the user's current mode of navigation\n $.addEvent(header, 'mousemove', function (e) {\n header.navMode = 'mouse';\n });\n $.addEvent(header, 'mousedown', function (e) {\n header.navMode = 'mouse';\n });\n $.addEvent(header, 'keydown', function (e) {\n header.navMode = 'keyboard';\n });\n }\n\n function resizePanelHeight(panel) {\n // If the drawer is open, resize it when the window resizes.\n if ($.hasClass(mastheadDrawer.content, ACTIVE_PANEL_CLASS)) {\n mastheadDrawer.content.style.height = panel.content.offsetHeight / getSizeOf1Em(mastheadDrawer.content) + 'em';\n }\n }\n\n /**\n * Re-flows panel layout in response to changes in the window dimensions\n */\n function layoutPanelContent() {\n\n //BLQDEV-149: Get the active panel\n var currentPanel = mastheadDrawer.getCurrentPanel();\n\n // Resizing the height of the active panel (if there is an active one)\n if (currentPanel !== null) {\n resizePanelHeight(currentPanel);\n }\n }\n\n // when the DOM is ready, we can initialise the more panel and the drawer that holds it\n $.ready(function () {\n initDrawerDom();\n\n header.drawer = mastheadDrawer;\n mastheadDrawer.event('onActivate').add(function () {\n var panel = mastheadDrawer.getPanel(mastheadDrawer.panelName);\n animPanelOpen(panel);\n });\n mastheadDrawer.event('onDeactivate').add(function () {\n var panel = mastheadDrawer.getPanel();\n animPanelClose(panel);\n });\n mastheadDrawer.event('onSwapContents').add(function () {\n var currentPanel = mastheadDrawer.panels[mastheadDrawer.deactivatedPanelName],\n activatedPanel = mastheadDrawer.getPanel();\n\n animPanelSwap(currentPanel, activatedPanel);\n });\n\n layoutPanelContent();\n\n addMastheadEvents();\n\n primaryNav.event('afterLayout').add(layoutPanelContent);\n\n });\n\n exports.refreshNav = function() {\n primaryNav.recalculateLayout();\n };\n\n }\n\n /**\n Given a panel, add click handler to the panel's control which will tell\n the drawer to show that panel's content. Adds both mouse and keyboard\n navigation event handlers.\n @param {Drawer.Panel} panel - The panel to adent handlers to.\n */\n exports.addPanelEvents = function (panel) {\n var panelName = panel.name;\n // user pressed mouse, or return key, etc, on our panel link\n $.addEvent(panel.control, 'click', function (e) {\n panel.event('beforeshow').fire(e);\n mastheadDrawer.showPanel(panelName);\n panel.event('show').fire(e);\n\n if (e.preventDefault) {\n e.preventDefault();\n }\n else {\n e.returnValue = false;\n }\n\n return false;\n });\n\n // if escape key pressed while any panel has focus\n $.addEvent(header, 'keydown', function (e) {\n var charCode = (typeof e.which === 'number') ? e.which : e.keyCode;\n // close the drawer if either the drawer, an interactive element on the drawer or the drawer opener has focus\n if (charCode === 27 && (hasFocus(panel.control) || hasFocus($('a,button', panel.content)) || hasFocus(panel.content))) {\n\n mastheadDrawer.hidePanel(panelName);\n var controlLink = $('a', panel.control)[0];\n if (controlLink) {\n controlLink.focus();\n }\n }\n });\n\n };\n\n exports.getMastheadDrawer = function() {\n return mastheadDrawer;\n };\n\n return exports;\n});\n","/** @lint */\n\n/**\n * @module orb/features/_istatstracking\n */\ndefine('orb/features/_istatstracking', ['orb/lib/_$'], function ($) {\n 'use strict';\n\n /**\n Adds the default iStats tracking to Barlesque ORB.\n */\n return function () {\n require(['istats-1'], function (istats) {\n $.ready(function () {\n // Set up tracking for masthead and footer links.\n istats.track('internal', {\n region: $('.orb-nav-blocks')[0],\n linkLocation: 'blq-mast-home-orbit'\n });\n istats.track('internal', {\n region: $('#orb-nav-links'),\n linkLocation: 'blq-nav-main-orbit'\n });\n istats.track('internal', {\n region: $('#orb-aside'),\n linkLocation: 'blq-foot-orbit'\n });\n istats.track('internal', {\n region: $('#orb-footer'),\n linkLocation: 'blq-foot-orbit'\n });\n istats.track('external', {\n region: $('body')[0]\n });\n istats.track('download', {\n region: $('body')[0]\n });\n $('.orb-nav-blocks')[0].linktrack = {'nav_link': 'Homepage'};\n });\n });\n };\n});\n","/** @lint */\n\n/**\n * @module orb/features/_searchhint\n */\ndefine('orb/features/_searchhint', ['orb/lib/_$'], function ($) {\n 'use strict';\n \n /**\n Introduce search placeholder behaviour for older browsers.\n @author Robin Murphy\n @author Gemma Clitheroe\n */ \n return function () {\n var supportsPlaceholderAtrribute = ('placeholder' in document.createElement('input'));\n\n if (!supportsPlaceholderAtrribute) {\n var searchInput = $('#orb-search-q')[0],\n searchForm = $('#orb-search-form')[0],\n placeholderText = $.getAttr(searchInput, 'placeholder');\n\n $.ready(function () {\n\n $.addEvent(searchInput, 'focusout', function (e) {\n if (searchInput.value === '') {\n searchInput.value = placeholderText;\n }\n });\n\n $.addEvent(searchInput, 'focusin', function (e) {\n if (searchInput.value === placeholderText) {\n searchInput.value = '';\n }\n });\n\n $.addEvent(searchForm, 'submit', function (e) {\n if (searchInput.value === placeholderText) {\n searchInput.value = '';\n }\n });\n\n // Only adds placeholder text if input field is not\n // active element (has focus)\n if (!searchInput.value && document.activeElement !== searchInput) {\n searchInput.value = placeholderText;\n }\n \n });\n }\n };\n});\n ","/** @lint */\n\n/**\n * @module orb/features/_skiplinks\n */\ndefine('orb/features/_skiplinks', ['orb/lib/_$'], function ($) {\n 'use strict';\n \n /**\n Fix skip links in Webkit.\n @author Ian Pouncey\n */ \n return function () {\n $.ready(function () {\n var accLinks = $('.orb-skip-links')[0],\n clickHandler = function (e) {\n //needed? e = e || window.event;\n var target = e.target || e.srcElement,\n hash = target.getAttribute('href').match(/^(#.+)/),\n targetElement = (hash ? $(hash[1]) : [])[0];\n \n if (targetElement) {\n if (targetElement.tabIndex === null || targetElement.tabIndex === -1) { // some browser mistakenly reports -1 when it is unset, so set to -1 explicitly in that case\n targetElement.tabIndex = -1;\n }\n targetElement.focus();\n }\n };\n $.addEvent(accLinks, 'click', clickHandler);\n });\n };\n});\n ","/** @lint */\n\n/**\n * @module orb/features/nav\n */\ndefine('orb/nav', ['orb/lib/_$', 'orb/features/_drawerManager', 'orb/features/masthead/_drawer'], function ($, drawerManager, Drawer) {\n 'use strict';\n\n var api = {\n loadCss: function (url, callback) {\n var stylesheet = loadCSS(url);\n\n if (typeof callback == 'function') {\n $.onloadCSS(stylesheet, callback);\n }\n },\n\n loadJs: function (url) {\n var script = document.createElement(\"script\");\n script.type = \"text/javascript\";\n script.src = url;\n script.async = true;\n document.getElementsByTagName(\"body\")[0].appendChild(script);\n },\n\n addDrawer: function (panelName, control, content, stateChangeCallback) {\n\n var drawerElement = $('#orb-panels')[0];\n drawerElement.appendChild(content);\n\n var panel = new Drawer.Panel(panelName, {control: control, content: content}, stateChangeCallback);\n drawerManager.getMastheadDrawer().addPanel(panel);\n drawerManager.addPanelEvents(panel);\n },\n\n getDrawerState: function (panelName) {\n var drawer = drawerManager.getMastheadDrawer(),\n currentPanel = drawer.getCurrentPanel();\n\n return (currentPanel === null || currentPanel.name != panelName) ? 'hidden' : 'shown';\n },\n\n updateDrawerHeight: function (panelName) {\n var drawer = drawerManager.getMastheadDrawer();\n drawer.resize(panelName);\n },\n\n getMastheadDrawer: function () {\n return drawerManager.getMastheadDrawer();\n },\n\n refresh: function () {\n if (drawerManager.refreshNav) {\n drawerManager.refreshNav();\n }\n }\n };\n\n return api;\n});\n"],"sourceRoot":"/source/"}